//This file contains methods for cross browser scripting dealing with key events
//(ie. onKeyPress, onKeyUp, onKeyDown, etc)

/**
 * This method returns true if the enter key was pressed, false otherwise.
 */
function enterKeyPressed(event) 
{
	//13 = enter
	return keyPressed(event, 13);
}

/**
 * This method returns true if the tab key was pressed, false otherwise.
 */
function tabKeyPressed(event) 
{
	//9 = enter
	return keyPressed(event, 9);
}

/**
 * This method returns true if the key having the specified charCode was pressed.
 */ 
function keyPressed(event, charCode) 
{
	var keyPressed = false;
    if (getKeyCharCode(event) == charCode) 
    {
    	keyPressed = true;
    }

	return keyPressed;
}

/**
 * This method returns the charCode value of the key pressed.
 */
function getKeyCharCode(event) 
{
	var key = null;
	if (window.event) {
		//ie
		key = window.event.keyCode;
	} else if (event.which) {
		key = event.which;
	}
	return key;
}

/**
 * Prevents non-numeric values from being keyed into a field
 */
function isNumeric(event) 
{
	// get the ASCII key code of the onKeyPress event
	var isMozilla = false;
	if (!window.event && event.which) 
	{
		isMozilla = true;
	}
	var key = getKeyCharCode(event);
	var isNumeric = false;	
	if (key != null) 
	{
		if (key >= 48 && key <= 57)	 
		{
			// key is numeric
			isNumeric = true;
		} 
//		else if (key == 46) 
//		{
//			// key is a decimal point
//			isNumeric = true;
//		} 
		else if (key == 13) 
		{
			//13 is a return
			isNumeric = true;
		} 
		else if (key == 8 && isMozilla) 
		{
			//8 is a backspace with mozilla
			isNumeric = true;
		}
	} 
	else 
	{
		isNumeric = true;
	}
	return isNumeric;
}

/**
 * Returns true if the entered key is the specified charCode value pressed
 * in conjunction with the ctrl key.
 */
function keyIsCtrlWithCharCode(event, charCode) 
{
	var isCharCode = false;
	//ie
	if (window.event) 
	{
		if (window.event.ctrlKey && window.event.keyCode == charCode) 
		{
			isCharCode = true;			
		}
	}
	//mozilla
	if (event.ctrlKey && event.which == charCode) 
	{
		isCharCode = true;
	}
	return isCharCode;
}

/**
 * Returns true if the entered key is the specified charCode value pressed
 * in conjunction with the shift key.
 */
function keyIsShiftWithCharCode(event, charCode) 
{
	var isCharCode = false;
	//ie
	if (window.event) 
	{
		if (window.event.shiftKey && window.event.keyCode == charCode) 
		{
			isCharCode = true;			
		}
	}
	//mozilla
	if (event.shiftKey && event.which == charCode) 
	{
		isCharCode = true;
	}
	return isCharCode;
}

/**
 * Returns true if the entered key is the specified charCode value pressed
 * in conjunction with the alt key.
 */
function keyIsAltWithCharCode(event, charCode) 
{
	var isCharCode = false;
	//ie
	if (window.event) 
	{
		if (window.event.altKey && window.event.keyCode == charCode) 
		{
			isCharCode = true;			
		}
	}
	//mozilla
	if (event.altKey && event.which == charCode) 
	{
		isCharCode = true;
	}
	return isCharCode;
}
//checks if textbox is empty
function textRequired(field, textMessage) 
{
    var invalid = " "; 

    if(field.value == "" || field.value.indexOf(invalid) > -1) 
    {
        alert(textMessage);
        tempfield = field;

    //set the focus back to the textbox if the user did not enter a name 
        setTimeout("tempfield.focus();",0);
        return false; 
    }
}

