var _errorFound = false;
var _requiredDesignator = "required";
var _requiredDisplayClass = "reqAlert";
var _continueButton;

dojo.require("dojo.widget.Dialog");

function validatePlaceOrder(needsPet) {
	if (needsPet) {
		var petsRequired = document.getElementsByName("petRequired");
		for (var i=0;i<petsRequired.length;i++) {
			if (petsRequired[i].value=='') {
				alert('You must select a Pet for each prescription item being purchased.');
				return false;
			}
		}
	}
	
	document.getElementById('btn_placeOrder').style.display = "none";
	con = document.createElement('p');
	con.style.margin = 0;
	con.style.padding = 0;
	con.style.cssFloat = 'right';
	con.style.width = '150px';
	con.style.position = "relative";
	con.style.top = "5px";
	con.innerHTML = '<img style="display:block;top:2px;margin:0 5px 0 0;float:left;" src="/images/loading_black.gif" alt="" /> processing order...';
	document.getElementById('continueButtons').appendChild(con);
	
	return true;
}

function toggleContinueButton() {
	if ($("continueButton").style.display=="none") {
		hideBusy();
		$("continueButton").style.display="block";
	}
	else {
		$("continueButton").style.display="none";
		showBusy($("continueButton").offsetLeft, $("continueButton").offsetTop);
	}
}

function validateCheckoutFields() {
	var valid = validateRequiredFields($('checkoutFields').getElementsByTagName('input'),$('checkoutFields').getElementsByTagName('select'));
	if(valid) {
		document.getElementById('continueButtons').innerHTML = '';
		con = document.createElement('p');
		con.style.margin = 0;
		con.style.padding = 0;
		con.style.cssFloat = 'right';
		con.style.width = '245px';
		con.style.position = "relative";
		con.style.top = "5px";
		con.innerHTML = '<img style="display:block;top:2px;margin:0 5px 0 0;float:left;" src="/images/loading_black.gif" alt="" /> processing payment/shipping info...';
		document.getElementById('continueButtons').appendChild(con);	
	}
	
	return valid;
}

function associatePet(petId, orderItemId) {
	$('petId').value = petId;
	$('orderItemId').value = orderItemId;
	
	submitAssociatePetForm();
}

/* types of checkout submit */
function notLoggedInSubmit() {

	try {
		toggleContinueButton();
	
		//$('continueButton').style.display='none';
		//setTimeout('', 1500);
		
		//return false;
		/* Return false if fields are not valid. */
		if (!validateRequiredFields( $("checkoutFields").getElementsByTagName("input"), $("checkoutFields").getElementsByTagName("select") ) )
			return false;

		submitAutoRegistrationForm();

		if ($('newUser_username').value != ''
			&& $('newUser_password').value != ''
			&& $('newUser_cpassword').value != ''
			)
		{
			submitRegistrationForm();
			submitPetForms();
		}

		submitShippingAddressForm();

		submitShippingModeForm();

		submitPaymentForm();

		toggleContinueButton();

		if (_errorFound) {
			_errorFound = false;
			return false;
		}
	}
	catch(e) {
		alert("An unexpected error has occurred: " + e);
		toggleContinueButton();
		return false;
	}

}

function autoRegisteredSubmit() {

	try {
		toggleContinueButton();
		
		/* Return false if fields are not valid. */
		if (!validateRequiredFields( $("checkoutFields").getElementsByTagName("input"), $("checkoutFields").getElementsByTagName("select") ))
			return false;
	
		if ($('newUser_username').value != ''
			&& $('newUser_password').value != ''
			&& $('newUser_cpassword').value != ''
			)
		{
			submitRegistrationForm();
			submitPetForms();
		}
	
		submitShippingAddressForm();
		submitShippingModeForm();
		submitPaymentForm();
		
		toggleContinueButton();
		
		if (_errorFound) {
			_errorFound = false;
			return false;
		}
	}
	catch(e) {
		alert("An unexpected error has occurred: " + e);
		toggleContinueButton();
		return false;
	}
}

