//@TODO: there should be a way to avoid global var to know which state combo need to be changed (Rodrigo)
var ajaxForm;
var stateList;
var postalCodeField;
var country;

function trim(str1)
{
// This function trims any given field value for blank spaces.
 var intCtr=0
 for(intCtr=0;str1.charAt(intCtr)==" ";intCtr++);
 str1=str1.substring(intCtr,str1.length);
 return str1; 
}

function checkforchar(strdate)
{
//This function checks for string values
var validdate = "abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ";
  
  var strlength = strdate.length;
  for(var i=0; i<=strlength; i++)
  {
    var unitstr = strdate.substr(i,1);
    if (validdate.indexOf(unitstr)==-1)
    {
      return false;
    }
  }

  return true;
}

function checkfornum(str1) 
{
//This function checks for numeric values
 var numstr="1234567890 ,";
 var intctr,intLen;
 intLen=str1.length;
 for(intCtr=0;intCtr <= intLen && numstr.indexOf(str1.charAt(intCtr))>=0 ;intCtr++);
 if(intCtr > intLen)
 {
 return 1;
 }
 else
 {
 return 0;
 }
}

function checkforzero(str1) 
{
//This function checks for all zero with spaces
 var numstr=" 0";
 var intctr,intLen;
 intLen=str1.length;
 for(intCtr=0;intCtr <= intLen && numstr.indexOf(str1.charAt(intCtr))>=0 ;intCtr++);
 if(intCtr > intLen)
 {
 return 1; // return true if all zero and spaces are there
 }
 else
 {
 return 0;//otherwise return false
 }
}

function validateform(form)
    {

  var text = " You entered incorrectly or forgot to fill in ::\n" ;
  
  
//Name check
      if (trim(document.contactForm.name.value) == "") {
        document.contactForm.name.focus();
        alert(text += "\nYour Name -- must be purely alphabetic and cannot be empty");
        return false
      }
      else {
        document.contactForm.name.value=trim(document.contactForm.name.value);
        if(checkforchar(document.contactForm.name.value)== 0)
        { 
          document.contactForm.name.focus();
          alert(text += "\nYour Name -- must be purely alphabetic and cannot be empty")
          return(false);
        }
      }

// Phone Number Check
  var GoodChars = "0123456789()-+ "
  var i = 0
  if (trim(document.contactForm.area_code.value)=="" || trim(document.contactForm.prefix.value)=="" || trim(document.contactForm.number.value)=="") {
    alert(text += "\nYour Phone Number -- must be a valid number")
    return false;
    
  }
  for (i =0; i <= document.contactForm.area_code.value.length -1; i++) {
    if (GoodChars.indexOf(document.contactForm.area_code.value.charAt(i)) == -1) {
      document.contactForm.area_code.focus();
      alert(text += "\nYour Phone Number -- must be a valid number")
      return false
      
    } 
  }
  for (i =0; i <= document.contactForm.prefix.value.length -1; i++) {
    if (GoodChars.indexOf(document.contactForm.prefix.value.charAt(i)) == -1) {
      document.contactForm.prefix.focus();
      alert(text += "\nYour Phone Number -- must be a valid number")
      return false
      
    } 
  }
  for (i =0; i <= document.contactForm.number.value.length -1; i++) {
    if (GoodChars.indexOf(document.contactForm.number.value.charAt(i)) == -1) {
      document.contactForm.number.focus();
      alert(text += "\nYour Phone Number -- must be a valid number")
      return false

    } 
  }


  
//Message Check
  document.contactForm.message.value=trim(document.contactForm.message.value);
  if (trim(document.contactForm.message.value) == "") {
    //document.contactForm.message.focus();
    return true;
  }
  else
  { 
    if(checkfornum(document.contactForm.message.value)==1)// i. e, it is a pure number that is invalid
    {
      document.contactForm.message.focus();
      alert(text + "\nMessage -- Incomplete");
      return(false);
    }
    qry=trim(document.contactForm.message.value);
    if(qry.length <= 2)// if it is too short
    {
      document.contactForm.message.focus();
      alert(text + "\nMessage -- Incomplete");
      return(false);
    } 
   }

return true;
}

function isDefined(variable) {
	return eval('(typeof(\''+variable+'\') != "undefined");');
}

function getStates(form, _country, states, postalcode) {
	// Disable the form
	Form.disable(form.id);

	xmlHttp=GetXmlHttpObject();
	if (xmlHttp==null) {
		alert ("Browser does not support HTTP Request")
		Form.enable(form.id);
		return
	}

	// Assign the form to global var
	ajaxForm = form;
	
	// Assign the country to global var
	country = _country;
	
	// Assign the state object to global var
	stateList = states;
	
	// Assign the postal code field
	postalCodeField = postalcode;
	
	var url = '';

	var url = 'ajax_getstates.php';
	xmlHttp.onreadystatechange=gotStates;
	
	url = url + '?country=' + country + '&';
	url = url + 'f=' + form.name + '&';
	url = url + 's=' + states;
	xmlHttp.open("GET",url,true)
	xmlHttp.send(null)
}

