// VARIABLE DECLARATIONS
var digits = "0123456789";
// whitespace characters
var whitespace = " \t\n\r";
// decimal point character differs by language and culture
var decimalPointDelimiter = "."
var defaultEmptyOK = false;

function isEmpty(field, msg){	
	if (field.value==null)return true;
	if(msg==null)msg="";
	field.value = trim(field.value);	
	if (field.value==""){
		if(msg!="")alert (msg);
		field.focus();
		return false;
	}
	else if(hasSpecialCharacters(field,"Characters like Hash, Dollar, Percentage, @, Exclamation , etc. not allowed.")){		
	//	field.value="";
		return false;	
	}
	return true;
}


function isEmptyWithSpecialChar(field, msg){	
	if (field.value==null)return true;
	if(msg==null)msg="";
	field.value = trim(field.value);	
	if (field.value==""){
		if(msg!="")alert (msg);
		field.focus();
		return false;
	}
	//else if(hasSpecialCharacters(field,"Characters like Hash, Dollar, Percentage, @, Exclamation , etc. not allowed.")){		
	//	field.value="";
	//	return false;	
	//}
	return true;
}

function isValidateEmpty(field, msg){	
	if (field.value==null)return true;
	if(msg==null)msg="";
	field.value = trim(field.value);	
	if (field.value==""){
		if(msg!="")alert (msg);
		field.focus();
		return false;
	}
	else if(hasSpecialCharacters(field,"Characters like Hash, Dollar, Percentage, @, Exclamation , etc. not allowed.")){		
	//	field.value="";
		return true;	
	}
		else if(isNumeric(field,msg)){		
	//	field.value="";
		return false;	
	}
	return true;
}

// function to validate Timesheet Template Name.
function isNameEmpty(field, msg){	
	if (field.value==null)return false;
	if(msg==null)msg="";
	field.value = trim(field.value);	
	if (field.value==""){
		if(msg!="")alert (msg);
		field.focus();
		return true;
	}
	else if(hasSpecialCharactersName(field,"Characters like Hash, Dollar, Percentage, @, Exclamation , etc. not allowed.")){		
		return true;	
	}
	return false;
}


function isEmptyProject(field, msg){	
	if (field.value==null)return false;
	if(msg==null)msg="";
	field.value = trim(field.value);	
	if (field.value==""){
		if(msg!="")alert (msg);
		field.focus();
		return true;
	}
	else if(hasSpecialCharactersProjectID(field,"Characters like Percentage, Exclamation etc. not allowed.")){		
		return true;	
	}
	return false;
}


function isEmptyLogin(field, msg){	
	if (field.value==null)return false;
	if(msg==null)msg="";
	field.value = trim(field.value);	
	if (field.value==""){
		if(msg!="")alert (msg);
		field.focus();
		return true;
	}
	else if(hasSpecialCharactersLogin(field,"Characters like Hash, Dollar, Percentage, @, Exclamation , etc. not allowed.")){		
		return true;	
	}
	return false;
}

function isEmptyPwd(field, msg){		
	if (field.value==null)return false;
	if(msg==null)msg="";
	field.value = trim(field.value);	
	if (field.value==""){
		if(msg!="")alert (msg);
		field.focus();
		return true;
	}
	return false;
}

function isDate(day, month, year, errorMsg){
	//parameters should be passed in dd, mm & yyyy format or in dd, Mon, yyyy format to this Function
	if (day.value=="" && month.value=="" && year.value == ""){
	alert(errorMsg);
	return false;}
	var enteredDate = new Date(year.value+"/"+month.value+"/"+day.value);	
	if (enteredDate.getDate()==day.value){return true;}
	alert(errorMsg);
	day.focus();
	return false;
}


function Isinteger(field, msg){
	if(field.value ==""){
	alert (msg);
	field.focus();	
	return false;}
	var enteredString = field.value;
	var str = enteredString.toString();
	var intNumber = parseInt(str);
	if (!(intNumber.toString()== str)){
		alert (msg);
		field.focus();
		return false;
	}
	return true;	
}


