﻿// *************************************************************************
function chkfld(fld_value,str) {
   fld_value=trim(fld_value);
   if (!(isblank(fld_value,str) && isalpha(fld_value,str)) ) {
      return false
   }
   else {
      return true
   }
}
// *************************************************************************

// *************************************************************************
function range_chk (name, value, min, max)  {
value=trim(value);
if(isNaN(value)) {
 alert (name + " must be Number");
 return false;		
}else {
 if (parseInt(value,10) < min || parseInt(value,10) > max) 
 {
   alert (name+" must be between "+min+" and "+max);
   return false;
 }
}  // end of else
return true;
} 
// *************************************************************************

// *************************************************************************
function setfocus(frm_no, fld_no)
{
  document.forms[frm_no].elements[fld_no].focus();
}
// *************************************************************************

// *************************************************************************
function isDecimals(fieldValue,fieldName) {
fieldValue=trim(fieldValue);
decallowed = 2;  // how many decimals are allowed?
if (fieldValue != "" && isNaN(fieldValue)) {
   alert("Error! Enter a valid number in "+fieldName);
     return false;
}else{
   if (fieldValue.indexOf('.') == -1) fieldValue += ".";
   dectext = fieldValue.substring(fieldValue.indexOf('.')+1, fieldValue.length);
   if (dectext.length > decallowed)
   {
      alert ("Please enter a number with up to " + decallowed + " decimal places for "+fieldName);
        return false;
   }else{
        return true;
   }
}
}
// *************************************************************************

// *************************************************************************
function ispositive_default (fld,fld_value, df_val) {
fld_value=trim(fld_value);
if (fld_value.length ==  0) {
   fld.value = df_val;
   return true;
}
if ( isNaN(fld_value)  || parseInt(fld_value,10) < 0)   {
   alert ('Error! You have entered a negative number');
   return false;
}
    else return true;
}
// *************************************************************************

// *************************************************************************
function ispositive (fld_value,name) {
fld_value=trim(fld_value);
if ( isNaN(fld_value)  || parseInt(fld_value,10) < 0)   {
    alert (name + ' cannot be a negative number');
    return false;
}
 else return true;
}
// *************************************************************************

// *************************************************************************
function isblank (fld_val, fld_name) {
fld_val=trim(fld_val);
if(fld_val.length > 0 ) 
   return true;
else  {
  alert (fld_name+" cannot be Blank");
  return false;
}
}
// *************************************************************************

// *************************************************************************
function gonext() {
if( window.event.keyCode == 13) window.event.keyCode=9;
return;
}
// *************************************************************************

// *************************************************************************
function isalpha (fld_value,name) {
    fld_value=trim(fld_value);
    var stdstr = 'abcdefghijklmnopqrstuvwxyz0123456789 ().-/,';
    var i =0;
    var ch , ch_lwr ;
    for ( i=0; i < fld_value.length; i++) {
        ch = fld_value.substring(i,i+1);
        ch_lwr = ch.toLowerCase();
        if (stdstr.indexOf(ch_lwr) < 0)  {
          alert( "Enter a valid string in "+ name);
           return false;
        }
   }
   return true;
}
// *************************************************************************

// *************************************************************************
function isvalidstr (fld_value,name) {
    fld_value=trim(fld_value);
    var stdstr = 'abcdefghijklmnopqrstuvwxyz ().-/';
    var i =0;
    var ch , ch_lwr ;
    for ( i=0; i < fld_value.length; i++) {
        ch = fld_value.substring(i,i+1);
        ch_lwr = ch.toLowerCase();
        if (stdstr.indexOf(ch_lwr) < 0)  {
          alert( "Enter a valid string in "+ name);
           return false;
        }
   }
   return true;
}
// *************************************************************************

// *************************************************************************
function isnumber(fld_value,name) { 
   fld_value=trim(fld_value);
   if (isNaN(fld_value)) {  
   alert('Please enter numbers only in '+ name);   
   return false; 
   }
   else 
   return true; 
} // end of function
// *************************************************************************

// *************************************************************************
function isnumber2(name,fld_value) { 
   fld_value=trim(fld_value);
   if (isNaN(fld_value)) {  
   alert('Please enter numbers only  for '+ name);   
   return false; 
   }
   else 
   return true; 
} // end of function
// *************************************************************************

