var req = false;
var req2 = false;
var loaded = false;
// global flag
var isIE = false;
var places_list = new Array();
var asynch = true;

String.prototype.trim = function() { return this.replace(/^\s+|\s+$/, ''); };

/***********************************************************
* function		init
* purpose
***********************************************************/
function init()
{
	document.getElementById("signup_form").elements[0].focus();
}

/***********************************************************
* function		checkUsername
* purpose
***********************************************************/
function checkUsername()
{
	var check_user = String(document.getElementById("username").value);
	loaded = false;
	var url = "signup_check_username.php?user=" + check_user;
	if (check_user.trim() != "")
	{
		loadXMLDoc(url);
	}
	else
	{
		msgbox = document.getElementById("show_username_availability");
		msgbox.innerHTML = "Please enter a valid username!";
		msgbox.style.color = "#990000";
		document.getElementById("username").value = "";
		document.getElementById("username_valid").value = 0;
		
	}
}

/***********************************************************
* function		validateUsername
* purpose
***********************************************************/
function validateUsername()
{
	var msgbox = document.getElementById("show_username_availability");
	var result = "no";
	var msg = "";
	var ret = false;
	
	if (loaded)
	{
		//result = req.toString();
		result = req.responseXML.getElementsByTagName("valid");
		result = result[0].childNodes[0].data;
		//result = getElementTextNS("", "valid", result, 0);
	}	
	if (result == "yes")
	{
		msg = "Username is available!";	
		msgbox.style.color = "#009900";
		document.getElementById("username").className = "username_valid";
		/*document.getElementById("username").style.color = "inherit";
		document.getElementById("username").style.fontWeight = "normal";*/
		document.getElementById("username_valid").value = 1;
		ret = true;
	}
	else
	{
		msg = "Username is already in use. Please select another!";
		msgbox.style.color = "#990000";
		document.getElementById("username").className = "username_invalid";
		/*document.getElementById("username").style.color = "#990000";
		document.getElementById("username").style.fontWeight = "bold";*/
		document.getElementById("username_valid").value = 0;
	}
	msgbox.innerHTML = msg;
	return ret;
	
}

/***********************************************************
* function		resetUsernameBox
* purpose
***********************************************************/
function resetUsernameBox()
{
	if (document.getElementById("username").style.fontWeight == "bold")
	{
		document.getElementById("username").style.color = "inherit";
		document.getElementById("username").style.fontWeight = "normal";
	}
}

/***********************************************************
* function		checkPasswords
* purpose
***********************************************************/
function checkPasswords()
{
	var ret = false;
	var pass1 = document.getElementById("password");
	var pass2 = document.getElementById("verify_password");
	var nomatch = document.getElementById("passwords_do_not_match");
	var prevpass = parseInt(document.getElementById("prevpass").value);
	
	if (pass1.value != pass2.value)
	{
		nomatch.innerHTML = "Passwords do not match, please retype your password.";	
		pass2.focus();
		//pass2.select();
	}
	else if(pass1.value == "" && prevpass == 0)
	{
		nomatch.innerHTML = "Please type a valid password";	
		pass1.focus();
	}
	else
	{
		nomatch.innerHTML = "";
		ret = true;
	}
	return ret;
}

/***********************************************************
* function		setCompletionAction
* purpose
***********************************************************/
function setCompletionAction()
{
	var pay_meth = parseInt(document.getElementById("payment_method").value);
	var act = "";
	if (pay_meth == 1)
	{
		act = "signup_complete.php?type=free";
	}
	else if(pay_meth == 2)
	{
		act = pp_url;
	}
	else if(pay_meth == 3)
	{
		act = "signup_complete.php?type=invoice";
	}
	document.getElementById("signup_form_1").action = act;
	document.getElementById("signup_form_2").action = act;
}

/***********************************************************
* function		validate1
* purpose
***********************************************************/
function validateReseller()
{
	asynch = false;
	document.getElementById("username").blur();
	setTimeout("validateResellerHelper()", 100);
}

/***********************************************************
* function		validate1
* purpose
***********************************************************/
function validateResellerHelper()
{

	var usr = (document.getElementById("username_valid").value == "1");	
	var det = true;
	var ret = false;
	
	var elems = new Array("client_business_name", "username", "user_password");
	for(ctr = 0; ctr < elems.length; ctr ++)
	{
			
		val = document.getElementById(elems[ctr]).value;
		req = parseInt(document.getElementById(elems[ctr]).getAttribute("required"));
		if (val == "" && req == 1)
		{	
			val = val.trim();
			document.getElementById("lbl_" + elems[ctr]).style.color = "#990000";
			document.getElementById("lbl_" + elems[ctr]).style.fontWeight = "bold";
			det = false;
		}
		else
		{
			document.getElementById("lbl_" + elems[ctr]).style.color = "#000000";
			document.getElementById("lbl_" + elems[ctr]).style.fontWeight = "normal";	
		}
	}		
	ret = usr && det;
	if (ret == false)
	{
		alert("Please correct all errors highlighted in red and try again");	
	}
	else
	{
		document.getElementById("signup_form").submit();	
	}
	asynch = true;
	return ret;
}

