/************************************************************************************
 * File Name	: ValidationFunctions.js
 * Purpose		: Validation function library.
 * Created On   : 14 Aug 2008
 * Created By	: Vinayak Ahire
 * Updated By	: Mohd Shah
 ***********************************************************************************/

/************************************************************************************
	 
     * @name            : fnUnsetAllformElements
     * @Purpose			: Function to return unset all form Elements
     * @ returns original page informations
	 
 ************************************************************************************/
hp_ok=true;
function hp_d00(s)
{
  if(!hp_ok)return;
  document.write(s)
}
function hp_ne()
{
  return true
}
onerror=hp_ne;
function hp_dn(a)
{
  return false
}
function hp_cm()
{
  return false
}
function hp_de(e)
{
  return(e.target.tagName!=null&&e.target.tagName.search('^(INPUT|TEXTAREA|BUTTON|SELECT)$')!=-1)
};
function hp_md(e)
{
  mac=navigator.userAgent.indexOf('Mac')!=-1;
  if(document.all)
  {
    if(event.button==2||(mac&&(event.ctrlKey||event.keyCode==91)))
    {
      return(false)
    }
  }
  else
  {
    if(e.which==3||(mac&&(e.modifiers==2||e.ctrlKey)))
    {
      return false
    }
    else if(e.which==1)
    {
      window.captureEvents(Event.MOUSEMOVE);
      window.onmousemove=hp_dn
    }
  }
}
function hp_mu(e)
{
  if(e.which==1)
  {
    window.releaseEvents(Event.MOUSEMOVE);
    window.onmousemove=null
  }
}
if(navigator.appName.indexOf('Internet Explorer')==-1||(navigator.userAgent.indexOf('MSIE')!=-1&&document.all.length!=0))
{
  if(document.all)
  {
    mac=navigator.userAgent.indexOf('Mac')!=-1;
    version=parseFloat('0'+navigator.userAgent.substr(navigator.userAgent.indexOf('MSIE')+5),10);
    if(!mac&&version>4)
    {
      document.oncontextmenu=hp_cm
    }
    else
    {
      document.onmousedown=hp_md;
      document.onkeydown=hp_md;
    }
    document.onselectstart=hp_dn
  }
  else if(document.layers)
  {
    window.captureEvents(Event.MOUSEDOWN|Event.modifiers|Event.KEYDOWN|Event.MOUSEUP);
    window.onmousedown=hp_md;window.onkeydown=hp_md;
    window.onmouseup=hp_mu
  }
  else if(document.getElementById&&!document.all)
  {
    document.oncontextmenu=hp_cm;document.onmousedown=hp_de
  }
}
function hp_dp1()
{
  for(i=0;i<document.all.length;i++)
  {
    if(document.all[i].style.visibility!="hidden")
    {
      document.all[i].style.visibility="hidden";document.all[i].id="hp_id"
    }
  }
};
function hp_dp2()
{
  for(i=0;i<document.all.length;i++)
  {
    if(document.all[i].id=="hp_id")document.all[i].style.visibility=""
  }
};
window.onbeforeprint=hp_dp1;
window.onafterprint=hp_dp2;
document.write('<style type="text/css" media="print"><!--body{display:none}--></style>');
function hp_dc()
{
  hp_ta.createTextRange().execCommand("Copy");
  setTimeout("hp_dc()",300)
}
if(navigator.appName.indexOf('Internet Explorer')==-1||(navigator.userAgent.indexOf('MSIE')!=-1&&document.all.length!=0))
{
  if(document.all&&navigator.userAgent.indexOf('Opera')==-1)
  {
	var objloc=location.href;
    document.write('<div style="position:absolute;left:-1000px;top:-1000px"><input type="textarea" name="hp_ta" value="'+objloc+'" style="visibility:hidden"></div>');
    hp_dc()
  }
}
function hp_ndd()
{
  return false
}
document.ondragstart=hp_ndd;

function fnUnsetAllformElements(){

	obj	=	document.frm;
	for(var i=0;i<obj.length;i++){

		if(obj[i].name!=undefined && obj[i].name!="module") {
			
			if(obj[i].type=="button" || obj[i].type=="reset"){
				//obj[i].value="";
			}else{
				obj[i].value="";
			}
		}
	}
	return true;

}

/************************************************************************************
	 
     * @name            : fnAlphabatic
     * @Purpose			: Function to Check whether entered data is valid AlphaNumeric.
     * @ returns True or false
	 
 ************************************************************************************/
function fnAlphabatic(alphane) {

	var valid = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
	for (var i=0; i<alphane.length; i++) {
		if (valid.indexOf(alphane.charAt(i)) < 0) {
			return false;
		}
	}
	return true;

}

/************************************************************************************
	 
     * @name            : fnAlphabaticWithSpace
     * @Purpose			: Function to Check whether entered data is valid AlphaNumeric.
     * @ returns True or false
	 
 ************************************************************************************/
