/* - - - - - - - - - - - - - - - - - - - - -

Title : 		
Author : 		Strangefruit.nl, Muriel le Pair
URL : 			http://www.strangefruit.nl

Description : 	

Created : 	
Modified : 	

- - - - - - - - - - - - - - - - - - - - - */
   //<![CDATA[
self.onerror = function() { return true; }
//]]>


var xmlHttp = createXmlHttpRequestObject(); // holds an instance of XMLHttpRequest
var serverAddress = "include/js/order_calculation.php"; // holds the remote server address 
var showErrors = true; // when set to true, display detailed error messages
var cache = new Array(); // initialize the validation requests cache 

// creates an XMLHttpRequest instance
function createXmlHttpRequestObject() {
  
	var xmlHttp; // will store the reference to the XMLHttpRequest object
  
	try  {// this should work for all browsers except IE6 and older
    
    	xmlHttp = new XMLHttpRequest();// try to create XMLHttpRequest object
  
  	} catch(e) { // assume IE6 or older
    
    	var XmlHttpVersions = new Array("MSXML2.XMLHTTP.6.0",
                                    	"MSXML2.XMLHTTP.5.0",
                                    	"MSXML2.XMLHTTP.4.0",
                                    	"MSXML2.XMLHTTP.3.0",
                                    	"MSXML2.XMLHTTP",
                                    	"Microsoft.XMLHTTP");
    	
    	for (var i=0; i<XmlHttpVersions.length && !xmlHttp; i++) {// try every id until one works
    		try  { 
        		xmlHttp = new ActiveXObject(XmlHttpVersions[i]); // try to create XMLHttpRequest object
      		} catch (e) {} // ignore potential error
    	}
  	}
  	
  	if (!xmlHttp)
    	displayError("Error creating the XMLHttpRequest object."); // return the created object or display an error message
  	else 
    	return xmlHttp;
	
}

// function that displays an error message
function displayError($message) {
  
	if (showErrors)  {// ignore errors if showErrors is false
    
    	showErrors = false; // turn error displaying Off
    	//alert("Error encountered: \n" + $message); // display error message
    	setTimeout("validate();", 10000);// retry validation after 10 seconds
  	}
}

// the function handles the validation for any form field
function validate(input, fieldid) {
  
  if (input == 'getvalue') {
	  
	fieldid = document.getElementById('customer_country').value; // custmerid 
	if (fieldid == '' || fieldid == 0) 
		fieldid = document.getElementById('country').value;  
	if (fieldid == '' || fieldid == 0) 
		fieldid = 'q';
  }
  
  if (xmlHttp) { // only continue if xmlHttp isn't void

    if (fieldid) { // if we received non-null parameters, we add them to cache in the // form of the query string to be sent to the server for validation
      
      input = encodeURIComponent(input); // encode values for safely adding them to an HTTP request query string
      fieldid = encodeURIComponent(fieldid); 
      cache.push("input=" + input + "&fieldid=" + fieldid); // add the values to the queue
   	}
    
	try  { // try to connect to the server
     
   		if ((xmlHttp.readyState == 4 || xmlHttp.readyState == 0) && cache.length > 0) { // continue only if the XMLHttpRequest object isn't busy // and the cache is not empty
      
      		var cacheEntry = cache.shift();  // get a new set of parameters from the cache
        
        	xmlHttp.open("POST", serverAddress, true); // make a server request to validate the extracted data
        	xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
			xmlHttp.onreadystatechange = handleRequestStateChange;
        	xmlHttp.send(cacheEntry);
      	}
    } catch (e) { // display an error when failing to connect to the server
     
      	displayError(e.toString()); 
    }
  }
}

// function that handles the HTTP response
function handleRequestStateChange() {

	if (xmlHttp.readyState == 4)   {  // when readyState is 4, we read the server response
    
    	if (xmlHttp.status == 200)  { // continue only if HTTP status is "OK"
      		try { // read the response from the server
        		readResponse();
      		} catch(e) {
        		displayError(e.toString());// display error message
      		}
    	}  else  { // display error message
      		displayError(xmlHttp.statusText); 
    	}
  	}
}

