
// Removes leading whitespaces
function LTrim( value ) {
	
	var re = /\s*((\S+\s*)*)/;
	return value.replace(re, "$1");
	
}

// Removes ending whitespaces
function RTrim( value ) {
	
	var re = /((\s*\S+)*)\s*/;
	return value.replace(re, "$1");
	
}

// Removes leading and ending whitespaces
function trim( value ) {
	
	return LTrim(RTrim(value));
	
}


//content in not empty
//pass the field and div ids.
//pass 'alert' if u want to display an alert() else pass ''.
//returns true if the field is not empty.

function checkFieldEmpty(field,displayDiv,alertBy)
{
	var fieldObj=document.getElementById(field);
	
	if(fieldObj.value==null||trim(fieldObj.value)=="")
	{
		if(alertBy=="alert")
		{
			alert("Field:"+fieldObj.name+"- cannot be empty");
			return false;
		}
		else
		{
			var divObj=document.getElementById(displayDiv);
			divObj.innerHTML="Field:"+fieldObj.name+"- cannot be empty";
			return false;
		}
	}
	
	return true;
}

//content length is not less than required

function checkFieldMinLength(field,displayDiv,alertBy,len)
{
	if(checkFieldEmpty(field,displayDiv,alertBy))
	{
		
		var fieldObj=document.getElementById(field);
		if(trim(fieldObj.value).length<len)
		{
			if(alertBy=="alert")
			{
				alert("Field:"+fieldObj.name+"- length should be atleast "+len+" characters");
				return false;
			}
			else
			{
				var divObj=document.getElementById(displayDiv);
				divObj.innerHTML="Field:"+fieldObj.name+"- length should be atleast "+len+" characters";
				return false;
			}
		}
		return true;	
	}
	else
	{
		return false;
	}
	
}


//content length is not more than required

function checkFieldMaxLength(field,displayDiv,alertBy,len)
{
	if(checkFieldEmpty(field,displayDiv,alertBy))
	{
		
		var fieldObj=document.getElementById(field);
		if(trim(fieldObj.value).length>len)
		{
			if(alertBy=="alert")
			{
				alert("Field:"+fieldObj.name+"- should not be more than "+len+" characters");
				return false;
			}
			else
			{
				var divObj=document.getElementById(displayDiv);
				divObj.innerHTML="Field:"+fieldObj.name+"- should not be more than "+len+" characters";
				return false;
			}
		}
		return true;	
	}
	else
	{
		return false;
	}
	
}

//content is numeric

function checkFieldNumeric(field,displayDiv,alertBy)
{
	if(checkFieldEmpty(field,displayDiv,alertBy))
	{
		
		var fieldObj=document.getElementById(field);
		
		var checkOK = "0123456789";
		var checkStr = trim(fieldObj.value);
		var allValid = true;
		
		for (i = 0;  i < checkStr.length;  i++)
		{
			ch = checkStr.charAt(i);
			for (j = 0;  j < checkOK.length;  j++)
			if (ch == checkOK.charAt(j))
				break;
			if (j == checkOK.length)
			{
				allValid = false;
				break;
			}
			
		}
		if(allValid==false)
		{
			if(alertBy=="alert")
			{
				alert("Field:"+fieldObj.name+"- should be numeric");
				return false;
			}
			else
			{
				var divObj=document.getElementById(displayDiv);
				divObj.innerHTML="Field:"+fieldObj.name+"- should be numeric";
				return false;
			}
		}
		return true;	
	}
	else
	{
		return false;
	}
	
}

//content is email address

function checkFieldEmail(field,displayDiv,alertBy)
{
	if(checkFieldEmpty(field,displayDiv,alertBy))
	{
		
		var fieldObj=document.getElementById(field);
		
		var checkEmail = "@.";
		var checkStr = trim(fieldObj.value);
		var EmailValid = false;
		var EmailAt = false;
		var EmailPeriod = false;
		for (i = 0;  i < checkStr.length;  i++)
		{
			ch = checkStr.charAt(i);
			if(ch=="@"&&i==0)
			{
				break;
			}
			for (j = 0;  j < checkEmail.length;  j++)
			{
				if (ch == checkEmail.charAt(j) && ch == "@")
				EmailAt = true;
				if (ch == checkEmail.charAt(j) && ch == ".")
					EmailPeriod = true;
	  			if (EmailAt && EmailPeriod)
					break;
	  			if (j == checkEmail.length)
					break;
			}
			// if both the @ and . were in the string
			if (EmailAt && EmailPeriod)
			{
				EmailValid = true;
				break;
			}
		}
		if(EmailValid==false)
		{
			if(alertBy=="alert")
			{
				alert("Field:"+fieldObj.name+"- is not a valid email address");
				return false;
			}
			else
			{
				var divObj=document.getElementById(displayDiv);
				divObj.innerHTML="Field:"+fieldObj.name+"- is not a valid email address";
				return false;
			}
		}
		return true;	
	}
	else
	{
		return false;
	}
	
}