//Following methods are added By sunir.Accept Number Or Decimal
function allowdecimal(e)
{
    var key = window.event ? e.keyCode : e.which;
    var keychar = String.fromCharCode(key);
    var reg = new RegExp("[0-9.]")
    if (key == 8)
    {
        keychar = String.fromCharCode(key);
    }
    if (key == 13)
    {
        key=8;
        keychar = String.fromCharCode(key);     
    }
    return reg.test(keychar);
} 
// version: beta
// created: 2005-08-30
// updated: 2005-08-31
// mredkj.com
function extractNumber(obj, decimalPlaces, allowNegative)
{
	var temp = obj.value;
	
	// avoid changing things if already formatted correctly
	var reg0Str = '[0-9]*';
	if (decimalPlaces > 0) {
		reg0Str += '\\.?[0-9]{0,' + decimalPlaces + '}';
	} else if (decimalPlaces < 0) {
		reg0Str += '\\.?[0-9]*';
	}
	reg0Str = allowNegative ? '^-?' + reg0Str : '^' + reg0Str;
	reg0Str = reg0Str + '$';
	var reg0 = new RegExp(reg0Str);
	if (reg0.test(temp)) return true;

	// first replace all non numbers
	var reg1Str = '[^0-9' + (decimalPlaces != 0 ? '.' : '') + (allowNegative ? '-' : '') + ']';
	var reg1 = new RegExp(reg1Str, 'g');
	temp = temp.replace(reg1, '');

	if (allowNegative) {
		// replace extra negative
		var hasNegative = temp.length > 0 && temp.charAt(0) == '-';
		var reg2 = /-/g;
		temp = temp.replace(reg2, '');
		if (hasNegative) temp = '-' + temp;
	}
	
	if (decimalPlaces != 0) {
		var reg3 = /\./g;
		var reg3Array = reg3.exec(temp);
		if (reg3Array != null) {
			// keep only first occurrence of .
			//  and the number of places specified by decimalPlaces or the entire string if decimalPlaces < 0
			var reg3Right = temp.substring(reg3Array.index + reg3Array[0].length);
			reg3Right = reg3Right.replace(reg3, '');
			reg3Right = decimalPlaces > 0 ? reg3Right.substring(0, decimalPlaces) : reg3Right;
			temp = temp.substring(0,reg3Array.index) + '.' + reg3Right;
		}
	}
	
	obj.value = temp;
}
function blockNonNumbers(obj, e, allowDecimal, allowNegative)
{
	var key;
	var isCtrl = false;
	var keychar;
	var reg;
		
	if(window.event) {
		key = e.keyCode;
		isCtrl = window.event.ctrlKey
	}
	else if(e.which) {
		key = e.which;
		isCtrl = e.ctrlKey;
	}
	
	if (isNaN(key)) return true;
	
	keychar = String.fromCharCode(key);
	
	// check for backspace or delete, or if Ctrl was pressed
	if (key == 8 || isCtrl)
	{
		return true;
	}

	reg = /\d/;
	var isFirstN = allowNegative ? keychar == '-' && obj.value.indexOf('-') == -1 : false;
	var isFirstD = allowDecimal ? keychar == '.' && obj.value.indexOf('.') == -1 : false;
	
	return isFirstN || isFirstD || reg.test(keychar);
}
function isCharacter(event)
{   
    var isMozilla = false;
	    if (!window.event && event.which) 
	    {
		    isMozilla = true;
	    }
	    var key = getKeyCharCode(event);
	    var isCharacter = false;	
	    if (key != null) 
	    {
		    if (key >= 65 && key <= 90 || key >= 97 && key <= 122)	 
		    {
			    // key is numeric
			    isCharacter = true;			 
		    } 

		    else if (key == 13) 
		    {
			    //13 is a return
			    isCharacter = true;
		    } 
		    else if (key == 8 && isMozilla) 
		    {
			    //8 is a backspace with mozilla
			    isCharacter = true;
		    }
		    else if(key == 32)
		    {
		        // 32 is a space
		        isCharacter = true;
		    }
		    else if(key == 46)
		    {
		        isCharacter = true;
		    }
	    } 
	    else 
	    {
		    isCharacter = true;
	    }
	    return isCharacter;
}



