﻿
var numb = '0123456789';
var numbSPNR = '0123456789,';

var floatNumb = '0123456789.';
var lwr = 'abcdefghijklmnopqrstuvwxyz';
var upr = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
var space = ' ';
var splChar1 = '_-@.';
var splChar2 = '-/#&()[]';
//var splChar3 = '-()&[]';  //Old
var splChar3 = '-(),[]';    //Changed by Pankaj On 26-Apr-2010 
var splChar4 = '+';
var splChar5 = '-()&[]/.#,';
var comma = ',';
function isValid(parm, val) {
    if (parm == "") return true;
    for (j = 0; j < parm.length; j++) {
        if (val.indexOf(parm.charAt(j), 0) == -1) return false;
    }
    return true;
}


function isLower(parm) { return isValid(parm, lwr); }
function isUpper(parm) { return isValid(parm, upr); }
//Appendix 6.1.1
function isAlphaSpecialChar(parm) { return isValid(parm, lwr + upr + space + numbSPNR); }
function isAlphaSpace(parm) { return isValid(parm, lwr + upr + space); }
function isAlphaNumSpace(parm) { return isValid(parm, numb + lwr + upr + space); }
function isAlphaNumbSpaceSpecial(parm) { return isValid(parm, lwr + upr + space + splChar3 + numb); }
function isAlphaNumbSpaceAddressSP(parm) { return isValid(parm, lwr + upr + space + splChar5 + numb); }



//Appendix 6.1.2
function isAlpha(parm) { return isValid(parm, lwr + upr); }
//Appendix 6.1.3
function isAlphaNum(parm) { return isValid(parm, lwr + upr + numb); }

function isNum(parm) { return isValid(parm, numb); }
function isNumSPNR(parm) { return isValid(parm, numbSPNR); }
function isFloat(parm) { return isValid(parm, floatNumb); }
function isPhoneNum(parm) { return isValid(parm, numb + splChar4 + space); }
function Trim(s) {
    // Remove leading spaces and carriage returns
    while ((s.substring(0, 1) == ' ') || (s.substring(0, 1) == '\n') || (s.substring(0, 1) == '\r')) {
        s = s.substring(1, s.length);
    }
    // Remove trailing spaces and carriage returns
    while ((s.substring(s.length - 1, s.length) == ' ') || (s.substring(s.length - 1, s.length) == '\n') || (s.substring(s.length - 1, s.length) == '\r')) {
        s = s.substring(0, s.length - 1);
    }
    return s;
}
function toggleNew(list, objImgId) {

    var listElementStyle = document.getElementById(list).style;
    var objImgTog = document.getElementById(objImgId);
    if (listElementStyle.display == "none") {
        listElementStyle.display = "block";
        if (objImgTog != null) {
            objImgTog.src = "../Content/images/vmd-up.gif";
        }
    }
    else {
        listElementStyle.display = "none";
        if (objImgTog != null) {
            objImgTog.src = "../Content/images/vmd-down.gif";
        }
    }
}
function toggle(list) {
    var listElementStyle = document.getElementById(list).style;    
    if (listElementStyle.display == "none") 
    {
        listElementStyle.display = "block";        
    }
    else 
    {
        listElementStyle.display = "none";        
    }
}

 
//Added by Rajkishore
function gfnCheckLen(pobjControl, pintLength, pstrCaption) {
    if (pobjControl.value.length > pintLength) {
        gfnShowError(536, pstrCaption, pintLength);
        pobjControl.focus();
        return false;
    }
    return true;
}

function gfnCheckLen1(pobjControl, pintLength) {
    if (pobjControl.value.length > pintLength) {
        window.event.returnValue = false;
        return false;
    }
    return true;
}
function gfnCheckEmpty(pobjControl, pstrCaption, pstrMessage) {
    var lstrValue = pobjControl.value;
    if (pstrMessage != "N")
        pstrMessage = "Y";
    lstrValue = Trim(lstrValue);
    if (lstrValue.length == 0) {
        pobjControl.value = "";
        if (pstrMessage == "Y") {
            gfnShowError(501, pstrCaption);
            pobjControl.focus();
        }
        return false;
    }
    return true;
}

