// Common functions

function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}
function MM_reloadPage(init) {  //reloads the window if Nav4 resized
  if (init==true) with (navigator) {if ((appName=="Netscape")&&(parseInt(appVersion)==4)) {
    document.MM_pgW=innerWidth; document.MM_pgH=innerHeight; onresize=MM_reloadPage; }}
  else if (innerWidth!=document.MM_pgW || innerHeight!=document.MM_pgH) location.reload();
}
function MM_findObj(n, d) { //v4.0
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && document.getElementById) x=document.getElementById(n); return x;
}

MM_reloadPage(true);
/**
document.oncontextmenu=function(){
	event.returnValue=false;
	return false;
}

function Resize(ht,wd,lt,tp){	
	self.resizeTo(ht,wd);
	self.moveTo(lt,tp);	
	return true;
}*/

/**
 * This ClearControls Function used to clear controls.
 **/

function ClearControls(){
	strSuccess="";
	var intElementLen = document.forms[0].elements.length;
	for(i=0; i<intElementLen; i++) {
		if (document.forms[0].item(i).type == "text" || document.forms[0].item(i).type == "password" ||  document.forms[0].item(i).type == "textarea") 
			document.forms[0].item(i).value="";
		else if (document.forms[0].item(i).type == "select-one")
			document.forms[0].item(i).selectedIndex=0;
		else if (document.forms[0].item(i).type == "checkbox")
			document.forms[0].item(i).checked=false;
	}
}

/**
 * Function to trim white spaces.
 **/
function Trim(strVal) {	
    var strMatch = strVal.match(/^\s*(\S+(\s+\S+)*)\s*$/);
    result = (strMatch == null) ? "" : strMatch[1];
    return result;
}

/**
 * function : Ltrim(strVal)
 * usage    : for removing blank spaces from left of a string
 * inputs   : string.
 * output   : string without spaces on its left
 * e.g      : Ltrim("  abc  ") = "abc  "
 **/
function Ltrim(strVal)
{
	var intLen = strVal.length;
	for(var idxIndex=0; idxIndex<intLen; idxIndex++) {
		if (strVal.substr(idxIndex, 1) != ' ') 
			break;
	}
	return strVal.substr(idxIndex, intLen);
}

/**
 * function : Rtrim(strVal)
 * usage    : for removing blank spaces from right of a string
 * inputs   : string.
 * output   : string without spaces on its right
 * e.g      : Rtrim("  abc  ") = "  abc"
 **/
function Rtrim(strVal) {
	var intLen = strVal.length;
	for(var idxIndex=0; idxIndex<intLen; idxIndex++) {
		if (strVal.substr(idxIndex, 1) == ' ') 
			break;
	}
	return strVal.substr(0,idxIndex);
}


/**
 * IsNotNull(strVal)
 * Syntax     : IsNotNull(strVal)
 * Defination : This library is useful when you want allow user to check the string or textbox 
 *			 value is NotNull.
 * Argument   : It takes one argument.
 *			 strString -	[data type   - string]
 * Input	   : String
 * Output	   : String "True"/"False"
 * Example    : IsNotNull("xyz")
 * 		      Ans: "True"
 **/
function IsNotNull(strVal){
	if(strVal=="") return false;
	else		return true;
}

/**
 * check current date is shoud be greter or less then today's date.
 * function checkDate
 * parameter: Object
 * return true or false
 **/
function checkDate(objDate) {
	if(objDate.value != "" ) {
		if(isValidDate(objDate.value)) {
			var strDate = objDate.value;
			var intPos1 = strDate.indexOf("/");
			var intPos2 = strDate.indexOf("/", intPos1+ 1);
			var intDay = strDate.substr(0,intPos1);
			var intMonth = strDate.substr(intPos1+1,(intPos2-intPos1-1));
			var intYear = strDate.substr(intPos2+1);
			
			var objNewDate = new Date(intYear,intMonth-1,intDay);
			var objCurDate = new Date;
			if (objNewDate > objCurDate) {
				alert("Invalid Date...");//parent.Error.showMessage(1021);
				return false;
			} 
		}
		else {
			return false;
		}
		return true;	
	}
	return true;
}


/**
 * function : CaseConversion(strInput,strCaseType)
 * usage    : converts a string in given case
 * inputs   : string
 * output   : string converted in specified case format, 'U' or 'L' or 'P' or 'I'.
 * e.g      : CaseConversion("icubix","U") = "ICUBIX"
 **/