function isPositiveInteger(field, msg){	
	if(field.value ==""){return false;}
	if(!isInteger(field, msg)){return false;}
	if(field.value<-1){
		alert(msg);
		field.focus();
		return false;		
	}
	return true;
}
	

function isNumeric(field, msg){		
	var enteredString = field.value;
	var num = new Number(enteredString.toString());		
	if (isNaN(num)){
		alert (msg);
		field.focus();
		return false;	
	}
	return true;	
}


function checkDecimalLoc(field,msg) {
	if(field.value.lastIndexOf(".")>10)
	{
	alert(msg);
	field.focus();
	return(false);
	}
	if(field.value.length > 10 )
	{
		if (field.value.lastIndexOf(".")< 0 )
		{
		alert(msg);
		field.focus();
		return(false);
	   }
	}   
	return(true);
}


function isGreaterThan(field, msg){	
	var enteredString = field.value;
	var num = new Number(enteredString.toString());		
	if (isNaN(num)){
		alert (msg);
		field.focus();
		return false;	
	}
	if (enteredString.indexOf("-")!=-1){	//Should be a number and should not accept decimals.		
		alert("Percentage cannot be a negative value.");
		field.focus();
		return false;				
	}	
	
	if(field.value>100){
		alert(msg);
		field.focus();
		return false;		
	}
		
	return true;
}


function isPositiveNumber(field, msg,intPosValue){	
	if(intPosValue==null)intPosValue=1;
	
	var enteredString = field.value;	
	var num = new Number(enteredString.toString());	
	enteredString.value=trim(enteredString.value);
	if (enteredString.length==0) return true;
	
	if (isNaN(num) || (enteredString.indexOf(".")!=-1)){	//Should be a number and should not accept decimals.		
		alert (msg);
		field.focus();
		return false;				
	}	
	else if(num<intPosValue){	//Number should be greater than zero.
		alert (msg);
		field.focus();
		return false;	
	} 
	return true;
}


function isDecimal(field, msg,intPosValue){	
	if(intPosValue==null)intPosValue=1;
	
	var enteredString = field.value;	
	var num = new Number(enteredString.toString());	
	enteredString.value=trim(enteredString.value);
	if (enteredString.length==0) return true;
	
	if (isNaN(num)){	//Should be a number 		
		alert (msg);
		field.focus();
		return false;				
	}	
	else if(num<intPosValue){	//Number should be greater than zero.
		alert (msg);
		field.focus();
		return false;	
	} 
	return true;
}


function isAnyCheckSelected(msg){ 
	var flagCheck;
	flagCheck=0;
	var checkSel = false;
	for (var i=0;i < document.forms[0].elements.length;i++)	{
		var e = document.forms[0].elements[i];
		if (e.type == "checkbox"){	
			if (e.checked){
				checkSel = true;
				flagCheck=flagCheck+1;
			}
		}
	}
	if (flagCheck==0){
		alert(msg);
		return (false);
	}
	return(true);
}

function isToGreaterThanFrom(FromField,ToField){	// require that the To Field be greater than or equal to the From Field
    FromDate = new Date(FromField.toString());
	ToDate = new Date(ToField.toString());
	if (ToDate.valueOf() < FromDate.valueOf())
	{
		alert ("From Date cannot be greater than To Date.");
		return (false);
	}
	return(true);
}


function showDate(){
	dt = new Date();   //Gets today's date right now (to the millisecond).
	month = dt.getMonth()+1;
	day = dt.getDate();
	year = dt.getFullYear();
	today = ( year + '/' + month + '/' + day );
}


function hasSpecialCharacters(field, errorMsg){   
	var SpecialCharacters="`~!@#$%^&*()_-=+><{}[]|=?':;\\/,'.\"";
	if (field.value.length >= 0)	{
		for(i=0; i<SpecialCharacters.length; i++)	{
			if(field.value.indexOf(SpecialCharacters.substr(i, 1))>= 0)	{ 
				alert (errorMsg);
				field.focus();
				return true;
			}
		}
		return false;
	}	
	return false;
}