// *************************************************************************
function iswholenumber(name,fld_value) { 
   fld_value=trim(fld_value);
   if ( isNaN(fld_value) || fld_value.indexOf('.') >= 0 ) {  
   alert('Please enter numbers only with out decimals for '+ name);   
   return false; 
   }
   else 
   return true; 
} // end of function
// *************************************************************************

// *************************************************************************
//To check if a date is between two dates
function isWithinDates(name,act_date,from_date,to_date)
{
if(!dateCheck(act_date,'%dd/%mm/%yyyy') || !dateCheck(from_date,'%dd/%mm/%yyyy') || !dateCheck(to_date,'%dd/%mm/%yyyy')) {
  return false;
}else{    
  //Actual Date
  var actdt=parseInt(act_date.substring(0,2),10);
  var actmth=parseInt(act_date.substring(3,5),10);
  var actyr =parseInt(act_date.substring(6,10),10);
  //From Date
  var fdt=parseInt(from_date.substring(0,2),10);
  var fmth=parseInt(from_date.substring(3,5),10);
  var fyr =parseInt(from_date.substring(6,10),10);
  //To Date
  var tdt=parseInt(to_date.substring(0,2),10);
  var tmth=parseInt(to_date.substring(3,5),10);
  var tyr =parseInt(to_date.substring(6,10),10);

  var d1 = new Date(actyr,actmth-1,actdt); 
  var d2 = new Date(fyr,fmth-1,fdt); 
  var d3 = new Date(tyr,tmth-1,tdt); 

  if (d1 >= d2 && d1 <= d3) {
    return true;
  }else{
    alert(name+' must be between '+from_date+' and '+to_date);
    return false;
  }
}
}
// *************************************************************************

// *************************************************************************
// Left Trim a string
function lTrim(str) 
{
while (str.substring(0,1) == ' ')
{str = st.substring(1, str.length);}
return str;
}
// *************************************************************************

// *************************************************************************
// Right Trim a string
function rTrim(str) 
{
while (str.substring(str.length-1, str.length) == ' ')
{str = str.substring(0,str.length-1);}
return str;
}
// *************************************************************************

// *************************************************************************
// Both Left and Right Trim a string
function trim(str) 
{
while (str.substring(0,1) == ' ')
{str = str.substring(1, str.length);}
while (str.substring(str.length-1, str.length) == ' ')
{str = str.substring(0,str.length-1);}
return str;
}
// *************************************************************************

// *************************************************************************
// Blink any element with is elementID
var g_blinkTime = 1000;
var g_blinkCounter = 0;
function blinkElement(elementId)
{
 if ( (g_blinkCounter % 2) == 0 )
 {
  if ( document.getElementById )
  {
   document.getElementById(elementId).style.visibility = 'visible';
  }
  // IE 4...
  else if ( document.all )
  {
   document.all[elementId].style.visibility = 'visible';
  }
  // NS 4...
  else if ( document.layers )
  {
   document.layers[elementId].visibility = 'visible';
  }
 }
 else
 {
  if ( document.getElementById )
  {
   document.getElementById(elementId).style.visibility = 'hidden';
  }
  // IE 4...
  else if ( document.all )
  {
   document.all[elementId].style.visibility = 'hidden';
  }
  // NS 4...
  else if ( document.layers )
  {
   document.layers[elementId].visibility = 'hidden';
  }
 }
 if ( g_blinkCounter < 1 )
 {
  g_blinkCounter++;
 } 
 else
 {
  g_blinkCounter--
 }
 window.setTimeout('blinkElement(\"' + elementId + '\")', g_blinkTime);
}


var tokPat=new RegExp("^month_strict|month|Month|MONTH|yyyy|YYYY|mins|MINS|mon_strict|ampm|AMPM|mon|Mon|MON|min|MIN|dd|DD|mm|MM|yy|YY|hh|HH|ss|SS|m|M|d|D|y|Y|h|H|s|S");


var lowerMonArr={jan:1, feb:2, mar:3, apr:4, may:5, jun:6, jul:7, aug:8, sep:9, oct:10, nov:11, dec:12}