function CaseConversion(strInput,strCaseType) {
	var arrSplit;
	switch(strCaseType)	{
		case 'U' :
			return strInput.toUpperCase();
		case 'L' :
			return strInput.toLowerCase();
		case 'I':
			//convert to lower case first
			var strVal=strInput.toLowerCase();

			// Split at each space character.
			arrSplit = strVal.split(" ");
			var strResultVal1="",strSplitVal;

			for (var idxIndex=0;idxIndex<arrSplit.length;idxIndex++) {
				strSplitVal=arrSplit[idxIndex];

				if(strSplitVal!="")	{
					strResultVal1+=strSplitVal.charAt(0).toUpperCase()+strSplitVal.substr(1);
				}
				if (idxIndex!=arrSplit.length-1) {
					strResultVal1+=" ";
				}
			}

			return strResultVal1;

		case 'P':
			var strTemp="";

			arrSplit=CaseConversion(strInput,'I').split(" ");

			for(idxIndex=0; idxIndex< arrSplit.length;idxIndex++) {
				if(arrSplit[idxIndex]!="") {
					strTemp=strTemp+arrSplit[idxIndex]+ (idxIndex==arrSplit.length-1?'':' ');
				}

			}
			return strTemp;
	}
}


/**
 * Change case while typing the data. 
 * Input vCase is 'U', 'L'
 **/
function changeCase(strCase) {
	///if ((event.keyCode>=65 && event.keyCode<=90) || (event.keyCode>=97 && event.keyCode<=122)) {
		if (event.keyCode>=97 && event.keyCode<=122) {
			if (strCase=='U')
				event.keyCode = event.keyCode-32;
		}
		else if (event.keyCode>=65 && event.keyCode<=90) {
			if (strCase=='L')
				event.keyCode = event.keyCode+32;
		}
	///}
	else if (event.keyCode==34) {
		event.keyCode = 0;
		event.returnValue = false;
	}	
	event.returnValue = true;
}


/**
 * NUMERIC function...
 * Parameters : ControlName, TotalDigits, DigitsAfterDecimal, '+'/'-' (Optional)
 **/

function chkNumber(fName, numValue, decValue, numsign){

	numValue = numValue - decValue;
	var fValue=fName.value;
	var decflg='N';
	var numtext=0;
	var dectext=0;
	switch (numsign) {
	case "-":
		if ((event.keyCode >=48 && event.keyCode <= 57) || (event.keyCode==46) || (event.keyCode==45)){
			if (event.keyCode==45 && fValue.length>0) {
				event.keyCode = 0;
			    event.returnValue = false;
			}
			if (decValue>0) {
				if (fValue.indexOf('.')==-1) {
					if (fValue.indexOf('-')==-1)
						numValue;
					else
						numValue++;
					if (fValue.length>numValue){
						fName.value = fValue.substring(0,numValue-1);
					}
					else {
						numtext = fValue.length;
						if (event.keyCode!=46) {
							if(numtext>=numValue)	
								fName.value = fName.value + ".";						
						}
					}
				}
				else{
					if (event.keyCode!=46){
						numtext = fValue.substring(0,fValue.indexOf('.'));
						dectext = fValue.substring(fValue.indexOf('.')+1, fValue.length);
						
						if (numtext.length>=numValue) {
							val1 = String.fromCharCode(event.keyCode);
							if (dectext.length+1<=decValue)
								fName.value = fName.value + val1;
							event.keyCode =0;
							event.returnValue=false;
						}
						
						if (dectext.length+1>decValue){
							event.keyCode=0;
							event.returnValue=false;
						}
						else
							event.returnValue =true;
					}
					else{
						event.returnValue =false;
					}
				}
			}
			else {
				if (event.keyCode==46)
					event.returnValue = false; 
				if (fValue.indexOf('-')==-1)	
					numtext = fValue.length;
				else
					numtext = fValue.length-1;
				if (numValue==numtext){
					event.returnValue = false; 
				}
			}
		}
		else
			event.returnValue =false;
		break;
	default:
		if ((event.keyCode >=48 && event.keyCode <= 57) || (event.keyCode==46)){
			if (decValue>0) {
				if (fValue.indexOf('.')==-1) {
					if (fValue.length>numValue){
						fName.value = fValue.substring(0,numValue-1);
					}
					else {
						numtext = fValue.length;
						if (event.keyCode!=46) {
							if(numtext>=numValue)	
								fName.value = fName.value + ".";						
						}
					}
				}
				else{
					if (event.keyCode!=46){
						numtext = fValue.substring(0,fValue.indexOf('.'));
						dectext = fValue.substring(fValue.indexOf('.')+1, fValue.length);
						
						if (numtext.length>=numValue) {
							val1 = String.fromCharCode(event.keyCode);
							if (dectext.length+1<=decValue)
								fName.value = fName.value + val1;
							event.keyCode =0;
							event.returnValue=false;
						}
						
						if (dectext.length+1>decValue){
							event.keyCode=0;
							event.returnValue=false;
						}
						else{
							event.returnValue =true;
						}
					}
					else{
						event.returnValue =false;
					}
				}
			}
			else {
				if (event.keyCode==46)
					event.returnValue = false; 
				numtext = fValue.length;
				if (numValue==numtext){
					event.returnValue = false; 
				}
			}
		}
		else
			event.returnValue =false;
		break;
	}
}
/**
 * Alphabetic and AlphaNumeric. 
 * Parameters: Object, "AL"/"AN"/"NM", "U"/"L", Special_Char_String.
 **/
