String.prototype.reverse = function() {
    var s = "";
    var i = this.length;
    while (i>0) {
        s += this.substring(i-1,i);
        i--;
    }
    return s;
}

/*
Name Validations:
1) All alphabets(a-z A-Z) are allowed.
2) Space,Dot and Dash are allowed.
3) All numbers (0-9) are allowed.      
*/
String.prototype.nameValidation = function() {
var x = this;
var reg = new RegExp('^[a-zA-Z0-9 \'\"\&\(\)\.-\/]+$');
if ( reg.test(x) == false  )
    return false;
else
    return true;
}

/*
Address Validations:
1) All alphabets(a-z A-Z) are allowed.
2) Space,Dot, Comma, Slash and Dash are allowed.
3) All numbers (0-9) are allowed.      
*/
String.prototype.addressValidation = function() {
var x = this;
var reg = new RegExp('^[a-zA-Z0-9 \'\,\\\"\&\(\)\.-\/]+$');
if ( reg.test(x) == false  )
    return false;
else
    return true;
}


/*
OnlyAlpha Validations:
1) All alphabets(a-z A-Z) are allowed.
2) Space,Dot and Dash are allowed.     
*/
String.prototype.onlyAlphaValidation = function() {
var x = this;
var reg = new RegExp('^[a-zA-Z \'\"\&\(\)\.-\/]+$');
if ( reg.test(x) == false  )
    return false;
else
    return true;
}

/*
Alphanumeric Validations:
1) All alphabets(a-z A-Z) and numbers(0-9) are allowed.
2) Space is allowed.
*/
String.prototype.alphaNumValidation = function() {
	var x = this;
	var reg = new RegExp('^[a-zA-Z0-9]+$');
	if (reg.test(x)) {
	    return true;
	}else return false;
}

/*
Numeric Validations:
1) For all integers only 0-9 are allowed
2) For all fractions 0-9 and '.' and ',' are allowed.

Only zero or one decimal separator should be allowed
*/
String.prototype.numericValidation = function() {
	var x = this;
	
	var reg = new RegExp('^[0-9]*\.?[0-9]*$');
	
	if (reg.test(x)) {
	    return true;
	}
	else return false;
}

/*
Email validation
*/
String.prototype.emailValidation = function() {

	var x = this;
	var reg = new RegExp('^[a-zA-Z]*[A-Za-z0-9_\.-]*[a-zA-Z0-9]@[a-zA-Z0-9]+[\w\.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z]$');
	if (reg.test(x)) {
	    return true;
	}else return false;
}

/*
Account number Validations:
1) For all integers only 0-9 are allowed

*/
String.prototype.accNoValidation = function() {
var x = this;
var reg = new RegExp('^[0-9]*$');
if ( reg.test(x) == false  )
    return false;
else
    return true;
}

/*
Description
Amount Validations:
1) User enters "COMMA" as a Decimal seperator and "DOT" as a Thousand Seperator.
2) If either COMMA or DOT is not entered in field, all the Amount 
fields should be formatted with "COMMA" as a Decimal seperator and 
"DOT" as a Thousand seperator. So a DOT should be present for Thousand, 
Million, Billion.. (Example: #.###.###,##)

Algorithm
if the input does not contain the decimal separator ','
    append ",00" to the input (number) string
work on the 1234.567 part of 1234.567,00
if all the separators are in place (as in 1.234.567)
    worry not
else
    do the dirty work of deleting the separators
return the formatted string
*/
String.prototype.amountValidation = function() {
    var inputNum = this
    inputNum = String(roundNumber(inputNum,2));		
    if(inputNum.indexOf( '.' ) == -1 )
		inputNum = inputNum + ".00";
    else  if( inputNum.indexOf( '.' ) == 0 )
		inputNum = "0" + inputNum

    var myArray = inputNum.split(".");
    var part1 = myArray[0]
    var part2 = myArray[1]

    var reg = new RegExp('^[0-9]{1,3}([,][0-9]{3})*$');
    if ( reg.test(part1) == false ) {
		part1 = part1.replace( /\,/g, "" )
		var i = part1.length
		if( i == 0 )
		    part1 = "0"
	
    }
    if (part2.length == 1) {
    	part2 = part2+"0";
    }
    
    return part1 + "." + part2
}

/*
Description
Amount Calculation i.e dutch to Indian
Convert 123.235.168,57 to 123235168.57

*/
String.prototype.amountCalculation = function() {
    var inputNum = this
	inputNum = inputNum.replace( /\./g, "" )
	inputNum = inputNum.replace( /,/g, "." )
    return inputNum
}


