/** SCRIPTS.JS
These scripts run the general HTML experience of DEFAULT
HTML pages generated by the server.  They may be utilized 
by developers, but there are no guarantees on how the 
scripts will work for them
**/

var bannedChars = new Array();
bannedChars[0] = "<";
bannedChars[1] = ">";
bannedChars[2] = "\"";
bannedChars[3] = "[";
bannedChars[4] = "]";
bannedChars[5] = "&";

var baseUri = "/apps/com.solertium.gogoego.server.extensions.commerce"

/******** STORE ITEM PAGE SCRIPTS ********/

function validateMailForm() {
	if (!document.getElementById("EGOmailFromName").value ||
		!document.getElementById("EGOmailFromAddress").value ||
		!document.getElementById("EGOmailToName").value ||
		!document.getElementById("EGOmailToAddress").value ||
		!document.getElementById("EGOmailSubject").value) {
		
		alert("Please fill out all fields");
	}
	else {
		document.getElementById("EGOmailform").submit();
	}
}

function validateReviewForm() {
	if (!document.getElementById("EGOreviewAuthor").value ||
		!document.getElementById("EGOreviewComment").value) {
		alert("Please fill out all fields");
	}
	else {
		document.getElementById("postReview").submit();
	}
}

function getItemImage(url) {
	var xmlObj = getXMLObj();
	var xmlUrl = location.protocol + "//" + location.host + url + "?mediaType=xml";

	xmlObj.onreadystatechange = function() {
		if (xmlObj.readyState == 4) {
			var imageURL = "";
			var imageCaption = "";
			try {
				imageURL = xmlObj.responseXML.documentFElement.getElementsByTagName("url")[0].childNodes[0].data;
			} catch (e) { }
			try {
				imageCaption = xmlObj.responseXML.documentElement.getElementsByTagName("caption")[0].childNodes[0].data;
			} catch (e) { }

			document.getElementById("EGOitemImage").innerHTML = "<img src=\"" + imageURL + "\" alt=\"" + imageURL + "\" " + 
				"width=\"100\" height=\"100\" />";
			document.getElementById("EGOitemCaption").innerHTML = "<span>" + imageCaption + "</span>";
		}
	};

	xmlObj.open("GET", xmlUrl, true);
	xmlObj.send(null);
}

function addToCart(url, template) {
	var xmlObj = getXMLObj();
	var xmlUrl = url;

	if (xmlUrl.indexOf("?") == -1)
		xmlUrl += "?mediaType=xml";
	else
		xmlUrl += "&mediaType=xml";

	xmlObj.onreadystatechange = function() {
		if (xmlObj.readyState == 4) {
			addItem(xmlObj.responseText, template);
		}
	};
	
	xmlObj.open("GET", xmlUrl, true);
	xmlObj.send(null);
}

function addItem(xml, template) {
	var suffix = "";
	if (template != null && template != "")
		suffix = "/" + template;
	var xmlObj = getXMLObj();
	var xmlUrl = location.protocol + "//" + location.host + baseUri + "/cart";

	xmlObj.onreadystatechange = function() {
		if (xmlObj.readyState == 4) {
			goTo(xmlUrl + suffix);
		}
	};

	xmlObj.open("POST", xmlUrl, true);
	xmlObj.send(xml);
}

/******** CART SCRIPTS **********/

/**
* Updates the quantities of all the items in the cart
**/
function cartUpdateAll(cartURL) {
	var xmlUrl = location.protocol + "//" + location.host + baseUri + "/cart?mediaType=xml";
	var xmlObj = getXMLObj();

	document.body.style.cursor = "wait";
	xmlObj.onreadystatechange = function() {
		if (xmlObj.readyState == 4) {
			var items = xmlObj.responseXML.documentElement.getElementsByTagName("item");
			var length = items.length;

			var uriArray = new Array();
			var quantityArray = new Array();

			for (var i = 0; i < length; i++) {
				var data = items[i].getAttribute("uri");
				var itemID = data.split("cart/")[1];
				uriArray[i] = itemID;
				quantityArray[i] = document.getElementById("quantity_"+itemID).value;
			}

			cartUpdate2(uriArray, quantityArray, 0, length);
		}
	};
	
	xmlObj.open("GET", xmlUrl, true);
	xmlObj.send(null);
}