function keyCheck(objEvent,objObject, strType, strCase, strSpecialChars) {
	
	var intKeycode, intLen;
	intKeycode=objEvent.keyCode;
	var strObjvalue=objObject.value;
	if (!strSpecialChars) 
		strSpecialChars="";
	if (!strCase)
		strCase="";
	if (!strType)
		strType="";

	intLen = strSpecialChars.length;
	if (intKeycode==34 && strSpecialChars.indexOf('D') != -1) // for the quotes.
			return true;
	if (intKeycode==39 && strSpecialChars.indexOf('S') != -1) // from the apostrophe.
			return true;

	if (strType == "AN") {
		if (!( (intKeycode>=65 && intKeycode<=90)  ||
		       (intKeycode>=97 && intKeycode<=122) ||
		       (intKeycode>=48 && intKeycode<=57)  ||
		       (intKeycode==32) )) { 
		       	
			if(intLen != 0) 
				for(i=0; i<intLen; i++)
					if(strSpecialChars.charAt(i) == String.fromCharCode(intKeycode)) 
						return true;
			event.returnValue=false;
			objObject.value = strObjvalue;
			return false; 
		}
	}
	if (strType == "AL") {
		if (!( (intKeycode>=65 && intKeycode<=90)  ||
		       (intKeycode>=97 && intKeycode<=122) ||
		       (intKeycode==32) ) ) {
		       	
			if(intLen != 0) 
			for(i=0; i<intLen; i++)
				if(strSpecialChars.charAt(i) == String.fromCharCode(intKeycode)) 
					return true;

			event.returnValue=false;
			objObject.value = strObjvalue;
			return false;
		}
	}
	if (strType == "NM") {
		if (!( (intKeycode>=48 && intKeycode<=57)  ||
		       (intKeycode==32) )) { 
		       	
			if(intLen != 0) 
			for(i=0; i<intLen; i++)
				if(strSpecialChars.charAt(i) == String.fromCharCode(intKeycode)) 
					return true;
					
			event.returnValue=false;
			objObject.value = strObjvalue;
			return false; 
		}
	}
	if (strType == "BL") {
		if (!(intKeycode==110 || intKeycode==121 || intKeycode==78 || intKeycode==89)) {
				event.returnValue=false;
				objObject.value = strObjvalue;
				return false;
		}
	}
	if (strType == "") {
		if (!( (intKeycode>=65 || intKeycode<=90)  &&
		       (intKeycode>=97 || intKeycode<=122) &&
		       (intKeycode>=48 || intKeycode<=57)  &&
		       (intKeycode==32) )) { 
				
			if(intLen != 0) 
				for(i=0; i<intLen; i++)
					if(strSpecialChars.charAt(i) == String.fromCharCode(intKeycode)) 
					return true;
				event.returnValue=false;
				objObject.value = strObjvalue;
				return false; 
		}
	}
	if(strCase == 'U')
		changeCase("U");
	else if(strCase == 'L')
		changeCase("L");
	
	return true;
}

/** 
 * Parameters: Textarea value, Maximum numbers of characters
 **/
