/// Validation Code for feedback handler ////
/// ------ ------ V.1.0 ------ --------- ////
/// GulfNet Solutions Est. //////
/// Web Application Group. //////
/// Programmed by: Bassel Issa. //////
//________________________________________________________


var is_ie = ( (navigator.userAgent.toLowerCase().indexOf("msie") != -1) &&
		   (navigator.userAgent.toLowerCase().indexOf("opera") == -1) );


var ButIDontWantToValidateTheForm = false;

function checkSamePassword(pwdID,pwdConfirmID,formID)
{
	if (ButIDontWantToValidateTheForm)
	{
		return true;
	}
	var pwd = document.getElementById(pwdID);
	var pwdConfirm = document.getElementById(pwdConfirmID);
	if (pwd.value.length < 6)
	{
		alert ("password should contain 6 characters minimum");
		return false;
	}
	if (pwd.value != pwdConfirm.value)
	{
	alert ("password and its confirmation do not match");
	return false;
}
else
{
	return (gns_validateform(formID));
}
}


var daysInMonth = makeArray(12);
	daysInMonth[1] = 31;
	daysInMonth[2] = 29;   // must programmatically check this
	daysInMonth[3] = 31;
	daysInMonth[4] = 30;
	daysInMonth[5] = 31;
	daysInMonth[6] = 30;
	daysInMonth[7] = 31;
	daysInMonth[8] = 31;
	daysInMonth[9] = 30;
	daysInMonth[10] = 31;
	daysInMonth[11] = 30;
	daysInMonth[12] = 31;
	
	
//This function works for special case

function gnsmailform_onsubmit(emailform) {
// run validate functin
	return gns_validateform(emailform);
}