//content is numerals seperated by ,(comma) 

function checkFieldNumericMultiple(field,displayDiv,alertBy)
{
	if(checkFieldEmpty(field,displayDiv,alertBy))
	{
		
		var fieldObj=document.getElementById(field);
		var vals=fieldObj.value.split(",");
		for(var k=0;k<vals.length;k++)
		{
		var checkOK = "0123456789";
		var checkStr = trim(vals[k]);
		var allValid = true;
		
		for (i = 0;  i < checkStr.length;  i++)
		{
			ch = checkStr.charAt(i);
			
			for (j = 0;  j < checkOK.length;  j++)
			if (ch == checkOK.charAt(j))
				break;
			if (j == checkOK.length)
			{
				allValid = false;
				break;
			}
			
		}
		if(allValid==false)
		{
			if(alertBy=="alert")
			{
				alert("Field:"+fieldObj.name+",Value:"+checkStr+"- should be numeric");
				return false;
			}
			else
			{
				var divObj=document.getElementById(displayDiv);
				divObj.innerHTML="Field:"+fieldObj.name+",Value:"+checkStr+"- should be numeric";
				return false;
			}
		}
		}
		return true;	
	}
	else
	{
		return false;
	}
	
}



//content is email addresses seperated by ,(comma)

function checkFieldEmailMultiple(field,displayDiv,alertBy)
{
	if(checkFieldEmpty(field,displayDiv,alertBy))
	{
		
		var fieldObj=document.getElementById(field);
		
		var vals=fieldObj.value.split(",");
		for(var k=0;k<vals.length;k++)
		{
		var checkEmail = "@.";
		var checkStr = trim(vals[k]);
		var EmailValid = false;
		var EmailAt = false;
		var EmailPeriod = false;
		for (i = 0;  i < checkStr.length;  i++)
		{
			ch = checkStr.charAt(i);
			if(ch=="@"&&i==0)
			{
				break;
			}
			for (j = 0;  j < checkEmail.length;  j++)
			{
				if (ch == checkEmail.charAt(j) && ch == "@")
				EmailAt = true;
				if (ch == checkEmail.charAt(j) && ch == ".")
					EmailPeriod = true;
	  			if (EmailAt && EmailPeriod)
					break;
	  			if (j == checkEmail.length)
					break;
			}
			// if both the @ and . were in the string
			if (EmailAt && EmailPeriod)
			{
				EmailValid = true
				break;
			}
		}
		if(EmailValid==false)
		{
			if(alertBy=="alert")
			{
				alert("Field:"+fieldObj.name+",Value:"+checkStr+"- is not a valid email address");
				return false;
			}
			else
			{
				var divObj=document.getElementById(displayDiv);
				divObj.innerHTML="Field:"+fieldObj.name+",Value:"+checkStr+"- is not a valid email address";
				return false;
			}
		}
		}
		return true;	
	}
	else
	{
		return false;
	}
	
}

//content is characters

function checkFieldAlphabets(field,displayDiv,alertBy)
{
	if(checkFieldEmpty(field,displayDiv,alertBy))
	{
		
		var fieldObj=document.getElementById(field);
		
		var checkOK = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
		var checkStr = fieldObj.value;
		checkStr=trim(checkStr);
		alert(checkStr);
		var allValid = true;
		
		for (i = 0;  i < checkStr.length;  i++)
		{
			ch = checkStr.charAt(i);
			for (j = 0;  j < checkOK.length;  j++)
			if (ch == checkOK.charAt(j))
				break;
			if (j == checkOK.length)
			{
				allValid = false;
				break;
			}
			
		}
		if(allValid==false)
		{
			if(alertBy=="alert")
			{
				alert("Field:"+fieldObj.name+"- should contain only alphabets");
				return false;
			}
			else
			{
				var divObj=document.getElementById(displayDiv);
				divObj.innerHTML="Field:"+fieldObj.name+"- should contain only alphabets";
				return false;
			}
		}
		return true;	
	}
	else
	{
		return false;
	}
	
}