function limitText(textObj, maxCharacters) {
    if (textObj.innerText.length >= maxCharacters) {
        if ((event.keyCode >= 32 && event.keyCode <= 126) || (event.keyCode >= 128 && event.keyCode <= 254)) {
            event.returnValue = false;
        }
    }
}

function gfnIsCHECKED(pstrChkOptValue, pstrCheckWithValue) {
    if (pstrChkOptValue = pstrCheckWithValue) {
        return true;
    }
    return false;
}
function gfnCheckString(pobjControl, pstrCaption, pstrAllow) {
    var lstrPattern = new RegExp("[a-z,A-Z," + pstrAllow + "]", "g");
    var lstrRetArr = pobjControl.value.match(lstrPattern);
    if (lstrRetArr == null) {
        gfnShowError(535, pstrCaption);
        pobjControl.focus();
        return false;
    }
    else {
        if (lstrRetArr.length == pobjControl.value.length)
            return true;
        else {
            gfnShowError(535, pstrCaption);
            pobjControl.focus();
            return false;
        }
    }
}


//USE TO ALLOW ALPHA-NUMERICS ONLY 
//PARAMETER 1: String Control Name
//PARAMETER 2: Control Caption
//PARAMETER 3: Spl Characters to be allowed
function gfnCheckSplCharacters(pobjControl, pstrCaption, pstrAllow) {
    var lstrString = pobjControl.value;

    if (lstrString.length == 0)
        return true;
    var lstrPattern = new RegExp("[a-z,A-Z,0-9,' '" + pstrAllow + "]", "g");
    var lstrRetArr = lstrString.match(lstrPattern);
    if (lstrRetArr == null) {
        gfnShowError(531, pstrCaption);
        pobjControl.focus();
        return false;
    }
    else {
        if (lstrRetArr.length == pobjControl.value.length)
            return true;
        else {
            gfnShowError(531, pstrCaption);
            pobjControl.focus();
            return false;
        }
    }
}

//USE TO ALLOW NUMERICS ONLY
//PARAMETER 1: Numeric Control Name
//PARAMETER 2: Control Caption
//PARAMETER 3: Spl Characters to be allowed
function CheckNumeric(pobjControl, pstrCaption, pstrAllow) {
    var lstrString = pobjControl.value;

    if (lstrString.length == 0)
        return true;
    var lstrPattern = new RegExp("[0-9," + pstrAllow + "]", "g");
    var lstrRetArr = lstrString.match(lstrPattern);
    if (lstrRetArr == null) {
        gfnShowError(522, pstrCaption);
        pobjControl.focus();
        return false;
    }
    else {
        if (lstrRetArr.length == pobjControl.value.length)
            return true;
        else {
            gfnShowError(522, pstrCaption);
            pobjControl.focus();
            return false;
        }
    }
}

//USE TO DIS-ALLOW SPECIFIC CHARACTERS
//PARAMETER 1: String Control Name
//PARAMETER 2: Control Caption
//PARAMETER 3: Spl Characters to be Dis-allowed
function gfnBarSplChrs(pobjControl, pstrCaption, pstrBarChars, pstrMuteFlag) {
    var lstrString = pobjControl.value;
    if (lstrString.length == 0)
        return true;
    var lstrPattern = new RegExp("[" + pstrBarChars + "]", "g");
    var lstrRetArr = lstrString.match(lstrPattern);
    if (lstrRetArr == null && !gfnIsContainSlash(lstrString, pstrBarChars)) {
        return true;
    }
    else {
        if (pstrMuteFlag != 'Y') {
            gfnShowError(531, pstrCaption);
            pobjControl.focus();
        }
        return false;
    }
}
/*
This checks for back slash in the input.It returns true if bar character
as well as input char contains back slash
*/
function gfnIsContainSlash(pstrInput, pstrBarChars) {
    var lstrSplChar = '\\';
    var lintSlashInInput;
    var lintSlashInBarChars;
    lintSlashInInput = pstrInput.indexOf(lstrSplChar);
    lintSlashInBarChars = pstrBarChars.indexOf(lstrSplChar);
    if (lintSlashInBarChars == -1) {
        return false;
    }
    else {
        if (lintSlashInInput != -1) {
            return true;
        }
    }
    return false;
}