var monPatArr=new Array();
monPatArr['mon_strict']=new RegExp(/jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec/);
monPatArr['Mon']=new RegExp(/Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec/);
monPatArr['MON']=new RegExp(/JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC/);
monPatArr['mon']=new RegExp("jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec",'i');


var monthPatArr=new Array();
monthPatArr['month']=new RegExp(/^january|february|march|april|may|june|july|august|september|october|november|december/i);
monthPatArr['Month']=new RegExp(/^January|February|March|April|May|June|July|August|September|October|November|December/);
monthPatArr['MONTH']=new RegExp(/^JANUARY|FEBRUARY|MARCH|APRIL|MAY|JUNE|JULY|AUGUST|SEPTEMBER|OCTOBER|NOVEMBER|DECEMBER/);
monthPatArr['month_strict']=new RegExp(/^january|february|march|april|may|june|july|august|september|october|november|december/);


var cutoffYear=50;
function FormatToken (token, type) {
this.token=token;
this.type=type;
}

function parseFormatString (formatStr) {
var tokArr=new Array;
var tokInd=0;
var strInd=0;
var foundTok=0;
    
while (strInd < formatStr.length) {
if (formatStr.charAt(strInd)=="%" &&
(matchArray=formatStr.substr(strInd+1).match(tokPat)) != null) {
strInd+=matchArray[0].length+1;
tokArr[tokInd++]=new FormatToken(matchArray[0],"symbolic");
} else {


if (tokInd>0 && tokArr[tokInd-1].type=="literal") {

tokArr[tokInd-1].token+=formatStr.charAt(strInd++);
}
else {
tokArr[tokInd++]=new FormatToken(formatStr.charAt(strInd++), "literal");
      }
   }
}
return tokArr;
}

