// Tool Library for whatevercomputes main site
//Copywrite whatever computes Ltd.2007
//********************
// Variables
//*******************


var LIVE_SITE =  document.URL.substring(0, document.URL.indexOf(":")+3 ) + document.domain;//"http:/whatevercomputes.com";
var LIVE_SECURE_SITE = "https://secure.whatevercomputes.com";
var search_originalHTML = "";

//********************
// General Functions
//********************

// * getHTTPObject() *
// method that sets up a cross-browser XMLHttpRequest object
function getHTTPObject() {
	var http_object;

	// MSIE Proprietary method

	/*@cc_on
	@if (@_jscript_version >= 5)
		try {
			http_object = new ActiveXObject("Msxml2.XMLHTTP");
		}
		catch (e) {
			try {
				http_object = new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch (E) {
				http_object = false;
			}
		}
	@else
		xmlhttp = http_object;
	@end @*/


	// Mozilla and others method

	if (!http_object && typeof XMLHttpRequest != 'undefined') {
		try {
			http_object = new XMLHttpRequest();
		}
		catch (e) {
			http_object = false;
		}
	}

	return http_object;
}

//*******************
// OPEN SRS FUNCTIONS
// Ajax implementation of the tucows resellers tools adapted to the whatevercomputers
//*******************

//function search_domain 
// Evaluate the search from the input box on the sidebar
// 	  element - the document element, has the search criteria in .domain , we also use it to output results
function search_domain(element) {
	// keep a copy of the search box to easily replace it later
	domain_name = element.domain.value;
	element.domain.value = "";
	search_originalHTML = element.parentNode.innerHTML;
	// inform the user we are searching for domain
	element.icon.src =  LIVE_SITE + "/templates/whatever/images/load.gif";
	element.domain.disabled = true;
	element.domain.value = "Searching Domain...";

	// perform the search
	var domainHttp = getHTTPObject();
	domainHttp.open('POST', LIVE_SITE +  '/cgi-bin/reg_system.cgi');
	var	post_str = 'action=lookup&xml=true&domain=' + domain_name;
	domainHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;  charset=UTF-8"); 

	domainHttp.onreadystatechange = function() 
	{
		if(domainHttp.readyState == 4)
	    { 
			var text = domainHttp.responseText;
		// code for IE
		if (window.ActiveXObject)
		{
		  var xml=new ActiveXObject("Microsoft.XMLDOM");
		  xml.async="false";
		  xml.loadXML(text);
		  }
		// code for Mozilla, Firefox, Opera, etc.
		else
		{
		  var parser=new DOMParser();
		  var xml=parser.parseFromString(text,"text/xml");
		}
		// Generate the results message
		var message = "";
		// check for errors
		if (xml.getElementsByTagName('ERROR')[0]){ 
			message =  "<span class='alert_text'>Error:</span><br>" + xml.getElementsByTagName('ERROR')[0].childNodes[0].nodeValue + "<br>";
		}
		else
		{
			// check for matches
				// NOTE when passing to php scripts have domain[] for arrays
			var match =	xml.getElementsByTagName('match');
			if (match.length){ 
				message = "<span class='alert_text'>" + match.length + " Domains Available!</span><br>";
				// Get all the elements from the matches
				message += "<form method='post' action='"+ LIVE_SITE + "/index.php?option=com_content&task=view&id=61";
//"/cgi-bin/reg_system.cgi'>";
				message += "<input type='hidden' value='setup_profile' name='action'/>";
				message +="<input type='checkbox' name=domain[] value='" + match[0].childNodes[0].nodeValue + "' checked>" + match[0].childNodes[0].nodeValue + "<br>";
				for(var i = 1; i < match.length; i++)
					message +="<input type='checkbox' name=domain[] value='" + match[i].childNodes[0].nodeValue + "'>"+ match[i].childNodes[0].nodeValue+ "<br>";
				message += "<center><input type='submit' value='Reserve Now' /></center></form>";
			}	
			else
			{
				message = "<span class='alert_text'>Unavailable</span><br>SORRY! That Domain is unavailable, please try again.";
			}
		}	
		
		// Output the results
		message += "<br><center><input type='button' value='Search Another' onClick='restore_searchHTML(this.parentNode.parentNode);' /></center>";		
		element.parentNode.innerHTML = message;
		matchColumns();
	  }
	}
	domainHttp.send(post_str);
	return false;
}