//III- NUMERIC CHECK FUNCTIONS

//USE TO ALLOW NUMERICS ONLY
//PARAMETER 1: Numeric Control Name
//PARAMETER 2: Control Caption
//PARAMETER 3: Spl Characters to be allowed
//PARAMETER 4: 'O' if Numeric Field is a Optional Field, 'M' if Numeric Field is Mandatory
//PROPOSED FUTURE SIGNATURE: function gfnCheckNumeric(pobjControl, pstrCaption, pstrAllow, pstrFormat)
function gfnCheckNumeric(pobjControl, pstrCaption, pstrAllow, pstrOptionalFlag) {
    var lintNumValue = pobjControl.value;

    // If the Number is optional and the user leaves it blank then 
    // let it be so and do not proceed with validating the Numeric
    if ((pstrOptionalFlag == 'O') && (lintNumValue == '')) {
        return true; //Exit if Optional
    }
    if ((pstrOptionalFlag == 'M') && (lintNumValue == '')) {
        gfnShowError(501, pstrCaption);
        pobjControl.focus();
        pobjControl.select();
        return false;
    }

    var lstrPattern = new RegExp("[0-9," + pstrAllow + "]", "g");
    var lstrRetArr = lintNumValue.match(lstrPattern);

    if (lstrRetArr == null || lstrRetArr.length != lintNumValue.length) {
        // check for negative sign		
        lstrPattern = new RegExp("[0-9," + pstrAllow + "-" + "]", "g");
        lstrRetArr = lintNumValue.match(lstrPattern);
        if (lstrRetArr != null && lstrRetArr.length == lintNumValue.length) {
            if (parseFloat(lintNumValue) == lintNumValue) {
                // error was due to -ve sign only				
                gfnShowError(519, pstrCaption);
                pobjControl.focus();
                pobjControl.select();
                return false;
            }
        }
        // error is due to some other character		
        gfnShowError(508, pstrCaption);
        pobjControl.focus();
        pobjControl.select();
        return false;
    }
    else {
        if (parseFloat(lintNumValue) == lintNumValue)
            return true;
        else {
            gfnShowError(508, pstrCaption);
            pobjControl.focus();
            pobjControl.select();
            return false;
        }
    }
}



//IV- DATE CHECK FUNCTIONS
//USE TO GET DATE DIFFERENCE IN NO OF DAYS
//PARAMETER 1: Date No 1 (Date Type)
//PARAMETER 2: Date No 2 (Date Type)
function gfnRetDateDiff(pdtmDate1, pdtmDate2) {
    return ((pdtmDate1 - pdtmDate2) / 1000 / 60 / 60 / 24);
}



//USE TO CHECK IF DATE IS VALID
//PARAMETER 1: Date Control Name
//PARAMETER 2: Control Caption
//PARAMETER 3: 'O' if Date is a Optional Field, 'M' if Date is Mandatory
function gfnCheckDate(pobjControl, pstrCaption, pstrOptionalFlag) {
    var ldtmValidDate;
    var lstrDateValue = pobjControl.value;

    // If the Date is optional and the user leaves it blank then 
    // let it be so and do not proceed with validating the date 
    if ((pstrOptionalFlag == 'O') && (lstrDateValue == '')) {
        return true; //Exit if Optional
    }
    if ((pstrOptionalFlag == 'M') && (lstrDateValue == '')) {
        gfnShowError(501, pstrCaption);
        pobjControl.focus();
        return false;
    }
     if (gfnCheckSplCharacters(pobjControl, pstrCaption, "/") == false) {
        pobjControl.focus();
        return false;
    }
    //Modified by Yogesh.
  //  if(lstrDateValue.lenght !=10)
    if (lstrDateValue.lengthlstr < 8 && DateValue.length > 10) {
            gfnShowError(521, pstrCaption);
            pobjControl.focus();
            return false;
        } 
   // }
    ldtmValidDate = gfnConvertToDate(lstrDateValue, pstrCaption);

    if (ldtmValidDate == false) {
        pobjControl.focus();
        return false;
    }
    else {
        return ldtmValidDate;
    }
}