function buildDate(dateStr,formatStr) {
var tokArr=parseFormatString(formatStr);
var strInd=0;
var tokInd=0;
var intMonth;
var intDay;
var intYear;
var intHour;
var intMin;
var intSec;
var ampm="";
var strOffset;


var curdate=new Date();
intMonth=curdate.getMonth()+1;
intDay=curdate.getDate();
intYear=curdate.getFullYear();


intHour=0;
intMin=0;
intSec=0;


while (strInd < dateStr.length && tokInd < tokArr.length) {


if (tokArr[tokInd].type=="literal") {
if (dateStr.indexOf(tokArr[tokInd].token,strInd)==strInd) {


strInd+=tokArr[tokInd++].token.length;
continue;
}
else {


return "\"" + dateStr + "\" must be entered in the format "+formatStr.replace(/%/g,"").toUpperCase();
   }
}

switch (tokArr[tokInd].token) {
case 'm':
case 'M':
case 'd':
case 'D':
case 'h':
case 'H':
case 'min':
case 'MIN':
case 's':
case 'S':



curChar=dateStr.charAt(strInd);
nextChar=dateStr.charAt(strInd+1);
matchArr=dateStr.substr(strInd).match(/^\d{1,2}/);
if (matchArr==null) {

switch (tokArr[tokInd].token.toLowerCase()) {
case 'd': var unit="day"; break;
case 'm': var unit="month"; break;
case 'h': var unit="hour"; break;
case 'min': var unit="minute"; break;
case 's': var unit="second"; break;
}
return "Bad " + unit + " \"" + curChar + "\" or \"" + curChar +
nextChar + "\".";
}
strOffset=matchArr[0].length;
switch (tokArr[tokInd].token.toLowerCase()) {
case 'd': intDay=parseInt(matchArr[0],10); break;
case 'm': intMonth=parseInt(matchArr[0],10); break;
case 'h': intHour=parseInt(matchArr[0],10); break;
case 'min': intMin=parseInt(matchArr[0],10); break;
case 's': intSec=parseInt(matchArr[0],10); break;
}
break;
case 'mm':
case 'MM':
case 'dd':
case 'DD':
case 'hh':
case 'HH':
case 'mins':
case 'MINS':
case 'ss':
case 'SS':


strOffset=2;
matchArr=dateStr.substr(strInd).match(/^\d{2}/);
if (matchArr==null) {

switch (tokArr[tokInd].token.toLowerCase()) {
case 'dd': var unit="day"; break;
case 'mm': var unit="month"; break;
case 'hh': var unit="hour"; break;
case 'mins': var unit="minute"; break;
case 'ss': var unit="second"; break;
}
return "Bad " + unit + " \"" + dateStr.substr(strInd,2) + 
"\".";
}
switch (tokArr[tokInd].token.toLowerCase()) {
case 'dd': intDay=parseInt(matchArr[0],10); break;
case 'mm': intMonth=parseInt(matchArr[0],10); break;
case 'hh': intHour=parseInt(matchArr[0],10); break;
case 'mins': intMin=parseInt(matchArr[0],10); break;
case 'ss': intSec=parseInt(matchArr[0],10); break;
}
break;
case 'y':
case 'Y':

if (dateStr.substr(strInd,4).search(/\d{4}/) != -1) {

intYear=parseInt(dateStr.substr(strInd,4),10);
strOffset=4;
}
else {
if (dateStr.substr(strInd,2).search(/\d{2}/) != -1) {

intYear=parseInt(dateStr.substr(strInd,2),10);
if (intYear>=cutoffYear) {
intYear+=1900;
}
else {
intYear+=2000;
}
strOffset=2;
}
else {


return "Bad year \"" + dateStr.substr(strInd,2) + 
"\". Must be two or four digits.";
   }
}
break;
case 'yy':
case 'YY':

if (dateStr.substr(strInd,2).search(/\d{2}/) != -1) {

intYear=parseInt(dateStr.substr(strInd,2),10);
if (intYear>=cutoffYear) {
intYear+=1900;
}
else {
intYear+=2000;
}
strOffset=2;
} else {
return "Bad year \"" + dateStr.substr(strInd,2) + 
"\". Must be two digits.";
}
break;
case 'yyyy':
case 'YYYY':


if (dateStr.substr(strInd,4).search(/\d{4}/) != -1) {

intYear=parseInt(dateStr.substr(strInd,4),10);
strOffset=4;
}
else {

return "Bad year \"" + dateStr.substr(strInd,4) + 
"\". Must be four digits.";
}
break;
case 'mon':
case 'Mon':
case 'MON':
case 'mon_strict':


monPat=monPatArr[tokArr[tokInd].token];
if (dateStr.substr(strInd,3).search(monPat) != -1) {
intMonth=lowerMonArr[dateStr.substr(strInd,3).toLowerCase()];
}
else {

switch (tokArr[tokInd].token) {
case 'mon_strict': caseStat="lower-case"; break;
case 'Mon': caseStat="mixed-case"; break;
case 'MON': caseStat="upper-case"; break;
case 'mon': caseStat="between Jan and Dec"; break;
}
return "Bad month \"" + dateStr.substr(strInd,3) + 
"\". Must be " + caseStat + ".";
}
strOffset=3;
break;
case 'month':
case 'Month':
case 'MONTH':
case 'month_strict':


monPat=monthPatArr[tokArr[tokInd].token];
matchArray=dateStr.substr(strInd).match(monPat);
if (matchArray==null) {


return "Can't find a month beginning at \"" +
dateStr.substr(strInd) + "\".";
}


intMonth=lowerMonArr[matchArray[0].substr(0,3).toLowerCase()];
strOffset=matchArray[0].length;
break;
case 'ampm':
case 'AMPM':
matchArr=dateStr.substr(strInd).match(/^(am|pm|AM|PM|a\.m\.|p\.m\.|A\.M\.|P\.M\.)/);
if (matchArr==null) {


return "Missing am/pm designation.";
}

if (matchArr[0].substr(0,1).toLowerCase() == "a") {

ampm = "am";
}
else {
ampm = "pm";
}
strOffset = matchArr[0].length;
break;
}
strInd += strOffset;
tokInd++;
}
if (tokInd != tokArr.length || strInd != dateStr.length) {


return "\"" + dateStr + "\" must be entered in the format "+formatStr.replace(/%/g,"").toUpperCase();
}

if (intMonth < 1 || intMonth > 12) {
return "Month must be between 1 and 12.";
}
if (intDay < 1 || intDay > 31) {
return "Day must be between 1 and 31.";
}

if ((intMonth == 4 || intMonth == 6 || intMonth == 9 || intMonth == 11) && intDay == 31) {
return "Month "+intMonth+" doesn't have 31 days!";
}
if (intMonth == 2) {
var isleap=(intYear%4==0 && (intYear%100!=0 || intYear%400==0));
if (intDay > 29 || (intDay == 29 && !isleap)) {
return "February " + intYear + " doesn't have " + intDay + 
" days!";
   }
}

if (ampm == "") {
if (intHour < 0 || intHour > 23) {
return "Hour must be between 0 and 23 for military time.";
   }
}
else {

if (intHour < 1|| intHour > 12) {
return "Hour must be between 1 and 12 for standard time.";
   }
}

if (ampm=="am" && intHour==12) {
intHour=0;
}
if (ampm=="pm" && intHour < 12) {
intHour += 12;
}
if (intMin < 0 || intMin > 59) {
return "Minute must be between 0 and 59.";
}
if (intSec < 0 || intSec > 59) {
return "Second must be between 0 and 59.";
}
return new Date(intYear,intMonth-1,intDay,intHour,intMin,intSec);
}
function dateCheck(dateStr,formatStr) {
var myObj = buildDate(dateStr,formatStr);
if (typeof myObj == "object") {

return true;
}
else {

alert(myObj);
return false;
   }
}