/***********************************************************
* function		validate1
* purpose
***********************************************************/
function validate1()
{
	//business_name] => [first_name] => [last_name] => [address] => [city] => [province] => [postcode] => 
	// [country] => [phone] => [cell_phone] => [email] => [bbb_member_at_signup]
	var eml = verifyEmail();
	var psw = checkPasswords();
	var usr = (document.getElementById("username_valid").value == "1");
	
	var ret = psw && usr && eml;
	return ret;
}

/***********************************************************
* function		validate2
* purpose
***********************************************************/
function validate2()
{
	var elems = new Array("business_name", "first_name", "last_name",
						  "address", "city", "region", "postcode",
						  "country", "phone");
	var ret = true;
	var ctr = 0;
	var val = "";
	var req = 0;
	
	for(ctr = 0; ctr < elems.length; ctr ++)
	{
		if (document.getElementById("acc_type").value == "1" && ctr == 0) 
		{
			ctr ++;
		}
		
		val = document.getElementById(elems[ctr]).value;
		req = parseInt(document.getElementById(elems[ctr]).getAttribute("required"));
		if (val == "" && req == 1)
		{	
			val = val.trim();
			document.getElementById("lbl_" + elems[ctr]).style.color = "#990000";
			document.getElementById("lbl_" + elems[ctr]).style.fontWeight = "bold";
			ret = false;
		}
		else
		{
			document.getElementById("lbl_" + elems[ctr]).style.color = "#000000";
			document.getElementById("lbl_" + elems[ctr]).style.fontWeight = "normal";	
		}
	}	
	
	// now check the six conditions
	var elem;
	var conds = true;
	for(ctr = 1; ctr < 7; ctr ++)
	{
		elem = document.getElementById("agreement" + ctr + "_yes");
		if (! elem.checked)
		{
			conds = false;
			document.getElementById("lbl_quality_assurance").style.color = "#990000";
			document.getElementById("lbl_quality_assurance").style.fontWeight = "bold";
			ret = false;
		}
	}	
	
	return ret;
	
}

/***********************************************************
* function		prev2
* purpose
***********************************************************/
function validate3()
{
	var ret = document.getElementById("check_user_agreement").checked;
	
	if (! ret)
	{	
		document.getElementById("lbl_user_agreement").style.color = "#990000";
		document.getElementById("lbl_user_agreement").style.fontWeight = "bold";
	}
	else
	{
		document.getElementById("lbl_user_agreement").style.color = "#000000";
		document.getElementById("lbl_user_agreement").style.fontWeight = "normal";	
	}
	
	return ret;
}
/*
function validate4()
{
	var amt = 0;
	var paypl = 1;
	
	// check base subscription price before extras and set the form (subscription or regular cart) to submit
	if (elem("payment_1").checked)
	{
		amt = 9.25;
		paypl = 2;
	}
	else if (elem("payment_2").checked)
	{
		amt = 99;
	}
	else if (elem("payment_3").checked)
	{
		amt = 149;
	}

	// now check the extras
	if (! elem("payment_6").disabled && elem("payment_6").checked)
	{
		amt += 99;
	}
	if (! elem("payment_7").disabled && elem("payment_7").checked)
	{
		amt += 99;
	}

	
	// now set the correct form to submit
	var frmsub = "signup_form_" + paypl;
	if (paypl == 1)
	{
		elem("amount_1").value = amt;
	}
	else
	{
		elem("a3").value = amt;	
	}
	
	//alert("Amount: " + amt + "\nForm: " + frmsub);
	completeSignup();
	document.getElementById(frmsub).submit();	
	
}
*/

function validateBBBMember(val)
{
	var price = "149.00";
	if (elem("account_type").value == 3)
	{
		price = "249.00";
		if (elem("bbb_credit_yes").checked)
		{
			price = "149.00";	
		}
	}
	elem("amount_1").value = price;
	elem("membership_cost").innerHTML = price;
}

/***********************************************************
* function		validate4
* purpose
***********************************************************/
function validate4()
{
	completeSignup();
	document.getElementById("signup_form_1").submit();
}