function gotStates() {
	var stateCombo = document.getElementById(stateList);
	
	//Clears the state combo box contents.
	for (var count = stateCombo.options.length-1; count >-1; count--) {
		stateCombo.options[count] = null;
	}
	
	if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete") {
		var response = xmlHttp.responseText;
		
		var stateNodes = response.split('-');
		
		// Add the states
		for (var count = 0; count < stateNodes.length; count++) {
			var info = stateNodes[count].split('~');
			stateCombo.options[stateCombo.length] = new Option(info[1], info[0]);
		}
		
		// Change the postal code max lenght
		if (country == 'US') {
			document.getElementById(postalCodeField).value = '';
			document.getElementById(postalCodeField).maxLength = 10;
		} else {
			document.getElementById(postalCodeField).value = '';
			document.getElementById(postalCodeField).maxLength = 7;
		}
	}
	// Enable the form
	Form.enable(ajaxForm.id);
}

function removeRowFromTable(tableID,rowID) {
	var tbl = document.getElementById(tableID);
	var rowToDelete = document.getElementById(rowID);
	//alert('rowToDelete: '+rowToDelete);
	try {
		rowToDelete.parentNode.removeChild(rowToDelete);
		//tbl.removeChild(rowToDelete);
		//alert ('deleted row??');
	} catch (ex) {
		alert(ex);
	}
}

function GetXmlHttpObject() { 
 	var objXMLHttp=null
 	
 	if (window.XMLHttpRequest) {
  		objXMLHttp=new XMLHttpRequest()
  	} else if (window.ActiveXObject) {
  		objXMLHttp=new ActiveXObject("Microsoft.XMLHTTP")
  	}
 	return objXMLHttp
}

function showAjaxMsg() {
	document.getElementById("ajax_msg").style.visibility = 'visible';
	document.getElementById("ajax_message").innerHTML = "Changing...";
}

function hideAjaxMsg() {
	document.getElementById("ajax_msg").style.visibility = 'hidden';
	document.getElementById("ajax_message").innerHTML = "";
}	

function phone_focus(current_element, next_element, prev_element, max_length, e) {
	var oCurrent = document.getElementById(current_element);
	
	if (next_element !== null) {
		var oNext = document.getElementById(next_element);
	}
	
	if (isDefined !== null) {
		var oPrevious = document.getElementById(prev_element);
	}
	
	if (!isDefined(oCurrent) || (oCurrent === null)) {
		return;
	}

	if (isDefined(oNext) && (oNext !== null)) {
		var currentLength = oCurrent.value.length;
	
		if (currentLength == max_length) {
			oNext.focus();
		}
	}

	if (isDefined(oPrevious) && (oPrevious !== null)) {
		var currentLength = oCurrent.value.length;
		if (currentLength == 0) {
			oPrevious.focus();
		}
	}
}

var BrowserDetect = {
	init: function () {
		this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
		this.version = this.searchVersion(navigator.userAgent)
			|| this.searchVersion(navigator.appVersion)
			|| "an unknown version";
		this.OS = this.searchString(this.dataOS) || "an unknown OS";
	},
	searchString: function (data) {
		for (var i=0;i<data.length;i++)	{
			var dataString = data[i].string;
			var dataProp = data[i].prop;
			this.versionSearchString = data[i].versionSearch || data[i].identity;
			if (dataString) {
				if (dataString.indexOf(data[i].subString) != -1)
					return data[i].identity;
			}
			else if (dataProp)
				return data[i].identity;
		}
	},
	searchVersion: function (dataString) {
		var index = dataString.indexOf(this.versionSearchString);
		if (index == -1) return;
		return parseFloat(dataString.substring(index+this.versionSearchString.length+1));
	},
	dataBrowser: [
		{ 	string: navigator.userAgent,
			subString: "OmniWeb",
			versionSearch: "OmniWeb/",
			identity: "OmniWeb"
		},
		{
			string: navigator.vendor,
			subString: "Apple",
			identity: "Safari"
		},
		{
			prop: window.opera,
			identity: "Opera"
		},
		{
			string: navigator.vendor,
			subString: "iCab",
			identity: "iCab"
		},
		{
			string: navigator.vendor,
			subString: "KDE",
			identity: "Konqueror"
		},
		{
			string: navigator.userAgent,
			subString: "Firefox",
			identity: "Firefox"
		},
		{
			string: navigator.vendor,
			subString: "Camino",
			identity: "Camino"
		},
		{		// for newer Netscapes (6+)
			string: navigator.userAgent,
			subString: "Netscape",
			identity: "Netscape"
		},
		{
			string: navigator.userAgent,
			subString: "MSIE",
			identity: "Explorer",
			versionSearch: "MSIE"
		},
		{
			string: navigator.userAgent,
			subString: "Gecko",
			identity: "Mozilla",
			versionSearch: "rv"
		},
		{ 		// for older Netscapes (4-)
			string: navigator.userAgent,
			subString: "Mozilla",
			identity: "Netscape",
			versionSearch: "Mozilla"
		}
	],
	dataOS : [
		{
			string: navigator.platform,
			subString: "Win",
			identity: "Windows"
		},
		{
			string: navigator.platform,
			subString: "Mac",
			identity: "Mac"
		},
		{
			string: navigator.platform,
			subString: "Linux",
			identity: "Linux"
		}
	]

};
BrowserDetect.init();

function CCNumberChanged_Update(event) {
    var CCN = $('updateBilling_CCN').value;

    var CCNId = '';

    if (CCN.substr(0, 1) == "5") {
	// Mastercard
	CCNId = 'MasterCard';
    } else if (CCN.substr(0, 1) == "4") {
	// Visa
	CCNId = 'VISA';
    }
    if (CCNId != '') {
	// Found, change the credit type select
	$('updateBilling_paymentMethod').value = CCNId;
    }
}
