//
// Generic JavaScript code for validations of various kinds
// M. A. Sridhar, May 1, 2000
//

var dateRE  = new RegExp ("^[0-1]?[0-9]/[0-3]?[0-9]/[0-9]{1,4}$");
var timeRE1 = new RegExp ("^[0-2][0-9]:[0-5][0-9]:[0-5][0-9]$");
var timeRE2 = new RegExp ("^[0-2]?[0-9]:[0-5][0-9] *(AM|am|PM|pm)$");
var floatRE = new RegExp ("^[0-9]+(\.[0-9]*([eE][\+\-]?[0-9]+)?)?$");
var pd = "[0-9a-zA-Z]"; // Digit of phone number
var americanPhoneRE = new RegExp  ("^" +
     "((\(" + pd + pd + pd + "\)|" +
        pd + pd + pd + ")\-)?" +                   // Optional area code
     pd + pd + pd + "\-" + pd + pd + pd  + pd +    // Phone number
     "(x" + pd + "+)?" +                           // Optional extension
     "$"
    );

var zipCodeRE = new RegExp ("^[0-9][0-9][0-9][0-9][0-9]" +
                            "(\-[0-9][0-9][0-9][0-9])?$");

var identifierRE = new RegExp ("^[A-Za-z][A-Za-z0-9_]*$"); 

function isIdentifier (s, emptyOk) {
    if (s.length == 0 && emptyOk == 1) return true;
    return identifierRE.test (s);
}

function isInteger (s, emptyOk) {
    if (s.length == 0) {
        if (emptyOk) return true;
    }
    var i = 0;
    if (s.charAt (i) == '-') {
        i++;
    }
    for (; i < s.length; i++)  {
        var c = s.charAt(i);
        if ((c != ',') && (c < '0' || c > '9')) {
            return false;
        }
    }
    return emptyOk || s.length > 0;
}

function convertToInt (s) {
    // IE 5's parseInt is broken: it stops if there are leading zeros. :-(
    var n = 0;
    var i = 0;
    if (s == null || s.length == 0) {
        return 0;
    }
    var sign = 1;
    if (s.charAt(0) == '-') {
        sign = -1;
        i++;
    }
    for (; i < s.length; i++)  {
        var c = s.charAt(i);
        if (c < '0' || c > '9') {
            return n;
        }
        n = n * 10 + (c - '0');
    }
    return n;
}



function isDate (s, emptyOk) {
    // IE 5's parseInt is broken: it stops if there are leading zeros. :-(
    if (s.length == 0) {
        if (emptyOk) return true;
    }
    if (!dateRE.test (s)) {
        return false;
    }
    var pieces = s.split ("/");
    if (pieces.length != 3) {
        return false;
    }
    var month = convertToInt (pieces[0]);
    if (month < 1 || month > 12) {
        return false;
    }
    
    var date = convertToInt (pieces[1]);
    var year = convertToInt (pieces[2]);
    var daysInMonth  = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];

    if (date < 1 || date > daysInMonth[month-1]) {
        return false;
    }

    // We can be stricter and check for leap years. Oh well...
    return true;
}


function isTime (s, emptyOk) {
    if (s.length == 0) {
        if (emptyOk) return true;
    }
    if (timeRE1.test (s)) {
        var pieces = s.split (":");
        if (pieces.length != 3) {
            return false;
        }
        var hours   = parseInt (pieces[0]);
        var minutes = parseInt (pieces[1]);
        var seconds = parseInt (pieces[2]);
        if (hours < 0 || hours > 23 || minutes < 0 || minutes > 59 ||
            seconds < 0 || seconds > 59) return false;
        return true;
    }
    // See if it's in the hh:mm [am/pm] format
    var n = s.length;
    if (n < 6) return false;
    var amPm = s.substring (n-2, n);
    if (amPm != "am" && amPm != "pm" && amPm != "AM" &&
        amPm != "PM") return false;
    var pieces = s.substring (0, n-2).split (":");
    if (!pieces.length || pieces.length != 2) return false;
    var hours = parseInt (pieces[0]);
    var minutes = parseInt (pieces[1]);
    if (isNaN (hours) || isNaN (minutes)) return false;
    if (hours < 0 || hours > 23 || minutes < 0 || minutes > 59) return false;
    return true;
}



function isMoney (s, emptyOk) {
    if (s.length == 0) {
        if (emptyOk) return true;
    }
    var amountStrg = s;
    var n = amountStrg.length;
    if (n >= 4 && amountStrg.charAt (0) == '(' &&
        amountStrg.charAt (1) == '$' && amountStrg.charAt (n-1) == ')') {
        // It's negative, because it has parentheses around it.
        amountStrg = amountStrg.substring (2, n-1);
    }
    if (amountStrg.charAt(0) == '$') {
        amountStrg = amountStrg.substring (1);
    }
    var i = 0;
    for (; i < amountStrg.length; i++)  {
        var c = amountStrg.charAt(i);
        if (c == '.') break;
        if ((c != ',') && (c < '0' || c > '9')) {
            return false;
        }
    }
    if (c != '.') return true;
    i++;
    if (i < amountStrg.length - 3) return false;
    for (; i < amountStrg.length; i++)  {
        var c = amountStrg.charAt(i);
        if (c < '0' || c > '9') {
            return false;
        }
    }
    return true;
}




function hasFraction (s, emptyOk, nFractionDigits) {
    if (s.length == 0) {
        if (emptyOk) return true;
    }
    var t = s;
    t = t.replace (/,/g, ""); // Remove any commas
    var pieces = t.split (".");
    if (pieces.length > 2) {
        return false;
    }
    if (!isInteger (pieces[0], true) ||
        (pieces.length > 1 && !isInteger (pieces[1], true))) {
        return false;
    }
    if (pieces.length == 2 && pieces[1].length > nFractionDigits) {
        return false;
    }
    return true;     
}


