﻿// JScript File

function j_trim(s) 
{
    var m = s.match(/^\s*(\S+(\s+\S+)*)\s*$/);
	s = (m == null) ? '' : m[1];
    return s;
}

function j_is_text(s)
{
    //for other datatype
    return true;
}

function j_is_Other(s)
{
    //for other datatype
    return true;
}

function j_is_Integer(s)
{
    //s = trim(s);
	if (s.length > 0)
	{
		var slen = s.length;
		var chr;
		
		for (var i = 0; i < slen; i++)
		{
			chr = s.substring(i,i+1);
//			if (i==0)
//			{
//				if (chr != '+' && chr != '-')
//				{
//					if (chr < '0' || chr > '9') return false;
//				}
//				else
//				{
//					if (slen == 1) return false; 
//				}
//			}
//			else
//			{ 
				if (chr < '0' || chr > '9')
				{
					return false;
				}
			//}
		}
	}
	return true;
}

function j_is_Decimal(s)
{
	//s = trim(s);
	if (s.length > 0) 
	{
		var decimal_pos = s.lastIndexOf('.');
		var decimal_pos_next;
		
		if ((decimal_pos != -1) && (decimal_pos != 0))
		{
			var decimal_pos_next = s.lastIndexOf('.',decimal_pos - 1);
			if  (decimal_pos_next != -1)
				return false; /*invalid if two dots*/
		}
		
		var slen = s.length;
		var chr;
		
		for (var i = 0; i <= (slen-1); i++)
		{
			chr = s.substring(i, i+1);
			
			if ((chr == '.') && ((slen == 1) || (i == slen - 1)))
				return false; /*position of the dot*/

			if (i==0)
			{
				if (chr != '+' && chr != '-' && chr != '.')
				{
					if (chr < '0' || chr > '9') return false;
				}
				else
				{
					if (slen == 1 ) return false; 
				}
			}
			else
			{
				if ((chr < '0' || chr > '9') && (chr != '.'))
					return false; /*other than 0-9 or .*/
		    }
		}
	}	
	return true;
}

/*~check the validity of date for specified format~*/
function j_is_Date(s)
{
	//s = trim(s)
	
	var sDateFormat='mm/dd/yyyy'; /* dd/mm/yy and dd/mm/yyyy*/
	var cSep = '/' /*default*/
	var arrDate 
	arrDate = new Array(); 
	
	//if(s.length ==0)  return true;
	if(s.length < 5) return false;
	//For years in the range '1970-1999'  should be entered as four char length strings 
	//For years in the range '2000-2099'  can be entered as 1-2 char length strings
 
	var mm=0, dd=1, yyyy=2
	var sDate, sMonth,sYear;
	if (arguments.length>1) 
	{
		sDateFormat=arguments[1];
		if (sDateFormat.toLowerCase()=='dd/mm/yyyy') 
		{
			dd=0; mm=1; yyyy=2; 
		}
	}			
	arrDate=s.split(cSep);
    if(arrDate)
    {
		if (arrDate.length < 3 || arrDate.length > 3)
			return false;
    }
    else
		return false;
	if(arrDate[mm].length==0 || arrDate[dd].length==0 || arrDate[yyyy].length==0 || arrDate[mm].length>2 || arrDate[dd].length>2 || arrDate[yyyy].length>4)	
		return false;
	if (arrDate[mm]>12 || arrDate[mm]<1 || arrDate[dd]>31 || arrDate[dd]< 1 )
		return false;
	sMonth = parseInt(arrDate[mm],10);
    sDate = parseInt(arrDate[dd],10);
    sYear = parseInt(arrDate[yyyy],10);
    if(sYear>=0 && sYear<=99) sYear=sYear+ 2000;	
    if(sYear<= 0) return false; 
    if(isNaN(sMonth) || isNaN(sDate) || isNaN(sYear)) return false;
    if ((sMonth == 4 || sMonth == 6 || sMonth == 9 || sMonth == 11 )&&(sDate > 30))
		return false;
	if ((sMonth == 1 || sMonth == 3 || sMonth == 5 || sMonth == 7 || sMonth == 8 || sMonth == 10 || sMonth == 12)&&(sDate > 31))
		return false;
	var by_4 = sYear%4; 
	var by_400 = sYear%400;
	var by_100 = sYear%100;
	var isLeap
    if (((by_4 == 0 && (by_100 == 0)))|| (by_400 == 0))
		isLeap = true;
	else
		isLeap = false;  
     
	if (!isLeap && sMonth == 2 && sDate > 28)
		return false;
 return true;  
}