function checkSpecial(field, errorMsg){   
	var chkCharacters="`~^&=+><{}'[]|=\"";
	if (field.value.length >= 0)	{
		for(i=0; i<chkCharacters.length; i++)	{
			if(field.value.indexOf(chkCharacters.substr(i, 1))>= 0)	{ 
				alert (errorMsg);
				field.focus();
				return true;
			}
		}
		return false;
	}	
	return false;
}

function hasSpecialCharactersLogin(field, errorMsg){   
	var SpecialCharacters="_`~!#@$%^&*()=+><{}[]|=?':;\\\".,/";
	if (field.value.length >= 0)	{
		for(i=0; i<SpecialCharacters.length; i++)	{
			if(field.value.indexOf(SpecialCharacters.substr(i, 1))>= 0)	{ 
				alert (errorMsg);
				field.focus();
				return true;
			}
		}
		return false;
	}	
	return false;
}

function hasSpecialCharactersProjectID(field, errorMsg){   
	var SpecialCharacters="`&~!%^()=+><{}[]|=?':;\\,'.\"";
	if (field.value.length >= 0)	{
		for(i=0; i<SpecialCharacters.length; i++)	{
			if(field.value.indexOf(SpecialCharacters.substr(i, 1))>= 0)	{ 
				alert (errorMsg);
				field.focus();
				return true;
			}
		}
		return false;
	}	
	return false;
}


function hasSpecialCharactersPwd(field, errorMsg){   
	var SpecialCharacters="`~!@%^&()=+-><{}[]|=?':;\\/,'.\"";
	if (field.value.length >= 0)	{
		for(i=0; i<SpecialCharacters.length; i++)	{
			if(field.value.indexOf(SpecialCharacters.substr(i, 1))>= 0)	{ 
				alert (errorMsg);
				field.focus();
				return true;
			}
		}
		return false;
	}	
	return false;
}


function hasSpecialCharactersName(field, errorMsg){   
	var SpecialCharacters="`~!@#$%^&*()=+><{}[]|=?':;\\/,'.\"";
	if (field.value.length >= 0)	{
		for(i=0; i<SpecialCharacters.length; i++)	{
			if(field.value.indexOf(SpecialCharacters.substr(i, 1))>= 0)	{ 
				alert (errorMsg);
				field.focus();
				return true;
			}
		}
		return false;
	}	
	return false;
}


function isSelectEmpty(field, errorMsg){
	if ( field.selectedIndex==-1 || field[field.selectedIndex].value=="" || field[field.selectedIndex].value==null || field[field.selectedIndex].value=="-1")	{
		alert (errorMsg);
		field.focus();
		return true;
	}
	return false;
}


function hasSpace(field, errorMsg){   
	var Space=" ";
	if (field.value.length > 0)	{
		if(field.value.indexOf(Space)>= 0) 	{ 
			alert (errorMsg);
			field.focus();
			return true;
		}
		return false;
	}	
	return false;
}


function isLessThanToday(From_Day, From_Month, From_Year, errorMsg){
	if(!isDate(From_Day, From_Month, From_Year, "From Date is Invalid !")){return false;}
	var enteredDate=new Date(From_Year.value+"/"+From_Month.value +"/"+From_Day.value);
	sysDate = new Date();
	if (enteredDate.valueOf() < sysDate.valueOf()){	
		alert (errorMsg);
		From_Day.focus();
		return true;
	}
	return false;
}

function isGreaterThanToday(From_Day, From_Month, From_Year, errorMsg){
	if(!isDate(From_Day, From_Month, From_Year, "From Date is Invalid !")){return false;}
	var enteredDate=new Date(From_Year.value+"/"+From_Month.value +"/"+From_Day.value);
	sysDate = new Date();
	if (enteredDate.valueOf() > sysDate.valueOf()){	
		alert (errorMsg);
		From_Day.focus();
		return true;
	}
	return false;
}

