/* Pricing data */
var product_pricing = {
	'4 x 6' : {
		5000 : 495.00,
		10000: 926.00,
		15000: 1325.00,
		20000: 1735.00,
		30000: 2465.00,
		40000: 3120.00		
	},
	'5 x 7' : {
		5000 : 710.00,
		10000: 1199.00,
		15000: 1499.00,
		20000: 1999.00,
		30000: 2845.00,
		40000: 3760.00
	},
	'4 x 9' : {
		2500 : 339.00,
		5000 : 635.00,
		7500 : 949.00,
		10000: 1149.00,
		12000: 1739.00,
		14000: 2029.00,
		16000: 2279.00,
		18000: 2559.00,
		20000: 2699.00,
		50000: 5749.00
	},
	'5.5 x 8.5' : {
		2500 : 449.00,
		5000 : 849.00,
		7500 : 1224.00,
		10000: 1549.00,
		12000: 2069.00,
		14000: 2249.00,
		16000: 2499.00,
		18000: 2749.00,
		20000: 2949.00,
		50000: 6499.00
	}
}

/* Uses first value that it's greater than. Ie. for 3000 it would see greater that 2000 = */
var admail_pricing_per_unit = {
	'No Admail' : [ [ 0, 0.00 ] ],
	'Addressed' : [ 
	    [ 1000, 0.54 ],
		[ 0, 0.66 ]
	 ],
	'Unaddressed' : [		
		[ 20000, 0.17 ],
		[ 15000, 0.18 ],
		[ 10000, 0.19 ],
		[ 7500, 0.20 ],
		[ 0, 0.21 ] 
	]
}

/*Initialize*/
function bodyInit() {	
	initFormValidation();
	Behaviour.apply();
	admail_hide_or_show();
	admail_number_hide_or_show();
	calculate();
}

/* Validation */
validations.profitPerSale = new Validator("Profit Per Sale");
validations.profitPerSale.required = true;
validations.profitPerSale.min = 0.01;
validations.profitPerSale.minlength = 1;
validations.profitPerSale.datatype = "Currency";
validations.profitPerSale.compute = calculate;

validations.admailNumber = new Validator("Number to Ad Mail");
validations.admailNumber.required = true;
validations.admailNumber.min = 0;
validations.admailNumber.max = 50000;
validations.admailNumber.datatype = "Integer";
validations.admailNumber.compute = admailNumberChanged;

validations.printingCost = new Validator("Printing Cost");
validations.printingCost.readonly = true;
validations.printingCost.datatype = "Currency";

validations.printingPst = new Validator("Printing PST");
validations.printingPst.readonly = true;
validations.printingPst.datatype = "Currency";

validations.printingGst = new Validator("Printing GST");
validations.printingGst.readonly = true;
validations.printingGst.datatype = "Currency";

validations.printingTotal = new Validator("Printing Total");
validations.printingTotal.readonly = true;
validations.printingTotal.datatype = "Currency";

validations.mailingCost = new Validator("Mailing Cost");
validations.mailingCost.readonly = true;
validations.mailingCost.datatype = "Currency";

validations.mailingCostPerUnit = new Validator("Mailing Cost Per Unit");
validations.mailingCostPerUnit.readonly = true;
validations.mailingCostPerUnit.datatype = "Currency";

validations.mailingGst = new Validator("Mailing GST");
validations.mailingGst.readonly = true;
validations.mailingGst.datatype = "Currency";

validations.mailingTotal = new Validator("Mailing Total");
validations.mailingTotal.readonly = true;
validations.mailingTotal.datatype = "Currency";

validations.projectTotal = new Validator("Project Total");
validations.projectTotal.readonly = true;
validations.projectTotal.datatype = "Currency";

validations.breakeven = new Validator("Breakeven");
validations.breakeven.readonly = true;
validations.breakeven.datatype = "Integer";

validations.breakevenPercent = new Validator("Breakeven Percentage");
validations.breakevenPercent.readonly = true;
validations.breakevenPercent.datatype = "Decimal";

validations.printSize = new Validator("Print Size");
validations.printSize.compute = calculate;

validations.numberOfUnits = new Validator("Number Of Units");
validations.numberOfUnits.compute = calculate;

validations.admail = new Validator("Addressed Mailing");
validations.admail.compute = calculate;