/**
* Finishes the work from cartUpdateAll by actually making the 
* update calls once all the URIs and data has been collected
*/
function cartUpdate2(uriArray, quantityArray, current, complete) {
	var xmlObj = getXMLObj();
	var xmlUrl = location.protocol + "//" + location.host + baseUri + "/cart/" + 
		uriArray[current] + "?quantity=" + quantityArray[current];

	xmlObj.onreadystatechange = function() {
		if (xmlObj.readyState == 4) {
			current++;
			if (current == complete) {
				refresh();
			}
			else {
				cartUpdate2(uriArray, quantityArray, current, complete);
			}
		}
	};
	
	if (complete > 0) {
		xmlObj.open("POST", xmlUrl, true);
		xmlObj.send(null);
	}
	else {
		document.body.style.cursor = "default";
	}
}

/**
* Clears the cart 
*/
function cartDelete(itemID) {
	if (!itemID) itemID = "";
	
	var url = baseUri + "/cart/" + itemID;
	var method = "DELETE";
	var data = null;

	ajax(url, method, data);
}

/**
* Proceeds to checkout
*/
function cartCheckout(url) {
	if (url) {
		window.location = url;
	}
	else {
		window.location = baseUri + "/checkout";
	}
	
}

/**
* Calls a function via AJAX, then refreshes the page
*/
function ajax(url, method, data) {
	var xmlObj = getXMLObj();
	var xmlUrl = location.protocol + "//" + location.host + url;

	xmlObj.onreadystatechange = function() {
		if (xmlObj.readyState == 4) {
			window.location.href = unescape(window.location.pathname);
		}
	};
	xmlObj.open(method, xmlUrl, true);
	xmlObj.send(data);
}

/**
* Calls a function via AJAX 
*/
function ajaxNoResponse(url, method, data) {
	var xmlObj = getXMLObj();
	var xmlUrl = location.protocol + "//" + location.host + url;
	
	xmlObj.onreadystatechange = function() {
		if (xmlObj.readyState == 4) {
			//alert(xmlObj.responseText);
		}
	};
	
	xmlObj.open(method, xmlUrl, true);
	xmlObj.send(data);
}

/*********** CHECKOUT SCRIPTS ***********/

function checkPaymentOption(option) {
	var xmlObj = getXMLObj();
	var xmlUrl = location.protocol + "//" + location.host + "/checkout/paymentForm/" + option;

	xmlObj.onreadystatechange = function() {
		if (xmlObj.readyState == 4) {
			document.getElementById("EGOpaymentForm").innerHTML = xmlObj.responseText;
		}
	};

	xmlObj.open("GET", xmlUrl, true);
	xmlObj.send(null);
}

/**
* When non-US countries are selected, change the states (regions) to be a
* appropriate for that country
*/
var originalStateHTML = "";
function updateStates(select, prefix) {

	var selectedCountry = select.options[select.selectedIndex].value;
	getStates(select.value, document.getElementById(prefix + "Address_state"));
	
}


function getStates(country, inner){
	var url = baseUri + "/utils/states.xml";
	
	var xmlObj = getXMLObj();
	var xmlUrl = location.protocol + "//" + location.host + url + "?mediaType=xml";

	var buffer="";
	
	xmlObj.onreadystatechange = function() {
		if (xmlObj.readyState == 4) {
			var stateList;
			try {
				
				var countryList = xmlObj.responseXML.documentElement.getElementsByTagName("country");
			
				for (var i = 0; i < countryList.length; i++) {
					var data = countryList[i].getAttribute("id");
					if(country==data){
						var myCountry = countryList[i];
						for (var t = 0; t < myCountry.childNodes.length; t++) {
							if(myCountry.childNodes[t].nodeType!=3) buffer+="<option value=\""+myCountry.childNodes[t].getAttribute("id")+"\">"+ myCountry.childNodes[t].getAttribute("name") +"</option>";					
						}
						
					}
					//window.alert(buffer);
					inner.innerHTML=buffer;
				}
				
					
			} 
			catch (e) {
				window.alert(e);
		 	}
		}
		
	};

	xmlObj.open("GET", xmlUrl, true);
	xmlObj.send(null);
	
	
}

/**
* Submits the order, and the password if they want one
*/
function submitOrder() {
	submitPassword(false, true);
}