function isToDateGreaterThanFromDate(From_Day, From_Month, From_Year, To_Day, To_Month, To_Year, errorMsg){
	var ddFromVal =From_Day[From_Day.selectedIndex].value;
	var mmFromVal =From_Month[From_Month.selectedIndex].value;
	var yyFromVal =From_Year[From_Year.selectedIndex].value;
	var ddToVal =To_Day[To_Day.selectedIndex].value;
	var mmToVal =To_Month[To_Month.selectedIndex].value;
	var yyToVal =To_Year[To_Year.selectedIndex].value;
	
	if ( ddFromVal =="" && mmFromVal =="" && yyFromVal == "" && ddToVal =="" && mmToVal =="" && yyToVal == "" ){return true;}
	if ( ddFromVal ==null && mmFromVal ==null && yyFromVal == null && ddToVal ==null && mmToVal ==null && yyToVal == null){return true;}
	
	var FromDate=new Date(yyFromVal, mmFromVal, ddFromVal);
	var ToDate=new Date(yyToVal, mmToVal, ddToVal);

	if(FromDate > ToDate) {
		alert(errorMsg);
		To_Day.focus();
		return false;
	}
	return true;
}

function trim(inputString) {
   // Removes leading and trailing spaces from the passed string. Also removes
   // consecutive spaces and replaces it with one space. If something besides
   // a string is passed in (null, custom object, etc.) then return the input.
   if (typeof inputString != "string") { return inputString; }
   var retValue = inputString;
   var ch = retValue.substring(0, 1);
   while (ch == " ") { // Check for spaces at the beginning of the string
      retValue = retValue.substring(1, retValue.length);
      ch = retValue.substring(0, 1);
   }
   ch = retValue.substring(retValue.length-1, retValue.length);
   while (ch == " ") { // Check for spaces at the end of the string
      retValue = retValue.substring(0, retValue.length-1);
      ch = retValue.substring(retValue.length-1, retValue.length);
   }
   while (retValue.indexOf("  ") != -1) { // Note that there are two spaces in the string - look for multiple spaces within the string
      retValue = retValue.substring(0, retValue.indexOf("  ")) + retValue.substring(retValue.indexOf("  ")+1, retValue.length); // Again, there are two spaces in each of the strings
   }
   return retValue; // Return the trimmed string back to the user
} // Ends the "trim" function


//Allow greater side, but does not allow lesser side.
function checklength(field,lnglength,msg)
{				
	if(field.value.length<lnglength) 
	{
		alert(msg);
		field.focus();
		return true;
	}	
	return false;
}

//Allow less side, but does not allow greater side.
function checktextlength(field,lnglength,msg)
{	
	if(field.value.length>lnglength) 
	{
		var txt;
		txt = field.value; 
		//field.value = txt.substring(0,499);
		alert(msg);
		field.focus();
		return true;
	}	
	return false;
}

//returns the selected value of the select box.
function GetSelectedValue(box){
  var boxText = "";
  for(var i=0; i<box.options.length; i++){
    if(box.options[i].selected && box.options[i].value != ""){
      boxText = box.options[i].value;
    }
  }
  return boxText;
}

function isemail (s) {
	if (isempty(s)) 
       if (isemail.arguments.length == 1) return defaultEmptyOK;
       else return (isemail.arguments[1] == true);
   
    // is s whitespace?
    if (isWhitespace(s)) return false;
    
    // there must be >= 1 character before @, so we
    // start looking at character position 1 
    // (i.e. second character)
    var i = 1;
    var sLength = s.length;

    // look for @
    while ((i < sLength) && (s.charAt(i) != "@")){
		i++;
    }

    if ((i >= sLength) || (s.charAt(i) != "@")) return false;
    else i += 2;

    // look for .
    while ((i < sLength) && (s.charAt(i) != ".")){
		i++;
    }

    // there must be at least one character after the .
    if ((i >= sLength - 1) || (s.charAt(i) != ".")) return false;
    else return true;
}