function readResponse() { // read server's response 
   
	var response = xmlHttp.responseText;// retrieve the server's response
  	// server error?
	/*
  	if (response.indexOf("ERRNO") >= 0 || response.indexOf("error:") >= 0 || response.length == 0)
    	throw(response.length == 0 ? "Server error." : response);
  	*/
  	responseXml = xmlHttp.responseXML; // get response in XML format (assume the response is valid XML)
  	// get the document element
  	xmlDoc = responseXml.documentElement;
  	fieldid = xmlDoc.getElementsByTagName("fieldid")[0].firstChild.data;
	eu_shippingcosts =  xmlDoc.getElementsByTagName("eu_shipping")[0].firstChild.data;
	us_shippingcosts =  xmlDoc.getElementsByTagName("us_shipping")[0].firstChild.data;
	if (eu_shippingcosts == 0) 
		eu_shippingcosts = 0; // zorg dat oude informatie verdwijnt
	if (us_shippingcosts == 0) 
		us_shippingcosts = 0; // zorg dat oude informatie verdwijnt
		
  	var eu_shipping = document.getElementById('eu_shipping').value = '€ ' + eu_shippingcosts;
	var us_shipping = document.getElementById('us_shipping').value = '$ ' + us_shippingcosts;
	var amount_redtubes = document.getElementById('amount_meltfit_tubes_red').value;
	var amount_bluetubes = document.getElementById('amount_meltfit_tubes_blue').value;
	
	if(isNaN2(amount_redtubes) ) { // verander letter in 1
		var eu_price_redtubes = document.getElementById('eu_price_meltfit_tubes_red').value * 1;
		var us_price_redtubes = document.getElementById('us_price_meltfit_tubes_red').value * 1;
		document.getElementById('amount_meltfit_tubes_red').value = 1;
	} else {
		var eu_price_redtubes = document.getElementById('eu_price_meltfit_tubes_red').value * amount_redtubes;
		var us_price_redtubes = document.getElementById('us_price_meltfit_tubes_red').value * amount_redtubes;;
	}
	if(isNaN2(amount_bluetubes) ) { // verander letter in 1
		var eu_price_bluetubes = document.getElementById('eu_price_meltfit_tubes_blue').value * 1;
		var us_price_bluetubes = document.getElementById('us_price_meltfit_tubes_blue').value * 1;
		document.getElementById('amount_meltfit_tubes_blue').value = 1;
	} else {
		var eu_price_bluetubes = document.getElementById('eu_price_meltfit_tubes_blue').value * amount_bluetubes;
		var us_price_bluetubes = document.getElementById('us_price_meltfit_tubes_blue').value * amount_bluetubes;
	}
	var eu_subtotal = Number(eu_shippingcosts) + Number(eu_price_redtubes) + Number(eu_price_bluetubes);
	var us_subtotal = Number(us_shippingcosts) + Number(us_price_redtubes) + Number(us_price_bluetubes);
	
	document.getElementById('calc_eu_price_meltfit_tubes_blue').value = '€ ' + eu_price_bluetubes;
	document.getElementById('calc_eu_price_meltfit_tubes_red').value = '€ ' + eu_price_redtubes;
	document.getElementById('eu_subtotal').value = '€ ' + eu_subtotal;
	
	document.getElementById('calc_us_price_meltfit_tubes_blue').value = '$ ' + us_price_bluetubes;
	document.getElementById('calc_us_price_meltfit_tubes_red').value = '$ ' + us_price_redtubes;
	document.getElementById('us_subtotal').value = '$ ' + us_subtotal;

	if (eu_shippingcosts == 10) { // nederland dus btw
		var eu_vat =  (Number(eu_subtotal)/100) * 19;	
		var us_vat =  (Number(us_subtotal)/100) * 19;
		document.getElementById('eu_vat').value = '€ ' + Math.round(100*eu_vat)/100; 
		document.getElementById('us_vat').value = '$ ' + Math.round(100*us_vat)/100; 
	} else {
		var eu_vat = Number(0);
		var us_vat = Number(0);
		document.getElementById('eu_vat').value = eu_vat;
		document.getElementById('us_vat').value = us_vat;
	}
	var eu_totaal = Number(eu_subtotal) + Number(eu_vat);
	document.getElementById('eu_total').value = '€ ' + Math.round(100*eu_totaal)/100; ;	
	
	var us_totaal = Number(us_subtotal) + Number(us_vat);
	document.getElementById('us_total').value = '$ ' + Math.round(100*us_totaal)/100; ;	
	
	
	//changeid.innerHTML = tekst;
  	setTimeout("validate();", 250);
}
function isNaN2(sText) {
	
	if(isNaN(sText)) {
		return true;
	}

	var ValidChars = "0123456789.";
	var IsNumber=true;
	var Char;
	for (i = 0; i < sText.length && IsNumber == true; i++)	{
		Char = sText.charAt(i);
		if (ValidChars.indexOf(Char) == -1)
		{
			IsNumber = false;
		}
	}

	return !IsNumber;
}