///date regular expression checker
function ValidateDate(fld)
{
    //(dd/MM/yyyy)
    //var RegExPattern = /^((((0?[1-9]|[12]\d|3[01])[\.\-\/](0?[13578]|1[02])[\.\-\/]((1[6-9]|[2-9]\d)?\d{2}))|((0?[1-9]|[12]\d|30)[\.\-\/](0?[13456789]|1[012])[\.\-\/]((1[6-9]|[2-9]\d)?\d{2}))|((0?[1-9]|1\d|2[0-8])[\.\-\/]0?2[\.\-\/]((1[6-9]|[2-9]\d)?\d{2}))|(29[\.\-\/]0?2[\.\-\/]((1[6-9]|[2-9]\d)?(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00)|00)))|(((0[1-9]|[12]\d|3[01])(0[13578]|1[02])((1[6-9]|[2-9]\d)?\d{2}))|((0[1-9]|[12]\d|30)(0[13456789]|1[012])((1[6-9]|[2-9]\d)?\d{2}))|((0[1-9]|1\d|2[0-8])02((1[6-9]|[2-9]\d)?\d{2}))|(2902((1[6-9]|[2-9]\d)?(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00)|00))))$/;
    //var RegExPattern = /^((((0[1-9]|[12]\d|3[01])[\/](0?[13578]|1[02])[\/]((1[6-9]|[2-9]\d)?\d{2}))|((0?[1-9]|[12]\d|30)[\/](0?[13456789]|1[012])[\/]((1[6-9]|[2-9]\d)?\d{2}))|((0?[1-9]|1\d|2[0-8])[\/]0?2[\/]((1[6-9]|[2-9]\d)?\d{2}))|(29[\/]0?2[\/]((1[6-9]|[2-9]\d)?(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00)|00)))|(((0[1-9]|[12]\d|3[01])(0[13578]|1[02])((1[6-9]|[2-9]\d)?\d{2}))|((0[1-9]|[12]\d|30)(0[13456789]|1[012])((1[6-9]|[2-9]\d)?\d{2}))|((0[1-9]|1\d|2[0-8])02((1[6-9]|[2-9]\d)?\d{2}))|(2902((1[6-9]|[2-9]\d)?(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00)|00))))$/;
    //var RegExPattern = /^(0[1-9]|[12][0-9]|3[01])[/](0[1-9]|1[012])[/](19|20)\d\d$/;
    var RegExPattern = /^(19|20)\d\d[/](0[1-9]|1[012])[/](0[1-9]|[12][0-9]|3[01])$/;
    //(MM/dd/yyyy)
    //var RegExPattern = /^(?=\d)(?:(?:(?:(?:(?:0?[13578]|1[02])(\/|-|\.)31)\1|(?:(?:0?[1,3-9]|1[0-2])(\/|-|\.)(?:29|30)\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})|(?:0?2(\/|-|\.)29\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))|(?:(?:0?[1-9])|(?:1[0-2]))(\/|-|\.)(?:0?[1-9]|1\d|2[0-8])\4(?:(?:1[6-9]|[2-9]\d)?\d{2}))($|\ (?=\d)))?(((0?[1-9]|1[012])(:[0-5]\d){0,2}(\ [AP]M))|([01]\d|2[0-3])(:[0-5]\d){1,2})?$/;
    var errorMessage = 'Please enter valid date as day, month, and four digit year.\nUse a slash to separate the values.\n\nFormat yyyy/mm/dd.';
    if(fld.value.length != 0)
    {
        if ((fld.value.match(RegExPattern)) && (fld.value != ''))
        {
            //alert('Date is OK');
        }
        else
        {
            alert(errorMessage);
            fld.focus();
        }
    }
}
function ChangeCheckBoxState(id, checkState)
{
    var cb = document.getElementById(id);
    if (cb != null)
    {
       cb.checked = checkState;
    }
}
        
