/// Validation Code for feedback handler ////
/// ------ ------ V.1.0 ------ --------- ////
/// GulfNet Solutions Est. //////
/// Web Application Group. //////
/// Programmed by: Bassel Issa. //////
//________________________________________________________
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;
	
	
function gnsmailform_onsubmit(emailform) {
	// run validate functin
	return gns_validateform(emailform);
}

function gns_validateform(frmobj){
	
	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);
		elementName = frmobj.elements(i).name; 
		elementValue = jTrim(frmobj.elements(i).value);
		alertMsg = getRealName(elementName);
		// 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 (frmobj.elements(i).options.selectedIndex == -1){
						alert(alertMsg);
						frmobj.elements(i).focus();
						return false;
					}
				}else {
					if (elementValue.length == 0){ ////checking if it's empty or not.	
					alert(alertMsg);
					frmobj.elements(i).focus();
					return false;
					}
				}
							
				
				// checking datatype to validate
				if (needInt(elementName)){ // need integer number (+) positive only
					if (isIntegerP(elementValue)==false){						
						alert(alertMsg);
						frmobj.elements(i).focus();
						return false;
					}		
				}
				if (needFloat(elementName)){ // need float number
					if (isFloatP(elementValue)==false){						
						alert(alertMsg);
						frmobj.elements(i).focus();
						return false;
					}		
				}
				if (needIntN(elementName)){ // need integer number with or without sign(-/+)
					if (isIntegerN(elementValue)==false){						
						alert(alertMsg);
						frmobj.elements(i).focus();
						return false;
					}		
				}
				if (needFloatN(elementName)){ // need float number with or without sign(-/+)
					if (isFloatN(elementValue)==false){						
						alert(alertMsg);
						frmobj.elements(i).focus();
						return false;
					}		
				}
				if (needEmail(elementName)){ // need email 
					if (isEmail(elementValue)==false){						
						alert(alertMsg);
						frmobj.elements(i).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 ((year.length > 0) && (month.length > 0) && (day.length > 0)){
						
						if (isDate(year,month,day)){
						//alert('date is ok');
						//frmobj.elements(i).value = 
						}else {
						//alert('date is not ok');
						alert('check the date')
						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 nigative int
	var IntNFlag = 3;
	if (fldName.substr(3,1)==IntNFlag){
		return true;
	}else{
		return false;		
	}
}
function needFloatN(fldName){ // if positive or nigative 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 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';		
	}
}
//////////////////////////////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)
		{
			var ss = s.split('@');
				if (ss.length > 2)
					return false;
				else
				{
				if (ss[1].lastIndexOf('.') > 0)
						return true;
						else
						return false;
				}
			
		}
		return false;	
}

function isDate (yy, mm, dd)
{   
	if (! isYear(yy)) 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));
}



		