/* month year validation function
	description:
	to validate monthyear
*/

VsnlDate.prototype.monthyearValidation = function(val) {
    var inputDate = this.input
  
    if (inputDate.length < 1) {
		return false;
    }
	
    inputDate = inputDate.replace( /\./g, "-" )
    inputDate = inputDate.replace( /\//g, "-" )
    
    var strDateArray;
    if (inputDate.indexOf("-") != -1) {
		strDateArray = inputDate.split("-");
			if (strDateArray.length != 2) {
	    		return false;
			} else {
				if (val==0){
				    this.year = strDateArray[0];
				    this.month = strDateArray[1];
			    }
			    else {	
				    this.month = strDateArray[0];
				    this.year = strDateArray[1];
				}		    
			}
    } else {
	    if (inputDate.length == 6) {
	    	if (val==0){
				this.year = inputDate.substr(0,4);
				this.month = inputDate.substr(2);			
			}
			else {
				this.month = inputDate.substr(0,2);			
				this.year = inputDate.substr(4);				
			}
	    } else {
	    	return false;
	    }
    }
    
    var intMonth = parseInt(this.month, 10);
    var intYear = parseInt(this.year, 10);
    
    if (isNaN(intMonth) ||	isNaN(intYear)) {
    	return false;
    }
    if (intMonth > 12 || intMonth < 1) {
		return false;
    }
        
    if( intMonth < 10 )
		this.month = "0" + intMonth;
    if( intYear < 999 )
		return false
		
    return true
}

function VsnlDate(input) { 
    this.input = input 
    this.day = ""
    this.month = ""
    this.year = ""

// These are the methods of the VSNLDate object
// dateValidation, vsnlformat
}


/*
Date Validations:
1) User can enter Dates in following formats with passing dateType = 0
	dd-mm-yyyy, dd/mm/yyyy, dd.mm.yyyy, ddmmyyyy, 
2) User can enter Dates in following formats with passing dateType = 1
	yyyy-mm-dd, yyyymmdd, yyyy/mm/dd, yyyy.mm.dd 
3) After user's input, if the date is understood by the system it will be 
	automatically format the date to dd-mm-yyyy
*/
VsnlDate.prototype.dateValidation = function(dateType) {
    var inputDate = this.input
  	var dateType = dateType
    if (inputDate.length < 1) {
		return false;
    }
	
    inputDate = inputDate.replace( /\./g, "-" )
    inputDate = inputDate.replace( /\//g, "-" )
    
    var strDateArray;
    if (inputDate.indexOf("-") != -1) {
		strDateArray = inputDate.split("-");
			if (strDateArray.length != 3) {
	    		return false;
			} else {
				if(dateType==1){
			    	this.year = strDateArray[0];
			    	this.month = strDateArray[1];
			    	this.day = strDateArray[2];
			    }else{
			    	this.day = strDateArray[0];				    	
			    	this.month = strDateArray[1];
			    	this.year = strDateArray[2];	    
			    }
			}
    } else {
	    if (inputDate.length == 8) {
	    	if(dateType==1){
				this.year = inputDate.substr(0,4);
				this.month = inputDate.substr(4,2);
				this.day = inputDate.substr(2);	
			}else{
				this.day = inputDate.substr(0,2);	
				this.month = inputDate.substr(2,2);
				this.year = inputDate.substr(4);
			}	    
	    } else {
	    	return false;
	    }
    }

    var intday = parseInt(this.day, 10);
    var intMonth = parseInt(this.month, 10);
    var intYear = parseInt(this.year, 10);
    
    if (isNaN(intday) || isNaN(intMonth) ||	isNaN(intYear)) {
    	return false;
    }
    if (intMonth > 12 || intMonth < 1) {
		return false;
    }
    if ((intMonth == 1 ||
	 intMonth == 3 ||
	 intMonth == 5 ||
	 intMonth == 7 ||
	 intMonth == 8 ||
	 intMonth == 10 ||
	 intMonth == 12) &&
	 (intday > 31 ||
	 intday < 1)) {
		return false;
    }
    if ((intMonth == 4 ||
	intMonth == 6 ||
	intMonth == 9 ||
	intMonth == 11) &&
	(intday > 30 ||
	intday < 1)) {
		return false;
    }
    if (intMonth == 2) {
		if (intday < 1) {
		   		return false;
		}
		if (LeapYear(intYear) == true) {
		    if (intday > 29) {
				return false;
			}
		} else {
		    if (intday > 28) {
				return false;
	    }
	}
    }
    if( intday < 10 )
	this.day = "0" + intday;
    if( intMonth < 10 )
	this.month = "0" + intMonth;
    if( intYear < 999 )
	return false
    return true
}

function LeapYear(intYear) {
    if (intYear % 100 == 0) {
	if (intYear % 400 == 0) { return true; }
    } else {
	if ((intYear % 4) == 0) { return true; }
    }
    return false;
}

// yyyy-mm-dd
VsnlDate.prototype.vsnlformat = function() {
    return this.year + "-" + this.month + "-" + this.day 
}

// dd-mm-yyyy
VsnlDate.prototype.chequeDateFormat = function() {
    return this.day + "-" + this.month + "-" + this.year 
}

// takes two FredDate objects and returns true or false
function dateComparison(fromDate, comparisonType, toDate, dateType) {
	
    // it is important that both the validation be run, flaw with FredDate object, really
    if((fromDate.dateValidation(dateType) == true) &&
    	(toDate.dateValidation(dateType) == true)) {
    	var a=5
    } else {
    	return false
    }
    
    var absFromDate = new Date(parseFloat(fromDate.year), parseFloat(fromDate.month) -1, parseFloat(fromDate.day)) 
    var absToDate = new Date(parseFloat(toDate.year), parseFloat(toDate.month) -1, parseFloat(toDate.day)) 
	
    return eval( "absFromDate " +  comparisonType + " absToDate" )
}

// gives current date in dd-mm-yyyy format
function fredCurrentDate() {
var dDate = new Date();
var month = dDate.getMonth() + 1;
var day = dDate.getDate();	
var year = dDate.getFullYear();
var niceDate = day + "-" + month + "-" + year
return niceDate

}



//-------------------------
function VsnlForm(input) { 
    this.form = input 
    this.errMsgs = new Array() 
	this.fieldValue = ""

// These are the methods of the VsnlForm object
// hasData, putErrMsg, isError, testMyMask, getValue, getDropDownValueList
}

VsnlForm.prototype.hasData = function(field) {	
    var isValid = true;
    var focusField = null;
    var i = 0;   
    var myField = this.form[field]     
    
    if (myField == undefined)
		return false	
    if (myField == null)
		return false
    
    var fieldType = myField.type;
	
    if ((fieldType == 'hidden' ||
	fieldType == 'text' ||
	fieldType == 'textarea' ||
	fieldType == 'file' ||
	fieldType == 'checkbox' ||
	fieldType == 'select-one' ||
	fieldType == 'password') ) {
		
		var fieldValue = trim(myField.value);
		var value = '';
		// get field's value
		if (fieldType == "select-one") {
	    	var si = myField.selectedIndex;
	    	if (si >= 0) {
				value = myField.options[si].value;
	    	}
		} else if (fieldType == 'checkbox') {
	    	if (myField.checked) {
				value = myField.value;
	    	}
		} else {
	    	value = fieldValue;
		}
		if (trim(value).length == 0 || trim(value)== 0) {
	    	if (i == 0) {
				focusField = myField;
	    	}
	    	isValid = false;
		}
    } else if (fieldType == "select-multiple") { 
		
		var numOptions = myField.options.length;
		var lastSelected=-1;
		for(var loop=numOptions-1;loop>=0;loop--) {
	    	if(myField.options[loop].selected) {
				lastSelected = loop;
				value = myField.options[loop].value;
				break;
	    	}
		}
		if(lastSelected < 0 || trim(value).length == 0) {
	    	if(i == 0) {
				focusField = myField;
	    	}
	    	isValid=false;
		}
    } else if ((myField.length > 0) && (myField[0].type == 'radio' || myField[0].type == 'checkbox')) {
		
		isChecked=-1;
		for (var loop=0;loop < myField.length;loop++) {
		    if (myField[loop].checked) {
				isChecked=loop;
				break; // only one needs to be checked
	    	}
		}
		if (isChecked < 0) {
		    if (i == 0) {
				focusField = myField[0];
	    	}
	    	isValid=false;
		}
    } else if ( fieldType == 'radio' && myField.length == undefined)  {
    	if (myField.checked) {
    		isValid=true;
    	}else {
    		isValid=false;
    	}
    } 
if (this.errMsgs.length > 0 && focusField != null && typeof(focusField) == "object") {   
   focusField.focus();
}
return isValid;
}

VsnlForm.prototype.putErrMsg = function(message) {
iErr = this.errMsgs.length
this.errMsgs[iErr++] = message
}

VsnlForm.prototype.isError = function() {
var i = this.errMsgs.length
if (i == 0 )
    return false
return true
}

// Trim whitespace from left and right sides of s.
function trim(s) {
if (s == null)
    return ""
return s.replace( /^\s*/, "" ).replace( /\s*$/, "" );
}

VsnlForm.prototype.testMyMask = function(myRegEx, input) {
    var reg = new RegExp(myRegEx);
    if (reg.test(input)  )
		return true
	return false
}

// get the non-empty value from drop down
VsnlForm.prototype.getDropDownValueList = function(field) {
    var myField = this.form[field]
    if (myField == null)
	return null
    var myDDArray = new Array()
    var fieldType = myField.type
    if (fieldType == 'select-one') {
	var j = 0
	for (var i = 0; i < myField.length; i++) {
	    value = myField.options[i].value
	    value = trim(value)
	    if (value != "")	
		myDDArray[j++] = myField.options[i].value
	}
    }
return myDDArray
}

VsnlForm.prototype.getValue = function(field) {
    myField = this.form[field]
    if (myField == null)
		return ""
     return trim(myField.value)
}

function isEmpty(value) 
{
	if (value==null)
	{
		return true;
	} 
	else if (trim(value)=="")
	{
		return true;
	}
	else
		return false;
}
function trim(str)
{
   return str.replace(/^\s*|\s*$/g,"");
}


function isDigit(theDigit) 
{ 
var digitArray = new Array('0','1','2','3','4','5','6','7','8','9'),j; 

for (j = 0; j < digitArray.length; j++) 
{if (theDigit == digitArray[j]) 
return true 
} 
return false 

} 
/*************************************************************************/ 
/*Function name :isPositiveInteger(theString) */ 
/*Usage of this function :test for an +ve integer */ 
/*Input parameter required:thedata=string for test whether is +ve integer*/ 
/*Return value :if is +ve integer,return true */ 
/* else return false */ 
/*function require :isDigit */ 
/*************************************************************************/ 
function isPositiveInteger(theString) 
{ 
var theData = new String(theString) 

if (!isDigit(theData.charAt(0))) 
if (!(theData.charAt(0)== '+')) 
return false 

for (var i = 1; i < theData.length; i++) 
if (!isDigit(theData.charAt(i))) 
return false 
return true 
} 
/**********************************************************************/ 
/*Function name :isDate(s,f) */ 
/*Usage of this function :To check s is a valid format */ 
/*Input parameter required:s=input string */ 
/* f=input string format */ 
/* =1,in mm/dd/yyyy format */ 
/* else in dd/mm/yyyy */ 
/*Return value :if is a valid date return 1 */ 
/* else return 0 */ 
/*Function required :isPositiveInteger() */ 
/**********************************************************************/ 
function isDate(s,f) 
{
var a2=s.split("-"); 
var e=true; 
if ((a2.length!=3)) 
{ 
e=false; 
} 
else 
{
if (a2.length==3) 
var na=a2; 
if (isPositiveInteger(na[0]) && isPositiveInteger(na[1]) && isPositiveInteger(na[2])) 
{ if (f==1) 
{var d=na[1],m=na[0]; 
} 
else 
{var d=na[0],m=na[1]; 
} 
var y=na[2]; 
if (((e) && (y<1000)||y.length>4)) 
e=false 
if (e) 
{ 
v=new Date(m+"/"+d+"/"+y); 
if (v.getMonth()!=m-1) 
e=false; 
} 
} 
else 
{ 
e=false; 
} 
} 
return e 
} 
function checkDate(v) 
{ 
var s=v.a.value; 
if (isDate(s,0)) //dd/mm/yyyy format 
alert("The inputted date value is valid!"); 
else 
alert("The inputted date value is not valid!"); 
return false; 
} 



function checkDate(theField){
if(!(theField.value==""))
{
if(isDate(theField.value,2)==0) {

	alert("Please Enter the date in dd-mm-yyyy Format");
	theField.value="";
	theField.select();
    theField.focus();	
	return false;
}
else
{
return true;
}
}
else
{
return false;
}

}


function valDate(theField){
if(!(theField.value==""))
{
if(isDate(theField.value,2)==0) {

	
	return false;
}
else
{
return true;
}
}
else
{
return false;
}




}