function loggedInSubmit() {

	try {
		toggleContinueButton();

		/* Return false if fields are not valid. */
		if (!validateRequiredFields( $("checkoutFields").getElementsByTagName("input"), $("checkoutFields").getElementsByTagName("select") ))
			return false;
	
		submitPetForms();
	
		submitShippingAddressForm();
		submitShippingModeForm();
		submitPaymentForm();

		toggleContinueButton();
		
		if (_errorFound) {
			_errorFound = false;
			return false;
		}
	}
	catch(e) {
		alert("An unexpected error has occurred: " + e);
		toggleContinueButton();
		return false;
	}
}

function parseShippingModes(arg0, doc) {
	/*
	var methods = $('newUser_shipping_shipMethod');

	// Don't remove the blank...
	while (methods.childNodes.length > 1)
		methods.removeChild(methods.childNodes[1]);
		
	var shipModes = doc.childNodes[0];

	for (var i=0;i<shipModes.childNodes.length;i++) {
		if (shipModes.childNodes[i].nodeType != 3) {
			var opt = document.createElement("OPTION");
			opt.setAttribute("value", shipModes.childNodes[i].getAttribute("id"));
			if (shipModes.childNodes[i].childNodes.length >= 7)
				opt.appendChild(document.createTextNode(shipModes.childNodes[i].childNodes[7].childNodes[0].nodeValue));
			else
				opt.appendChild(document.createTextNode(shipModes.childNodes[i].childNodes[3].childNodes[0].nodeValue));
			methods.appendChild(opt);
		}
	}
	*/
}

function setShippingModes() {
	dojo.io.bind({
	    url: "/jsp/ecom/ShippingModes.jsp",
	    load: parseShippingModes,
    	mimetype: "text/xml"
	});
}

function updateOrder() {
	if ($('newUser_shipping_shippingAddressOne').value != ''
		&& $('newUser_shipping_city').value != ''
		&& $('newUser_shipping_state').value != ''
		&& $('newUser_shipping_zip').value != ''
	)
	{
		//submitShippingAddressForm();
		//setShippingModes();
		
		updateRequiredStatus();
	}
}

/* Forms to submit */

function submitPetForms() {
	if (_errorFound) return;
	var i = 1;
	while($('petForm'+i)) {
		if ($('petForm'+i).name.value != '') {
			submitForm(_genericLoad, _genericError, _genericTimeout, 30, $('petForm'+i), true);
		}
		i++;
	}
}

function submitAssociatePetForm() {
	if (_errorFound) return;
	submitForm(_genericLoad, _genericError, _genericTimeout, 30, $('associatePetForm'), true);
}

function submitPetInsertForm() {
	if (_errorFound) return;
	submitForm(_genericLoad, _genericError, _genericTimeout, 30, $('petInsertForm'), true);
}

function submitRegistrationForm() {
	if (_errorFound) return;
	submitForm(_genericLoad, _genericError, _genericTimeout, 30, $('registrationForm'), true);
}

function submitAutoRegistrationForm() {
	if (_errorFound) return;
	submitForm(_genericLoad, _genericError, _genericTimeout, 30, $('autoRegistrationForm'), true);
}

function submitShippingModeForm() {
	if (_errorFound) return;
	submitForm(_genericLoad, _genericError, _genericTimeout, 30, $('shippingModeForm'), true);
}

function submitShippingAddressForm() {
	if (_errorFound) return;
	submitForm(_genericLoad, _genericError, _genericTimeout, 30, $('shippingAddressForm'), true);
}

function submitPaymentForm() {
	if (_errorFound) return;
	submitForm(_genericLoad, _genericError, _genericTimeout, 30, $('paymentForm'), true);
}