//password contains alphabets and numbers starting with an alphabet

function checkPassword(field,displayDiv,alertBy)
{
	if(checkFieldEmpty(field,displayDiv,alertBy))
	{
	
	var fieldObj=document.getElementById(field);
	var checkOKAlphabets = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
	var checkOK = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
	var checkStr = trim(fieldObj.value);
	var allValid = true;
	for (i = 0;  i < checkStr.length;  i++)
	{
		if(i==0)
		{
			ch = checkStr.charAt(i);
			for (j = 0;  j < checkOKAlphabets.length;  j++)
			if (ch == checkOKAlphabets.charAt(j))
				break;
			if (j == checkOKAlphabets.length)
			{
				allValid = false;
				break;
			}
		}
		ch = checkStr.charAt(i);
		for (j = 0;  j < checkOK.length;  j++)
		if (ch == checkOK.charAt(j))
			break;
		if (j == checkOK.length)
		{
			allValid = false;
			break;
		}
	}
	if(allValid==false)
		{
			if(alertBy=="alert")
			{
				alert("Field:"+fieldObj.name+"- should contain alphabets and numbers, start with an alphabet");
				return false;
			}
			else
			{
				var divObj=document.getElementById(displayDiv);
				divObj.innerHTML="Field:"+fieldObj.name+"- should contain alphabets and numbers, start with an alphabet";
				return false;
			}
		}
	return true;	
	}
	else
	{
		return false;
	}
}


//selection box validation

function selectValidate(field,displayDiv,alertBy)
{
		var fieldObj=document.getElementById(field);
		
		if(fieldObj.selectedIndex<=0)
		{
			if(alertBy=="alert")
			{
				alert("Field:"+fieldObj.name+" ,select an option");
				return false;
			}
			else
			{
				var divObj=document.getElementById(displayDiv);
				divObj.innerHTML="Field:"+fieldObj.name+" ,select an option";
				return false;
			}
		}
		return true;	
}


//check url format

function checkURL(field,displayDiv,alertBy)
{
     if(checkFieldEmpty(field,displayDiv,alertBy))
	{
		
		var fieldObj=document.getElementById(field);
		var theurl=trim(fieldObj.value);
		
     	//this matches normal URL
     	var tomatch= /http:\/\/[A-Za-z0-9\/\.-:]{3,}\.[A-Za-z0-9:.]{3}/;
     	
     	var tomatch1=/http[s]?:\/\/[\w\.\-]+[:[\d]{2,6}]?[\/\w]*\.[\w]{2,4}[\?\w+=[\w+]?[\&\w+=\w+]*]?/;
     	
     	if (tomatch.test(theurl)||tomatch1.test(theurl))
     	{
         	return true;
     	}
     	else
     	{
         	if(alertBy=="alert")
			{
				alert("Field:"+fieldObj.name+" is not a valid URL");
				return false;
			}
			else
			{
				var divObj=document.getElementById(displayDiv);
				divObj.innerHTML="Field:"+fieldObj.name+"  is not a valid URL";
				return false;
			}
         	return false; 
     	}
     }
     else
	 {
		 return false; 
	 }	
}

//radio buttons validations

function checkRadio(field,displayDiv,alertBy)
{
		// require at least one radio button be selected
		
		var fieldObj=document.getElementById(field);
		var radioSelected = false;
		for (i = 0;  i < fieldObj.length;  i++)
		{
			if (fieldObj[i].checked)
			{
				radioSelected = true;
				break;
			}
		}
		if (!radioSelected)
		{
			if(alertBy=="alert")
			{
				alert("Field:"+fieldObj.name+" ,select an option");
				return false;
			}
			else
			{
				var divObj=document.getElementById(displayDiv);
				divObj.innerHTML="Field:"+fieldObj.name+" ,select an option";
				return false;
			}
		}
		return true;
}

//checkboxes validations