function isFloat (s, emptyOk) {
    if (s.length == 0) {
        if (emptyOk) return true;
    }
    return floatRE.test (s);
}


function isAmericanPhone (s, emptyOk) {
    if (s.length == 0) {
        if (emptyOk) return true;
    }
    s.replace (/ /g, "");
    return americanPhoneRE.test (s);
}


function isZipCode (s, emptyOk) {
    if (s.length == 0) {
        if (emptyOk) return true;
    }
    s.replace (/ /g, "");
    return zipCodeRE.test (s);
}


function fmt (x) {
    x = "" + x; // Convert to string
    return (x.length > 1) ? x : ("0" + x);
}



function isPrefix (s1, s2) { // Is s2 a prefix of s1?
    return s1.substring (0, s2.length) == s2;
}


function isSuffix (s1, s2) { // Is s2 a suffix of s1?
    return s1.substring (s1.length - s2.length) == s2;
}


function verifyDeletionOk (deleteNodeIds) {
    var form = document.mainForm;
    if (!form) return false;
    var isIE = document.all ? true : false;
    var deletionCount = 0;
    var savedValues = new Array();
    for (var i = 0; i < deleteNodeIds.length; i++) {
        var boxId = "chk-" + deleteNodeIds[i];
        var checkBoxes = isIE ? form (boxId) : form [boxId];
        if (checkBoxes) {
            if (checkBoxes.length) {
                for (var j = 0; j < checkBoxes.length; j++) {
                    var box = checkBoxes[j];
                    var hiddenFieldName = box.value;
                    var hiddenField = isIE ? form(hiddenFieldName) :
                        form(hiddenFieldName);
                    if (!hiddenField) {
                        alert ("HTML is invalid: no hidden field named '" + hiddenFieldName + "'");
                        return false;
                    }
                    if (!box) {
                        alert ("HTML is invalid: no check box?");
                        return false;
                    }
                    if (box.checked) {
                        deletionCount++;
                    } else {
                        savedValues[hiddenField.name] = hiddenField.value;
                        hiddenField.value = "";
                    }
                }
            } else {
                var box = checkBoxes;
                var hiddenFieldName = box.value;
                var hiddenField = isIE ? form(hiddenFieldName) :
                    form [hiddenFieldName];
                if (hiddenField && box && !box.checked) {
                    savedValues[hiddenField.name] = hiddenField.value;
                    hiddenField.value = "";
                } else {
                    deletionCount++;
                }
            }
        }
    }
    if (deletionCount <= 0) return false;
    if (confirm ("Delete " + deletionCount + " checked item(s)?")) {
        // Turn off the check boxes, so that the UDM request handler doesn't
        // see too many values
        for (var i = 0; i < deleteNodeIds.length; i++) {
            var boxId = "chk-" + deleteNodeIds[i];
            var checkBoxes = isIE ? form (boxId) : form [boxId];
            if (checkBoxes && checkBoxes.length) {
                for (var j = 0; j < checkBoxes.length; j++) {
                    var box = checkBoxes[j];
                    box.checked = false;
                }
            }
        }
        return true;
    } else {
        for (var name in savedValues) {
            var hiddenField = isIE ? form (name) : form[name];
            if (hiddenField) hiddenField.value = savedValues[name];
        }
    }
    return false;
}


function fnIsValidEmailAddress(sEmail)
	{
		var source
		var strLength
		var i
		var count = 0 
		var count1 = 0 
		var result="false";
		source = sEmail
		strLength = source.length;
		if(strLength!=0)
		{
		
		//checks if the emailadrress contains the @ character only once and checks its position	  
		for(i=0;i<=(strLength-1);i++)
		{
			if (source.substr(i,1) == "@")
			{
				count = count + 1 ;
			}
			if (source.substr(i,1) == ".")
			{
				count1 = count1 + 1 ;
			}		
		}
		
		if (count < 1)
		{ 
			
			return false;
		}
		if (count1 < 1)
		{ 
			
			return false;
		} 
							   
		if (count > 1)
		{ 
			
			return false;
		}
							 				 
		if ((source.substr(0,1) == "@") || (source.substr(strLength-1,1) == "@")) 
		{ 
			
			return false;
		}
		if ((source.substr(0,1) == ".") || (source.substr(strLength-1,1) == "."))     
		{ 
			 
			return false;
		}
							  
		for(i=0;i<=(strLength-1);i++)
		{
			if (source.substr(i,1) == "@")
			   {
				if (source.substr(i+1,1) == ".") 	
			      { 
					
			         return false; 
				  }
				}
			if (source.substr(i,1) == ".")
			   {
				if (source.substr(i+1,1) == "@") 	
			      { 
					
			        return false; 
				  }		
				}
			if (source.substr(i,1) == ".")
			   {
				if (source.substr(i+1,1) == ".") 	
			      { 
					
			        return false; 
				  }			  				  
			   }				    
		}}return true;  
	}

function TrimText(srcString)
{
	var source
	var startIndex
	var endIndex
	var strLength
	var i
	source = srcString;
	strLength = source.length;
	for(i=0;i<=(strLength-1);i++)
	{
		if (source.substr(i,1) != " ")
		{
			startIndex = i;
			break;
		}
	}
	for(i=(strLength-1);i>=0;i--)
	{
		if (source.substr(i,1) != " ")
		{
			endIndex = i;
			break;
		}
	}
	var result;
	result = source.substring(startIndex,endIndex+1);
	return result;
}