jQuery(document).ready(function() {
	postcodeFinder();
	initSelect();
});

//JavaScript Document
function postcodeFinder() {
	if (!jQuery('#findUKAddress')) {return};
	jQuery('#findUKAddress').click(function(e) {
		e.preventDefault();
		
		var arRequired = jQuery('#container .miniRequired');
		
		for (var i = 0; i < arRequired.length; i++) {
			var objInput = arRequired[i];
			var objParent = objInput.parents('div');
			if (objInput.val() == '' || /^[\+|\s]+$/.test(objInput.val())) {
				objParent.addClass('error');
				showErrorText(objInput.attr('id'), true);
				var state = 'error';
			}
			else {
				showErrorText(objInput.attr('id'), false);
				objParent.removeClass('error');
			}
		}
		
		var postcodeClass = 'ukpostcode';
		var housenumClass = 'ukhousenumber';
		var titleClass = 'title';
		var firstnameClass = 'firstname';
		var lastnameClass = 'lastname';
		var countryClass = 'country';
		var phoneClass = 'phone';
		var lineItemID = 'lineitem';
		var billingAddressNewOrSavedClass = 'billingAddressNewOrSaved';
		var storedOrNewCardClass = 'storedOrNewCard';
		
		var postcodeData = jQuery(jQuery("input:regex(id, .*address_postcode.*)")[0]).val();
		var housenumData = jQuery(jQuery("input:regex(id, .*ukhousenumber.*)")[0]).val();
		var phoneData = jQuery(jQuery("input:regex(id, .*phone.*)")[0]).val();
		
		if (jQuery.trim(postcodeData) == '' || jQuery.trim(housenumData) == '') {
			jQuery('<div style="display:hidden">Please enter valid UK post code and house number</div>').dialog({
				draggable: false,
				minWidth: 400,
				minHeight: 400,
				modal: true,
				open: function(event, ui) {
					jQuery('.ui-widget-overlay').click (function () {
						jQuery('.ui-dialog-content').dialog("close");
						return false;
					});
				},
				close: function(event, ui){					
					jQuery('.ui-widget-overlay').unbind();
				},
				buttons: {
	 	 	 	 	"Close": function() 
	 	 	 	 	{
	 	 	 	 		$(this).dialog("close");
	 	 	 	 	}
                }
			});
			
			return;
		}
		
		if (jQuery('select.' + titleClass)[0]) {
  	   	 	var titleData = jQuery(jQuery('select.' +titleClass)[0]).val();
  	   	}
		else {
  	   		var titleData = '';
  	   	}
		
		var firstnameData = jQuery(jQuery("input:regex(id, .*address_firstname.*)")[0]).val(); //jQuery('input.' +firstnameClass)[0].val();
		var lastnameData = jQuery(jQuery("input:regex(id, .*address_lastname.*)")[0]).val(); //jQuery('input.' +lastnameClass)[0].val();
  		var countryData = jQuery(jQuery("select:regex(id, .*address_country.*)")[0]).val(); //jQuery('select.' +countryClass)[0].val();
  		var lineItemData = jQuery(jQuery('input.' +lineItemID)[0]).val();
  		
  		var billingAddressNewOrSavedData = '';
  		if (jQuery("#billingAddressNewOrSavedId").length > 0) {
  			billingAddressNewOrSavedData = jQuery("#billingAddressNewOrSavedId").val();
  		}
  		var storedOrNewCardData = '';
  		if (jQuery("#storedOrNewCardId").length > 0) {
  			storedOrNewCardData = jQuery("#storedOrNewCardId").val();
  		}

		// ECM-7428 Added encoding for address data
  		// HOF-4559 Fixes a problem caused by ECM-7428 with URL encoding.
		if (state != 'error') {
			var addressData = '?' + 
								postcodeClass  + '=' + encodeURI(postcodeData)  + '&' + 
								housenumClass  + '=' + encodeURI(housenumData)  + '&' + 
								titleClass     + '=' + encodeURI(titleData) + '&' + 
								firstnameClass + '=' + encodeURI(firstnameData) + '&' + 
								lastnameClass  + '=' + encodeURI(lastnameData)  + '&' + 
								countryClass   + '=' + encodeURI(countryData) + '&' + 
								lineItemID     + '=' + encodeURI(lineItemData) + '&' +
								phoneClass	   + '=' + encodeURI(phoneData);
			
			if (billingAddressNewOrSavedData != '' && storedOrNewCardData != '') {
				addressData += '&' + billingAddressNewOrSavedClass + '=' + encodeURI(billingAddressNewOrSavedData) + '&' + storedOrNewCardClass + '=' + encodeURI(storedOrNewCardData);
			}

			var allURL = findAddressURL + addressData;
			
			jQuery('<div style="display:hidden">Loading...</div>').load(allURL).dialog({
				draggable: false,
				minWidth: 400,
				minHeight: 400,
				modal: true,
				open: function(event, ui) {
					jQuery('.ui-widget-overlay').click (function () {
						jQuery('.ui-dialog-content').dialog("close");
						return false;
					});
				},
				close: function(event, ui){					
					jQuery('.ui-widget-overlay').unbind();
				}
			});
			return false;
		}
		
	});
}
	
function initSelect() {
	jQuery('#selectCountryButton').hide();
	
	var theSelect = jQuery("select.selector");
	
	jQuery.each(theSelect, function (index, value) {
		jQuery(this).change(function(e) {
			selectChanged(jQuery(this));
		});
	});
	
	return true;
}

function showErrorText(formId, display) {
	var errIdent = "err_";
	var errObj = document.getElementById(errIdent + formId);
	
	if (errObj != null) {
		if (display) {
			errObj.style.display = "block";
		}
		else {
			errObj.style.display = "none";
		}
	}
}

function selectChanged(theElement) {
	var theForm = document.getElementById('dwfrm_checkout_addresses');
	var submitElName = 'dwfrm_checkout_addresses_shippingaddress_selectcountry';
	
	// If NOT NULL we are in the Checkout Delivery Address.
	if (theForm == null) {
		theForm = document.getElementById('dwfrm_customeraddress');
		submitElName = 'dwfrm_customeraddress_selectcountry';
		
		// If NOT NULL we are in the Customer Account Manage Addresses.
		if (theForm == null) {
			theForm = document.getElementById('dwfrm_checkout_billing');
			submitElName = 'dwfrm_checkout_addresses_billingaddress_selectcountry';
			
			// If NOT NULL we are in the Checkout Billing Address. If NULL - return false;
			if (theForm == null) {
				return false;
			}
		}
	}
	
	var submitEl = document.createElement('input');
	submitEl.type = 'hidden';
	submitEl.name = submitElName;
	submitEl.value = 'Go';
	theForm.appendChild(submitEl);

	var theSelect;
	if (theElement && theElement.value) {
		theSelect = theElement;
	} else {
		theSelect = this;
	}
	
	//HOF-1350
	if (document.getElementById("CMetricAddress")!=null && document.getElementById("CMetricAddress").value=="send") {
		cmCreateManualLinkClickTag(theForm.action + '?cm_sp=CartCountryCode-_-Combobox-_-' + this.value, 'cart Country Code');
	}
	
	clearForm();
	theForm.submit();
	return true;
}

function clearForm() {
	var arClear = jQuery('#container .clearFieldIE');		
	
	for (var i=0; i<arClear.length; i++) {
		var objInput = arClear[i];
		if (objInput.val() == '') {
			empty=true;
		}
		else {
			objInput.val();
		}
	}
}