function checkBoxValidations(field,displayDiv,alertBy)
{
		// require at least one checkbox be selected
		
		var fieldObj=document.getElementById(field);
		var checkboxSelected = false;
		for (i = 0;  i < fieldObj.length;  i++)
		{
			if (fieldObj[i].checked)
			{
				checkboxSelected = true;
				break;
			}
		}
		if (!checkboxSelected)
		{
			if(alertBy=="alert")
			{
				alert("Field:"+fieldObj.name+" ,select atleast one option");
				return false;
			}
			else
			{
				var divObj=document.getElementById(displayDiv);
				divObj.innerHTML="Field:"+fieldObj.name+" ,select atleast one option";
				return false;
			}
		}
		return true;
}

//validates date in any format specified.

function dateValidate(field,displayDiv,alertBy,format)
{
	if(checkFieldEmpty(field,displayDiv,alertBy))
	{
	var errorstatus=false;
	var fieldObj=document.getElementById(field);
    var fieldVal=fieldObj.value;
	while(true)
	{
	//format is dd/mm/yyyy, dd-mm-yyyy, dd-mm-yy or dd/mm/yy 
	
	if(format=='dd/mm/yyyy'||format=='dd-mm-yyyy'||format=='dd-mm-yy'||format=='dd/mm/yy')
	{
		var tomatch=/\d\d?\/\d\d?\/\d\d\d\d/;
		var tomatch1=/\d\d?\-\d\d?\-\d\d\d\d/;
		var tomatch2=/\d\d?\/\d\d?\/\d\d/;
		var tomatch3=/\d\d?\-\d\d?\-\d\d/;
		
     	
     	if (tomatch.test(fieldVal)||tomatch1.test(fieldVal)||tomatch2.test(fieldVal)||tomatch3.test(fieldVal))
     	{
         	var dt=fieldVal.split("/");
         	
         	if(dt.length<3||dt.length>3)
         	{
         		dt=fieldVal.split("-");
         		if(dt.length<3||dt.length>3)
         		{
         			
         			errorstatus=true;
         			break;
         		}
         	}
         	
         	var day=dt[0];
         	var dayInt=parseInt(day);
         	if(dayInt>31||dayInt<1)
         	{
         		errorstatus=true;
         		break;
         	}
         	var mnt=dt[1];
         	var mntInt=parseInt(mnt);
         	
         	if(mntInt>12||mntInt<1)
         	{
         		errorstatus=true;
         		break;
         	}
         	var yr=dt[2];
         	var yrInt=parseInt(yr);
         	if(yrInt>9999||yrInt<1000)
         	{
         		errorstatus=true;
         		break;
         	}
        }
     	else
     	{
         	errorstatus=true;
        }
     	break;
	}//format is mm/dd/yyyy, mm-dd-yyyy, mm-dd-yy or mm/dd/yy 
	else if(format=='mm/dd/yyyy'||format=='mm-dd-yyyy'||format=='mm-dd-yy'||format=='mm/dd/yy')
	{
		var tomatch=/\d\d?\/\d\d?\/\d\d\d\d/;
		var tomatch1=/\d\d?\-\d\d?\-\d\d\d\d/;
		var tomatch2=/\d\d?\/\d\d?\/\d\d/;
		var tomatch3=/\d\d?\-\d\d?\-\d\d/;
		
     	if (tomatch.test(fieldVal)||tomatch1.test(fieldVal)||tomatch2.test(fieldVal)||tomatch3.test(fieldVal))
     	{
         	var dt=fieldVal.split("/");
         	
         	if(dt.length<3||dt.length>3)
         	{
         		dt=fieldVal.split("-");
         		if(dt.length<3||dt.length>3)
         		{
         			errorstatus=true;
         			break;
         		}
         	}
         	
         	var day=dt[1];
         	var dayInt=parseInt(day);
         	if(dayInt>31||dayInt<1)
         	{
         		errorstatus=true;
         		break;
         	}
         	var mnt=dt[0];
         	var mntInt=parseInt(mnt);
         	if(mntInt>12||mntInt<1)
         	{
         		errorstatus=true;
         		break;
         	}
         	var yr=dt[2];
         	var yrInt=parseInt(yr);
         	if(yrInt>9999||yrInt<1000)
         	{
         		errorstatus=true;
         		break;
         	}
        }
     	else
     	{
         	errorstatus=true;
        }
     	break;
	}
	else
	{
		errorstatus=true;
		break;
	}
	
	}//while ends here
	
	if(errorstatus)
	{
			if(alertBy=="alert")
			{
				alert("Field:"+fieldObj.name+" is not a valid date format");
				return false;
			}
			else
			{
				var divObj=document.getElementById(displayDiv);
				divObj.innerHTML="Field:"+fieldObj.name+"  is not a valid date format";
				return false;
			}
         	return false; 
	}
	
	return true;
	}
	else
	 {
		 return false; 
	 }	
}