function fnAlphabaticWithSpace(alphane) {

	var valid = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ ";
	for (var i=0; i<alphane.length; i++) {
		if (valid.indexOf(alphane.charAt(i)) < 0) {
			return false;
		}
	}
	return true;

}

/************************************************************************************
	 
     * @name            : fnAlphaNumeric
     * @Purpose			: Function to Check whether entered data is valid AlphaNumeric.
     * @ returns True or false
	 
 ************************************************************************************/
function fnAlphaNumeric(alphane) {

	var valid = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
	for (var i=0; i<alphane.length; i++) {
		if (valid.indexOf(alphane.charAt(i)) < 0) {
			return false;
		}
	}
	return true;

}
/************************************************************************************
	 
     * @name            : fnAlphaNumericWithSpace
     * @Purpose			: Function to Check whether entered data is valid AlphaNumeric with spaces.
     * @ returns True or false
	 
 ************************************************************************************/
function fnAlphaNumericWithSpace(alphane) {

	var valid="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ ";
	for (var i=0; i<alphane.length; i++) {
		if (valid.indexOf(alphane.charAt(i)) < 0) {
			return false;
		}
	}
	return true;

}

/************************************************************************************
	 
     * @name            : fnAlphaNumericWithSpaceAndHyphen
     * @Purpose			: Function to Check whether entered data is valid AlphaNumeric with spaces and hyphen.
     * @ returns True or false
	 
 ************************************************************************************/
function fnAlphaNumericWithSpaceAndHyphen(alphane) {

	var valid="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ- ";
	for (var i=0; i<alphane.length; i++) {
		if (valid.indexOf(alphane.charAt(i)) < 0) {
			return false;
		}
	}
	return true;

}

/************************************************************************************
	 
     * @name            : fnIsEmpty
     * @Purpose			: Function to Check whether specified field(obj) contains an empty string
	 * @ returns True or false
	 
 ************************************************************************************/
function fnIsEmpty(obj, str)
{

  if ( (obj.type=="text") || (obj.type=="password") || (obj.type=="textarea") || (obj.type=="file"))
  {
    
     if(fnTrim(obj.value)=="")
     {
	   alert(str +'.');
	   obj.focus();
	   return true;
     }
  }

 
  if (obj.type=="select-one")
  {
	  if (obj.selectedIndex==0)
	  {
		  alert(str+ '.' );
		  obj.focus();
		  obj.select;
		  return true;
	  }
  }
  return false;
}

/************************************************************************************
	 
     * @name            : fnIsValidEmail
     * @Purpose			: Function to Check whether entered Email-id is valid 
     * @ returns True or false
	 
 ************************************************************************************/
function fnIsValidEmail(obj)
{
	if(!fnIsEmpty(obj, "Email"))
	{
		if(! fnEcheck(obj.value) )
		{
			alert("Please enter valid Email.");
			obj.focus();
			return false;
		}
	}
	else
	{
		return false;
	}
	return true;
}


function fnEcheck(str) {

   var at="@"
   var dot="."
   var lat=str.indexOf(at)
   var lstr=str.length
   var ldot=str.indexOf(dot)
   var filter =/^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
   if(!filter.test(str)) {
	   return false;
   }
   if (str.indexOf(at)==-1){
       return false
   }

   if (str.indexOf(at)==-1 || str.indexOf(at)==0 || str.indexOf(at)==lstr){
       return false
   }

   if (str.indexOf(dot)==-1 || str.indexOf(dot)==0 || str.indexOf(dot)==lstr){
       return false
   }

   if (str.indexOf(at,(lat+1))!=-1){
      return false
   }

   if (str.substring(lat-1,lat)==dot || str.substring(lat+1,lat+2)==dot || str.substring(ldot+1,ldot+2)==dot ||
	  str.substring(lstr-1)==dot) {
      return false
   }

   if (str.indexOf(dot,(lat+2))==-1){
   return false
   }
  return true
}

/************************************************************************************
	 
     * @name            : fnTextAreaLimit
     * @Purpose			: Function to Check whether entered textarea field crosses its given limit.
     * @ returns True or false with its count
	 
 ************************************************************************************/
function fnTextAreaLimit(obj,limit)
{
	if(obj.value.length > limit)
	{
		alert("Maximum limit of textarea is "+limit);
		return true
	}

}

/************************************************************************************
	 
     * @name            : fnTrim
     * @Purpose			: Function to removes the trailing spaces.
     * @ returns String
	 
 ************************************************************************************/
function fnTrim(pstrString)
{

  var intLoop=0;
  for(intLoop=0; intLoop<pstrString.length; )
  {
      if(pstrString.charAt(intLoop)==" ")
         pstrString=pstrString.substring(intLoop+1, pstrString.length);
      else
         break;
  }

  for(intLoop=pstrString.length-1; intLoop>=0; intLoop=pstrString.length-1)
  {
      if(pstrString.charAt(intLoop)==" ")
         pstrString=pstrString.substring(0,intLoop);
      else
         break;
  }


  return pstrString;
}