/***********************************************************
* function		checkAccountTypes4
* purpose
***********************************************************/
function checkAccountTypes4(obj)
{
	var avopts = new Array(true, true, false);
	var avlbls = new Array("disabled", "disabled", "");
	
	if (obj.id != "payment_1")
	{	
		avopts[0] = false;
		avlbls[0] = "";
		avopts[1] = false;
		avlbls[1] = "";
	}
	
	document.getElementById("payment_6").disabled = avopts[0];
	document.getElementById("payment_7").disabled = avopts[1];
	/*document.getElementById("payment_8").disabled = avopts[2];*/
	document.getElementById("lbl_6").className = avlbls[0];
	document.getElementById("lbl_7").className = avlbls[1];
	/*document.getElementById("lbl_8").className = avlbls[2];*/
	
}

/***********************************************************
* function		prev2
* purpose
***********************************************************/
function prev2()
{
	document.getElementById("signup_form").action = "signup_step1.php?prev=1";
	document.getElementById("signup_form").submit();
}
/***********************************************************
* function		prev3
* purpose
***********************************************************/
function prev3()
{
	document.getElementById("signup_form").action = "signup_step2.php?prev=1";
	document.getElementById("signup_form").submit();
}
/***********************************************************
* function		prev4
* purpose
***********************************************************/
function prev4()
{
	document.getElementById("signup_form").action = "signup_step3.php?prev=1";
	document.getElementById("signup_form").submit();
}



function verifyEmail()
{
	var email = document.getElementById("email").value;
	var lbl = document.getElementById("bad_email");

	var filter  = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
	var eml = true;
	if (email.trim() != "" &&  filter.test(email))
	{
		lbl.innerHTML = "";
	}
	else
	{
		lbl.innerHTML = "Please enter a valid email address";
		eml = false;
	}
	return eml;
}
/**************************************************
* function		completeSignup
*
**************************************************/
function completeSignup()
{
	var xml = getXML("create_account.php");
	//window.open("create_account.php", "_create_account");
	//document.forms[1].submit();
	return true;
}

/***********************************************************
* function		getPlaces
* purpose
***********************************************************/
function getXML(url)
{
	
	// branch for native XMLHttpRequest object
    if (window.XMLHttpRequest) 
	{
		isIE = false;
        req2 = new XMLHttpRequest();
        req2.onreadystatechange = doNothing;
        req2.open("GET", url, false);
        req2.send(null);
    // branch for IE/Windows ActiveX version
    } 
	else if (window.ActiveXObject) 
	{
        isIE = true;
        req2 = new ActiveXObject("Microsoft.XMLHTTP");
        if (req2) 
		{
            req2.onreadystatechange = doNothing;
            req2.open("GET", url, false);
            req2.send();
        }
    }
	return req2;
}

/***********************************************************
* function		doNothing
* purpose
***********************************************************/
function doNothing(url)
{
	return false;
}

/***********************************************************
* function		
* purpose
***********************************************************/
function loadXMLDoc(url) 
{
    // branch for native XMLHttpRequest object
    if (window.XMLHttpRequest) 
	{
		isIE = false;
        req = new XMLHttpRequest();
        req.onreadystatechange = processReqChange;
        req.open("GET", url, asynch);
        req.send(null);
    // branch for IE/Windows ActiveX version
    } 
	else if (window.ActiveXObject) 
	{
        isIE = true;
        req = new ActiveXObject("Microsoft.XMLHTTP");
        if (req) 
		{
            req.onreadystatechange = processReqChange;
            req.open("GET", url, asynch);
            req.send();
        }
    }
}

function processReqChange() {
    // only if req shows "loaded"
    if (req.readyState == 4) 
	{
        // only if "OK"
        if (req.status == 200) 
		{
            loaded = true;
			validateUsername();
			
         } else 
		 {
            alert("Username could not be checked");
         }
    }
}
/***********************************************************
* function		getElementTextNS
* purpose
***********************************************************/
function getElementTextNS(prefix, local, parentElem, index) {
    var result = "";
    if (prefix && isIE) {
        // IE/Windows way of handling namespaces
        result = parentElem.getElementsByTagName(prefix + ":" + local)[index];
    } else {
        // the namespace versions of this method 
        // (getElementsByTagNameNS()) operate
        // differently in Safari and Mozilla, but both
        // return value with just local name, provided 
        // there aren't conflicts with non-namespace element
        // names
        result = parentElem.getElementsByTagName(local)[index];
    }
    if (result) {
        // get text, accounting for possible
        // whitespace (carriage return) text nodes 
        if (result.childNodes.length > 1) 
		{
            return result.childNodes[1].nodeValue;
        } 
		else 
		{
            return result.firstChild.nodeValue;    		
        }
    } else {
        return "";
    }
}

function elem(id)
{
	return document.getElementById(id);	
}
