/**
 * 
 *
 *
 */
function handleSelect(element, nodepencies){
	if (element.type != "select-one") return;
	//get a handle of objects
	var form = element.form;
	var cName=element.name.split("_");
	var item =cName[0]+"_"+cName[1];
	var price = eval(item);
	var itemValue = form.elements[item+"_amount"];
	var quantity = parseInt(element.options[element.selectedIndex].text);
	var amount = quantity*price;
	var radioSchedule = form.elements[item+"_month"];	
	if (amount > 0){
		itemValue.value = formatAmount(amount);
		var anychecked = false;
		for (var i = 0; i < radioSchedule.length ; i++){
			if (radioSchedule[i].checked)
				anychecked = true;
		}
		if (!anychecked)
			radioSchedule[0].checked = 1;
	}
	else {
		itemValue.value = "";
		for (var i = 0; i < radioSchedule.length ; i++){
			radioSchedule[i].checked = false;
		}
		
	}
	if(!nodepencies){
		checkDependencies(element,"winterize");
		checkDependencies(element,"summerize");
	}
	
	calculateTotals(form);
	syncPayment(form);
}


/**
 * 
 *
 *
 */
function checkDependencies(element, dependency){
	if (element.name.indexOf(dependency) != -1) return;
	//get a handle of objects
	var form = element.form;
	var cName=element.name.split("_");
	var item =cName[0]+"_"+cName[1];
	var dependant = form.elements[cName[0]+"_"+dependency+"_quantity"]
	if (dependant != undefined){
		var dependant_qty = parseInt(dependant.options[dependant.selectedIndex].text);
		var min_qty = parseInt(element.options[element.selectedIndex].text);
		if (dependant_qty < min_qty){
			dependant.options[element.selectedIndex].selected = true;
			handleSelect(dependant);
		}
	}
	
}

function validateNonEmpty(element, errorMessage){
	if (element.value == ""){
		alert(errorMessage);
		element.focus();
		return false;
	}
	return true;
}


/**
 *
 *
 */
function validateForm(form){
	if (!validateNonEmpty(form.firstName, "First name is required.")) return false;
	if (!validateNonEmpty(form.lastName, "Last name is required.")) return false;
	if (!validateNonEmpty(form.address, "E-mail address is required")) return false;
	if (!validateNonEmpty(form.phone, "Phone number is required.")) return false;
	if (!validateNonEmpty(form.paymentAmount, "No services have been selected.")) return false;
	syncPayment(document.schedulerForm);
	return true;	
}

/**
 *
 *
 */
function submitPaymentForm(){
	if (validateForm(document.paymentForm)){
		var paymentType = document.paymentForm.paymentType;
		for (var i = 0; i < paymentType.length ; i++){
			if (paymentType[i].checked && paymentType[i].value == "Pay bi-annual"){
				var paymentAmount = document.paymentForm.paymentAmount.value;
				document.paymentForm.paymentAmount.value = paymentAmount/2;
				break;
			}
		}
		document.paymentForm.submit();
	}
}

/**
 * 
 *
 *
 */
function handleRadio(element){
	var form = element.form;
	var cName=element.name.split("_");
	var item =cName[0]+"_"+cName[1];
	var qtyselect = form.elements[item+"_quantity"];
	var quantity = parseInt(qtyselect.options[qtyselect.selectedIndex].text);
	if (quantity == 0){
		qtyselect.options[1].selected = true;
		handleSelect(qtyselect);
	}
}
/**
 * 
 *
 *
 */
function calculateTotals(form){
	var subtotal = 0;
	var tax = 0;
	var credit = 0;
	var total = 0;
	for (var i=0 ; i < form.elements.length; i++){
		var element = form.elements[i];
		if (element.name.indexOf("_amount") != -1 ){
			var data = element.value.split("$");
			var value = data[1];
			value =  parseInt(value);
			if (value > 0) {
				subtotal += value; 
			}
		}
	}
	if (credit_deadline > new Date()){
		credit = subtotal*.2;
	}

	tax = subtotal*.0625;
	
	total = subtotal + tax;
	
	form.elements.credit.value=formatAmount(credit);
	form.elements.subtotal.value=formatAmount(subtotal);
	form.elements.tax.value=formatAmount(tax);
	form.elements.total.value=formatAmount(total);

}


/**
 * 
 *
 *
 */