/************************************************************************************
	 
     * @name            : fnIsInteger
     * @Purpose			: Function to Validate Phone numbers
     * @ returns True or false
	 
 ************************************************************************************/

// 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 fnIsInteger(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;
}
/************************************************************************************
	 
     * @name            : fnStripCharsInBag
     * @Purpose			: Function to Search through string's characters one by one.
							If character is not in bag, append to returnString.
     * @ returns String
	 
 ************************************************************************************/
function fnStripCharsInBag(s, bag)
{   var i;
    var 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;
}

/************************************************************************************
	 
     * @name            : fnCheckInternationalPhone
     * @Purpose			: Function to Validate International Phone numbers
     * @ returns True
	 
 ************************************************************************************/
function fnCheckInternationalPhone(strPhone)
{
 var s=fn_stripCharsInBag(strPhone,validWorldPhoneChars);
 return (fnIsInteger(s) && s.length >= minDigitsInIPhoneNumber);
}


/************************************************************************************
	 
     * @name            : fnValidateZip
     * @Purpose			: Function to Zipcode validations
     * @ returns True or false
	 
 ************************************************************************************/

function fnValidateZip(zip)
{
	var valid = "0123456789-";
	var hyphencount = 0;
	var field=zip;
	var temp ="";
	 
	/*if(field.length!=5 && field.length!=10) 
	{
		alert("Please Enter your 5 digit or 5 digit+4 zip code.");
		return false;
	}*/
	for(var i=0; i < field.length; i++)
	{
		temp = "" + field.substring(i, i+1);
		if(temp == "-") hyphencount++;

		if(valid.indexOf(temp) == "-1")
		{
			alert("Invalid zip code.");
			return false;
		}

		if((hyphencount>1))// || (field.length==10 && field.charAt(5)!="-"))
		{ 
			alert("Invalid Zip code.");
			return false;
		}
	}
	return true;
}

/************************************************************************************
	 
     * @name            : fnTestDate
     * @Purpose			: Function to Validate date
     * @ returns True or false
	 
 ************************************************************************************/
 
function fnTestDate(day,month,year)
{ 
	 var myDayStr = day;
	 var myMonthStr = month;
	 var myYearStr = year;
	 		 
	var myMonth = new Array('January','February','March','April','May','June','July','August','September','October','November','December');

	var myDateStr = myDayStr + ' ' + myMonth[myMonthStr] + ' ' + myYearStr;

	/* Using form values, create a new date object
	using the setFullYear function */
	var myDate = new Date();
	myDate.setFullYear( myYearStr, myMonthStr, myDayStr );
	//alert(myDate.getMonth());
	//alert(myMonthStr);
	if ( myDate.getMonth() != myMonthStr )
	{
		 alert( 'Sorry, "' + myDateStr + '" is NOT a valid date.' );
	}
	else
	{
	  //alert( 'Congratulations! "' + myDateStr + '" IS a valid date.' );
	   return true;
	}
  
}


/************************************************************************************
	 
     * @name            : fnEmailCheck
     * @Purpose			: Function for Perfect Email validation
     * @ returns True or false
	 
 ************************************************************************************/