function isNumeric(elem, helperMsg)
   {
	    var numericExpression = /^[0-9]+$/;
	    if(elem.value.match(numericExpression))
	    {
		    return true;
	    }
	    else
	    {
		    alert(helperMsg);
		    elem.focus();
		    return false;
	    }
    }
    function isMobileNumber(elem, helperMsg)
   {
	    var numericExpression = /[1-9]{1}[0-9]{9}([1-9]{1})?([1-9]{1})?([1-9]{1})?/;
	    if(elem.value.match(numericExpression))
	    {
		    return true;
	    }
	    else
	    {
		    alert(helperMsg);
		    elem.focus();
		    return false;
	    }
    }
    function isAlphaNumeric(elem, helperMsg)
    {
	    var numericExpression = /^[0-9a-zA-Z ]+$/;
	    if(elem.value.match(numericExpression))
	    {
		    return true;
	    }
	    else
	    {
		    alert(helperMsg);
		    elem.focus();
		    return false;
	    }
    }
    function isAlpha(elem, helperMsg)
    {
	    var numericExpression = /^[a-zA-Z ]+$/;
	    if(elem.value.match(numericExpression))
	    {
		    return true;
	    }
	    else
	    {
		    alert(helperMsg);
		    elem.focus();
		    return false;
	    }
    }
    
    function isDateValidate(elem, helperMsg)
    {
        var dateval=elem.value;
	    var numericExpression = /^(((((0[1-9])|(1\d)|(2[0-8]))\/((0[1-9])|(1[0-2])))|((31\/((0[13578])|(1[02])))|((29|30)\/((0[1,3-9])|(1[0-2])))))\/((20[0-9][0-9])|(19[0-9][0-9])))|((29\/02\/(19|20)(([02468][048])|([13579][26]))))$/;
	    if(elem.value.match(numericExpression))
	    {
	        var varSplit = dateval.split("/");
            var varDay=varSplit[0];
            var varMonth=varSplit[1];
            var varYear=varSplit[2];
            if(varSplit[1]==2)
            {
                if((varSplit[2]%4)!=0)
                {
                   if(varSplit[1]>=28)
                   {
                     return false;
                   }
                }
            }
            else
            {
		       return true;
		    }
	    }
	    else
	    {
		    alert(helperMsg);
		    elem.focus();
		    return false;
	    }
    }
    function emailValidator(elem, helperMsg)
    {
	    var emailExp = /^[\w\-\.\+]+\@[a-zA-Z0-9\.\-]+\.[a-zA-z0-9]{2,4}$/;
	    if(elem.value.match(emailExp))
	    {
		    return true;
	    }
	    else
	    {
		    alert(helperMsg);
		    elem.focus();
		    return false;
	    }
    }
