// JavaScript Document

var validationObjectArr = new Array();

/*****************************************************************
		*	standard form submission
		*		
		*
		********************************************************************/
		function submitForm(formID){		
			if(doFullFalidation()){
				
				getElement(formID).submit();
			}
		}
		
		function clearForm(formID){		
						
				getElement(formID).reset();
			
		}
		
		
			/*****************************************************************
		*	set validation objects and push them on tehe page array
		*		
		*
		********************************************************************/
	setValidation = function(accordionId,validationObj){
		
		this[accordionId+"dataArray"] = validationObj;		
		
		validationObjectArr.push(this[accordionId+"dataArray"]);
		
	}
	
	/*****************************************************************
	*	on focus remove the error class
	*		
	*
	********************************************************************/
	removeClass = function(obj,groupName){
		
		
		if(groupName!= undefined){
			var rg = document.getElementsByName(groupName);						   
		   for(var i = 0; i < rg.length; i++) {			   
				rg[i].className="";	
		   }
		}else{
			obj.className="";	
		}
		
	}
		
	/*****************************************************************
	*	loop over the entire page validation array and validate everything
	*		
	*
	********************************************************************/
	doFullFalidation = function(){
		var noError = true;	
		var errorFlag= false;
		for(var i=0;i<validationObjectArr.length;i++){
			errorFlag = validateAccordionFields(null,validationObjectArr[i]);	
			if(!errorFlag){
				noError = false;	
				
			}
		}	
		if(!noError){
			//getElement("notComplete").style.display = "inline";
		}
		return noError;
		
		
	}	
	
	/*****************************************************************
	*	used by full validation and by individual accordions to validate all items with in thier validation object
	*		
	*
	********************************************************************/
	validateAccordionFields = function(accordionId, accArray){
		
		if(accArray == undefined){
			var validArr = this[accordionId+"dataArray"];
		}else{
			var validArr = accArray;
		}
		var pin = new Array();
		var password = new Array();
		var email = new Array();
		var flagError = false;
	
		
		for(var i = 0;i<validArr.length;i++){			
			
			switch (validArr[i].type){
				
				case "radio":
					var doValidate = checkRadio(validArr[i].name);
					if(!doValidate){
						return true;	
					}else{
						
					}
				break;
				case "string":
					if(validArr[i].other != undefined){
						
						var error = checkString(validArr[i].name,validArr[i].other);						
					}else{
						var error = checkString(validArr[i].name);
					}
					
				
				break;
				case "postal":
					var error = checkPostal(validArr[i].name);
				
				break;
				case "phone":
					var error = checkPhone(validArr[i].name);
				
				break;
				case "email":
					var error = checkEmail(validArr[i].name);
					//email.push(validArr[i].name)
				
				break;
				case "number":
					var error = checkNumber(validArr[i].name);
				
				break;
				
				case "checkBox":
					var error = checkCheckBox(validArr[i].name);
				break;	
					
			
			}
			
			if(error){
				flagError = true;
					
			}
			
		}
		
		
		
		if(flagError){
			//alert('here')
			//getElement("notComplete").style.display = "inline";
			return false;	
		}else{
			//getElement("notComplete").style.display = "none";
			return true;		
		}
	}

/*****************************************************************
*	check to see if the radio group is valid
*		
*
********************************************************************/
function checkRadioGroup(radioGroupName){
	var rg = document.getElementsByName(radioGroupName)     
	   
   for(var i = 0; i < rg.length; i++) {	    
		if(rg[i].checked) {
			return false;	
		}		
	}
	//if not selected
	for(var i = 0; i < rg.length; i++) {
		setErrorClass(rg[i]);
	}

	return true;
		
}

/*****************************************************************
*	check to see if the radio is valid
*		
*
********************************************************************/
function checkRadio(radioName){
	var r = getElement(radioName).checked;
	return r;
}	
/*****************************************************************
*	check to see if the check box is valid
*		
*
********************************************************************/
function checkCheckBox(checkName){
	
	var r = !getElement(checkName).checked;
	if(r){
		setErrorClass(getElement(checkName));
	}
	return r;
}	
/*****************************************************************
*	check to see if the number is valid
*		
*
********************************************************************/
function checkNumber(number){
	var n = getElement(number).value;
	
	if(isNaN(Number(n)) || n == ""){
		setErrorClass(getElement(number));
		return true;		
	}else{
		return false;	
	}

}

/*****************************************************************
*	check to see if phone numbers are valid
*		
*
********************************************************************/

// Declaring required variables
var digits = "0123456789";
// non-digit characters which are allowed in phone numbers
var phoneNumberDelimiters = "()- ";
// characters which are allowed in international phone numbers
// (a leading + is OK)
var validWorldPhoneChars = phoneNumberDelimiters + "+";
// Minimum no of digits in an international phone no.
var minDigitsInIPhoneNumber = 10;

function isInteger(s)
{   var i;
    for (i = 0; i < s.length; i++)
    {   
        // Check that current character is number.
        var c = s.charAt(i);
        if (((c < "0") || (c > "9"))) return false;
    }
    // All characters are numbers.
    return true;
}

function stripCharsInBag(s, bag)
{   var i;
    var returnString = "";
    // Search through string's characters one by one.
    // If character is not in bag, append to returnString.
    for (i = 0; i < s.length; i++)
    {   
        // Check that current character isn't whitespace.
        var c = s.charAt(i);
        if (bag.indexOf(c) == -1) returnString += c;
    }
    return returnString;
}

function checkPhone(phone,actStringBool){
	if(actStringBool == undefined){
		var p = getElement(phone).value;
	}else{
		p = 	actStringBool;
	}
	
	s=stripCharsInBag(p,validWorldPhoneChars);
	if(!(isInteger(s) && s.length >= minDigitsInIPhoneNumber)){
		setErrorClass(getElement(phone));
		return true;
	}else{
		
		return false;  
	}
}

/*****************************************************************
*	set the error class
*		
*
********************************************************************/
setErrorClass = function(obj){	
		obj.className="error";
}

/*****************************************************************
*	check to see if the pin is valid
*		
*
********************************************************************/
function checkPin(number){
	var n = getElement(number).value;
	
	if(!checkNumber(number) && n.length>=4 && n.length<=6){
		
		return false;		
	}else{
		setErrorClass(getElement(number));
		return true;	
	}

}

/*****************************************************************
*	check to see if the string is valid
*		
*
********************************************************************/
function checkString(str,other){
	var s = getElement(str).value;
	
	if(other != undefined){
		
		var s2 = getElement(other).value;
	}
	
	if(s == ""){		
		if(s2 == undefined || s2 == ""){
			setErrorClass(getElement(str));
			if(s2 != undefined){
				setErrorClass(getElement(other));
			}
			return true;	
		}else{
			return false;	
		}
		
	}else{
		return false;	
	}

}
/*****************************************************************
*	check to see if the postal code is valid
*		
*
********************************************************************/
function checkPostal(postal)
{
	var p = getElement(postal).value;
     //create regular expression for testing
     reg_exp_pcode = new RegExp(/(^s*([a-z](\s)?\d(\s)?){3}$)s*/i);

     if(p!= "" && reg_exp_pcode.test(p))
     {
        
          return false;
     }
	 setErrorClass(getElement(postal))
     return true;
}

/*****************************************************************
*	check to see if the email is valid
*		
*
********************************************************************/
function checkEmail(email){
	var emailPattern = /^\w.*@.+\..+/;
	
	var e = getElement(email).value;
	
	if(e != "" && emailPattern.test(e)){
		return false;
	}
	setErrorClass(getElement(email));
	return true;
}