/* Add behaviors to html */
var myrules = {
	'#admail' : function(element){
		element.onchange = function(){
			admail_changed();
		}
	},
	'#admailAll' : function(element){
		element.onchange = function(){
			admailAll_changed();
		}
		element.onclick = function(){
			admailAll_changed();
		}
	}
};

Behaviour.register(myrules);

/* Custom validation */
function calculate_admail_number()
{
	if( formdata.getAdmailNumber() > formdata.getNumberOfUnits() )
	{
		return "Cannot ad mail more than printed.";
	}	
	else
	{		
		return "";
	}
}

/* Calculations */
function admail_price_per_unit()
{
	var admail_pricing = admail_pricing_per_unit[ formdata.getAdmail() ];
		
	for( i = 0; i < admail_pricing.length; i++ )
	{
		if( formdata.getAdmailNumber() >= admail_pricing[ i ][ 0 ] )
		{
			return admail_pricing[ i ][ 1 ];
		}
	}
	
	return 'ERROR';
}

function calculate()
{
	if( $F( 'printSize' ) == '---' || $F( 'numberOfUnits' ) == '---' || $F( 'admail' ) == '---' || isNaN( formdata.getProfitPerSale() ) )
	{
		show_instructions();
	}
	else
	{				
		//In case we want to switch to the old "words" format.. this is how to do it
		//$('calcTestValue').innerHTML = formatCurrency( product_pricing[ formdata.getPrintSize() ][ formdata.getNumberOfUnits() ] );
		
		if( is_admail_number_shown() )
		{
			var admail_manual_number_validation = calculate_admail_number();
			if( admail_manual_number_validation != "" )
			{
				show_instructions();
				return admail_manual_number_validation;
			}
		}
		else
		{
			if( formdata.getAdmail() == 'No Admail' )
			{
				formdata.setAdmailNumber( 0 );
			}
			else if( formdata.getAdmailAll() == 'true' )
			{
				formdata.setAdmailNumber( formdata.getNumberOfUnits() );
			}			
		}
		
		show_results();
		
		formdata.setPrintingCost( product_pricing[ $F('printSize') ][ formdata.getNumberOfUnits() ] );
		formdata.setPrintingPst( formdata.getPrintingCost() * 0.08 );
		formdata.setPrintingGst( formdata.getPrintingCost() * 0.05 );
		formdata.setPrintingTotal( formdata.getPrintingCost() + formdata.getPrintingPst() + formdata.getPrintingGst() );
		
		formdata.setMailingCostPerUnit( admail_price_per_unit() );
		formdata.setMailingCost( admail_price_per_unit() * formdata.getAdmailNumber() );
		formdata.setMailingGst( formdata.getMailingCost() * 0.05 );
		formdata.setMailingTotal( formdata.getMailingCost() + formdata.getMailingGst() );
		
		formdata.setProjectTotal( formdata.getPrintingTotal() + formdata.getMailingTotal() );
		formdata.setBreakeven( formdata.getProjectTotal() / formdata.getProfitPerSale() );
		formdata.setBreakevenPercent( ( formdata.getBreakeven() / formdata.getNumberOfUnits() ) * 100.0 );
	}
	
	return ""; // No errors.
}

/*UI Change functions*/
function admail_changed()
{
	admail_hide_or_show();
	calculate();
}

function admailAll_changed()
{
	admail_number_hide_or_show();
	calculate();
}

function admailNumberChanged()
{
	var validation = calculate_admail_number();
	
	if( validation == '' )
	{
		return calculate();
	}
	else
	{
		return validation;
	}
}

function is_admail_shown()
{
	return $F( 'admail' ) == 'Addressed' || $F( 'admail' ) == 'Unaddressed';
}

function is_admail_number_shown()
{
	return is_admail_shown() && formdata.getAdmailAll() != 'true'
}

function admail_hide_or_show()
{
	if( is_admail_shown() )
	{
			Element.show( 'admail_number_selection' );
	}
	else
	{
			Element.hide( 'admail_number_selection' );
	}
}

function admail_number_hide_or_show()
{
	if( is_admail_number_shown() )
	{
			Element.show( 'admail_number_manual_selection' );
	}
	else
	{
			Element.hide( 'admail_number_manual_selection' );
	}
}

function show_instructions()
{
	Element.hide( 'results' );
	Element.show( 'instructions' );
}

function show_results()
{
	Element.show( 'results' );
	Element.hide( 'instructions' );
}