function gns_validateform(frmobj){
	if (ButIDontWantToValidateTheForm)
	{
		return true;
	}
	if (gns_validateform.arguments.length > 1)
		userControlFieldPrefix = gns_validateform.arguments[1];
	else
		userControlFieldPrefix = "";

	var elementName = new String();
	var elementValue;
	var alertMsg;
	var month = 0;
	var day = 0;
	var year = 0;
	var i;
	for (i=0; i<frmobj.elements.length; i++){
		//alert(frmobj.elements(i).name);
		if (is_ie) FormElements = frmobj.elements(i);
		else FormElements = frmobj.elements[i];
		if ((FormElements.nodeName == "OBJECT") || (FormElements.nodeName == "EMBED")) continue;
		if (FormElements.type == "hidden") continue;
		elementName = FormElements.name.replace (userControlFieldPrefix,"");
		elementValue = jTrim(FormElements.value);
		alertMsg = "Please fill the following field";//getRealName(elementName);
	
		if (FormElements.disabled == true) continue;
		// checking if it processed field
		if (isProccessed(elementName)){
			// checking if it required
			if (isRequired(elementName)){
				//checking if it's a multi select combo box.
				if (ifMultiCompo(elementName)){
					if (FormElements.options.selectedIndex == -1){
						alert(alertMsg);
						FormElements.focus();
						return false;
					}
				}else {
					if (elementValue.length == 0){ ////checking if it's empty or not.	
					alert(alertMsg);
					FormElements.focus();
					return false;
					}
				}}
				
				
				// checking datatype to validate
				if ((needInt(elementName)) && (elementValue.length != 0)){ // need integer number (+) positive only
					if (isIntegerP(elementValue)==false){						
						alert(alertMsg);
						FormElements.focus();
						return false;
					}		
				}
				if ((needFloat(elementName)) && (elementValue.length != 0)){ // need float number
					if (isFloatP(elementValue)==false){						
						alert(alertMsg);
						FormElements.focus();
						return false;
					}		
				}
				if ((needIntN(elementName)) && (elementValue.length != 0)){ // need integer number with or without sign(-/+)
					if (isIntegerN(elementValue)==false){						
						alert(alertMsg);
						FormElements.focus();
						return false;
					}		
				}
				if ((needFloatN(elementName)) && (elementValue.length != 0)){ // need float number with or without sign(-/+)
					if (isFloatN(elementValue)==false){						
						alert(alertMsg);
						FormElements.focus();
						return false;
					}		
				}
				if ((needEmail(elementName)) && (elementValue.length != 0)){ // need email 
					if (isEmail(elementValue)==false){						
						alert(alertMsg);
						FormElements.focus();
						return false;
					}		
				}
				if ((needUrl(elementName)) && (elementValue.length != 0)){ // need URL
					if (isUrl(elementValue)==false){
						alert(alertMsg);
						FormElements.focus();
						return false;
					}		
				}
				if ((needPhone(elementName)) && (elementValue.length != 0)){ // need Phone
					if (isPhone(elementValue)==false){
						alert(alertMsg);
						FormElements.focus();
						return false;
					}		
				}
				if (needDate(elementName)!='nn'){ // checking date field
					var dateff =  needDate(elementName);
					if (dateff =='month'){
						month = elementValue;					
					}
					if (dateff =='day'){
						day = elementValue;						
					}
					if (dateff =='year'){
						year = elementValue;						
					}
					if (isRequired(elementName))
					{
						if ((dateff == 'day') && (day ==0))
						{
						alert('Please verify the date field.');
						FormElements.focus();
						return false;
						}
						if ((dateff == 'month') && (month ==0))
						{
						alert('Please verify the date field.');
						FormElements.focus();
						return false;
						}
						if ((dateff == 'year') && (year ==0))
						{
						alert('Please verify the date field.');
						FormElements.focus();
						return false;
						}
					}
					if ((year.length > 1) && (month.length > 1) && (day.length > 1)){
						if (isDate(year,month,day)){
						}else
						if ((day != 0) && (month != 0) && (year != 0)) {
						//alert('check the date');
						alert('Please verify the date field.');
						FormElements.focus();
						return false;
						}
					} 

				} // end if checking date field
		}	

	}
}
function getRealName(fldName){
	var msg; 
	msg = fldName.substr(6,fldName.length - 6);
	var re = /7/g; // 7 is the delimeter for space in the real name.
	msg = 'please check the field '+msg.replace(re,' ');	
	return msg;
}
function isProccessed(fldName){ //checking first digit
	var ProcesFlag = 'p';
	if (fldName.substr(0,1)==ProcesFlag){
		return true;
	}else{
		return false;
	}
}
function isRequired(fldName){//checking second digit
	var RequiredFlag = 1;
	if (fldName.substr(1,1)==RequiredFlag){
		return true;
	}else{
		return false;
		
	}
}
//checking forth digit////////////////////////////////////
function needInt(fldName){ // if positive int
	var IntFlag = 1;
	if (fldName.substr(3,1)==IntFlag){
		return true;
	}else{
		return false;		
	}
}
function needFloat(fldName){ // if positive float
	var FloatFlag = 2;
	if (fldName.substr(3,1)==FloatFlag){
		return true;
	}else{
		return false;		
	}
}
function needIntN(fldName){ // if positive or negative int
	var IntNFlag = 3;
	if (fldName.substr(3,1)==IntNFlag){
		return true;
	}else{
		return false;		
	}
}
function needFloatN(fldName){ // if positive or negative float
	var FloatNFlag = 4;
	if (fldName.substr(3,1)==FloatNFlag){
		return true;
	}else{
		return false;		
	}
}
function needEmail(fldName){ // if email 
	var EmailFlag = 5;
	if (fldName.substr(3,1)==EmailFlag){
		return true;
	}else{
		return false;		
	}
}
function needUrl(fldName){ // if email 
	var UrlFlag = 9;
	if (fldName.substr(3,1)==UrlFlag){
		return true;
	}else{
		return false;		
	}
}
function ifMultiCompo(fldName){ // if multi select compo 
	var MultiCompoFlag = 4;
	if (fldName.substr(2,1)==MultiCompoFlag){
		return true;
	}else{
		return false;		
	}
}
function needDate(fldName){ // if date
	var dateFlag = 7;
	var dayFlag = 6;
	var monthFlag = 7;
	var yearFlag = 8;
//	if (fldName.substr(2,1)==dateFlag){
		if (fldName.substr(3,1)==dayFlag){
			return 'day';
		}
		if (fldName.substr(3,1)==monthFlag){
			return 'month';
		}
		if (fldName.substr(3,1)==yearFlag){
			return 'year';
		}
		//return true;
//	}
	else{
		return 'nn';		
	}
}

//checking fifth digit////////////////////////////////////