//USE TO VALIDATE AND THEN CONVERT A STRING OF DD/MM/YYYY FORMAT TO A VALID JS DATE
//Converts String To Date
function gfnConvertToDate(lstrDateValue, pstrCaption) {
    var ldtmBaseDate;
    ldtmBaseDate = new Date(1900, 00, 01);
    // Checks for the following valid date formats:
    // DD/MM/YYYY
    // Also separates date into month, day, and year variables

    var lstrDatePattern = /^(\d{1,2})(\/)(\d{1,2})\2(\d{4})$/;
    var lstrMatchArray = lstrDateValue.match(lstrDatePattern); //CHECK FORMAT
      if (lstrMatchArray == null) {
            gfnShowError(521);
            return false;
    }

    // parse date into variables
    var day = lstrMatchArray[1];
    var month = lstrMatchArray[3];
    var year = lstrMatchArray[4];

    if (month < 1 || month > 12) // check month range
    {
        gfnShowError(532, "Month", "1", "12");
        return false;
    }
    if (day < 1 || day > 31) {
        gfnShowError(532, "Day", "1", "31");
        return false;
    }
    if ((month == 4 || month == 6 || month == 9 || month == 11) && day == 31) {
        gfnShowError(533, month);
        return false;
    }
    if (month == 2) // check for february 29th
    {
        var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
        if (day > 29 || (day == 29 && !isleap)) {
            gfnShowError(534, year, day);
            return false;
        }
    }
    var ldtmCheckDate = new Date(year, month - 1, day);
    if (gfnRetDateDiff(ldtmCheckDate, ldtmBaseDate) < 0) {
        gfnShowError(504, "Date", "Base Date");
        return false;
    }
    return ldtmCheckDate; //Sucess
}


function gfnShowLookup(pstrURL) {
    window.open(pstrURL, null, "scrollbars=yes,resizable=yes");
}



//USE TO CONFIRM THE USER ON CLICK OF DELETE BUTTON
//Confirm's User For Record Deletion
function gfnDeleteConfirm() {
    var lstrConfirm;

    if (arguments.length != 0) {
        lstrConfirm = "You have opted to " + arguments[0] + ", Shall the System proceed with " + arguments[1] + "?";
    }
    else {
        lstrConfirm = "You have opted to Delete , Shall the System proceed with Deletion?";
    }

    if (confirm(lstrConfirm)) {
        return true;
    }
    else {
        return false;
    }
}




//USE TO SHOW A ERROR MESSAGE
function gfnShowError() {
    switch (arguments[0]) {
        case 501:
            alert(arguments[1] + " cannot be left Blank, please enter a valid " + arguments[1]);
            break;
        case 502:
            alert(arguments[1] + " must be less than " + arguments[2]);
            break;
        case 503:
            alert(arguments[1] + " must be less than or equal to " + arguments[2]);
            break;

        case 504:
            alert(arguments[1] + " cannot be less than " + arguments[2]);
            break;

        case 505:
            alert(arguments[1] + " must be greater than " + arguments[2]);
            break;

        case 506:
            alert(arguments[1] + " must be greater than or equal to " + arguments[2]);
            break;

        case 507:
            alert(arguments[1] + " cannot be greater than " + arguments[2]);
            break;

        case 508:
            alert("Invalid " + arguments[1] + ", Please enter valid " + arguments[1]);
            break;

        case 517:
            alert(arguments[1] + " can not contain characters, please enter numeric value");
            break;

        case 519:
            alert(arguments[1] + " cannot accept negative values");
            break;

        case 520:
            alert(arguments[1] + " cannot accept more than 2 Decimal Places");
            break;

        case 521:
            alert("Invalid Date Format, Please specify date in DD/MM/YYYY format");
            break;

        case 522:
            alert(arguments[1] + " must be numeric");
            break;

        case 531:
            alert("Invalid " + arguments[1] + ", " + arguments[1] + " cannot contain special characters");
            break;

        case 532:
            alert(arguments[1] + " must be between " + arguments[2] + " and " + arguments[3]);
            break;

        case 533:
            alert("Month " + arguments[1] + " does not have 31 days!");
            break;

        case 534:
            alert("February " + arguments[1] + " does not have " + arguments[2] + " days!");
            break;

        case 535:
            alert("Invalid  " + arguments[1] + ", " + arguments[1] + " cannot contain Numeric or Special characters");
            break;

        case 536:
            alert("Invalid  " + arguments[1] + ", " + arguments[1] + " cannot be more than " + arguments[2] + " characters");
            break;

        case 537:
            alert("Please select a " + arguments[1]);
            break;
            
        case 538:
            alert("Invalid password.");
            break;
            
        default:
            alert("An error has occured in the page");
            return true;
    }
}