// Returns true if string s is empty or 
// whitespace characters only.

function isWhitespace (s){   

   var i;

    // Is s empty?
    if (isempty(s)) return true;

    // Search through string's characters one by one
    // until we find a non-whitespace character.
    // When we do, return false; if we don't, return true.

    for (i = 0; i < s.length; i++)
    {   
        // Check that current character isn't whitespace.
        var c = s.charAt(i);

        if (whitespace.indexOf(c) == -1) return false;
    }

    // All characters are whitespace.
    return true;
}


// Check whether string s is empty.
function isempty(s){   
   return ((s == null) || (s.length == 0))
}


// (0 .. 9).// Returns true if character c is a digit 
function isDigit (c){   
   return ((c >= "0") && (c <= "9"))
}


function isInteger (s){   
    var i;

    if (isEmpty(s)) 
       if (isInteger.arguments.length == 1) return defaultEmptyOK;
       else return (isInteger.arguments[1] == true);

    // Search through string's characters one by one
    // until we find a non-numeric character.
    // When we do, return false; if we don't, return true.

    for (i = 0; i < s.length; i++)
    {   
        // Check that current character is number.
        var c = s.charAt(i);

        if (!isDigit(c)) return false;
    }

    // All characters are numbers.
    return true;
}


function CheckFloatNumber(field,msg,decimals){	
	if(decimals==null)decimals=2;
	if(!IsDecimalNumber(field.value,decimals))
	{
		alert(msg);
		field.value="";
		field.focus();
		return false;
	}	
	return true;
}


function IsDecimalNumber(s,decimals){			
	var lngdotCount=0; //To check the no. of dots.
	var lngdecCount=0;//To check the no. of decimals
	
	//Checking whether the entered number is a valid Numeric Value.
	var num = new Number(s.toString());		
	if (isNaN(num)) return false;
	if(num<=0) return false;
	
	if(decimals==null)decimals=2;
	for (i = 0; i < s.length; i++)
    {   
        //Character at the index.
		var c = s.charAt(i);
		
        if (c =='.') 
        {
			lngdotCount++;
			if(lngdotCount>1) return false;
        }
        else if(lngdotCount==1)
        {
			lngdecCount++;
			if (lngdecCount>decimals) return false;
        }
    }

	if (!isFloat(s))
	{
		return false;
	}
	return true;
}


function isFloat (s){   
   
   var i;
   var seenDecimalPoint = false;

    if (isEmpty(s)) 
       if (isFloat.arguments.length == 1) return defaultEmptyOK;
       else return (isFloat.arguments[1] == true);

    if (s == decimalPointDelimiter) return false;

    // Search through string's characters one by one
    // until we find a non-numeric character.
    // When we do, return false; if we don't, return true.

    for (i = 0; i < s.length; i++)
    {   
        // Check that current character is number.
        var c = s.charAt(i);

        if ((c == decimalPointDelimiter) && !seenDecimalPoint) seenDecimalPoint = true;
        else if (!isDigit(c)) return false;
    }

    // All characters are numbers.
    return true;
}


function GetSelectedOption(box){
  var boxText = "";
  for(var i=0; i<box.length; i++){
    if(box[i].checked){
      boxText = box[i].value;
    }
  }
  return boxText;
}

function isWebSite(field, errorMsg)
{			
	if (field.value==""){return true;}
	if(field.value.lastIndexOf("@")>0) {return true;}
	
	hasLength = false;
	var hasAt = false;
	var hasDot = false;
	if(field.value.length>5){hasLength = true;}
	if(field.value.lastIndexOf(".")>(field.value.length-2))
	{
		alert(errorMsg);
		field.focus();
		return false;
	}	

	alert(errorMsg);
	field.focus();
	return false;
}

