dojo.require("dojox.xml.DomParser");

dojo.addOnLoad(
		function(){
			if(dojo.byId("orderSIM")){
				dojo.connect(dojo.byId("orderSIM"), 'onkeypress', function(e) {
					if (e.keyCode == dojo.keys.ENTER) {
						orderSim();
						return;
					}
				});
			}
		}
);

function getAddressListByPostcode(postcode){
	if(postcode.length < 1){ 
		dojo.byId("postcodeLabel").style.color = "red";
		showOrderMsg('Please enter a valid postcode', true);
		return;
	}
	dojo.xhrPost(
			{
				url: "/administration/get-pca-postal-id",
				handleAs: 'json',
				content: {
					postalcode: escape(postcode)
				},
				load: function(response) {
					var xml = dojox.xml.DomParser.parse(response);
					var itemsElem = xml.getElementsByTagName('Item');
					var sel = dojo.byId('selectPostcode');
					sel.options.length = 0;
					addOption(sel, "Please select an address", " ", true);
					var lastId = '';
					for(var i in itemsElem){
						var node = itemsElem[i];
						if(node.nodeType != 1 || node.nodeName != "Item" || node.getAttribute("id") == null || node.getAttribute("description") == null)
							continue;
						lastId = node.getAttribute("id");
						var desc = node.getAttribute("description");
						if(desc.length > 28)
							desc = desc.substr(0,25) + "...";
						addOption(sel, desc, lastId);
					}
					
					if(sel.options.length > 0){
						addOption(sel, "None of the above", "-");
						dojo.style("selectPostcodeContainer", {"display":"block"});
						
					}
				},
				error: function(e){
					//console.log(e.message);
				}
			}
		);
}

function addOption(elem, txt, val, enabled){
	var newOpt = dojo.doc.createElement('option');
	newOpt.text = txt;
	newOpt.value = val;
	newOpt.disabled = (enabled == false);
	elem.options.add(newOpt);
}

function populateAddress(addressID){
	if(dojo.string.trim(addressID).length < 1) {
		dojo.byId('ordersimaddress1').value = "";
		dojo.byId('ordersimaddress2').value = "";
		dojo.byId('ordersimtown').value = "";
		dojo.byId('ordersimcounty').value = "";
		return;
	}
	
	dojo.style("orderAdd1", {"display":"block"});
	dojo.style("orderAdd2", {"display":"block"});
	dojo.style("orderTown", {"display":"block"});
	dojo.style("orderCounty", {"display":"block"});
	
	if(addressID == "-") return;
	
	dojo.xhrPost(
			{
				url: "/administration/get-pca-address-data",
				handleAs: 'json',
				content: {
					addressid: addressID
				},
				load: function(response) {
					var xml = dojox.xml.DomParser.parse(response);
					var itemElem = xml.getElementsByTagName('Item')[0];
					dojo.byId('ordersimaddress1').value = (itemElem.getAttribute("line1") === null?"":itemElem.getAttribute("line1"));
					dojo.byId('ordersimaddress2').value = (itemElem.getAttribute("line2") === null?"":itemElem.getAttribute("line2"));
					dojo.byId('ordersimtown').value = (itemElem.getAttribute("post_town") === null?"":itemElem.getAttribute("post_town"));
					dojo.byId('ordersimcounty').value = (itemElem.getAttribute("county") === null?"":itemElem.getAttribute("county"));
				},
				error: function(e){
					//console.log(e.message);
				}
			}
		);
}

function showErrorFields(fields){
	dojo.byId("firstnameLabel").style.color = "#FFFFFF";
	dojo.byId("lastnameLabel").style.color = "#FFFFFF";
	dojo.byId("postcodeLabel").style.color = "#FFFFFF";
	dojo.byId("address1Label").style.color = "#FFFFFF";
	dojo.byId("address2Label").style.color = "#FFFFFF";
	dojo.byId("cityLabel").style.color = "#FFFFFF";
	dojo.byId("countyLabel").style.color = "#FFFFFF";
	dojo.byId("emailLabel").style.color = "#FFFFFF";
	dojo.byId("phoneLabel").style.color = "#FFFFFF";
	
	for(field in fields){
		var fieldName;
		var suffix = "Label";
		if(dojo.byId(field + suffix)){
			fieldName = field;
		}else{
			fieldName = fields[field];
		}
		dojo.byId(fieldName + suffix).style.color = "red";
	}
	
	if(fields.length > 0){
		showOrderMsg(ERR_INVALID_FIELDS, true);
	}
}

function showOrderMsg(msg, error){
	dojo.byId('orderError').style.color = (error?'red':'#FFFFFF');
	dojo.html.set(dojo.byId('orderError'), msg)
}

function orderSim(){
	//Disable submit button to prevent button-mashing, will re-enable it if order fails
	dojo.byId('orderBtn').disabled = true;
	
	//verify req fields
	var errMsg = new Array();
	var i = 0;
	if(dojo.byId("ordersimusername").value == ""){
		errMsg[i] = "firstname";
		i++;
	}
	if(dojo.byId("ordersimlastname").value == ""){
		errMsg[i] = "lastname";
		i++;
	}
	if(dojo.byId("ordersimpostcode").value == ""){
		errMsg[i] = "postcode";
		i++;
	}
	if(dojo.byId("ordersimaddress1").value == ""){
		errMsg[i] = "address1";
		i++;
	}
	if(dojo.byId("ordersimtown").value == ""){
		errMsg[i] = "city";
		i++;
	}
	if(!validateEmail(dojo.byId("ordersimemail").value)){
		errMsg[i] = "email";
		i++;
	}
	if(!validateUKPhone(dojo.byId("ordersimcontactnumber").value)){
		errMsg[i] = "phone";
		i++;
	}
	
	showErrorFields(errMsg);
	if(errMsg.length > 0){
		dojo.byId('orderBtn').disabled = false;
		return;
	}
	
	//post to server
	showOrderMsg('Processing...please wait', false);
	dojo.xhrPost(
			{
				url: "/order/add-order",
				handleAs: "json",
				content:{
					firstname: dojo.byId("ordersimusername").value,
					lastname: dojo.byId("ordersimlastname").value,
					postalcode: dojo.byId("ordersimpostcode").value,
					address1: dojo.byId("ordersimaddress1").value,
					address2: dojo.byId("ordersimaddress2").value,
					city: dojo.byId("ordersimtown").value,
					state: dojo.byId("ordersimcounty").value,
					email: dojo.byId("ordersimemail").value,
					phone: formatUKPhone(dojo.byId("ordersimcontactnumber").value),
					offers: (dojo.byId("newprivacyterms").checked?"1":"0"),
					standpid:currentStandId
				},
				load: function(response){
					if(response.status == 'OK'){
						dojo.byId("orderSIM").style.display = 'none';
						dojo.byId("leftTop").style.display = 'none';
						dojo.byId("leftCenter").style.display = 'none';
						dojo.byId("leftTopAlt").style.display = '';
						dojo.byId("leftCenterAlt").style.display = '';
					}else if (response.status == 'badvalues'){
						showErrorFields(response.errorFields);
						showOrderMsg(ERR_INVALID_FIELDS, true);
						dojo.byId('orderBtn').disabled = false;
					}else if(response.status == 'ordercount'){
						showOrderMsg("Sorry, orders are limited to "+response.data.maxorders+" per household per calendar quarter.", true);
						dojo.byId('orderBtn').disabled = false;
					}
				},
				error: function(e){
					showOrderMsg('Sorry, there was an error processing your order.', true);
					//console.log(e.message);
				}
			}
	);
	
}