function syncPayment(form){
	var notes ="\nCustomer Info:"
	notes += "\nFirst name: "+document.paymentForm.firstName.value;	
	notes += "\nLast name: "+document.paymentForm.lastName.value;
	notes += "\nEmail Address: "+document.paymentForm.address.value;
	notes += "\nPhone: "+document.paymentForm.phone.value;	

	var paymentType = document.paymentForm.paymentType;
	for (var i = 0; i < paymentType.length ; i++){
		if (paymentType[i].checked){
			notes +="\nPayment Type: "+paymentType[i].value;
			break;
		}
	}


	notes +="\n\nCustomer Order:"
	for (var i=0 ; i < form.elements.length; i++){
		var element = form.elements[i];
		if (element.name.indexOf("_quantity") != -1 ){
			if (element.options.selectedIndex > 0 ){
				var d = element.name.split("_");
				var item = d[0]+"_"+d[1];
				var itemDescription = item;
				for(var k = 0; k < labels.length ; k++){
					if (item == labels[k][0]){
						itemDescription = labels[k][1];
						break;
					}
				}
				var scheduleGrp = form.elements[item+"_month"];
				var schedule = ""
				for (var j = 0; j < scheduleGrp.length ; j++){
					if (scheduleGrp[j].checked){
						schedule = scheduleGrp[j].value;
						break;
					}
				}
				notes += "\n"+element.options.selectedIndex + " " + itemDescription + ", scheduled for "+ schedule;
			}
		}
	}
	if (form.credit.value != "" ){
		notes += "\nBonus credit " + form.credit.value
	}
	if (form.subtotal.value != "") {
		notes += "\nSubtotal " + form.subtotal.value
	}
	
	if (form.tax.value != "") {
		notes += "\nTax " + form.tax.value
	}

	if (form.total.value != "") {
		notes += "\nTotal " + form.total.value
		var data = form.total.value.split("$");
		document.paymentForm.paymentAmount.value = data[1];
		document.paymentForm.notes.value = notes;
	} else  {
		document.paymentForm.paymentAmount.value = 0;
		document.paymentForm.notes.value = "";
	}
	
}


/**
 * 
 *
 *
 */
function handlePayMethod(element){
	if (element.value == "creditcard" )
		document.getElementById("creditCardInfo").style.display="block";
	else
		document.getElementById("creditCardInfo").style.display="none";		
	
}


/**
 * 
 *
 *
 */
var minimum_charge = 35;
var credit_deadline = new Date(credit_deadline_year, credit_deadline_month-1 ,credit_deadline_day )
var labels = new Array(['walkbehindmower_tunesharpen', 'Walk-behind Mower Tune and Sharpen'],
				['walkbehindmower_winterize' , 'Walk-behind Mower Winterization'],
				['ridermower_tunesharpen' , 'Rider Mower Tune and Sharpen'],
				['ridermower_winterize' , 'Rider Mower Winterize'],
				['ridermower_deckswap' , 'Rider Mower deck swap'],
				['snowblower_1stagetuneup' , 'Snow blower single stage tune-up'],
				['snowblower_2stagetuneup' , 'Snow blower two-stage tune-up'],
				['snowblower_summerize' , 'Snow blower summerize'],
				['rototiller_tuneup' , 'Rototiller tune-up'],
				['rototiller_winterize' , 'Rototiller winterize'],
				['edger_tuneup' , 'Edger tune-up'],
				['edger_winterize' , 'Edger winterize'],
				['generator_annualtunecheck' , 'Generator annual tune and check'],
				['weeder_tunewinterize' , 'Weeder tune / winterize'],
				['bicycle_completetuneup' , 'Bicicle complete tune-up'],
				['bicycle_safetytune' , 'Safety tune']
				);


/**
 * 
 *
 *
 */
function printPrice(num){
	if(isNaN(num))
	num = "0";
	sign = (num == (num = Math.abs(num)));
	num = Math.floor(num*100+0.50000000001);
	cents = num%100;
	num = Math.floor(num/100).toString();
	if(cents<10)
	cents = "0" + cents;
	for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++)
		num = num.substring(0,num.length-(4*i+3))+','+
	num.substring(num.length-(4*i+3));
	document.write (((sign)?'':'-') + '$' + num + '.' + cents + ((num < minimum_charge )?'*':'') );
}


/**
 * 
 *
 *
 */
function formatAmount(num) {
	if(isNaN(num))
	num = "0";
	sign = (num == (num = Math.abs(num)));
	num = Math.floor(num*100+0.50000000001);
	cents = num%100;
	num = Math.floor(num/100).toString();
	if(cents<10)
	cents = "0" + cents;
	for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++)
		num = num.substring(0,num.length-(4*i+3))+','+
	num.substring(num.length-(4*i+3));
	return (((sign)?'':'-') + '$' + num + '.' + cents );
}


