/*
 * (c)2007 copole - author: Amir Borna - copole.com
*/

var gResultElementID="lastMessage";

function myAjaxCall ( url, resultElementID ) {	
	gResultElementID = resultElementID;
	
	this.xmlHttp=this.GetXmlHttpObject();
	if (this.xmlHttp==null)
	{
		document.getElementById(gResultElementID).innerHTML="Your browser does not support AJAX";
		return;
	}
	document.getElementById(gResultElementID).innerHTML="Working...";

	this.xmlHttp.onreadystatechange=this.stateChanged ;
	this.xmlHttp.open("GET",url,true);
	this.xmlHttp.send(null);
	// alert ("Debug: Done with checkUsername");
}

function stateChanged() {	
	if (xmlHttp.readyState) { 
		if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete")
		{ 
			document.getElementById(gResultElementID).innerHTML=xmlHttp.responseText ;
			// alert ("Debug: Done with stateChanged");
		}
	}
}

var Try = {
	these: function() {
		var returnValue;

		for (var i = 0; i < arguments.length; i++) {
			var lambda = arguments[i];
			try {
				returnValue = lambda();
				break;
			} catch (e) {}
		}

		return returnValue;
	}
}

function GetXmlHttpObject() { 
	return Try.these(
			function() {return new ActiveXObject('Msxml2.XMLHTTP')},
			function() {return new ActiveXObject('Microsoft.XMLHTTP')},
			function() {return new XMLHttpRequest()}
		) || null;
}

// ************************************************************************************

// Patterns
var formValidationMasks = new Array();
formValidationMasks['email'] = /\b[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b/gi;	// Email
formValidationMasks['firstname'] = /^[A-Z ']+$/gi;
formValidationMasks['lastname'] = /^[A-Z ']+$/gi;
formValidationMasks['password'] = /^[A-Z0-9.-@!#$]{4,12}$/gi;	// Numeric
formValidationMasks['username'] = /^[A-Z0-9_]+$/gi;
formValidationMasks['zip'] = /^[0-9]{5}\-[0-9]{4}$/gi;	// Numeric

function isUsernameValid(user) {	
	if (user.length < 4) {
		document.getElementById(gResultElementID).innerHTML=" - the username is too short";
		return false;
	}
	else {
		if ( formValidationMasks['username'] ) {
			if(!user.match(formValidationMasks['username'])) {
				document.getElementById(gResultElementID).innerHTML=" - username has invalid format";
				return false;
			}
		}
	}
	return true;
}

function checkUsername(user) {
	var url="http://www.copole.com/bin/checkuser.php";
	url= url + "?username=" + user;

	if ( isUsernameValid(user) )
		myAjaxCall ( url, gResultElementID );
}

function formCheck(formobj){
	// Enter name of mandatory fields
	var fieldRequired = Array("firstname", "lastname", "email");
	// Enter field description to appear in the dialog box
	var fieldDescription = Array("first name", "last name", "email");
	// dialog message
	var alertMsg = "\n"; // "Please check the following fields:\n\n";
	var l_Msg = alertMsg.length;
	var checkConfirmPassword = false;
	document.getElementById(gResultElementID).innerHTML='Working...';
	document.getElementById(gResultElementID).style.display='block';
	
	if (formobj.elements['oldpassword']) {
		if ( formobj.elements['oldpassword'].value != "" || formobj.elements['password'].value != "" ) {
			if ( formobj.elements['oldpassword'].value == "" )
				alertMsg += " - Old password is required\n";
				
			checkConfirmPassword = true;
		}
	}
	
	if (formobj.elements['username']) {	
		if (isUsernameValid(formobj.elements['username'].value))		
			checkConfirmPassword = true;
		else
			return false;
	}
	
	if (checkConfirmPassword) {
		if ( formobj.elements['password'].value == "" ) 
			alertMsg += " - please choose a password\n";
		else if ( formobj.elements['password'].value != formobj.elements['password2'].value )
			alertMsg += " - new password does not match confim password\n";
		else if ( formValidationMasks['password'] ) {
			if(!formobj.elements['password'].value.match(formValidationMasks['password']))
				alertMsg += " - password has invalid format\n";
		}
	}
	
	
	for (var i = 0; i < fieldRequired.length; i++){
		var obj = formobj.elements[fieldRequired[i]];
		
		if (obj){
			switch(obj.type){
			case "select-one":
				if (obj.selectedIndex == -1 || obj.options[obj.selectedIndex].text == ""){
					alertMsg += " - " + fieldDescription[i] + "\n";
				}
				break;
			case "select-multiple":
				if (obj.selectedIndex == -1){
					alertMsg += " - " + fieldDescription[i] + "\n";
				}
				break;
			case "text":
			case "textarea":
				if (obj.value == "" || obj.value == null){
					alertMsg += " - " + fieldDescription[i] + " is required\n";
				}
				else if ( formValidationMasks[obj.name] ) {
					if(!obj.value.match(formValidationMasks[obj.name]))
						alertMsg += " - " + fieldDescription[i] + " has invalid format\n";
				}
				break;
			default:
			}
			if (obj.type == undefined){
				var blnchecked = false;
				for (var j = 0; j < obj.length; j++){
					if (obj[j].checked){
						blnchecked = true;
					}
				}
				if (!blnchecked){
					alertMsg += " - " + fieldDescription[i] + "\n";
				}
			}
		}
	}

	if (alertMsg.length == l_Msg){
		return true;
	}else{
		//alert(alertMsg);
		document.getElementById(gResultElementID).innerHTML=alertMsg.replace(/\n/g, "<br>") ;
		return false;
	}
}

function toggleOption()
{
	var numericID = this.id.replace(/[^\d]/g,'');
	var closeObj = document.getElementById('c' + numericID);
	var openObj = document.getElementById('o' + numericID);
	if(openObj.style.display=='block'){
		closeObj.style.display='block';
		openObj.style.display='none';
	}
	else{
		closeObj.style.display='none';
		openObj.style.display='block';
	}
	document.getElementById(gResultElementID).style.display='none';
	document.getElementById(gResultElementID).innerHTML='';
	document.getElementById('saveButton').style.display='block';
}

function initToggleContent()
{
	var divs = document.getElementsByTagName('DIV');
	for(var no=0;no<divs.length;no++){
		if(divs[no].className=='option'){
			divs[no].onclick = toggleOption;
		}	
		
	}	
}

window.onload = initToggleContent;	