// Restore the HTML on the sidebar for the search
function restore_searchHTML(element)
{
	element.innerHTML = search_originalHTML;
	matchColumns();	
}

/***************************************************
Signup Script Functions
***************************************************/

function check_hosting_type(element)
{
    // check there is a value in the domains
    if (element.ddomain.value == "")
	{
		alert("You must enter a domain name to proceed!");
		return false;
	}
	// change action based on option selected
	if ( element.hosting[0].checked )
	{
		element.action = '/cgi-bin/reg_system.cgi';
		var newinput = document.createElement('input');
  		newinput.setAttribute('name','action');
  		newinput.setAttribute('value','lookup');
  		newinput.setAttribute('type','hidden');
   		element.appendChild(newinput);

		newinput = document.createElement('input');
  		newinput.setAttribute('name','domain');
  		newinput.setAttribute('value',element.ddomain.value);
  		newinput.setAttribute('type','hidden');
   		element.appendChild(newinput);
	}
	else
	{
		element.action = 'index.php?option=com_content&task=view&id=58';
	}  
	return true;
}

var pricelist_xml;

function load_pricelist_xml()
{

	var requestHttp = getHTTPObject();
	requestHttp.open('GET',"/prices.xml",false);
	requestHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;  charset=UTF-8"); 
	requestHttp.send(null);
	if (requestHttp.status == 200) {
		if(requestHttp.readyState == 4)
	    { 
			var text = requestHttp.responseText;
	
		// code for IE
			if (window.ActiveXObject)
			{
			  var xml=new ActiveXObject("Microsoft.XMLDOM");
			  xml.async="false";
			  xml.loadXML(text);
			 }
			// code for Mozilla, Firefox, Opera, etc.
			else
			{
			  var parser=new DOMParser();
			  var xml=parser.parseFromString(text,"text/xml");
			}
			pricelist_xml = xml;
		}
	}	

}

// Price retrieval
function get_domain_price(domain)
{
	if (pricelist_xml == null) load_pricelist_xml();
	var  price = 	pricelist_xml.getElementsByTagName(domain)[0].getElementsByTagName('price')[0].childNodes[0].nodeValue ;
	return price;
}

// Extras
function get_extras_categories()
{
	if (pricelist_xml == null) load_pricelist_xml();
	var cat_list = new Array();
	
	var extras = pricelist_xml.getElementsByTagName('extras')[0];
	var count = 0;
	for(var i =	0; i < extras.childNodes.length;i++)
	{
		if(extras.childNodes[i].tagName)
		{
			var extra_values = new Array();
			extra_values['tagName'] = extras.childNodes[i].tagName;
			extra_values['name'] = extras.childNodes[i].getElementsByTagName('name')[0].childNodes[0].nodeValue;
			extra_values['description'] = extras.childNodes[i].getElementsByTagName('description')[0].childNodes[0].nodeValue;
			cat_list[count] = extra_values;
			count++;
		}
	}
	return cat_list;
}

function get_extras(category)
{
	if (pricelist_xml == null) load_pricelist_xml();
	var extras_list = new Array();

	var extras = pricelist_xml.getElementsByTagName(category)[0].getElementsByTagName('values')[0];
	var value_count = 0;
	for (var i = 0; i < extras.childNodes.length;i++)
	{
		if (extras.childNodes[i].tagName)
		{
			if (extras.childNodes[i].hasChildNodes())
			{
				extras_list[value_count] = get_extra(category,extras.childNodes[i].tagName);//values;
				value_count++;
			}
		}
	}
	return extras_list;
}

function get_extra(category,extra_name)
{
	var extraNodes = pricelist_xml.getElementsByTagName(category)[0].getElementsByTagName('values')[0].getElementsByTagName(extra_name)[0].childNodes;
	var values = new Array();
	for(var i=0;i < extraNodes.length; i++)
	{
		if (extraNodes[i].tagName)
		{
			values[extraNodes[i].tagName ] = extraNodes[i].childNodes[0].nodeValue;
		}
	}
	values['tagName'] = extra_name;
	return values;
}

// Packages
function get_package_info(package_name)
{	
	if (pricelist_xml == null) load_pricelist_xml();

	var  package = 	pricelist_xml.getElementsByTagName(package_name)[0];//.getElementsByTagName('price')[0].childNodes[0].nodeValue ;
	if (package.hasChildNodes())
	{
		var package_info = new Array();
		//get all the tags
		for (i = 0; i < package.childNodes.length;i++)
		{ 
			if (package.childNodes[i].tagName)
			{
				var tag_name =package.childNodes[i].tagName;//] = /.getElementsByTagName('price')[0].childNodes[0].nodeValue 
				var node =package.getElementsByTagName(tag_name)[0].childNodes[0];
				var node_text = "";
				if (node) node_text = node.nodeValue;
			    package_info[tag_name] = node_text;
			}	
		}
		return package_info;
	}
}