function gfnCheckTime(pobjCtrl, pstrCaption, pstrOptionalFlag) {
    // Numeric Check, Empty check
    if (gfnCheckNumeric(pobjCtrl, pstrCaption, "", pstrOptionalFlag) == false) {
        return false;
    }
    //Length = 4
    if (pobjCtrl.value.length < 4) {
        gfnShowError(504, pstrCaption, "4 characters");
        pobjCtrl.focus();
        return false;
    }
    //First two digits between 0 and 24
    if ((parseInt(pobjCtrl.value.substring(0, 2)) < 0) || (parseInt(pobjCtrl.value.substring(0, 2)) > 23)) {
        gfnShowError(532, "Hours in " + pstrCaption, "0", "23");
        pobjCtrl.focus();
        return false;
    }
    //Last two digits between 0 and 60
    if ((parseInt(pobjCtrl.value.substring(2, 4)) < 0) || (parseInt(pobjCtrl.value.substring(2, 4)) > 59)) {
        gfnShowError(532, "Minutes in " + pstrCaption, "0", "59");
        pobjCtrl.focus();
        return false;
    }
    //Maximum value should be 2359 
    if (parseInt(pobjCtrl.value) > 2359) {
        gfnShowError(508, pstrCaption);
        pobjCtrl.focus();
        return false;
    }
    return true;
}
function mfnvalidEmail(pobjEmailId) {
    var linta = '';         //Variable to store the last position of Special Character @                    
    var lintb = ''; 		//Variable to store the last position of Special Character .   
    var lintc = ''; 		//Variable to store the position of Special Character : 
    var lintd = ''; 		//Variable to store the position of Special Character / 
    var lstre = '';
    var lintf = ''; 		//Variable to store the position of Special Character @  
    var lstrg = '';
    var linth = ''; 		//Variable to store the position of Special Character [ 
    var linti = ''; 		//Variable to store the position of Special Character ]  
    var lintj = ''; 		//Variable to store the position of Special Character <  
    var lintk = ''; 		//Variable to store the position of Special Character >  
    var lstrl = '';
    var lstrm = '';
    var lstrn = '';
    var lintVaidEmail = 0; //If its value is 0,it means entered EmailId is a valid one

    if (pobjEmailId.value == "")
    { return true; }

    linta = pobjEmailId.value.lastIndexOf("@");
    lintb = pobjEmailId.value.lastIndexOf(".");
    lintc = pobjEmailId.value.indexOf(":");
    lintd = pobjEmailId.value.indexOf("/");
    lstre = pobjEmailId.value.substring(0, linta);
    lintf = lstre.indexOf("@");
    lstrg = pobjEmailId.value.substring(linta + 1, pobjEmailId.length);
    linth = lstrg.indexOf("[");
    linti = lstrg.indexOf("]");
    lintj = lstrg.indexOf("<");
    lintk = lstrg.indexOf(">");
    lstrl = pobjEmailId.value.substring(linta, lintb);
    lstrm = pobjEmailId.value.substring(lintb + 1, pobjEmailId.length);
    lstrn = pobjEmailId.value.substring(0, linta);

    lintVaidEmail = 0;

    if (linta > lintb)
    { lintVaidEmail++ };
    if (lintc != -1)
    { lintVaidEmail++ };
    if (lintd != -1)
    { lintVaidEmail++ };
    if (lintf != -1)
    { lintVaidEmail++ };
    if (linth != -1)
    { lintVaidEmail++ };
    if (linti != -1)
    { lintVaidEmail++ };
    if (lintj != -1)
    { lintVaidEmail++ };
    if (lintk != -1)
    { lintVaidEmail++ };
    if (lstrl.length < 3)
    { lintVaidEmail++ };
    if (lstrm.length < 2)
    { lintVaidEmail++ };
    if (lstrn.length < 1)
    { lintVaidEmail++ };
    lintb = lintb + 1;
    if (eval(lintb) == eval(pobjEmailId.value.length))
    { lintVaidEmail++ };

    if (lintVaidEmail == 0) {
        return true;
    }
    else {
        gfnShowError(508, "email id");
        pobjEmailId.focus();
        return false;
    }
}