function calculate_ownership() { 
   

  	var number_gc_systems = document.getElementById('number_gc_systems').value; // input
	var number_connections = document.getElementById('number_connections').value; // input
	var current_price = document.getElementById('current_price').value;
	
	var price_meltfit = document.getElementById('price_meltfit').value;
	var price_melttube = document.getElementById('price_melttube').value;
	var lifetime = document.getElementById('lifetime').value;
	
	var price_failed_connection = document.getElementById('price_failed_connection').value; //input
	var problems_current = document.getElementById('problems_current').value; //input
	var problems_meltfit = document.getElementById('problems_meltfit').value; // input
	
	
	if(isNaN2(number_gc_systems) ) { // verander letter in 1
		number_gc_systems = 1;
		document.getElementById('number_gc_systems').value = number_gc_systems;
	}
	if(isNaN2(number_connections) ) { // verander letter in 1
		number_connections = 1;
		document.getElementById('number_connections').value = number_connections;
	}
	if(isNaN2(current_price) ) { // verander letter in 1
		current_price = 4.40;
		document.getElementById('current_price').value = current_price;
	}
	if(isNaN2(price_failed_connection) ) { // verander letter in 1
		price_failed_connection = 1000;
		document.getElementById('price_failed_connection').value = price_failed_connection;
	}
	if(isNaN2(problems_current) ) { // verander letter in 1
		problems_current = 5;
		document.getElementById('problems_current').value = problems_current;
	}
	if(isNaN2(problems_meltfit) ) { // verander letter in 1
		problems_meltfit = 25;
		document.getElementById('problems_meltfit').value = problems_meltfit;
	}
	
	
	var total_current = (Number(number_gc_systems)*Number(number_connections)*Number(current_price) ) + 
						( (Number(number_gc_systems)*Number(number_connections) / Number(problems_current) ) * Number(price_failed_connection) );
						
	
	var total_meltfit = (Number(number_gc_systems)*Number(number_connections)*Number(price_melttube) ) + 
						( (Number(number_gc_systems)*Number(number_connections) / Number(problems_meltfit) ) * price_failed_connection)+ 
						(Number(price_meltfit)/Number(lifetime) );
	
	var total_current_connection = Number(total_current) / (Number(number_gc_systems)*Number(number_connections));
	var total_meltfit_connection = Number(total_meltfit) / (Number(number_gc_systems)*Number(number_connections));
	
	var price_meltfit = document.getElementById('price_meltfit').value;
	var payback_price = Number(price_meltfit) / (total_current_connection - total_meltfit_connection);
	
	document.getElementById('total_current').value = '€ ' + Math.round(100*total_current)/100;
	document.getElementById('total_meltfit').value = '€ ' + Math.round(100*total_meltfit)/100; 
	document.getElementById('total_current_connection').value = '€ ' +  Math.round(100*total_current_connection)/100;
	document.getElementById('total_meltfit_connection').value = '€ ' +  Math.round(100*total_meltfit_connection)/100;
	document.getElementById('payback_price').value = Math.round(10*payback_price)/10;
}