function ChangeHeaderAsNeeded()
{
    // Whenever a checkbox in the GridView is toggled, we need to
    // check the Header checkbox if ALL of the GridView checkboxes are
    // checked, and uncheck it otherwise
    if (CheckBoxIDs != null)
    {
        // check to see if all other checkboxes are checked
        for (var i = 1; i < CheckBoxIDs.length; i++)
        {
            var cb = document.getElementById(CheckBoxIDs[i]);
            if (!cb.checked)
            {
                // Whoops, there is an unchecked checkbox, make sure
                // that the header checkbox is unchecked
                ChangeCheckBoxState(CheckBoxIDs[0], false);
                return;
            }
        }
        
        // If we reach here, ALL GridView checkboxes are checked
        ChangeCheckBoxState(CheckBoxIDs[0], true);
    }
}
 function ChangeAllCheckBoxStates(checkState)
{
    // Toggles through all of the checkboxes defined in the CheckBoxIDs array
    // and updates their value to the checkState input parameter
    if (CheckBoxIDs != null)
    {
        for (var i = 0; i < CheckBoxIDs.length; i++)
        ChangeCheckBoxState(CheckBoxIDs[i], checkState);
    }
}
//s
function ChangeSelectedCheckBoxStates(checkState)
{
    // Toggles through all of the checkboxes defined in the CheckBoxIDs array
    // and updates their value to the checkState input parameter
    if (CheckBoxIDs != null)
    {
        for (var i = 0; i < CheckBoxIDs.length; i++)
        ChangeCheckBoxState(CheckBoxIDs[i], checkState);
    }
}
//s
function ChangeSelectedText(ctrl)
{
    var textValue = document.getElementById(ctrl).value;
    if(textValue!="")
    {
        if (txtChequeNoIDs != null)
        {
            for (var i = 0; i < txtChequeNoIDs.length; i++)
            {
                var cb = document.getElementById(CheckBoxIDs[i]);
                if(cb.checked==true)
                ChangeState(txtChequeNoIDs[i], textValue);
            }
        }
    }
}
//s
function ChangeSelectedIssueDate(ctrl)
{
    var textValue = document.getElementById(ctrl).value;
    if(textValue!="")
    {
        if (txtGridIssueDate != null)
        {
            for (var i = 0; i < txtGridIssueDate.length; i++)
            {
                var cb = document.getElementById(CheckBoxIDs[i]);
                if(cb.checked==true)
                ChangeState(txtGridIssueDate[i], textValue);
            }
        }
    }
}
//s
function ChangeSelectedType(ctrl)
{
    var Value = document.getElementById(ctrl).value;    
    if (ddlType != null)
    {
        for (var i = 0; i < ddlType.length; i++)
        {
            var cb = document.getElementById(CheckBoxIDs[i]);
            if(cb.checked==true)
            ChangeState(ddlType[i],Value);
        }
    }
}
//s
function ChangeSelectedBank(ctrl)
{
    var Value = document.getElementById(ctrl).value;    
    if (ddlBank != null)
    {
        for (var i = 0; i < ddlBank.length; i++)
        {
            var cb = document.getElementById(CheckBoxIDs[i]);
            if(cb.checked==true)
            ChangeState(ddlBank[i],Value);
        }
    }
}

function ChangeText(ctrl)
{
    var textValue = document.getElementById(ctrl).value;
    if(textValue!="")
    {
        if (txtChequeNoIDs != null)
        {
            for (var i = 0; i < txtChequeNoIDs.length; i++)
            ChangeState(txtChequeNoIDs[i], textValue);
        }
    }
}
function ChangeState(id, text)
{
    var cb = document.getElementById(id);
    if (cb != null)
    {
       cb.value = text;
    }
}

function ChangeIssueDate(ctrl)
{
    var textValue = document.getElementById(ctrl).value;
    if(textValue!="")
    {
        if (txtGridIssueDate != null)
        {
            for (var i = 0; i < txtGridIssueDate.length; i++)
            ChangeState(txtGridIssueDate[i], textValue);
        }
    }
}

function ChangeType(ctrl)
{
    var Value = document.getElementById(ctrl).value;    
    if (ddlType != null)
    {
        for (var i = 0; i < ddlType.length; i++)
        ChangeState(ddlType[i],Value);
    }
}
function ChangeBank(ctrl)
{
    var Value = document.getElementById(ctrl).value;    
    if (ddlBank != null)
    {
        for (var i = 0; i < ddlBank.length; i++)
        ChangeState(ddlBank[i],Value);
    }
}

function IsNumericValue(ctrl)
{
    if(isNaN(ctrl.value))
    {
        ctrl.value = ""
        ctrl.focus();
    }
}