//Added by Yogesh.
function gfnDropSelect(pControlName,pMessage) {
    var objControl = pControlName.value;
    if (objControl == "0") {
        gfnShowError(537, pMessage);
        return false;
    }
    else
        return true;
}

//PASSWORD VALIDATION
function gfnCheckPassword(strPass)
{
var password = strPass.value;
var word= validatePassword(password, {
	length:   [8, Infinity],
	lower:    1,
	upper:    1,
	numeric:  1,
	special:  1,
	badWords: ["password", "password@123", "PASSWORD"],
	badSequenceLength: 4
});
if(word ==false )
  gfnShowError(538);   
else 
    return true ;
}


function validatePassword (pw, options) {
	// default options (allows any password)
	var o = {
		lower:    0,
		upper:    0,
		alpha:    0, /* lower + upper */
		numeric:  0,
		special:  0,
		length:   [0, Infinity],
		custom:   [ /* regexes and/or functions */ ],
		badWords: [],
		badSequenceLength: 0,
		noQwertySequences: false,
		noSequential:      false
	};

	for (var property in options)
		o[property] = options[property];

	var	re = {
			lower:   /[a-z]/g,
			upper:   /[A-Z]/g,
			alpha:   /[A-Z]/gi,
			numeric: /[0-9]/g,
			special: /[\W_!@#$%^&*+~]/g
		},
		rule, i;

	// enforce min/max length
	if (pw.length < o.length[0] || pw.length > o.length[1])
		return false;

	// enforce lower/upper/alpha/numeric/special rules
	for (rule in re) {
		if ((pw.match(re[rule]) || []).length < o[rule])
			return false;
	}

	// enforce word ban (case insensitive)
	for (i = 0; i < o.badWords.length; i++) {
		if (pw.toLowerCase().indexOf(o.badWords[i].toLowerCase()) > -1)
			return false;
	}

	// enforce the no sequential, identical characters rule
	if (o.noSequential && /([\S\s])\1/.test(pw))
		return false;

	// enforce alphanumeric/qwerty sequence ban rules
	if (o.badSequenceLength) {
		var	lower   = "abcdefghijklmnopqrstuvwxyz",
			upper   = lower.toUpperCase(),
			numbers = "0123456789",
			qwerty  = "qwertyuiopasdfghjklzxcvbnm",
			start   = o.badSequenceLength - 1,
			seq     = "_" + pw.slice(0, start);
		for (i = start; i < pw.length; i++) {
			seq = seq.slice(1) + pw.charAt(i);
			if (
				lower.indexOf(seq)   > -1 ||
				upper.indexOf(seq)   > -1 ||
				numbers.indexOf(seq) > -1 ||
				(o.noQwertySequences && qwerty.indexOf(seq) > -1)
			) {
				return false;
			}
		}
	}

	// enforce custom regex/function rules
	for (i = 0; i < o.custom.length; i++) {
		rule = o.custom[i];
		if (rule instanceof RegExp) {
			if (!rule.test(pw))
				return false;
		} else if (rule instanceof Function) {
			if (!rule(pw))
				return false;
		}
	}

	return true;
}

function days_between(date1, date2) {

        t1=date1 ;

        t2=date2;

 
     //Total time for one day
        var one_day=1000*60*60*24; 
    //Here we need to split the inputed dates to convert them into standard format
        var x=t1.split("/");     
        var y=t2.split("/");
    //date format(Fullyear,month,date) 

        var date1=new Date(x[2],(x[1]-1),x[0]);
  
        var date2=new Date(y[2],(y[1]-1),y[0])
        var month1=x[1]-1;
        var month2=y[1]-1;
        
        //Calculate difference between the two dates, and convert to days
               
       return Math.ceil((date2.getTime()-date1.getTime())/(one_day)); 
    
}




