// JavaScript Document

/// validation functions code starts -------------------------------------------------------------

// need to work
// must be in a form with id=form1
// window.addEvent('domready', addeventallFields); must be included on page
// input should have class="validateimage" second word is the type of validation - to add another style add a " " eg: class="validateimage formBGwhite"
// input need id
// submit button needs to be an image :<img src="images/saveboxsave.gif" border="0"  onclick="checkallFields()"/>

function checkallFields(){
	
	checkcountry();
	
	failed = 0;	
	//fieldarray = $('input.validate');
	//fieldarray = $('form1').getElements('input[class^=validate]');
	fieldarray = $ES('input[class^=validate]')
	
	fieldarray.each(function(el){
							  
		classtype = el.className;
		
		if(classtype.indexOf(" ") != -1){
		stringarray = classtype.split(" ");	
		classtype = stringarray[0];
		}
		classtype = classtype.replace("validate", "");
		
		if(!validateval(el.id ,classtype)){
			failed++;	
		};
						  
	})
	//alert(failed)
	if(failed < 1){
		
		$('form1').submit();
		
	}else{
	
	}
 
}

function addeventallFields(){
	failed = 0;	
	//fieldarray = $$('.^=validate');
	theform = $('form1');
	//fieldarray = theform.getElements('input[class^=validate]');
	fieldarray = $ES('input[class^=validate]')
	
	
	fieldarray.each(function(el){
		el.addEvent("mouseleave", function(event){
			checkfield(el)
		})
	});
	
	fieldarray.each(function(el){
		el.addEvent("OnChange", function(event){
			checkfield(el)
		})
	});
	
	fieldarray.each(function(el){
		el.addEvent("keydown", function(event){
			checkfield(el)
		})
	});
	fieldarray.each(function(el){
		el.addEvent("keyup", function(event){
			checkfield(el)
		})
	});
	
	fieldarray.each(function(el){
		el.addEvent("change", function(event){
			checkfield(el)
		})
	});
	
 
}

function checkfield(el){
	classtype = el.className;
				
				
				if(classtype.indexOf(" ") != -1){
				stringarray = classtype.split(" ");	
				classtype = stringarray[0];
				}
				
				classtype = classtype.replace("validate", "");
				
				if(!validateval(el.id ,classtype)){
					failed++;	
				};
}
	
	
function validateval(ojbid ,type){
	errorcode = 0;
	var ojb = $(ojbid);

	
	if(ojb.value == ""){
	errorcode = 1;
	outputerror(ojb, errorcode,type);
	}
	
	switch(type){
		case "email":
		if(!IsMatchingEmailAddress(ojb.value)){
			errorcode = 2;
			outputerror(ojb, errorcode,type);
			
		}
		break; 
		
		case "passwordcheck":
		
		if(ojb.value != document.getElementById("password").value){
			errorcode = 2;
			outputerror(ojb, errorcode,type);
		}
		break;
		
		case "textbox":
		
		if(ojb.value == ""){
			errorcode = 2;
			outputerror(ojb, errorcode,type);
		}
		break;
		
		case "emailcheck":
		
		if(ojb.value != document.getElementById("email").value){
			errorcode = 2;
			outputerror(ojb, errorcode,type);
		}
		break;
		
		case "date":
		if(!isValidDate(ojb.value)){
			errorcode = 3;
			outputerror(ojb, errorcode,type);
		}
		break; 
		
		case "checkbox":
		if(ojb.value == ""){
			errorcode = 4;
			outputerror(ojb, errorcode,type);
			alert('checkbox');
		}
		break; 
		
		case "phone":
		if(!isInteger(ojb.value)){
			errorcode = 5;
			outputerror(ojb, errorcode,type);
		}
		break; 
		
		case "internationalphone":
		if(checkInternationalPhone(ojb.value)){
			errorcode = 6;
			outputerror(ojb, errorcode,type);
		}
		break; 
		
		case "image":
		if(ojb.value == ""){
		errorcode = 7;
		outputerror(ojb, errorcode,type);
		}
		break; 
	}
	if(errorcode == 0){
		
	 	outputerror(ojb, 0,type);
		return true;
	}else{
		return false;
	}
	
}

function errorlist(num){
	
	error = new Array();
	
	error[0] = "<img src='/images/validate_tick.gif'/>";
	error[1] = "<img src='/images/validate_cross.gif'/>";
	error[2] = "<img src='/images/validate_cross.gif'/>";
	error[3] = "<img src='/images/validate_cross.gif'/>";
	error[4] = "<img src='/images/validate_cross.gif'/>";
	error[5] = "<img src='/images/validate_cross.gif'/>";
	error[6] = "<img src='/images/validate_cross.gif'/>";
	error[7] = "<img src='/images/validate_cross.gif'/>";
	
	return error[num];
	
}

function IsMatchingEmailAddress(str){
    var myRegExp = /[a-z0-9-]{1,30}@[a-z0-9-]{1,65}.[a-z]{3}/ ;
    return myRegExp.test(str)
}

function isValidDate(sText) {
        var reDate = /(?:0[1-9]|[12][0-9]|3[01])\/(?:0[1-9]|1[0-2])\/(?:19|20\d{2})/;
        return reDate.test(sText);
}

function outputerror(ojb, errornumber,type){
	var ojbitem = $(ojb);
	
	errordiv = $('error'+ojb.id)
	//alert(errordiv)
	if(errordiv == null){
		//if(errornumber != 0){
			var errordiv = new Element('div', {'id':'error'+ojb.id}).addClass('errorhold');
			errordiv.setHTML(errorlist(errornumber))
			
			//$('submit').disabled="disabled";
			//errordiv.injectAfter(ojbitem);
			
			//errordiv.inject(ojbitem, 'after');
			if(errornumber==0){
			document.getElementById(ojb.id).className = 'validate'+type+' textfield';
			}else{
			document.getElementById(ojb.id).className = 'validate'+type+' textfielderror';	
			}	
			
			document.getElementById(ojb.id+'valid').innerHTML = errorlist(errornumber);
		//}
	}else{
		//if(errornumber != 0){
			errordiv.setHTML(errorlist(errornumber))
			//$('submit').disabled="disabled";
		//}else{
			//errordiv.remove();
			//$('submit').disabled="";
		//}
	}
}

// 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 = 11;

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 checkInternationalPhone(strPhone){
s=stripCharsInBag(strPhone,validWorldPhoneChars);
return (isInteger(s) && s.length >= minDigitsInIPhoneNumber);
}


/// validation functions code ends -------------------------------------------------------------