function needPhone(fldName){ // if Phone
	var PhoneFlag = 9;
	if (fldName.substr(4,1)==PhoneFlag){
		return true;
	}else{
		return false;		
	}
}
//////////////////////////////LIBRARY\\\\\\\\\\\\\\\\\\\\\\\
function jLtrim(strtext){
	if (strtext.length == 0) return strtext;
	var ret
	var ik
	for (j=1; j<= strtext.length ;j++){
		ik = strtext.charAt(j - 1);
		if(ik != " "){
			break;
		}
	}
	//alert(ik);
	ret = strtext.substring(j -1, strtext.length );
	return ret;
}
function jRtrim(strtext){
	if (strtext.length == 0) return strtext;
	var ret
	var ik
	for (j=strtext.length; j >= 1 ;j--){
		ik = strtext.charAt(j - 1);
		if(ik != " "){
			break;
		}
	}
	//alert(ik);
	ret = strtext.substring(0,  j );
	return ret;
}
function jTrim(strtext)
{
	var ret
	ret = jLtrim(strtext);
	ret = jRtrim(ret);
	return ret;
}
function isIntegerN (s)
{
	if (s.substr(0,1)=='-'){
		return isInteger(s.substring(1,s.length-1));
	}else {
		return isIntegerP(s);
	}
}
function isIntegerP (s)
{
	if (s.substr(0,1)=='+'){
		return isInteger(s.substring(1,s.length-1));
	}else {
		return isInteger(s);
	}
}
function isInteger (s)
{   
var j;
    //if (isEmpty(s)) 
      // if (isInteger.arguments.length == 1) return defaultEmptyOK;
       //else return (isInteger.arguments[1] == true);
    for (j = 0; j < s.length; j++)
    {   
		var c = s.charAt(j);
        if (!isDigit(c)) return false;
    }
    return true;
}

function isDigit (c)
{   return ((c >= "0") && (c <= "9")) && (c != ".")
}
function isFloatN(s)
{
	if (s.substr(0,1)=='-'){
		return isFloatP(s.substring(1,s.length-1));
	}else {
		return isFloatP(s);
	}
}
function isFloatP(s)
{
	if (s.substr(0,1)=='+'){
		return isFloat(s.substring(1,s.length-1));
	}else {
		return isFloat(s);
	}
}
function isFloat (s)
{
	if ((s.length == 1) && (s ==".")){
		return false;
	}
   var j;

   // if (isEmpty(s)) 
   // if (isFloat.arguments.length == 1) return defaultEmptyOK;
   // else return (isFloat.arguments[1] == true);

    for (j = 0; j < s.length; j++)
    {   
        var c = s.charAt(j);

        if (!isDigitFloat(c)) return false;
    }
	var ss = s.split('.')
	if (ss.length > 2)
		return false;
    return true;
}


function isDigitFloat (c)
{   return((c >= "0") && (c <= "9") || (c == "."))
}

function isEmail(s)
{
	if (s.lastIndexOf('..') > 0) return false;

		if (s.lastIndexOf('@') > 0)
		{
			var ss = s.split('@');
				if (ss.length > 2)
					return false;
				else
				{
				if (ss[1].lastIndexOf('.') > 0)
						return true;
						else
						return false;
				}
			
		}
		return false;	
}
function isUrl(s)
{
	if (s.lastIndexOf('.') > 0)
	
			return true;
			else
			return false;
}

function isDate (yy, mm, dd)
{   
	if (! isYear(yy)) return false;
	if (dd==0) return false;
	if (mm==0) return false;
    var intYear = parseInt(yy,10);
    var intMonth = parseInt(mm,10);
    var intDay = parseInt(dd,10);
    // catch invalid days, except for February
    if (dd > daysInMonth[mm]) return false;
    if (intMonth ==2)
    {
		var yk = intYear / 4;
		//alert(yk);
		var yp = GetInteger(yk);
		//alert(yp);
		if (yk == yp)
		{
			
			if (intDay > 29) {
				//alert(intYear/4);
				return false; 
			}
		}
		else
		{
			if (intDay > 28){
			return false; 
			}
		}
	}
    return true;
}

function GetInteger(n)
{	var v = n - 0.5;
	v = Math.round(v);
	return v;
}

function makeArray(n) {
   for (var i = 1; i <= n; i++) {
      this[i] = 0
   } 
   return this
}
function isYear (s)
{   
    if (!isInteger(s)) return false;
    return ((s.length == 2) || (s.length == 4));
}




// 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 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));
}

function isPhone (s)
{
	if ((s==null)||(s=="")){
		return false
	}
	if (checkInternationalPhone(s)==false){
		return false
	}
	return true
}






function EnableDisableField ()
{
	args = EnableDisableField.arguments;
	for (i=0; i<(args.length-1); i+=2)
		if ((obj=MM_findObj(args[i]))!=null)
			{
			v=args[i+1];
			v=(v=='enable')?'':(v='disable')?'true':v;
		    obj.disabled=v;
			}
}
function HiddenValuesChange ()
{
		args = HiddenValuesChange.arguments;
	for (i=0; i<(args.length); i+=1)
		if ((obj=MM_findObj(args[i]))!=null)
			{
		    obj.value="";
			//alert (args[i] + "> <" + obj.value);
			}
}
function ChangeValue(id1,id2)
{
	obj1=MM_findObj(id1);
	obj2=MM_findObj(id2);
	obj1.value = obj2.value;
}
function ChangeValue2(id1,valeur)
{
	obj1=MM_findObj(id1);
	obj1.value = valeur;
}