function JumpToNext(ctlCurrent,ctlNext){	
	if(event==null) return true;
	if(event.keyCode==9||event.keyCode==16||event.keyCode==35||event.keyCode==36||event.keyCode==45) return true;
		
	if(ctlCurrent.value.length==ctlCurrent.maxLength) 
	{	
		if(ctlNext.value.length==ctlNext.maxLength)
			ctlNext.select();
		else
			ctlNext.focus();							
	}	
}

function DisableControl(ctlControl) {							
	ctlControl.onfocus=ctlControl.blur;	
	ctlControl.disabled=true;		
	ctlControl.enabled=false;	
}

function EnableControl(ctlControl) {
	ctlControl.onfocus=null;		
	ctlControl.disabled=false;
	ctlControl.enabled=true;
}

function toggleVis(btn){
	// Set the default "show" mode to that specified by W3C DOM
	// compliant browsers

	var showMode = 'table-cell';

	// However, IE5 at least does not render table cells correctly
	// using the style 'table-cell', but does when the style 'block'
	// is used, so handle this

	if (document.all) showMode='block';

	// This is the function that actually does the manipulation
	// First isolate the checkbox by name using the
	// name of the form and the name of the checkbox

	btn   = document.forms['tcol'].elements[btn];

	// Next find all the table cells by using the DOM function
	// getElementsByName passing in the constructed name of
	// the cells, derived from the checkbox name

	cells = document.getElementsByName('t'+btn.name);

	// Once the cells and checkbox object has been retrieved
	// the show hide choice is simply whether the checkbox is
	// checked or clear

	mode = btn.checked ? showMode : 'none';

	// Apply the style to the CSS display property for the cells

	for(j = 0; j < cells.length; j++) cells[j].style.display = mode;
	
}// End of function

//This function moves the elements from one select box to another
	function moveSelectedOptions(from,to) {
		var blnisSelected = false;
		for (var i=0; i<from.options.length; i++) {
			var o = from.options[i];
			if (o.selected) {
				blnisSelected = true;
				if (!hasOptions(to)) { var index = 0; } else { var index=to.options.length; }
					to.options[index] = new Option( o.text, o.value, false, false);
			}
		}
		// Delete them from original
		for (var i=(from.options.length-1); i>=0; i--) {
			var o = from.options[i];
			if (o.selected) {
				from.options[i] = null;
			}
		}
		if (blnisSelected == false) {
			alert("Select an item.");
			return;
		}
		from.selectedIndex = -1;
		to.selectedIndex = -1;
	}
	function hasOptions(obj) {
		if (obj!=null && obj.options!=null) { return true; }
		return false;
	}

	function moveAllOptions(from,to) {
		selectAllOptions(from);
		if (arguments.length==2) {
			moveSelectedOptions(from,to);
			}
		else if (arguments.length==3) {
			moveSelectedOptions(from,to,arguments[2]);
			}
		else if (arguments.length==4) {
			moveSelectedOptions(from,to,arguments[2],arguments[3]);
			}
	}

	function selectAllOptions(obj) {
		if (!hasOptions(obj)) { return; }
		for (var i=0; i<obj.options.length; i++) {
			obj.options[i].selected = true;
		}
	}

	function disableCopyPaste() {
		var pressedKey = String.fromCharCode(event.keyCode).toLowerCase();
		if (event.ctrlKey && (pressedKey == "v")) {
			event.returnValue = false;
		}
	}
	
	function isFieldEmpty(field, msg){	
	if (field.value==null)return true;
	if(msg==null)msg="";
	field.value = trim(field.value);	
	if (field.value==""){
		if(msg!="")alert (msg);
		field.focus();
		return true;
	}
	else if(hasSpecialCharacters(field,"Characters like Hash, Dollar, Percentage, @, Exclamation , etc. not allowed.")){		
	//	field.value="";
		return true;	
	}
	return false;
}