function _genericLoad(data,data2,data3) {
	var errorMsg = "";
	if (data2.match(/<div id=\"pmlmessages\">.+?<\/div>/ig)) {
		var d;
		if (!dojo.widget.byId('pmlMessageDialog'))
			d = dojo.widget.createWidget("Dialog", {id:"pmlMessageDialog"}, $('pmlMessageDialog'));	
		else
			d = dojo.widget.byId('pmlMessageDialog');
		removeAllChildren($('pmlMessageDialogContent'));
		errorMsg = data2.match(/<div id=\"pmlmessages\">.+?<\/div>/ig)[0];
		_errorFound = true;
		$('pmlMessageDialogContent').innerHTML = errorMsg;
		d.show();
	}
}

function _genericError(arg1, data, arg3) { 
	_errorFound = true;
	alert("Error: " + data.message);//.replace(/XMLHttpTransport Error: [0-9]{3} /ig,"").replace(/\+/ig, " "));
}

function _genericTimeout(data) {
	_errorFound = true;
	alert("No response received from server. Please try again.");
}

function changeImages(id, img) {
	document.getElementById(id).src = img;
}

function updateShippingMode() {
	showActivity();
 	document.shippingModeForm.submit();
	return false;
}

function updateShippingAddress() {
	showActivity();
	document.shippingAddressForm.pmlAction.value = 'update';
 	document.shippingAddressForm.submit();
	return false;
}

function updateCart() {
	showActivity();
 	document.contentForm.pmlAction.value = 'update';
 	document.contentForm.submit();
	return false;
}

function emptyCart() {
	showActivity();
	document.contentForm.pmlAction.value = 'empty';
	document.contentForm.submit();
	return false;
}

function setSelect(sel, val) {
	if (sel != null && sel.options) {
		for (var i=0;i < sel.options.length; i++) {
			if (sel.options[i].value == val) {
				sel.selectedIndex = i;
				break;
			}
		}
	}
}

function setPaymentFields() {
	$("payment_address").value = $("newUser_billingAddressOne").value;
	$("payment_city").value = $("newUser_city").value;
	$("payment_region").value = $("newUser_state").value;
	$("payment_postalCode").value = $("newUser_zip").value;
	$("payment_country").value = $("newUser_country").value;
}

function useBillingForShipping() {
	
	if ($('newUser_useBillingForShipping').checked) {

		$("newUser_shipping_contact").value = $("newUser_contact").value;
		$("newUser_shipping_shippingAddressOne").value = $("newUser_billingAddressOne").value;
		$("newUser_shipping_shippingAddressTwo").value = $("newUser_billingAddressTwo").value;
		$("newUser_shipping_city").value = $("newUser_city").value;
		$("newUser_shipping_state").value = $("newUser_state").value;
		$("newUser_shipping_zip").value = $("newUser_zip").value;
		$("newUser_shipping_country").value = $("newUser_country").value;
		$("newUser_shipping_dphone").value = $("newUser_dphone").value;
		$("newUser_shipping_ephone").value = $("newUser_ephone").value;
		$("newUser_shipping_email").value = $("newUser_email").value;
		
	}
	else {

		$("newUser_shipping_contact").value="";
		$("newUser_shipping_shippingAddressOne").value="";
		$("newUser_shipping_shippingAddressTwo").value="";
		$("newUser_shipping_city").value="";
		$("newUser_shipping_state").value="";
		$("newUser_shipping_zip").value="";
		$("newUser_shipping_country").value="";
		$("newUser_shipping_dphone").value="";
		$("newUser_shipping_ephone").value="";
		$("newUser_shipping_email").value="";
	
	}
	
	updateRequiredStatus();
	
	if ($('newUser_useBillingForShipping').checked)
		setTimeout(updateOrder, 500);
}

function showAddPet() {
	dojo.widget.byId('petInsertDialog').show();
}

function reloadPage() {
	document.location.href=document.location.href;
}

/* Initialization */
function commonCheckoutInit() {
	var elements = combineGets(getByTag("input"), getByTag("select"));
	for (var i=0;i<elements.length;i++) {
		if (getClassValue(elements[i]) && getClassValue(elements[i]).match(/required/)) {
			dojo.event.connect(elements[i], "onchange", toggleRequired);
		}
	}
	
	dojo.event.kwConnect({
		type: "after", 
		srcObj: dojo.widget.byId('petInsertDialog'), 
		srcFunc: "hide",
		targetFunc: "reloadPage"
	});
}

dojo.addOnLoad(commonCheckoutInit);

