



var request = null;
var ajax_loading_img = new Image(); // Preload image
ajax_loading_img.src = "/ajaxparser/loading_circle.gif";

function TrimString(sInString) // Trim String function
{
  sInString = sInString.replace( /^\s+/g, "" );// strip leading
  return sInString.replace( /\s+$/g, "" );// strip trailing
}

function empty_element(domNode){
	while(domNode.childNodes.length > 0){
		domNode.removeChild(domNode.childNodes[0]);
	}
}


function create_google_loading(loading_text, status_div_id){
	
	if( !status_div_id )
		var status_div_id = "google_checkout_status";
	
	var status_div = document.getElementById(status_div_id);
	var loading_img = document.createElement("img");
	var loading_text = document.createTextNode(" " + loading_text);
	loading_img.src = ajax_loading_img.src;	
	empty_element(status_div);
	status_div.appendChild(loading_img);
	status_div.appendChild(loading_text);
}


function create_google_error_msg(msg, status_div_id){
	
	if( !status_div_id )
		var status_div_id = "google_checkout_status";
	
	var status_div = document.getElementById(status_div_id);
	var status_span = document.createElement("a");
	status_span.className = "tableerror";
	var status_text = document.createTextNode(msg);
	status_span.appendChild(status_text);
	empty_element(status_div);
	status_div.appendChild(status_span);
}

function createRequest() {
	try {
		request = new XMLHttpRequest();
	} catch (trymicrosoft) {
		try {
			request = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (othermicrosoft) {
			try {
				request = new ActiveXObject("Microsoft.XMLHTTP");
			} catch (failed) {
				request = null;
			}
		}
	}
}


function google_cart_request(form_name, status_div_id){
	
	if( !form_name )
		var form_name = "MainForm1";
	if( !status_div_id )
		var status_div_id = "google_checkout_status";
	
	createRequest();
	if( request != null ) {
		var url = "google_checkout_ajax.cfm?RequestTimeout=600&dummy=" + new Date().getTime();
		request.open("GET", url, true);
		//request.onreadystatechange = update_google_cart;
		request.onreadystatechange = function(){update_google_cart(form_name,status_div_id);}; 
		request.send(null);
		
		
		 
		create_google_loading("Preparing information for Google...", status_div_id);
	}
	else {
		// Not support Ajax, use manual.
		window.location = "google_checkout.cfm?RequestTimeout=600";
	}
}


function update_google_cart(form_name, status_div_id){
	if(request.readyState == 4){
		var response_valid = false;
		if (request.status == 200) {
			
			if( !form_name )
				var form_name = "MainForm1";
			if( !status_div_id )
				var status_div_id = "google_checkout_status";
			
			var response_xml = request.responseXML;
			var google_checkout = response_xml.getElementsByTagName("google-checkout");
			if(google_checkout.length > 0){
				try {
					var cart_status_tag = google_checkout[0].getElementsByTagName("cart-status");
					var cart_status = TrimString(cart_status_tag[0].firstChild.nodeValue).toLowerCase();
					if( cart_status == "success" ){
						var cart_value_tag = google_checkout[0].getElementsByTagName("cart-value");
						var cart_value = "";
						for( var i=0; i<cart_value_tag[0].childNodes.length; i++ ){
							cart_value = cart_value + cart_value_tag[0].childNodes[i].nodeValue;
						}
						cart_value = TrimString(cart_value);
						var signature_tag = google_checkout[0].getElementsByTagName("signature");
						var signature = TrimString(signature_tag[0].firstChild.nodeValue);
						eval("document." + form_name + ".cart.value = cart_value;");
						eval("document." + form_name + ".signature.value = signature;");
						
						
						
						eval("document." + form_name + ".target = '_top';");
						eval("document." + form_name + ".submit();");
						response_valid = true;
						
						
						
						create_google_loading("Loading Google Checkout...", status_div_id);
					}
					else if( cart_status == "fail" ){
						var fail_type = google_checkout[0].getElementsByTagName("fail-type");
						if( fail_type.length > 0 ){
							try {
								switch( fail_type[0].firstChild.nodeValue ){
									case "cart_empty"	:	window.location = "show_cart.cfm";
															var status_div = document.getElementById(status_div_id);
															empty_element(status_div);
															break;
								}
								response_valid = true;
							}
							catch(error) {
							}
						}
						else {
							response_valid = true;
							
							
							
							create_google_error_msg("Sorry, but you can't check out with your current cart contents using Google Checkout.", status_div_id);
						}
					}
				}
				catch (error){
				}
			}
			else{
				try {
					var taconite_root = response_xml.getElementsByTagName("taconite-root");
					if( taconite_root.length > 0 ) {
						var taconite_redirect = taconite_root[0].getElementsByTagName("taconite-redirect");
						if( taconite_redirect.length > 0 ) {
							var redirect_url = taconite_redirect[0].getElementsByTagName("url");
							if( redirect_url.length > 0 ) {
								var d_url = "";
								for( var i=0; i<redirect_url[0].childNodes.length; i++ ) {
									d_url = d_url + redirect_url[0].childNodes[i].nodeValue;
								}
								d_url = TrimString(d_url);
								window.location = d_url;
								response_valid = true;
								var status_div = document.getElementById(status_div_id);
								empty_element(status_div);
							}
						}
					}
				}
				catch (error) {
				}
			}
		}
		if( !response_valid ){
			
			
			
			create_google_error_msg("Connection failed while preparing information for Google. Please try again.", status_div_id);
		}
	}
}