//validate date range

function dateRangeValidate(field1,field2,displayDiv,alertBy,format)
{
	if(checkFieldEmpty(field1,displayDiv,alertBy)&&checkFieldEmpty(field2,displayDiv,alertBy))
	{
		//fields not empty
		var errorstatus=false;
		if(dateValidate(field1,displayDiv,alertBy,format)&&dateValidate(field2,displayDiv,alertBy,format))
		{
			//fields have correct date format
			var dt1=new Date();
			var dt2=new Date();
			
			var fieldObj1=document.getElementById(field1);
     		var fieldVal1=fieldObj1.value;
			var fieldObj2=document.getElementById(field2);
     		var fieldVal2=fieldObj2.value;
			
			var dt=fieldVal1.split("/");
         	if(dt.length<3||dt.length>3)
         	{
         		dt=fieldVal.split("-");
         	}
         	
         	if(format=='dd/mm/yyyy'||format=='dd-mm-yyyy'||format=='dd-mm-yy'||format=='dd/mm/yy')
			{
         		dt1.setDate(dt[0]);
         		dt1.setMonth(dt[1]-1);
         		dt1.setFullYear(dt[2]);
         	}
         	else
			{
				dt1.setDate(dt[1]);
         		dt1.setMonth(dt[0]-1);
         		dt1.setFullYear(dt[2]);
			}
			
			dt=fieldVal2.split("/");
         	if(dt.length<3||dt.length>3)
         	{
         		dt=fieldVal.split("-");
         	}
         	
         	if(format=='dd/mm/yyyy'||format=='dd-mm-yyyy'||format=='dd-mm-yy'||format=='dd/mm/yy')
			{
         		dt2.setDate(dt[0]);
         		dt2.setMonth(dt[1]-1);
         		dt2.setFullYear(dt[2]);
         	}
         	else
			{
				dt2.setDate(dt[1]);
         		dt2.setMonth(dt[0]-1);
         		dt2.setFullYear(dt[2]);
			}
			if(dt1>dt2)
			{
				errorstatus=true;
			}
		}
		else
		{
			errorstatus=true;
		}
		
		if(errorstatus)
		{
			if(alertBy=="alert")
			{
				alert("Date range is not valid");
				return false;
			}
			else
			{
				var divObj=document.getElementById(displayDiv);
				divObj.innerHTML="Date range is not valid";
				return false;
			}
         	return false; 
		}
		return true;
	}
	else
	{
		return false; 
	}	
}


function checkIPAddress(field,displayDiv,alertBy)
{
	var valid=false;
	if(checkFieldEmpty(field,displayDiv,alertBy))
	{
		var fieldObj=document.getElementById(field);
		var ip=trim(fieldObj.value);
		var sections=ip.split(".");
		if(sections.length!=4)
     	{
     		if(alertBy=="alert")
			{
				alert("Field:"+fieldObj.name+" ,not a valid IP address1");
				return false;
			}
			else
			{
				var divObj=document.getElementById(displayDiv);
				divObj.innerHTML="Field:"+fieldObj.name+" ,not a valid IP address";
				return false;
			}
     		return false;
     	}
     	for(var i=0;i<sections.length;i++)
     	{ 
			if(!parseInt(sections[i]))
			{
				if(alertBy=="alert")
			{
				alert("Field:"+fieldObj.name+" ,not a valid IP address2");
				return false;
			}
			else
			{
				var divObj=document.getElementById(displayDiv);
				divObj.innerHTML="Field:"+fieldObj.name+" ,not a valid IP address";
				return false;
			}
				
			}	
			var val=0;
     		val=parseInt(sections[i]);
			if(val<=0||val>255)
     		{
				if(alertBy=="alert")
			{
				alert("Field:"+fieldObj.name+" ,not a valid IP address3");
				return false;
			}
			else
			{
				var divObj=document.getElementById(displayDiv);
				divObj.innerHTML="Field:"+fieldObj.name+" ,not a valid IP address";
				return false;
			}
				return false;
     		}       	
     	}
		return true;
	}
	else
	{
		return false;
    }
}