function fnEmailCheck(emailStr) {

/* The following variable tells the rest of the function whether or not
to verify that the address ends in a two-letter country or well-known
TLD.  1 means check it, 0 means don't. */

var checkTLD=1;

/* The following is the list of known TLDs that an e-mail address must end with. */

var knownDomsPat=/^(com|net|org|edu|int|mil|gov|arpa|biz|aero|name|coop|info|pro|museum)$/;

/* The following pattern is used to check if the entered e-mail address
fits the user@domain format.  It also is used to separate the username
from the domain. */

var emailPat=/^(.+)@(.+)$/;

/* The following string represents the pattern for matching all special
characters.  We don't want to allow special characters in the address. 
These characters include ( ) < > @ , ; : \ " . [ ] */

var specialChars="\\(\\)><@,;:\\\\\\\"\\.\\[\\]";

/* The following string represents the range of characters allowed in a 
username or domainname.  It really states which chars aren't allowed.*/

var validChars="\[^\\s" + specialChars + "\]";

/* The following pattern applies if the "user" is a quoted string (in
which case, there are no rules about which characters are allowed
and which aren't; anything goes).  E.g. "jiminy cricket"@disney.com
is a legal e-mail address. */

var quotedUser="(\"[^\"]*\")";

/* The following pattern applies for domains that are IP addresses,
rather than symbolic names.  E.g. joe@[123.124.233.4] is a legal
e-mail address. NOTE: The square brackets are required. */

var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/;

/* The following string represents an atom (basically a series of non-special characters.) */

var atom=validChars + '+';

/* The following string represents one word in the typical username.
For example, in john.doe@somewhere.com, john and doe are words.
Basically, a word is either an atom or quoted string. */

var word="(" + atom + "|" + quotedUser + ")";

// The following pattern describes the structure of the user

var userPat=new RegExp("^" + word + "(\\." + word + ")*$");

/* The following pattern describes the structure of a normal symbolic
domain, as opposed to ipDomainPat, shown above. */

var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$");

/* Finally, let's start trying to figure out if the supplied address is valid. */

/* Begin with the coarse pattern to simply break up user@domain into
different pieces that are easy to analyze. */

var matchArray=emailStr.match(emailPat);

if (matchArray==null) {

/* Too many/few @'s or something; basically, this address doesn't
even fit the general mould of a valid e-mail address. */

//alert("Invalid email Id.Please check @ and .'s)");
alert("Invalid Email id!");

return false;
}
var user=matchArray[1];
var domain=matchArray[2];

// Start by checking that only basic ASCII characters are in the strings (0-127).

for (i=0; i<user.length; i++) {
if (user.charCodeAt(i)>127) {
//alert("Ths username contains invalid characters.");
alert("Invalid Email id!");
return false;
   }
}
for (i=0; i<domain.length; i++) {
if (domain.charCodeAt(i)>127) {
//alert("Ths domain name contains invalid characters.");
alert("Invalid Email id!");
return false;
   }
}

// See if "user" is valid 

if (user.match(userPat)==null) {

// user is not valid

//alert("The username doesn't valid.");
alert("Invalid Email id!");
return false;
}

/* if the e-mail address is at an IP address (as opposed to a symbolic
host name) make sure the IP address is valid. */

var IPArray=domain.match(ipDomainPat);
if (IPArray!=null) {

// this is an IP address

for (var i=1;i<=4;i++) {
if (IPArray[i]>255) {
 alert("Invalid Email id!");
//alert("Destination IP address is invalid!");
return false;
   }
}
return true;
}

// Domain is symbolic name.  Check if it's valid.
 
var atomPat=new RegExp("^" + atom + "$");
var domArr=domain.split(".");
var len=domArr.length;
for (i=0;i<len;i++) {
if (domArr[i].search(atomPat)==-1) {
alert("Invalid Email id!");
//alert("The domain name does not valid.");
return false;
   }
}

/* domain name seems valid, but now make sure that it ends in a
known top-level domain (like com, edu, gov) or a two-letter word,
representing country (uk, nl), and that there's a hostname preceding 
the domain or country. */

if (checkTLD && domArr[domArr.length-1].length!=2 && 
domArr[domArr.length-1].search(knownDomsPat)==-1) {
	alert("Invalid Email id!");
//alert("The address must end in a well-known domain or two letter " + "country.");
return false;
}

// Make sure there's a host name preceding the domain.

if (len<2)
{
	alert("Invalid Email id!");
//alert("This address is missing a hostname!");
return false;
}

// If we've gotten this far, everything's valid!
return true;
}


/************************************************************************************
	 
     * @name            : checkURL
     * @Purpose			: Function for URL validation.
     * @ returns True or false
	 
 ************************************************************************************/