function textarealen(strTextArea, intMaxLimit) {
	
	if (strTextArea.length > intMaxLimit-1) {
		if(event.keyCode==9 || event.keyCode==40 || event.keyCode==39 || event.keyCode==38 || event.keyCode==37 || event.keyCode == 8 || event.keyCode == 36 || event.keyCode == 46  || event.keyCode == 13 || (event.ctrlKey && event.keyCode==37) || (event.ctrlKey && event.keyCode==38) || (event.ctrlKey && event.keyCode==39) || (event.ctrlKey && event.keyCode==40) ){ }
		else {	event.returnValue =false; }
	}
}

/**
 * function validEmail to chekc the email validation
 * parameter : Object
 * return true or false
 **/
 function isEmail(objObject) {
	var regEmail, strValue;	
	regEmail =/^([A-Za-z0-9]{1})([A-Za-z0-9_.\-]*)([A-Za-z0-9]{1})(@)([A-Za-z0-9]{1})([A-Za-z0-9_.\-]*)([A-Za-z0-9]{1})(\.)([A-Za-z]{1})([A-Za-z]*)$/
	strValue = objObject.value;
	if (objObject.value == "") return true;
	if(! regEmail.test(strValue)) {
		alert("Invalid Email Id");
		objObject.focus();
		return false;
	}
	return true;
}
/**
 * Returns Current Date in DD/MM/YYYY and MMYYYY format.
 * return string
 **/
function getCurrDate(strFormat){
	var today = new Date();
	var strFormat=strFormat.toUpperCase();
	if (strFormat=="DD/MM/YYYY") {
		var strDate = today.getDate();
		if(strDate<=9) {
			strDate = "0" + strDate;
		}
		var strMonth = eval(today.getMonth()+ 1);
		if(strMonth<=9)	{
			strMonth = "0" + strMonth;
		}
		return( strDate+"/"+ strMonth +"/"+ today.getYear());
	}
	else if(strFormat=="MMYYYY") {
		var strMonth = eval(today.getMonth()+ 1);
		if(strMonth<=9)	{
			strMonth = "0" + strMonth;
		}
		return(strMonth + today.getYear());
	}
}
/**
 * Function to FormatDate(in DD/MM/YYYY) while entering the date to be called in KeyPress.
 * parameter: Object
 *
 **/ 
 
function formatDate(objCtrl){
	if(event.keyCode>=47 && event.keyCode<=57){
		var strfldValue= objCtrl.value

/*		var intLastPos = parseInt(strfldValue.lastIndexOf('/'));
		if (strfldValue.length==8 || strfldValue.length==9){
			var strLen = strfldValue.substring(intLastPos)
			if (strLen.length ==5){
				event.keyCode =0;
				return;
			}
		}*/
	}
	else{
		event.keyCode=0
	}

}

/**
 * Function to Check Valid Date in DD/MM/YYYY and MMYYYY format.
 * paramter: Object control and string of format.
 **/