/**
* Submits a password with the order
*/
function submitPassword(passwordExplicitlyRequested, doCheckout) {
	if (passwordExplicitlyRequested == null || passwordExplicitlyRequested == true)
		passwordExplicitlyRequested = true;
	else
		passwordExplicitlyRequested = false;

	var p1 = document.getElementById("EGOpassword1").value;
	var p2 = document.getElementById("EGOpassword2").value;

	if (p1 == "") {
		if (passwordExplicitlyRequested == true) {
			alert("Password can not be blank");
		}
		else {
			document.getElementById("EGOCheckoutFormSubmitAll").submit();
		}
		return;
	}

	if (p1 != p2) {
		alert("Passwords do not match, please enter again.");
		return;
	}

	for (var i = 0; i < bannedChars.length; i++) {
		if (p1.indexOf(bannedChars[i]) != -1) {
			alert("Password can not contain: " + bannedChars[i]);
			return;
		}
	}
	
	var xmlUrl = window.location;
	var xmlObj = getXMLObj();

	xmlObj.onreadystatechange = function() {
		if (xmlObj.readyState == 4) {
			try {
				if (xmlObj.status == 201) {
					alert("Password Created");
					if (doCheckout == true)
						document.getElementById("EGOCheckoutFormSubmitAll").submit();
				}
				else {
					var status = xmlObj.responseXML.documentElement.getElementsByTagName("status")[0].childNodes[0].data;
					alert(status);
				}
			} catch (e) {
				//alert("ERROR: " + e + xmlObj.responseText);
			}
		}
	}
	
	var xml = "<root><password>" + p1 + "</password></root>";

	xmlObj.open("PUT", xmlUrl, true);
	xmlObj.send(xml);
}

/*********** ORDER SCRIPTS *************/

/**
* Gather tracking data for the order and display it!
* one could even just go to the given URL (mediaType=xml) and put it 
* behind a template...
*/
function trackOrder(url) {
	
}

/**
* Adds a message to the order.
* @param url - the URL of the order
*/
function updateMessageBox(url) {

	var ggeMessageContent = document.getElementById("GGEmessageContent");
	var addMessage = document.getElementById("addMessage");
	if (ggeMessageContent.value != "")
	{
		var xmlObj = getXMLObj();
		var xmlURL = location.protocol + "//" + location.host + url;
	
		document.body.style.cursor = "wait";
		xmlObj.onreadystatechange = function() {
			document.body.style.cursor = "ready";
			if (xmlObj.readyState == 4) {
				window.alert("Message Sent");
				refresh();
			}
	
		};
	
		xmlObj.open("POST", xmlURL, true);
		xmlObj.send("GGEmessageContent=" + ggeMessageContent.value
			+"&addMessage=" + addMessage.value);		
	}
}



/**
* Voids this order
*/
function voidOrder(url) {
	var xmlObj = getXMLObj();
	var xmlUrl = location.protocol + "//" + location.host + url;
	
	xmlObj.onreadystatechange = function() {
		if (xmlObj.readyState == 4) {
			refresh();
		}
	};

	xmlObj.open("DELETE", xmlUrl, true);
	xmlObj.send(null);
}

/*********** GENERAL SCRIPTS ************/

function fldChanged(ctrl, form_name){
 	if(ctrl.name=="billToAddress_country"){
 		updateStates(ctrl, "billTo");
 	}
 	if(ctrl.name=="shipToAddress_country"){
 		updateStates(ctrl, "shipTo");
 	}
}

function getXMLObj() {
	var xmlRetObj = null;
	if (window.XMLHttpRequest) {
		xmlRetObj = new XMLHttpRequest();
	}
	else if (window.ActiveXObject) {
		xmlRetObj = new ActiveXObject("Microsoft.XMLHTTP");
	}
	return xmlRetObj;
}

function currencyFormat(amount) {
	var i = parseFloat(amount);
	if(isNaN(i)) { i = 0.00; }
	var minus = '';
	if(i < 0) { minus = '-'; }
	i = Math.abs(i);
	i = parseInt((i + .005) * 100);
	i = i / 100;
	s = new String(i);
	if(s.indexOf('.') < 0) { s += '.00'; }
	if(s.indexOf('.') == (s.length - 2)) { s += '0'; }
	s = minus + s;
	return s;
}


function goTo(url) {
	window.location = url;
}

function refresh() {
	window.location.href = unescape(window.location.pathname);
}

function getURLParam( name )
{
  name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
  var regexS = "[\\?&]"+name+"=([^&#]*)";
  var regex = new RegExp( regexS );
  var results = regex.exec( window.location.href );
  if( results == null )
    return "";
  else
    return results[1];
}