/*~time validation in 12:39 am (hour:minute) format~*/
function j_is_Time(s)
{
	s=trim(s)
	if(s=='') return true;
 	if (s.indexOf(':') == -1 )
		return false;
    var hourminute=s.split(':');
 
	if (hourminute.length > 2)
		return false;
  
	if (isNaN(hourminute[0]))
		return false;
	
	if (!( (parseInt(hourminute[0],10)>=1 ) && ( parseInt(hourminute[0],10)<=12) ) )
		return false;
  
	if (hourminute[1].indexOf(' ') == -1 )
		hourminute[1] += ' AM';

	var minutemeredium=hourminute[1].split(' ');	 
 	if (isNaN(minutemeredium[0]))
		return false;
	
	if (!( (parseInt(minutemeredium[0])>=0 ) && ( parseInt(minutemeredium[0])<=59) ) )
		return false;
 
	if ((minutemeredium[1].toUpperCase() != 'AM') && (minutemeredium[1].toUpperCase() != 'PM') )
		return false;
 return true;
}

function j_is_Datetime(s)
{
    //TBC - Need to implement this validation
    return true;
}

/*anything but blank space*/
function j_is_Phone(s)
{
	var pat = /^\d{3}(\S)?[\d{3}](\S)[\d{4}]+$/; 
	
	if (s.length > 0) 
	{
		var matchArr = s.match(pat);
	 	if(matchArr==null)
			return false;
	}
	return true;
}

/*~check the validity of email id~*/
function j_is_Email(s)
{
    //s = trim(s);
	var pat = /^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/; 
	
	if (s.length > 0) 
	{
		var matchArr = s.match(pat);
	 	if(matchArr==null)
			return false;
	}
	return true;
}
function j_is_Currency(s)
{
    //s = trim(s);
	var pat = /^[$]?\d{1,10}([.]\d{2})?$/; 
	
	if (s.length > 0) 
	{
		var matchArr = s.match(pat);
	 	if(matchArr==null)
			return false;
	}
	return true;
}
/*~check the validity of zip~*/
function j_is_Zip(s)
{
	//s = trim(s);
	if (s.length > 0) 
	{
	    var chr;
		for (var i=0;i<s.length;i++)
		{
			var chr = s.charAt(i);
	        if(chr == '-' && i == 0)
                return false;
			if (chr == '-' || chr == ' ' || (chr >='0' && chr <='9' ) || (chr >='A' && chr <='Z' ) || (chr >='a' && chr <='z' )) 
			;
			else
				return false;
		}	
	}
	return true;
}
///////////////////////////////////////////////////


////////////////////////////////////////////////////
//CUSTOME FUNCTION

function j_validate_element(elem, call_onchnage)
{
	var is_req = false;
	var dt = "Other"; //Default datatype is string //0=String, 1=Integer, 2=Decimal, 3=Date, 4=Time, 5=DateTime, 6=Other
	var dp = "&Not"; //Default decimal place 2
//	var cap = j_get_caption(elem);
	var cap="Field";
	if (elem.getAttribute('Message')) cap = elem.getAttribute('Message');
	if (elem.getAttribute('DataType')) dt = elem.getAttribute('DataType');
	if (elem.getAttribute('NotValue')) dp = elem.getAttribute('NotValue');
	if (elem.getAttribute('Required')) is_req = (elem.getAttribute('Required') == '1');
	
	var elemValue = j_trim(elem.value);
	var maxLen;	
	
	//TBC: needs to be cross-checked		
	if(elem.type=='textarea')
	{
		if(elem.getAttribute('maxlength'))
		{
			maxLen = elem.getAttribute('maxlength');
			if(elemValue.length > maxLen)
			{
				alert('Text too long. Only ' + maxLen + ' chars are allowed.');
				return false;	
			}	
		}
	}
	
	if (is_req)
	{
        if((elem.type=='text'||elem.type=='textarea'||elem.type=='select'||elem.type=='select-one' ||elem.type=='password') && elemValue.length == 0)
		{
			alert('Please Enter '+cap+'.');
			elem.focus();
			return false; //Return element index
		}		    
	}
	
	if(elemValue.length > 0)
	{
		if(!(eval("j_is_" + dt + "(elemValue)")))
		{
		    //alert(elemValue + "," + elem.id + "," + dt);
		    alert(cap + " should be valid " + dt.toLowerCase() + ".");
		    elem.focus();
			return false; //Return element index
		}
	}
	
	if (dp!="&Not")
	{
	    if((elem.type=='text'||elem.type=='textarea'||elem.type=='select'||elem.type=='select-one'))
	    {		
		    
		    if (dp==elemValue)
		    {
		        alert('Please Select '+cap+'.');
		        elem.focus();
		        return false;
			 
		    }
	    }
	}
	
	return true;
}


function j_validate_form()
{
    var objFrm       = document.forms[0];
	var retVal = objFrm.elements.length;
	
	for(var i=0;i<objFrm.elements.length;i++)
	{
	    var elem=objFrm.elements[i];
	    
	    if (elem.type=='text'||elem.type=='textarea'||elem.type=='select'||elem.type=='select-one' ||elem.type=='password')
	    {
	        if (!j_validate_element(elem, true))
	        {
	            //alert(i);
	            //alert(elem.id);
	            return false;
	        }
	    }
	}
	return -1;
}