function isDate(objCtrl, strFormat, blnChkSysDate, blnChkFinYr){
	strDate = objCtrl.value
	if(!strFormat || strFormat=='')
		strFormat = "DD/MM/YYYY";
	if (!blnChkSysDate)
		blnChkSysDate = false;
	if (!blnChkFinYr)
		blnChkFinYr = false;
	
	
	strFormat = strFormat.toUpperCase()
	if(strDate == "")
		return true;
	if (strFormat=="DD/MM/YYYY"){
		var strDatePat = /^(\d{1,2})(\/)(\d{1,2})(\/)(\d{4})$/;		
		var strMatchArr = strDate.match(strDatePat); // is the format ok?
		if (strMatchArr == null) { 
			alert("Invalid Date format 'DD/MM/YYYY'");
			//			parent.Error.showMessage(1020, "DD/MM/YYYY");
			objCtrl.focus();
			return false;
		}
		strDay = strMatchArr[1]; // parse date into variables
 		strMonth = strMatchArr[3];
 		strYear = strMatchArr[5];
 		if (strMonth < 1 || strMonth > 12) { // check month range
			alert("Invalid Date format 'DD/MM/YYYY'");
			//parent.Error.showMessage(1020, "DD/MM/YYYY");
 			objCtrl.focus();
 			return false;
	 	}
		if (strDay < 1 || strDay > 31) {
			parent.Error.showMessage(1020, "DD/MM/YYYY");
		 	objCtrl.focus();
		 	return false;
		}
		if ((strMonth==4 || strMonth==6 || strMonth==9 || strMonth==11) && strDay==31) {
			alert("Invalid Date format 'DD/MM/YYYY'");
			//parent.Error.showMessage(1020, "DD/MM/YYYY");
			objCtrl.focus();
		 	return false;
		}
		if (strMonth == 2) { // check for february 29th
		 	var isleap = (strYear % 4 == 0 && (strYear % 100 != 0 || strYear % 400 == 0));
		 	if (strDay>29 || (strDay==29 && !isleap)) {
				alert("Invalid Date format 'DD/MM/YYYY'");
				//parent.Error.showMessage(1020, "DD/MM/YYYY");
				objCtrl.focus();
		 		return false;
		 	}
		}
		if (strMonth.length ==1)
			strMonth = "0" + strMonth
		if (strDay.length ==1)
			strDay = "0" + strDay			
		if (strYear <= 0){
			alert("Invalid Date format 'DD/MM/YYYY'");
			//parent.Error.showMessage(1020, "DD/MM/YYYY");
			objCtrl.focus();
		 	return false;
		}
		strDate = strDay + "/" + strMonth + "/" + strYear
		objCtrl.value= strDate
		if(strDate.length < 10) {
			alert("Invalid Date format 'DD/MM/YYYY'");
			//parent.Error.showMessage(1020, "DD/MM/YYYY");
			objCtrl.focus();
			return false;
		}
		//checking date with System Date
		if (blnChkSysDate==true){
			if(CompareDate(strDate, strSYSDATE) == 1) {
				parent.Error.showMessage(1021);
				objCtrl.value=strSYSDATE;
				objCtrl.focus();
				return false;
			}
		}
		//checking date with Financial Year
		if (blnChkFinYr==true){
			if(!chkWithFinYear(strDate, strFYR_STRT,strFYR_END)) {
				parent.Error.showMessage(1026);
				objCtrl.value=strSYSDATE;
				objCtrl.focus();
				return false;
			}
		}		
	}
	else if (strFormat=="MMYYYY"){
		if (strDate.length <6){
			alert("Invalid Date format 'DD/MM/YYYY'");
			//parent.Error.showMessage(1020, "DD/MM/YYYY");
			objCtrl.focus();
			return false;
		}
		strDate = strDate.substr(0,2);
		if (strDate<"01" || strDate>"12") {
			alert("Invalid Date format 'DD/MM/YYYY'");
			//parent.Error.showMessage(1020, "DD/MM/YYYY");
			objCtrl.focus();
			return false;
		}
	}
	return true;
}

/**
 * Function to replace the Single quote and Double quote with escape sequence in javascript.
 **/
function replaceQuates(strVal) {

	var RegExp = new RegExp('\'', 'gi');
	var strNewVal = strVal.replace(RegExp, '\\\'');

	RegExp = new RegExp('\"', 'gi');
	var result = strNewVal.replace(RegExp, '\\\"');

	return result;
}
/**
 *  function to Compare Two Date 
 *  It will return -1 if first is less than Second
 *				   0 if Both are equal 
 *				   1 if first is greater than Second			
 **/
function CompareDate(strFromDate, strToDate) {
	var intFromDt = parseInt(strFromDate.substring(6) + strFromDate.substring(3,5) + strFromDate.substring(0,2))
	var intToDt = parseInt(strToDate.substring(6) + strToDate.substring(3,5) + strToDate.substring(0,2))
	if(intFromDt < intToDt)
		return -1;
	else if(intFromDt > intToDt	)
		return 1;
	else
		return 0;	
}
 
/**
 *  function to Given Date is between given Two Dates 
 *  It will return true - if Date fall in given Range
 *				   false - if Date doesn't fall in given Range
 **/
function ChkDateRange(strDate,strFromDate, strToDate){
	var intDate = parseInt(strDate.substring(6) + strDate.substring(3,5) + strDate.substring(0,2))
	var intFromDt = parseInt(strFromDate.substring(6) + strFromDate.substring(3,5) + strFromDate.substring(0,2))
	var intToDt = parseInt(strToDate.substring(6) + strToDate.substring(3,5) + strToDate.substring(0,2))

	if((intDate >= intFromDt) && (intDate <= intToDt))
		return true;
	else 
		return false;	
}

/**
 * do not allow Copy functionality
 *
 **/
function fncCopy(){
	if (!document.activeElement.Copy) 
		event.returnValue = false;
}

/**
 * do not allow Paste functionality
 *
 **/
function fncPaste(){
	if (!document.activeElement.Paste) 
		event.returnValue = false;
}

/**
 * To check the validity of the number.
 *
 **/