// Domain Management Setup
function validate_profile(username,domain,password,return_elem)
{
	// update loading
	loading_html = "<image src='"+ LIVE_SECURE_SITE + "/templates/whatever/images/load.gif" + "' /> Verifying login information...<br/>";
	return_elem.innerHTML = loading_html;
	
	// perform the search
	var profileHttp = getHTTPObject();
	profileHttp.open('POST',  'https://secure.whatevercomputes.com/cgi-bin/reg_system.cgi');
	var	post_str = 'action=get_user_info&xml=true' 
				    + "&reg_username=" + username 
					+ "&reg_password=" + password 
					+ "&confirm_password=" + password
					+ "&reg_domain=" + domain;
	profileHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;  charset=UTF-8"); 
	profileHttp.onreadystatechange = function() 
	{
		if(profileHttp.readyState == 4)
	    { 
			var text = profileHttp.responseText;
			// code for IE
			if (window.ActiveXObject)
			{
			  var xml=new ActiveXObject("Microsoft.XMLDOM");
			  xml.async="false";
			  xml.loadXML(text);
			  }
			// code for Mozilla, Firefox, Opera, etc.
			else
			{
			  var parser=new DOMParser();
			  var xml=parser.parseFromString(text,"text/xml");
			}
			// Generate the results message
			var message = "";
			// check for errors
			if (xml.getElementsByTagName('ERROR')[0]){ 
				return_elem.innerHTML  = "<image src='"+ LIVE_SECURE_SITE + "/templates/whatever/images/alert_icon.gif" + "' align=middle/>" +  xml.getElementsByTagName('ERROR')[0].childNodes[0].nodeValue + "<br/>";
			}
			else
			{
				xml = xml.childNodes[0];
				for (i = 0; i < xml.childNodes.length;i++)
				{
					if (xml.childNodes[i].tagName)
					{
						message += "<input type='hidden' name='" +xml.childNodes[i].tagName + "' value='";
						if (xml.childNodes[i].hasChildNodes()) message += xml.childNodes[i].childNodes[0].nodeValue;
						message	+= "'/><br/>";
								}
				}
				return_elem.innerHTML = message;
				return_elem.parentNode.submit();
			}
		}
	}
	profileHttp.send(post_str);
}

// Validate Purchase
function validate_purchase()
{
	// check to make sure all items are not null
	for(var i =0; i < document.purchase_form.length;i++)
	{
		if ((document.purchase_form[i].value =='') && (document.purchase_form[i].type != 'hidden'))
		{
			alert("Error! Field cannot be empty!" );
			return false;
		}
	}

	// check for valid phone number
	rePhoneNumber = new RegExp(/^\+[1-9]\.\d{10}(\x\d{1,4})?$/);
    if (!rePhoneNumber.test(document.purchase_form.billing_phone.value)) {
    	alert("Phone Number Must Be Entered As: +1.5555551234x1234");
		return false;
	}
	
	// check email
	reEmail = new RegExp(/^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/);	
	if (!reEmail.test(document.purchase_form.billing_email.value))
	{
		alert("Invalid email address!");
		return false;
	}

	// check credit card 
	var re = "";
	switch (document.purchase_form.Method.value)
	{
		case 'V': 
			 re = /^4\d{3}-?\d{4}-?\d{4}-?\d{4}$/;
		  	 break;
		case 'M':
			re = /^5[1-5]\d{2}-?\d{4}-?\d{4}-?\d{4}$/;
			break;
		case 'A':
			re = /^3[4,7]\d{13}$/;
			break;
	}	
	
	reCC = new RegExp(re);
	if (!reCC.test(document.purchase_form.CCard.value))
	{
		alert("Invalid credit card!");
		return false;
	}

	// Check CC date
	var today = new Date();
	if ( (document.purchase_form.Year.value < today.getFullYear()) || 
		 ( (document.purchase_form.Year.value == today.getFullYear()) && (document.purchase_form.Month.value < today.getMonth() +1 ) ) )
	{
		alert("Invalid expiration date!");
		return false;
	}

	return true;

} 