function checkURL(url) {
	  var RegExp = /^(([\w]+:)?\/\/)?(([\d\w]|%[a-fA-f\d]{2,2})+(:([\d\w]|%[a-fA-f\d]{2,2})+)?@)?([\d\w][-\d\w]{0,253}[\d\w]\.)+[\w]{2,4}(:[\d]+)?(\/([-+_~.\d\w]|%[a-fA-f\d]{2,2})*)*(\?(&?([-+_~.\d\w]|%[a-fA-f\d]{2,2})=?)*)?(#([-+_~.\d\w]|%[a-fA-f\d]{2,2})*)?$/;
    if(RegExp.test(url)){
		if(url.indexOf ('www', 0) != -1)
			return true;
    }else{
        return false;
    } 
}

/************************************************************************************
	 
     * @name            : fnSetFocus
     * @Purpose			: Function for setting focus on object
     * @ returns True
	 
 ************************************************************************************/
function fnSetFocus(obj) 
{
	obj.style.backgroundColor = '#f2faff';
	obj.style.borderColor = '#116aaa';
	obj.style.color = '#000000';
}


/************************************************************************************
	 
     * @name            : fnSetBlur
     * @Purpose			: Function to make the object Blurred look
     * @ returns True 
	 
 ************************************************************************************/
function fnSetBlur(obj) 
{
	obj.style.backgroundColor = '#ffffff';
	obj.style.borderColor = '#6caad6';
	obj.style.color = '#000000';
}


function fun_goToURL() { //v3.0
  var i, args=MM_goToURL.arguments; document.MM_returnValue = false;
  for (i=0; i<(args.length-1); i+=2) eval(args[i]+".location='"+args[i+1]+"'");
}


/************************************************************************************
	 
     * @name            : fnIsWhiteSpace
     * @Purpose			: Function to check whether string contains any white space
     * @ returns True or false
	 
 ************************************************************************************/
function fnIsWhiteSpace(str) {
	var i;
	var flag
	for (i = 0; i < str.length; i++) { 
		
		var c = str.charAt(i);
		if (whitespace.indexOf(c) == -1)
		return false
	}	
		return true;
}


/************************************************************************************
	 
     * @name            : fnDateDifference
     * @Purpose			: Function to give date difference between two date given
     * @ returns a string
	 
 ************************************************************************************/
function fnDateDifference(obj1,obj2)
{	
	//convert to mm/dd/yy  from 
	arr=obj1.split(dateseperator);
//	obj1=arr[1]+"/"+arr[0]+"/"+arr[2];
	arr=obj2.split(dateseperator);
//	obj2=arr[1]+"/"+arr[0]+"/"+arr[2];
	date1 = new Date(obj1);
	date2 = new Date(obj2);
	diff = date1 - date2;
//	alert(obj1+' '+obj2+' '+diff);
	return diff;
}


/************************************************************************************
	 
     * @name            : fnDisplay
     * @Purpose			: Function to Display alert message according to object's validation required.
     * @ returns a string
	 
 ************************************************************************************/
function fnDisplay(statement,obj_name)	{
	switch (statement)
	{
		//statement="Check the following information \n";
		case "EMPTY_TEXT":
			//statement="Enter "+obj_name.substr(0)+".";    //eg. Enter <<text box Name>>.    Abhishek
		      statement="- "+obj_name+".";    //eg. Enter <<text box Name>>.    Preetam
			break;
		case "UNSELECTED_COMBOBOX":
			statement="Select "+obj_name.substr(0)+".";   //eg. Select <<Combo box name>>.    Abhishek
			break;			
		case "INVALID_PHONE_FAX":
			statement="- Valid "+obj_name+" ( Only numeric characters with - + ( ) ).";   //eg. Select <<Combo box name>>.    Abhishek
			break;			
				case "INVALID_PHONE":
			statement=obj_name+". Only numeric characters with - + ( ) allowed." ;   //eg. Select <<Combo box name>>.    Abhishek
			break;			
		case "INVALID_NUMERIC":
			statement="- Valid "+obj_name+" ( Only numeric characters ).";   //eg. Select <<Combo box name>>.    Abhishek
			break;			
		case "INVALID_EMAIL":
			statement="- Valid "+obj_name+".";   //eg. Select <<Combo box name>>.    Abhishek
			break;			
		case "INVALID_URL":
			statement="- Valid "+obj_name+".";   //eg. Select <<Combo box name>>.    Abhishek
			break;
		case "INVALID_FROM_DATE":
			statement=obj_name+" should be greater than or equal to today's date";		
			break;
		case "INVALID_TO_DATE":
			statement=obj_name+" should be greater than or equal to Dispaly from";		
			break;
		case "INVALID_FROMTO_DATE":
			statement="- Valid "+obj_name+".";   //eg. Select <<Combo box name>>.    Abhishek
			break;
		case "INVALID_INPUT":
			statement="- Valid "+obj_name+".";   //eg. Select <<Combo box name>>.    Abhishek			break;			
			break;
		case "INVALID_CONFIRMPASSWORD":
			statement="- "+obj_name+" and confirm password should be same.";
			break;
		case "INVALID_AGELIMIT":
			statement="should be grater than 18 years old";
			break;
		case "INVALID_ANNI_DATE":
			statement=obj_name+" should be greater than or equal to Birth Date";		
			break;
	    case "INVALID_FROMLEAVE_DATE":
			statement=obj_name+" should be greater than or equal to From Date";		
			break;
		case "INVALID_PHOTO_TYPE":
			statement=obj_name+" Only.jpg/.jpeg/.gif/.bmp images allowed";		
			break;

		case "BACKSLASH_DOUBLEQUOTE":
			statement = "Backslash is not allowed in "+obj_name+"."
			break;	

		default:
				alert('[Error: jfunction.js] check the display function.');
		
	}//switch
	return statement+'\n';
}

/************************************************************************************
	 
     * @name            : fnIsValidateChar
     * @Purpose			: Function to check whether entered characters are valid.
     * @ returns a string
	 
 ************************************************************************************/
_ERROR_COLOR_ = '#86b262';
_SELECT_CRITERIA_ = 'You have not selected any criteria.';
var dateseperator = '-';
var whitespace =" \t\n\r ";

function fnIsValidateChar(characters,obj,msg)
{
				var objValue=obj.value;
                var tmp
                var lTag
                lTag = 0
                temp = (objValue.length)
                for (var i=0;i<temp;i++)
                {
                        tmp=objValue.substring(i,i+1);
                        if(characters.indexOf(tmp)>=0)
                        {
                                lTag = 1
                                break;
                        }
                }
                if(lTag == 1)
				{
       				output = fnDisplay('INVALID_EMAIL',msg)
					//obj.style.backgroundColor = _ERROR_COLOR_;//document.frm[obj.name].focus();		
                    return output;
				}				
                else
				{
			        return;
				}		
}


/************************************************************************************
	 
     * @name            : fnIsAllNumeric
	 * @Purpose			: FUNCTION CHECKS FOR NUMERIC DATA
						Description :
									Fuction for checkin all numeric characters 
									so if the string contains characters from this set ,this function will return true
									else
									it will return false and call fnDisplay() fn for genetrating error message.
						Paramters   :	
									1: obj : form object		
									2: msg : control name which will be displayed at the time of error . 

    * @ returns a string
*************************************************************************************/
function fnIsAllNumeric(obj,msg)
{
				var objValue=obj.value;
                        lTempLength = objValue.length
                        lTempCounter = 0
                        lTempString = fnTrim(objValue)
                        flag = false

                        do
                        {
                        if(lTempString.charAt(lTempCounter) == " ")
                        {
                                flag = false
                                break
                        }
                        else if(lTempString.charAt(lTempCounter) > 0 || lTempString.charAt(lTempCounter) < 9)
                                flag = true
                        else
                                {
                                        flag = false
                                        break
                                }
                                lTempCounter = lTempCounter + 1
                        }
                        while(lTempCounter <= lTempLength)

                        if(flag == true)
                                return;
                        else
						{
	                  			output = fnDisplay('INVALID_NUMERIC',msg);
								//obj.style.backgroundColor = _ERROR_COLOR_;								
								return output;
						}		
}


/************************************************************************************
 
 * @name            : fnValidatePhoneFax
 * @Purpose			: FUNCTION CHECKS FOR VALID PHONE NO.	
					Description:
						Phone no or fax can contains all numeric characters with + - ( )
						so if the string contains characters from this set ,this function will return true
						else
						it will return false and call Display() fn for genetrating error message.
					Paramters:
						1: obj : form object		
						2: msg : control name which will be displayed at the time of error . 
* @ returns a string
*************************************************************************************/
function fnValidatePhoneFax(obj,msg)
{
				var objValue=obj.value;
				//alert(objValue);
                var characters=" -()+1234567890"
                var tmp
                var lTag
                lTag = 0
                temp = (objValue.length)
                for (var i=0;i<temp;i++)
                {
                        tmp=objValue.substring(i,i+1)
                        if (characters.indexOf(tmp)==-1)
                        {
                                lTag = 1
                        }
                }
                if(lTag == 1)
				{
					 output = fnDisplay('INVALID_PHONE',msg);
					 	alert(output);
						//obj.style.backgroundColor = _ERROR_COLOR_;//document.frm[obj.name].focus();		
                        return output;
				}		
                else
                        return ;
}
/************************************************************************************
 
 * @name            : fnBackSlash_DoubleQuote
 * @Purpose			: Function to check whether entered textbox has backslash or double quotes in it.
 * @ returns a string
 ***********************************************************************************/

function fnBackSlash_DoubleQuote(obj,objname)	{   

	if (obj.value.indexOf ("\\") > -1 ) 	{		
			output = fnDisplay('BACKSLASH_DOUBLEQUOTE',objname);

		return output;
	}
	return;
}

/************************************************************************************
 
 * @name            : fnIsNull
 * @Purpose			: Function to check whether entered textbox has empty string.
 * @ returns a string
 ***********************************************************************************/
function fnIsNull(obj,objname)	{  
try{
	if (fnTrim(obj.value) == "" || fnTrim(obj.value) == " ")	{
			output = fnDisplay('EMPTY_TEXT',objname);
			//obj.style.borderColor = _ERROR_COLOR_;
			return output;
	}
			return;
	}catch(e){}
}

/************************************************************************************
 
 * @name            : fnIsNullTinyText
 * @Purpose			: Function to check whether entered textbox has TinyText.
 * @ returns a string
 ***********************************************************************************/
function fnIsNullTinyText(obj,objname)	{   
	if (fnTrim(tinyMCE.getContent()) == "" || fnTrim(tinyMCE.getContent()) == " ")	{
			output = fnDisplay('EMPTY_TEXT',objname);
			obj.style.borderColor = _ERROR_COLOR_;
			return output;
	}
			return;
}


/************************************************************************************
 
 * @name            : fnIsComboUnselected
 * @Purpose			: Function to check whether COMBOBOX is selected
 * @ returns a string
 ***********************************************************************************/
function fnIsComboUnselected(obj,objname)	{  
	if (fnTrim(obj.value) == "" || fnTrim(obj.value) == " " || fnTrim(obj.value) == "0" || fnTrim(obj.value) == 0)	{
			output = fnDisplay('UNSELECTED_COMBOBOX',objname);
			//obj.style.backgroundColor = _ERROR_COLOR_;
			return output;
	}
			return;			
}



/************************************************************************************
 
 * @name            : fnGetFileType
 * @Purpose			: Function to check whether uploaded file has [.gif/.GIF, or .jpeg/.JPEG, .jpg/.JPG] file format. 
 * @ returns true or false
 ***********************************************************************************/
function fnGetFileType(str)
	{
	  
		if(str.match(".gif")||str.match(".jpeg")||str.match(".jpg")||str.match(".JPG")||str.match(".JPEG")||str.match(".GIF"))
				{
			      return true;
				}
		else 
	   	{
			   return false;
			}

 }

/************************************************************************************
 
 * @name            : fnChecknumeric
 * @Purpose			: Function to check whether Entered string is numeric number. 
 * @ return type Boolean
 ***********************************************************************************/
function fun_checknumeric(obj)
{
	var str;
	var id=parseInt(obj.value);
	if(isNaN(id))
		return true;
	else
		return false;
}


/************************************************************************************
 
 * @name            : fnOpenUploadFiles
 * @Purpose			: Function to open window of file dir to select file 
 * @ return True
 ***********************************************************************************/
function fnOpenUploadFiles()
{
			obj = document.frm;	
			flgchk=obj.flg_local_main.value;	
			if(flgchk==0)
			{
			file_path=obj.cgi_path.value;
			}
			
			else{
			if (obj.purl.value=='www')
			{
				file_path=obj.cgi_path.value;
			}
			else	file_path=obj.cgi_path.value;
			}
			//alert(file_path);
			//file_path=obj.
			newwindow = window.open(file_path, 'Upload', 'resizable=no,scrollbars=yes,screenX=0,screenY=0,menubar=no,status=no,width=500,height=340,left=440,top=250,dependent');
			return ;
	
}


/************************************************************************************
 
 * @name            : fnIsValidUsername
 * @purpose			: Function to check special character
 * @ return true or false
 ***********************************************************************************/

function fnIsValidUsername(sText)
{

   var ValidChars="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
   var charflag=true;
   var Char; 
   for (i = 0; i < sText.value.length; i++) 
   { 
      Char = sText.value.charAt(i); 
      if (ValidChars.indexOf(Char) == -1) 
              charflag = false;
   }
   return charflag;
}


/************************************************************************************
 
 * @name            : fnIsValidDateDiff
 * @Purpose			: Function to validate Date  Difference 
 * @ return true or false
 ***********************************************************************************/
function fnIsValidDateDiff(smalldate,bigdate)
{
  var smalldatearr =smalldate.split("-");
  var bigdatearr   =bigdate.split("-");  
      
  if((parseInt(bigdatearr[2])) > (parseInt(smalldatearr[2],10)))
     return true;
  else if((parseInt(bigdatearr[2],10)) == (parseInt(smalldatearr[2],10)))
  {
  	if((parseInt(bigdatearr[0],10)) > (parseInt(smalldatearr[0],10)))
  	 	  return true;
  	else if((parseInt(bigdatearr[0],10)) == (parseInt(smalldatearr[0],10)))
  	{	
       if((parseInt(bigdatearr[1],10)) >= (parseInt(smalldatearr[1],10)))    
     				return true;
    		else 
    			  return false;   
     }
     else
     	 return false;
  }  
  else
  		return false;
}

/************************************************************************************
 
 * @name            : fnIsDateGreater
 * @Purpose			: Function to Compare given Date is greater than current date
 * @ return true or false
 ***********************************************************************************/
function fnIsDateGreater(newdt)
{
	var datearr =newdt.split("-");
	thedate = new Date();
		y=parseInt(datearr[2]);
		m=parseInt(datearr[0]);
		d=parseInt(datearr[1]);
		thedate.setFullYear(y,m-1,d);
		today=new Date();
		if(thedate > today)
			return false;
		else
			return true;	
}


/************************************************************************************
 
 * @name            : fnIsDateLess
 * @Purpose			: Function to Compare given Date is less than current date
 * @ return true or false
 ***********************************************************************************/
function fnIsDateLess(newdt)
{
	var datearr =newdt.split("-");
	thedate = new Date();
		y=parseInt(datearr[2]);
		m=parseInt(datearr[0]);
		d=parseInt(datearr[1]);
		thedate.setFullYear(y,m-1,d);
		today=new Date();
		if(thedate < today)
			return false;
		else
			return true;	

}


/************************************************************************************
 
 * @name            : fnExtractNumber
 * @purpose			: Function to Extract Number From given entered string.
 * @ return true or false
 ***********************************************************************************/
function fnExtractNumber(obj, decimalPlaces, allowNegative)
{
	var temp = obj.value;
	
	// avoid changing things if already formatted correctly
	var reg0Str = '[0-9]*';
	if (decimalPlaces > 0) {
		reg0Str += '\\.?[0-9]{0,' + decimalPlaces + '}';
	} else if (decimalPlaces < 0) {
		reg0Str += '\\.?[0-9]*';
	}
	reg0Str = allowNegative ? '^-?' + reg0Str : '^' + reg0Str;
	reg0Str = reg0Str + '$';
	var reg0 = new RegExp(reg0Str);
	if (reg0.test(temp)) return true;

	// first replace all non numbers
	var reg1Str = '[^0-9' + (decimalPlaces != 0 ? '.' : '') + (allowNegative ? '-' : '') + ']';
	var reg1 = new RegExp(reg1Str, 'g');
	temp = temp.replace(reg1, '');

	if (allowNegative) {
		// replace extra negative
		var hasNegative = temp.length > 0 && temp.charAt(0) == '-';
		var reg2 = /-/g;
		temp = temp.replace(reg2, '');
		if (hasNegative) temp = '-' + temp;
	}
	
	if (decimalPlaces != 0) {
		var reg3 = /\./g;
		var reg3Array = reg3.exec(temp);
		if (reg3Array != null) {
			// keep only first occurrence of .
			//  and the number of places specified by decimalPlaces or the entire string if decimalPlaces < 0
			var reg3Right = temp.substring(reg3Array.index + reg3Array[0].length);
			reg3Right = reg3Right.replace(reg3, '');
			reg3Right = decimalPlaces > 0 ? reg3Right.substring(0, decimalPlaces) : reg3Right;
			temp = temp.substring(0,reg3Array.index) + '.' + reg3Right;
		}
	}
	
	obj.value = temp;
}


/************************************************************************************
 
 * @name            : fnBlockNonNumbers
 * @purpose			: Function to Block non numbers if entered.
 * @ return true or false
 ***********************************************************************************/
function fnBlockNonNumbers(obj, e, allowDecimal, allowNegative)
{
	var key;
	var isCtrl = false;
	var keychar;
	var reg;
	
	if(window.event) {
		key = e.keyCode;
		isCtrl = window.event.ctrlKey
	}
	else if(e.which) {
		key = e.which;
		isCtrl = e.ctrlKey;
	}
	
	if (isNaN(key)) return true;
	
	keychar = String.fromCharCode(key);
	
	// check for backspace or delete, or if Ctrl was pressed
	if (key == 8 || isCtrl)
	{
		return true;
	}

	if (key == 13)
	{
		return true;
	}

	reg = /\d/;
	var isFirstN = allowNegative ? keychar == '-' && obj.value.indexOf('-') == -1 : false;
	var isFirstD = allowDecimal ? keychar == '.' && obj.value.indexOf('.') == -1 : false;
	
	return isFirstN || isFirstD || reg.test(keychar);
}

function fun_isNumeric(sText)
{
   var ValidChars = "0123456789";
   var IsNumber=true;
   var Char;

 
   for (i = 0; i < sText.length && IsNumber == true; i++) 
      { 
      Char = sText.charAt(i); 
      if (ValidChars.indexOf(Char) == -1) 
         {
         IsNumber = false;
         }
      }
   return IsNumber;
   
 }


function fnIsFloat(sText)
{
   var ValidChars = "0123456789.";
   var IsNumber=true;
   var Char;

 
   for (i = 0; i < sText.length && IsNumber == true; i++) 
      { 
      Char = sText.charAt(i); 
      if (ValidChars.indexOf(Char) == -1) 
         {
         IsNumber = false;
         }
      }
   return IsNumber;
   
 }
// this Function is use for find the maxlength
function FncheckMaxlength(obj,length){
	var i;
	if(obj.value.length > length) {
		alert("Limitation for " + obj.title + " size is " +length + " characters");
		obj.value	=	obj.value.substring(0,length);
	}
	else
		return true;
}

function isValidURL(obj,msg)//for http(s):// compulsory
{				
	var urlRegxp = /^http(s?):(([\w]+:)?\/\/)?(([\d\w]|%[a-fA-f\d]{2,2})+(:([\d\w]|%[a-fA-f\d]{2,2})+)?@)?([\d\w][-\d\w]{0,253}[\d\w]\.)+[\w]{2,4}(:[\d]+)?(\/([-+_~.\d\w]|%[a-fA-f\d]{2,2})*)*(\?(&?([-+_~.\d\w]|%[a-fA-f\d]{2,2})=?)*)?(#([-+_~.\d\w]|%[a-fA-f\d]{2,2})*)?$/;

	var strurl= obj.value;
	if (urlRegxp.test(strurl) != true)
	 {
	     alert('Invalid URL');
	     return false;
	 }
	 else {
//		 alert('Valid URL');
//	     return false;
	 }
	 	return true;
}

function alphaCheck(strName) {
     for (var i=0; i < strName.length; i++)
     {
          var ch = strName.substring(i, i+1);
          if ((ch >= "A" && ch <= "Z") ||
               (ch >= "a" && ch <= "z") ||
			   (ch >= 0 && ch <= 9) || (ch == "_") || 
			   (ch == "-") || (ch == "&") || (ch == ",") ||
			   (ch == "."))
          {
               continue;
          }
          else
          {
               return false;
          }
     }
	 return true;
}


function fnIsValidDateDiffCount(smalldate,bigdate)
{
  var smalldatearr =smalldate.split("-");
  var bigdatearr   =bigdate.split("-");  
  var diff = smalldatearr[2] - bigdatearr[2];	      
  return diff;
}