function isNumber(objObject, intLength, intDecimal) {
	
	var intI, strString, intDecPoint;
	strString ="";
	intDecPoint = intLength-intDecimal;
	
	for(intI=0; intI<intDecPoint; intI++) 
		strString = strString + "9";	

	strString = strString + "."
	for(intI =0; intI < intDecimal; intI++)
		strString = strString + "9";

	if (Trim(objObject.value).length>0){
		if (isNaN(objObject.value)){
			alert("Invalid Number");
			objObject.value='';
			objObject.focus();
			return false;
		}
	}

	if(parseFloat(objObject.value) > parseFloat(strString)) {
		alert("Invalid Number");
		objObject.focus();
		return false;
	}
	
	return true;
}

/**
 * To Find of form controls making control array
 *
 **/
function findIndex(intIndex){
	return intIndex;
}

/**
 * To check the Restrict User Drag .
 *
 **/
function fncCancelDrop(){
	event.returnValue=false;
	event.cancelBubble=true;	
}

function CompareValue(intFromVal, intToVal){
	if (parseFloat(intFromVal) < parseFloat(intToVal))
		return -1;
	else if (parseFloat(intFromVal) > parseFloat(intToVal))
		return 1;
	else
		return 0;	
		
}

function Round(intNumber,intDecimal) {
	intDecimal = (!intDecimal ? 2 : intDecimal);
	return Math.round(intNumber*Math.pow(10,intDecimal))/Math.pow(10,intDecimal);
}

// Function which calculates Sum of all values in given Detail column..
function doSum(strSrc){
//	alert(strSrc.name)
		var dblSum="0";
		var objAmt = document.forms[0].item(strSrc);
		if (objAmt.length){
			for (var intCnt=0; intCnt<objAmt.length; intCnt++) {
				if (! isNaN(parseFloat(objAmt(intCnt).value))) 
					dblSum =parseFloat(dblSum) + parseFloat(objAmt(intCnt).value);
			}	
		}else{
			if (! isNaN(parseFloat(objAmt.value))) 
				dblSum =parseFloat(objAmt.value);
		}
		return parseFloat(dblSum);	
		
}
//Function for Check All and Clear All Checkboxes
function ToggleAll(e,x){
	var theForm = document.forms[x];
	if (e.checked){
	    CheckAll(x);
	}else{
	    ClearAll(x);
	}	
}
function Toggle(e,x){
	var theForm = document.forms[x];
	if (e.checked){
		Highlight(e);
	    theForm.toggleAll.checked = AllChecked(x);
	}else{
		Unhighlight(e);
	    theForm.toggleAll.checked = false;
	}	
}
function Check(e){
	e.checked = true;
	Highlight(e);
}
function Clear(e){
	e.checked = false;
	Unhighlight(e);
}
function CheckAll(x){	
	var theForm = document.forms[x];
	var len = theForm.elements.length;
	for (var i = 0; i < len; i++){
	    var e = theForm.elements[i];
	    if (e.name == "check"){
			Check(e);
	    }
	}
	theForm.toggleAll.checked = true;
}
function ClearAll(x){
	var theForm = document.forms[x];
	var len = theForm.elements.length;
	for (var i = 0; i < len; i++){
	    var e = theForm.elements[i];
	    if (e.name == "check"){
			Clear(e);
	    }
	}
	theForm.toggleAll.checked = false;	
}
function AllChecked(x){
	var theForm = document.forms[x];
	len = theForm.elements.length;
	for(var i = 0 ; i < len ; i++){
	    if (theForm.elements[i].name == "check" && !theForm.elements[i].checked){
			return false;
	    }
	}
	return true;
}
function Highlight(e){	
	var r = null;
	if (e.parentNode && e.parentNode.parentNode){
	    r = e.parentNode.parentNode;
	}
	else if (e.parentElement && e.parentElement.parentElement){
	    r = e.parentElement.parentElement;
	}
	if (r){
	    if (r.className == "tdunhighlighted"){
			r.className = "tdhighlighted";
	    }
	}
}
function Unhighlight(e){
	var r = null;
	if (e.parentNode && e.parentNode.parentNode){
	    r = e.parentNode.parentNode;
	}else if (e.parentElement && e.parentElement.parentElement){
	    r = e.parentElement.parentElement;
	}
	if (r){
	    if (r.className == "tdhighlighted"){
			r.className = "tdunhighlighted";
	    }
	}
}