/********************************************************************************************************************************
	Company Name 	:	Meditab Softwares
	Created On		: 	15 April 2006	
	File Name		:	common.js
	Purpose			:   This File Includes all the common functions to check javascript validations....
*********************************************************************************************************************************/

/*********************************************** Functions Starts ***************************************************************/
/********************************************************************************************************************************
	Created On		: 	19 April 2006	
	Function Name	:	checkValid
	Arguments		:	Id Of the form
	Purpose			:   it will check validation for all the fields of form
*********************************************************************************************************************************/
/*
cases....
Ap : Alphabetic
Dt : Date
In : Integer
Dc : Decimal
Zp : Zip
Em : Email
Ph : Phone
Fx : Fax
Ta : Normal Required Field
Ur : URL
Nm : numeric
R  : Required Field

Required Field should come after data type... e.g. ApRtxt_name
*/
var selcount=0;
var itercount=0;
var alertMessage="";	// the alert nessage
var alertfield;
var strStyle="";
var strFocus="";
var strReOneOrMoreDigits = /[\d+]/;
var strReNoDigits = /[^\d]/gi;
var strCallHttpResponseOFunction = Array();

function checkValid(FORMID)
{
	//alert(FORMID);
	var frmname=document.getElementById(FORMID);
	var blnflag=true;
	alertMessage="";	// reset the alert nessage
	alertfield="";
	strStyle="";
	strFocus="";
	selcount=0;
	itercount=0;
	
	//Get no of elements of form...
	var frmcnt=document.getElementById(FORMID).elements.length;

	for(var i=0;i<frmcnt;i++)
	{
		//alert(frmname.elements[i].name)
		try
		{
			MESSAGE=eval("LBL_"+frmname.elements[i].name);
		}
		catch(e)
		{
			MESSAGE="Field";
		}
		//alert(frmname.elements[i].type+' : '+frmname.elements[i].name+' : '+blnflag+'  : '+alertMessage);
		if(frmname.elements[i].type=='text' && !frmname.elements[i].name.match(/\[]/))		// handling of various textbox validations
		{	
			// first 2 characters of the textbox name are to identify type of validation...
			var ChkType=frmname.elements[i].name.substr(0,2);
			//third character is to identify required field...
			var RChr=frmname.elements[i].name.substr(2,1);
			
			//alert(frmname.elements[i].name+' '+ChkType+'    '+RChr+'  ');			
			
			var REQUIRED="";
			if(RChr=="R")
			{
				REQUIRED=true;
			}					
			else
			{
				REQUIRED=false;	
			}
			//Generate name of the field...
			
			FIELD_NAME=eval("document."+FORMID+"."+frmname.elements[i].name);			
			switch(ChkType)
			{
				case "Ap" :
				
					if(!checkAlpha(FIELD_NAME,MESSAGE,REQUIRED))
					{
						blnflag = false;
					}
					break;
				case "Dt" :
					if(!checkDate(FIELD_NAME,MESSAGE,REQUIRED))
					{
						blnflag = false;
					}
					break;
				case "In" :
					if(!checkInteger(FIELD_NAME,MESSAGE,REQUIRED))
					{
						blnflag = false;
					}
					break;
				case "Ft" :
					var arrName=frmname.elements[i].name.split("txt");
					var strRequired=arrName[0].substr(arrName[0].length - 1 ,1);
					if(strRequired == 'R')
					{
						REQUIRED=true;
						var strLength = (arrName[0].length - 1);
					}					
					else
					{
						REQUIRED=false;
						var strLength = (arrName[0].length);
					}
					var ChkCharID = arrName[0].substr(2 ,strLength - 2); 
					if(!checkFloat(FIELD_NAME,MESSAGE,ChkCharID,REQUIRED))
					{
						blnflag = false;
					}
					break;
				case "Dc" :
					if(!checkDecimal(FIELD_NAME,MESSAGE,REQUIRED))
					{
						blnflag = false;
					}
					break;
				case "Zp" :
					if(!checkZip(FIELD_NAME,MESSAGE,REQUIRED))
					{
						blnflag = false;
					}
					break;
				case "Em" :
					if(!checkEmail(FIELD_NAME,MESSAGE,REQUIRED))
					{	//alert("z");
						blnflag = false;
					}
					break;
				case "Ph" :
					if(!checkPhone(FIELD_NAME,MESSAGE,REQUIRED))
					{
						blnflag = false;
					}
					break;
				case "Fx" :
					if(!checkFax(FIELD_NAME,MESSAGE,REQUIRED))
					{
						blnflag = false;
					}
					break;
				case "Ta" :
					if(REQUIRED == true)
					{
						if(checkBlank(FIELD_NAME,MESSAGE))
						{
							blnflag = false;
						}
					}
					break;
				case "Ur" :
					if(!checkURL(FIELD_NAME,MESSAGE,REQUIRED))
					{
							blnflag = false;
					}
					break;
					
			}			
		}
		else if(frmname.elements[i].type=='textarea')
		{			
			var ChkType=frmname.elements[i].name.substr(0,2);
			//third character is to identify required field...
			var RChr=frmname.elements[i].name.substr(2,1);
			var REQUIRED="";
			if(RChr=="R")
			{
				REQUIRED=true;
			}					
			else
			{
				REQUIRED=false;	
			}
			//Generate name of the field...
			
			FIELD_NAME=eval("document."+FORMID+"."+frmname.elements[i].name);		
			if(REQUIRED == true)
			{
				//alert(FIELD_NAME);
				if(checkBlank(FIELD_NAME,MESSAGE))
				{
					blnflag = false;
				}
			}	
		}
		else if(frmname.elements[i].type=='password')		// handling of various textbox validations
		{
			var RChr=frmname.elements[i].name.substr(2,1);
			var REQUIRED="";
			if(RChr=="R")
			{
				REQUIRED=true;
			}					
			else
			{
				REQUIRED=false;	
			}
			FIELD_NAME=eval("document."+FORMID+"."+frmname.elements[i].name);
			if(REQUIRED == true)
			{
				//alert(FIELD_NAME);
				if(checkBlank(FIELD_NAME,MESSAGE))
				{
					blnflag = false;
				}
			}		
		}
		else if(frmname.elements[i].type=='checkbox')		// handling of checkbox validations
		{
			// for checkbox first character to identify the required field
			var RChr=frmname.elements[i].name.substr(0,1);
			var REQUIRED="";
			if(RChr=="R")
			{
				REQUIRED=true;
			}					
			else
			{
				REQUIRED=false;	
			}
			
			if(REQUIRED == true)
			{
				//Generate name of the field...
				FIELD_NAME=eval("document."+FORMID+"."+frmname.elements[i].name);	
				if(!checkMultiSelectBox(FIELD_NAME,MESSAGE,REQUIRED))
				{
					blnflag = false;
				}
			}
		}
		else if(frmname.elements[i].type=='radio')			// handling of radio button validations
		{
			// for checkbox first character to identify the required field
			var RChr=frmname.elements[i].name.substr(0,1);
			var REQUIRED="";
			if(RChr=="R")
			{
				REQUIRED=true;
			}					
			else
			{
				REQUIRED=false;	
			}
			//Generate name of the field...
			FIELD_NAME=eval("document."+FORMID+"."+frmname.elements[i].name);
			if(REQUIRED==true)
			{
				if(!checkMultiSelectBox(FIELD_NAME,MESSAGE,REQUIRED))
				{
					blnflag = false;
				}
			}
		}
		else if(frmname.elements[i].type=='file' && !frmname.elements[i].name.match(/\[]/)) 			
		{
			// handling of file validations
			// for file input the first character to identify the required field
			var RChr=frmname.elements[i].name.substr(0,1);
			var REQUIRED="";
			if(RChr=="R")
			{
				REQUIRED=true;
			}					
			else
			{
				REQUIRED=false;	
			}
			//Generate name of the field...
			FIELD_NAME=eval("document."+FORMID+"."+frmname.elements[i].name);
			if(RChr=="R")
			{
				var strType=frmname.elements[i].name.substr(4,3);
			}
			else
			{
				var strType=frmname.elements[i].name.substr(3,3);	
			}
			strType=strType.toUpperCase()
			if(strType=="IMG")
			{
				var EXTENSIONS="jpg,jpeg,png,gif";	// valid file extensions				
			}
			else if(strType=="DOC")	
			{
				var EXTENSIONS="txt,doc,pdf,xls,csv";	// valid file extensions	
			}
			else if(strType=="VID")	
			{
				var EXTENSIONS="mp3,3gp,gif,avi,mpeg";	// valid file extensions
			}
			else
			{
				var EXTENSIONS="";	// valid file extensions
			}
			if(!checkFileName(FIELD_NAME,MESSAGE,REQUIRED,EXTENSIONS))
			{
						blnflag = false;
			}			
		}
		else if(frmname.elements[i].type=='select-one')			// handling of select box validations
		{
			// for file input the first character to identify the required field
			var RChr=frmname.elements[i].name.substr(0,1);
			var REQUIRED="";
			var multi=false;
			if(RChr=="R")
			{
				REQUIRED=true;
			}					
			else
			{
				REQUIRED=false;	
			}
			//Generate name of the field...
			var sfldname;
			if(frmname.elements[i].name.match(/\[]/))	// array of select fields
			{
				multi = true;
				sfldname=frmname.elements[i];	// get the select field element for select array
			}
			else
			{
				FIELD_NAME=eval("document."+FORMID+"."+frmname.elements[i].name);					
			}


			if(REQUIRED == true && multi == false)
			{
				// if select then check for  selected according to required or not				
				if(checkSelectBox(FIELD_NAME,MESSAGE,REQUIRED))
				{
						blnflag = false;
				}			
			}
			else
			{
				// for select array atleast on selected
				if(multi == true)
				{
					// if select array then check for atleast one selected
					if(checkMultiDropDownBox(sfldname,MESSAGE,REQUIRED)) 
					{					
							blnflag = false;
					}	

				}
				
			}

		}
		else
		{

		}
	}

	// alert the fields and set the error style for the required fields
	if(blnflag == false && alertMessage!="")
	{
		alertMessage="Following errors:\n\n" + alertMessage;	
		alert(alertMessage);	
		eval(strStyle);
		eval(strFocus);
		return false;
	}
	else
	{
		eval(strStyle);
		return true;
	}
	
}


/********************************************************************************************************************************
	Created By		:	Hemita(hemitat@meditab.in)
	Created On		: 	15 April 2006	
	Function Name	:	checkBlank
	Arguments		:	Name of the field, Message to be displayed
	Purpose			:   it Will display tne message if the mendatory filed is Null
*********************************************************************************************************************************/

function checkBlank(FIELD_NAME,MESSAGE)
{
	//if value is null then alert message...
	if(Trim(FIELD_NAME.value) == '')
	{
		FIELD_NAME.value="";	
		alertMessage+="\nPlease enter value for "+MESSAGE+".";
		if(FIELD_NAME.type!='textarea')
		{
			setStyle(FIELD_NAME);
		}
		return true;
	}
	else
	{	
		if(FIELD_NAME.type!='textarea')
		{
			resetStyle(FIELD_NAME);			
		}
		return false;	
	}
}


/********************************************************************************************************************************
	Created By		:	Hemita(hemitat@meditab.in)
	Created On		: 	18 April 2006	
	Function Name	:	checkAlpha
	Arguments		:	Name of the, Message to be displayed, Required Field
	Purpose			:   it Will display tne message if the mendatory filed is Null
*********************************************************************************************************************************/
function checkAlpha(FIELD_NAME,MESSAGE,REQUIRED)
{
	//Check For Mendatory field
	if(REQUIRED && checkBlank(FIELD_NAME,MESSAGE)) {return false;}
	if(FIELD_NAME.value.search(/^[A-Za-z]*$/))
	{
		alertMessage+="\nPlease enter valid "+MESSAGE+".";
		fldname=FIELD_NAME;
		setStyle(FIELD_NAME);
		return false;
	}
	else
	{	
		resetStyle(FIELD_NAME);			
		return true;	
	}
}


/********************************************************************************************************************************
	Created By		:	Hemita(hemitat@meditab.in)
	Created On		: 	18 April 2006	
	Function Name	:	checkDate
	Arguments		:	Name of the field, message to be displayed, Required Field
	Purpose			:   it Will check Date Formate it should be mm-dd-yyyy
*********************************************************************************************************************************/
function checkDate(FIELD_NAME,MESSAGE,REQUIRED)
{
    //Check For Mendatory field
	if(REQUIRED && checkBlank(FIELD_NAME,MESSAGE)) {return false;}
	if(FIELD_NAME.value!="")
	{
		if(!isDate(FIELD_NAME.value))
		{
			//FIELD_NAME.focus();
			fldname=FIELD_NAME;
			setStyle(FIELD_NAME);
			return false;
		}
	}
	resetStyle(FIELD_NAME);
	return true;
}


/********************************************************************************************************************************
	Created By		:	Hemita(hemitat@meditab.in)
	Created On		: 	15 April 2006	
	Function Name	:	dateCompare
	Arguments		:	Sart Date, End Date, Lable of start date, lable of end date
	Purpose			:   it Will compare start date & end date. if start date>end date then it will give alert message...
*********************************************************************************************************************************/
function dateCompare(START_DATE,END_DATE,MESSAGE_START,MESSAGE_END)
{
	//if both start date & end date are not null then
	sadate=Array();
	eadate=Array();
	sadate=START_DATE.value.split("-");
	eadate=END_DATE.value.split("-");
	
	sdate=new Date(sadate[2],sadate[0]-1,sadate[1]);
	edate=new Date(eadate[2],eadate[0]-1,eadate[1]);
	//compare both start date & end date. if start date is greater then end date then alert message...
	if(sdate>edate)	
	{
		alert(MESSAGE_END+" can not be less than "+MESSAGE_START+".");
		fldname=END_DATE;
		setStyle(END_DATE);
		eval(strStyle);
		END_DATE.focus();
		return false;
	}
	else
	{
		return true;
	}
}


/********************************************************************************************************************************
	Created By		:	Hemita(hemitat@meditab.in)
	Created On		: 	15 April 2006	
	Function Name	:	checkInteger
	Arguments		:	Name of the field, message to be displayed, Required Field
	Purpose			:   check for numeric value
*********************************************************************************************************************************/
function checkInteger(FIELD_NAME,MESSAGE,REQUIRED)
{
	//Check For Mendatory field
	if(REQUIRED && checkBlank(FIELD_NAME,MESSAGE)) {return false;}
	//Allow numbers only...
	if(FIELD_NAME.value.search(/^[0-9]*$/))
	{
		alertMessage+="\nPlease enter valid "+MESSAGE+".";
		fldname=FIELD_NAME;
		setStyle(FIELD_NAME);
		return false;
	}
	else
	{
		resetStyle(FIELD_NAME);			
		return true;
	}
}


/********************************************************************************************************************************
	Created By		:	Hemita(hemitat@meditab.in)
	Created On		: 	21 April 2006	
	Function Name	:	checkFloat
	Arguments		:	Name of the field, message to be displayed,no of digits after floating point, Required Field
	Purpose			:   check for numeric value
*********************************************************************************************************************************/

function checkFloat(FIELD_NAME,MESSAGE,CHARNO,REQUIRED)
{
	var stringsearch="/^[0-9]+(\.)?[0-9]{0,"+CHARNO+"}$/";
	//Check For Mendatory field
	if(REQUIRED && checkBlank(FIELD_NAME,MESSAGE)) {return false;}
	//Allow numbers only...
	if(FIELD_NAME.value.search(eval(stringsearch)))
	{
		alertMessage+="\nPlease enter valid "+MESSAGE+".";
		fldname=FIELD_NAME;
		setStyle(FIELD_NAME);
		return false;
	}
	else
	{
		resetStyle(FIELD_NAME);			
		return true;
	}
}


/********************************************************************************************************************************
	Created By		:	Hemita(hemitat@meditab.in)
	Created On		: 	15 April 2006	
	Function Name	:	checkDecimal
	Arguments		:	Name of the field, message to be displayed, Required Field
	Purpose			:   check for numeric value with decimal point...
*********************************************************************************************************************************/
function checkDecimal(FIELD_NAME,MESSAGE,REQUIRED)
{
	//Check For Mendatory field
	if(REQUIRED && checkBlank(FIELD_NAME,MESSAGE)) {return false;}
	//Allow numbers only...
	if(isNaN(FIELD_NAME.value))
	{
		alertMessage+="\nPlease enter valid "+MESSAGE+".";
		fldname=FIELD_NAME;
		setStyle(FIELD_NAME);
		return false;
	}
	else
	{
		resetStyle(FIELD_NAME);			
		return true;
	}
}


/********************************************************************************************************************************
	Created By		:	Hemita(hemitat@meditab.in)
	Created On		: 	15 April 2006	
	Function Name	:	checkZip
	Arguments		:	Name of the field, message to be displayed, Required Field
	Purpose			:   Check For Valid Zip
*********************************************************************************************************************************/
function checkZip(FIELD_NAME,MESSAGE,REQUIRED)
{
	//Check For Mendatory field
	if(REQUIRED && checkBlank(FIELD_NAME,MESSAGE)) {return false;}
	//Allow numbers only...
	//valid zip should contain 5 or 9 digits...
	if(FIELD_NAME.value!="")
	{
		if(FIELD_NAME.value.search(/^\d\d\d\d\d(\d\d\d\d)?$/))
		{
			alertMessage+="\nPlease enter valid "+MESSAGE+".";
			fldname=FIELD_NAME;
			setStyle(FIELD_NAME);
			return false;
		}
		else
		{	
			resetStyle(FIELD_NAME);			
			return true;	
		}
	}
	else
	{	
			resetStyle(FIELD_NAME);			
			return true;	
	}
}


/********************************************************************************************************************************
	Created By		:	Hemita(hemitat@meditab.in)
	Created On		: 	15 April 2006	
	Function Name	:	checkPhone
	Arguments		:	Name of the field, message to be displayed, Required Field
	Purpose			:   Check For Valid Phone
*********************************************************************************************************************************/
function checkPhone(FIELD_NAME,MESSAGE,REQUIRED)
{
	//Check For Mendatory field
	if(REQUIRED && checkBlank(FIELD_NAME,MESSAGE)) {return false;}
	if(FIELD_NAME.value!="")
	{
		if(FIELD_NAME.value.search(/^[0-9]{10}[0-9Xx]?[0-9]{0,3}$/))
		{
			alertMessage+="\nPlease enter valid "+MESSAGE+".";
			fldname=FIELD_NAME;
			setStyle(FIELD_NAME);
			return false;
		}
		else
		{	
			resetStyle(FIELD_NAME);			
			return true;	
		}
	}
	else
	{	
			resetStyle(FIELD_NAME);			
			return true;	
	}
}


/********************************************************************************************************************************
	Created By		:	Hemita(hemitat@meditab.in)
	Created On		: 	15 April 2006	
	Function Name	:	checkFax
	Arguments		:	Name of the field, message to be displayed, Required Field
	Purpose			:   Check For Valid Fax No.
*********************************************************************************************************************************/
function checkFax(FIELD_NAME,MESSAGE,REQUIRED)
{
	//Check For Mendatory field
	if(REQUIRED && checkBlank(FIELD_NAME,MESSAGE)) {return false;}
	if(FIELD_NAME.value!="")
	{
		if(FIELD_NAME.value.search(/^[0-9]{10}$/))
		{
			alertMessage+="\nPlease enter valid "+MESSAGE+".";
			fldname=FIELD_NAME;
			setStyle(FIELD_NAME);
			return false;
		}
		else
		{	
			resetStyle(FIELD_NAME);			
			return true;	
		}
		
	}
	else
	{	
			resetStyle(FIELD_NAME);			
			return true;	
	}
}


/********************************************************************************************************************************
	Created By		:	Hemita(hemitat@meditab.in)
	Created On		: 	15 April 2006	
	Function Name	:	checkEmail
	Arguments		:	Name of the field, message to be displayed, Required Field
	Purpose			:   Check For Valid Email
*********************************************************************************************************************************/
function checkEmail(FIELD_NAME,MESSAGE,REQUIRED)
{
	//Check For Mendatory field
	if(REQUIRED && checkBlank(FIELD_NAME,MESSAGE)) {return false;}
	if(FIELD_NAME.value!="")
	{
		if(FIELD_NAME.value.search(/^[\w-\.]+@[\w-\.]+\.\w+$/))
		{
			alertMessage+="\nPlease enter valid "+MESSAGE+".";
			fldname=FIELD_NAME;
			setStyle(FIELD_NAME);
			return false;
		}
	}
	else
	{	
			resetStyle(FIELD_NAME);
			return true;	
	}
}

/********************************************************************************************************************************
	Created By			:	Hemita(hemitat@meditab.in)
	Created On			: 	15 April 2006	
	Main Function Name	:	isDate
	Arguments			:	Date
	Purpose				:   Function For Date Validation
*********************************************************************************************************************************/

/**
 * DHTML date validation script. 
 */
// Declaring valid date character, minimum year and maximum year

var dtCh= "-";
var minYear=1900;
var maxYear=2100;


//Function checks all the characters are numbers or not...
function isInteger(s)
{
	var i;
    for (i = 0; i < s.length; i++)
	{   
        // Check that current character is number.
        var c = s.charAt(i);
        if (((c < "0") || (c > "9"))) return false;
    }
    // All characters are numbers.
    return true;
}


function stripCharsInBag(s, bag)
{
	var i;
    var returnString = "";
    // Search through string's characters one by one.
    // If character is not in bag, append to returnString.
    for (i = 0; i < s.length; i++)
	{   
        var c = s.charAt(i);
        if (bag.indexOf(c) == -1) returnString += c;
    }
    return returnString;
}


function daysInFebruary (year)
{
	// February has 29 days in any year evenly divisible by four,
    // EXCEPT for centurial years which are not also divisible by 400.
    return (((year % 4 == 0) && ((!(year % 100 == 0)) || (year % 400 == 0))) ? 29 : 28 );
}


/*This function makes day Array...
if month = 2(feb)
then days = 29
if mont = 4,6,9,11
then days=30
else days=31
*/

function DaysArray(n) 
{
	for (var i = 1; i <= n; i++) 
	{
		this[i] = 31
		if (i==4 || i==6 || i==9 || i==11) 
		{
			this[i] = 30
		}
		if (i==2) 
		{
			this[i] = 29
		}
   } 
   return this
}


//Check whether date format is correct or not...
function isDate(dtStr)
{
	var daysInMonth = DaysArray(12)
	var pos1=dtStr.indexOf(dtCh)
	var pos2=dtStr.indexOf(dtCh,pos1+1)
	var strMonth=dtStr.substring(0,pos1)
	var strDay=dtStr.substring(pos1+1,pos2)
	var strYear=dtStr.substring(pos2+1)
	var strInvalid = "";
	strYr=strYear
	if (strDay.charAt(0)=="0" && strDay.length>1) strDay=strDay.substring(1)
	if (strMonth.charAt(0)=="0" && strMonth.length>1) strMonth=strMonth.substring(1)
	for (var i = 1; i <= 3; i++) 
	{
		if (strYr.charAt(0)=="0" && strYr.length>1) strYr=strYr.substring(1)
	}
	month=parseInt(strMonth)
	day=parseInt(strDay)
	year=parseInt(strYr)
	if (pos1==-1 || pos2==-1)
	{
		//if two "-" are not there in date then date is invalid...
		alertMessage+="\nInvalid date.The date format should be : mm-dd-yyyy";
		return false
	}
	if (strMonth.length<1 || month<1 || month>12)
	{
		//checking for month format...
		strInvalid+="\nPlease enter a valid month";
	}
	if (strDay.length<1 || day<1 || day>31 || (month==2 && day>daysInFebruary(year)) || day > daysInMonth[month])
	{
		//Checking for day format...
		strInvalid+="\nPlease enter a valid day";
	}
	if (strYear.length != 4 || year==0 || year<minYear || year>maxYear)
	{
		//Checking for Year Format...
		strInvalid+="\nPlease enter a valid 4 digit year between "+minYear+" and "+maxYear;
	}
	if (dtStr.indexOf(dtCh,pos2+1)!=-1 || isInteger(stripCharsInBag(dtStr, dtCh))==false)
	{
		//check whether it is integer or not...
		alertMessage+="\nPlease enter a valid date";
		return false
	}
	if(strInvalid != "")
	{
		alertMessage+=strInvalid;
		return false;
	}
	return true
}


/********************************************************************************************************************************
	Created On		: 	15 April 2006	
	Function Name	:	formatDate
	Arguments		:	Date To be Formated,Date Format
	Purpose			:   It Will convert date in specific format.
*********************************************************************************************************************************/
function formatDate(DATE,DATE_FORMAT)
{
	FDate=DATE.split('-');	
	FirstFC=DATE_FORMAT.substr(0,1);
	SecondFC=DATE_FORMAT.substr(2,1);
	ThirdFC=DATE_FORMAT.substr(4,1);
	AddChr=DATE_FORMAT.substr(1,1);	
	var MONTH_NAMES=new Array('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec');
	if(FirstFC=='Y' || FirstFC=='y')
	{
		//Check For First Place For Year...
		if(FirstFC=='Y')
		{
	  		FirstFC=FDate[0];	
		}
		else
		{
			FirstFC=FDate[0].substr(2,2);
		}
	}
	else if(FirstFC=='M' || FirstFC=='m')
	{
		//Check For First Place For Month...
		if(FirstFC=='M')	
		{
			FirstFC=MONTH_NAMES[FDate[1]-1];	
		}
		else
		{
			FirstFC=FDate[1];	
		}
	}
	else
	{
		FirstFC=FDate[2];
	}
	if(SecondFC=='Y' || SecondFC=='y')
	{
		//Check For Second Place For Year...
		if(SecondFC=='Y')
		{
	  		SecondFC=FDate[0];	
		}
		else
		{
			SecondFC=FDate[0].substr(2,2);
		}
	}
	else if(SecondFC=='M' || SecondFC=='m')
	{	
		//Check For Second Place For Month...
		if(SecondFC=='M')	
		{
			SecondFC=MONTH_NAMES[FDate[1]-1];	
		}
		else
		{
			SecondFC=FDate[1];	
		}
	}
	else
	{
		SecondFC=FDate[2];	
	}
	if(ThirdFC=='Y' || ThirdFC=='y')
	{
		//Check For Third Place For Year...
		if(ThirdFC=='Y')
		{
	  		ThirdFC=FDate[0];	
		}
		else
		{
			ThirdFC=FDate[0].substr(2,2);
		}
	}
	else if(ThirdFC=='M' || ThirdFC=='m')
	{
		//Check For Third Place For Month...
		if(ThirdFC=='M')	
		{
			ThirdFC=MONTH_NAMES[FDate[1]-1];	
		}
		else
		{
			ThirdFC=FDate[1];	
		}
	}
	else
	{
		ThirdFC=FDate[2];	
	}
	FDate=FirstFC+AddChr+SecondFC+AddChr+ThirdFC;
	return FDate;
}


/********************************************************************************************************************************
	Created By		:	Hemita(hemitat@meditab.in)
	Created On		: 	17 April 2006	
	Function Name	:	checkAll
	Arguments		:	name of checkbox, checked status 
	Purpose			:   Function For Select & Deselect All Checkboxes...
*********************************************************************************************************************************/

function checkAll(CHECKBOX_NAME,CHECKED) 
{
	var name=document.getElementsByName(CHECKBOX_NAME);
	var field = name.length;
	var chkval=(CHECKED=="true")?"yes":"no";
	for (i = 0; i < field; i++) 
	{
		var str=eval(name[i]);
		str.checked=eval(CHECKED);
		//str.value=chkval;		
	}
}
function checkAll(CHECKBOX_ARRAY,CHECKALL) 
{
	var name=document.getElementsByName(CHECKBOX_ARRAY);
	var field = name.length;
	for (i = 0; i < field; i++) 
	{
		var str=eval(name[i]);
		str.checked=document.getElementById(CHECKALL).checked;
	}
}


/********************************************************************************************************************************
	Created By		:	Hemita(hemitat@meditab.in)
	Created On		: 	20 April 2006	
	Function Name	:	checkSelect
	Arguments		:	Name of the field
	Purpose			:   Check For Selected Check box.
*********************************************************************************************************************************/
function checkSelect(FIELD_NAME)
{
	var field=document.getElementsByName(FIELD_NAME);
	var chkselect = false;
	for(var i=0;i<field.length;i++)
	{
		var str=eval(field[i]);
		if(str.checked)
		{
			chkselect=true;
			break;
		}
	}
	if(chkselect == false)
	{
		alertMessage+="\nPlease select atleast one checkbox.";
		fldname=FIELD_NAME;
		setStyle(FIELD_NAME);
		return false;
	}
	else
	{
		resetStyle(FIELD_NAME);
		return true;
	}
}


/********************************************************************************************************************************
	Created By		:	Hemita(hemitat@meditab.in)
	Created On		: 	18 April 2006	
	Function Name	:	ftoupper
	Arguments		:	name of the field
	Purpose			:   Function For Convert string in Uppercase
*********************************************************************************************************************************/

function ftoupper(objId)
{
	sId = objId.value
	objId.value = sId.toUpperCase() ;
}


/********************************************************************************************************************************
	Created By		:	Hemita(hemitat@meditab.in)
	Created On		: 	18 April 2006	
	Function Name	:	ftolower
	Arguments		:	name of the field
	Purpose			:   Function For Convert string in lowercase
*********************************************************************************************************************************/

function ftolower(objId)
{
	sId = objId.value
	objId.value = sId.toLowerCase() ;
}


/********************************************************************************************************************************
	Created By		:	Hemita(hemitat@meditab.in)
	Created On		: 	20 April 2006	
	Function Name	:	Trim
	Arguments		:	Sring
	Purpose			:   Function Will Trim the String
*********************************************************************************************************************************/

function Trim(str)
{ 
 lenstr = str.length
 substr = str
 for (i=0;i<lenstr;i++)
 {
	c = str.charAt(i);	
	if(c == ' ' || c == '\n'  || c == '\r')
		substr = str.substring(i+1,str.length)
	else
		break   
 }

 lenstr = substr.length
 str = substr 
 for (i=lenstr-1;i=0;i--)
 {
	c = str.charAt(i);
	if (c == ' '||c == '\n'||c == '\r')
		substr = str.substring(0,i-1)		
	else
		break   
 }   

 return substr	
}


/********************************************************************************************************************************
	Created By		:	Hemita(hemitat@meditab.in)
	Created On		: 	21 April 2006	
	Function Name	:	checkURL
	Arguments		:	Name Of the field, message to be displayed, Required Field
	Purpose			:   Function Will Check For Valid URl
*********************************************************************************************************************************/
function checkURL(FIELD_NAME,MESSAGE,REQUIRED)
{
	//Check For Mendatory field
	if(REQUIRED && checkBlank(FIELD_NAME,MESSAGE)) {return false;}
	if(FIELD_NAME.value != "")
	{
		if(FIELD_NAME.value.search(/^((www.)|(((http)(s)?\:\/\/)(www.)?))[\w\/\-\._\-\~?&=:]+\w+$/))
		{
			alertMessage+="\nPlease enter valid "+MESSAGE+".";
			//FIELD_NAME.focus();
			return false;
		}
	}
	return true;

}


/********************************************************************************************************************************
	Created By		:	Hemita(hemitat@meditab.in)
	Created On		: 	21 April 2006	
	Function Name	:	checkSelectBox
	Arguments		:	Name Of the field, message to be displayed
	Purpose			:   Function Will Check For Select box value is selected or not
*********************************************************************************************************************************/
function checkSelectBox(FIELD_NAME,MESSAGE)
{
	//if value is null then alert message...
	if(FIELD_NAME.value == '')
	{
		alertMessage+="\nPlease select atleast one value for "+MESSAGE+".";
		fldname=FIELD_NAME;
		setStyle(FIELD_NAME);
		return true;
	}
	else
	{
		resetStyle(FIELD_NAME);
		return false;
	}
}


/********************************************************************************************************************************
	Created By		:	Hemita(hemitat@meditab.in)
	Created On		: 	21 April 2006	
	Function Name	:	numberCompare
	Arguments		:	Name of First field, Name if Second Field,First Message To BE displayed, Second Message To BE Displayed
	Purpose			:   Function Will ompare two numbers
*********************************************************************************************************************************/
function numberCompare(NUMBER1,NUMBER2,MESSAGE1,MESSAGE2)
{
	if(NUMBER1.value > NUMBER2.value)
	{
		alertMessage+="\n"+MESSAGE1+" is greater than "+MESSAGE2;
		fldname=FIELD_NAME;
		setStyle(FIELD_NAME);
		return false;
	}
	return true;
}


/********************************************************************************************************************************
	Created By		:	Amit John(amitj@meditab.in)
	Created On		: 	12 May 2006	
	Function Name	:	checkMultiSelectBox
	Arguments		:	Name Of the field, message to be displayed, Required Field
	Purpose			:   Function Will Check For at least one Checked Check Box
*********************************************************************************************************************************/

function checkMultiSelectBox(FIELD_NAME,MESSAGE,REQUIRED)
{
	var blncflag=false;					// boolean flag for the check box
	var i=0;
	var fldname="";

	if(FIELD_NAME.length!=undefined)	// if multiple check boxes
	{
		for(i=0;i<FIELD_NAME.length && blncflag==false;i++){	
			fldname=FIELD_NAME[i];
			if(FIELD_NAME[i].checked)
			{	blncflag=true;	}
		}
	}
	else								// if single check box
	{		fldname=FIELD_NAME;
			if(FIELD_NAME.checked)
			{	blncflag=true;	}
	}
	
		if(blncflag==false)//(alertfield!=fldname.name && alertfield!=undefined))
		{	

			if(alertfield!=fldname.name || alertfield=="")
			{
				if(alertfield=="")
				{
					alertfield=fldname.name;
				}
				
				alertMessage+="\nPlease select the " + MESSAGE+" ";								
				//setStyle(fldname);
			}
				if(alertfield!="" && alertfield!=fldname.name)
				{
					alertfield=fldname.name;
				}
			
			return false;
		}
		else
		{	
			resetStyle(fldname);		
			return true;	
		}
}



/********************************************************************************************************************************
	Created By		:	Amit John(amitj@meditab.in)
	Created On		: 	12 June 2006	
	Function Name	:	checkMultiDropDownBox
	Arguments		:	Name Of the field, message to be displayed, Required Field
	Purpose			:   Function Will Check For at least one selected Select Box
*********************************************************************************************************************************/


function checkMultiDropDownBox(FIELD_NAME,MESSAGE,REQUIRED)
{
	var blncflag=false;					// boolean flag for the select box
	var i=0;
	var fldname="";
	var maxcount=document.getElementsByName(FIELD_NAME.name).length;
	itercount=itercount+1;
	
		// if multiple options or not
		if(FIELD_NAME.length!=undefined)	
		{
			for(i=0;i<FIELD_NAME.length && blncflag==false;i++)
			{	
					fldname=FIELD_NAME[i];
					// if a non null option has been selected
					if(fldname.selected && fldname.value!="")
					{
						selcount=selcount+1;
						blncflag=true;
					}
			}
		}
		else								
		{	
				fldname=FIELD_NAME;
				if(FIELD_NAME.selected)
				{	blncflag=true;	}
		}

		// if no select boxes of the select array have been set then set the alert message
		if(blncflag==false && selcount==0 && itercount==maxcount)
		{
			if(alertfield!=fldname.name || alertfield=="")
			{
				if(alertfield=="")
				{
					fldname=FIELD_NAME;
					alertfield=fldname.name;
				}
				// if none of array of select boxes have been set
				if(selcount==0 && itercount==maxcount)
				{
					selcount=selcount+1;
					alertMessage+="\nPlease select the " + MESSAGE+" ";								
				}
			}

			// if none of array of select boxes have been set
			if(selcount==0 && itercount==maxcount)
			{
				return false;
			}
			else
			{
				return true;	
			}
		}
		else
		{				
			return true;	
		}
}


/********************************************************************************************************************************
	Created By		:	Amit John(amitj@meditab.in)
	Created On		: 	2 May 2006	
	Function Name	:	checkFileName
	Arguments		:	Name Of the field, message to be displayed, Required Field, Valid File Types Extensions
	Purpose			:   Function Will Check For at Valid File Types and required files
*********************************************************************************************************************************/

function checkFileName(FIELD_NAME,MESSAGE,REQUIRED,EXTENSIONS)
{
	//Check For Mendatory field
	if(REQUIRED && checkBlank(FIELD_NAME,MESSAGE)) {return false;}
	if(FIELD_NAME.value != '' && EXTENSIONS!='')
	{
		var arrfiletypes=new Array();				// the array of valid file types
		arrfiletypes=EXTENSIONS.split(',');			// get the valid file types in the array
		var blnvalidflag=false;						// this boolean flag indicates a valid file type
		var arrfilename=new Array();				// separate filename and the extension
		arrfilename=FIELD_NAME.value.split('.');	// get the file extension in an array
		if(arrfilename.length>1)
		{
			for(var c=0;c<arrfiletypes.length && blnvalidflag==false;c++) // check the file extension validity
			{
				var strMainExt=arrfilename[1].toUpperCase();
				var strExt=arrfiletypes[c].toUpperCase();
				if(strMainExt==strExt)
				{
					blnvalidflag=true;					// file type is valid so set the flag
					break;
				}
			}
		}
		else
		{
			blnvalidflag=false;					// file type is not valid so set the flag	
		}
		
		if(blnvalidflag == false)					// file is not a valid file type
		{
			alertMessage+="\nPlease select a valid "+MESSAGE+" of following types "+EXTENSIONS;
			fldname=FIELD_NAME;
			setStyle(FIELD_NAME);
			return false;
		}
		else										// file is valid
		{	
			resetStyle(FIELD_NAME);				
			return true;	
		}

	}
}



/********************************************************************************************************************************
	Created By		:	Amit John(amitj@meditab.in)
	Created On		: 	12 May 2006	
	Function Name	:	setStyle
	Arguments		:	Name Of the field
	Purpose			:   Function Will set style for the control
*********************************************************************************************************************************/

function setStyle(FIELD_NAME)
{
	if(FIELD_NAME!=undefined)
	{
		if(navigator.appName=="Netscape")
		{
				if(strFocus=="")
				{
					if(document.getElementById(FIELD_NAME.id)!=undefined)
					{
						strFocus="document.getElementById('"+FIELD_NAME.id +"').focus();";
					}
					else if(document.getElementsByName(FIELD_NAME.name)!=undefined)
					{
						if(document.getElementsByName(FIELD_NAME.name).length>1)
						{
							strFocus="document.getElementsByName('"+FIELD_NAME.name +"')[0].focus();";
						}
						else
						{
							strFocus="document.getElementsByName('"+FIELD_NAME.name +"').focus();";	
						}
					}
				}
			//Cross browser script set the class attribute of the control 
			//FIELD_NAME.setAttribute('className','err');	
			if(document.getElementById(FIELD_NAME.name)!=undefined)
			{
				strStyle+="document.getElementById('"+FIELD_NAME.name +"').className='err';\n";			
			}
			if(document.getElementsByName(FIELD_NAME.name)!=undefined)
			{
				strStyle+="document.getElementsByName('"+FIELD_NAME.name + "').className='err';\n";					
			}
		}
		else
		{
				if(strFocus=="")
				{
					if(document.getElementById(FIELD_NAME.id)!=undefined)
					{
						strFocus="document.getElementById('"+FIELD_NAME.id +"').focus();";
					}
					else if(document.getElementsByName(FIELD_NAME.name)!=undefined)
					{
						if(document.getElementsByName(FIELD_NAME.name).length>1)
						{
							strFocus="document.getElementsByName('"+FIELD_NAME.name +"')[0].focus();";
						}
						else
						{
							strFocus="document.getElementsByName('"+FIELD_NAME.name +"').focus();";	
						}

					}
				}			
			//Cross browser script set the class attribute of the control 
			//FIELD_NAME.className='err';			
			if(document.getElementById(FIELD_NAME.name)!=undefined)
			{
				strStyle+="document.getElementById('"+FIELD_NAME.name + "').className='err';\n";
			}
			if(document.getElementsByName(FIELD_NAME.name)!=undefined)
			{
				strStyle+="document.getElementsByName('"+FIELD_NAME.name + "').className='err';\n";	
			}
		}
	}

}



/********************************************************************************************************************************
	Created By		:	Amit John (amitj@meditab.in)
	Created On		: 	12 May 2006	
	Function Name	:	resetStyle
	Arguments		:	ID Of the form
	Purpose			:   Function Will set style for the control
*********************************************************************************************************************************/

function resetStyle(FIELD_NAME)
{
	if(FIELD_NAME!=undefined)
	{
		if(navigator.appName=="Netscape")
		{

			// cross browser script set the class attribute of the control 
			//FIELD_NAME.setAttribute('className','err');	
			if(document.getElementById(FIELD_NAME.name)!=undefined)
			{
				strStyle+="document.getElementById('"+FIELD_NAME.name +"').className='comn-input';\n";			
			}
			if(document.getElementsByName(FIELD_NAME.name)!=undefined)
			{
				strStyle+="document.getElementsByName('"+FIELD_NAME.name + "').className='comn-input';\n";					
			}
		}
		else
		{
			// cross browser script set the class attribute of the control 
			//FIELD_NAME.className='err';			
			if(document.getElementById(FIELD_NAME.name)!=undefined)
			{
				strStyle+="document.getElementById('"+FIELD_NAME.name + "').className='comn-input';\n";
			}
			if(document.getElementsByName(FIELD_NAME.name)!=undefined)
			{
				strStyle+="document.getElementsByName('"+FIELD_NAME.name + "').className='comn-input';\n";	
			}
		}
	}

}

/*********************************************** Functions Ends ***************************************************************/

/********************************************************************************************************************************
	Created By		:	Megha Patodia
	Created On		: 	17 May 2006	
	Function Name	:	popup
	Arguments		:	url of the popup page, width of the popup window, height of the popup window
	Purpose			:   Function will open the popup window
*********************************************************************************************************************************/
function popup(url,width,height)
{
	leftPosition=(screen.width)?(screen.width-width)/2:100;
	topPosition=(screen.height)?(screen.height-height)/2:100;	
	testwindow=window.open(url+"&width="+width+"&height="+height, '', 'toolbar=0,scrollbars=1,location=0,statusbar=0,menubar=0,resizable=0,width='+width+',height='+height+',left='+leftPosition+',top = '+topPosition+'');
	testwindow.window.focus();	
	return false;
}

/*********************************************** Functions Ends ***************************************************************/

/********************************************************************************************************************************
	Created By		:	Sandeep Chhaya
	Created On		: 	19 june 2006	
	Function Name	:	onFocusMask(strTextBox,strFormat) 
	Arguments		:	This function pass text box value and string format like data format("##-##-####");
	Purpose			:   Function will set Max Length on Set Focus.
*********************************************************************************************************************************/

function onFocusMask(strTextBox,strFormat) 
{
	var strVal = strTextBox.value;
	if(strVal.length == 0 || strVal == null) 
	{
		var i = strFormat.indexOf('#');
		strTextBox.value = strFormat.substring(0,i);
	}
	setCaretAtEnd(strTextBox);
	// set just in case.
	strTextBox.maxlength = strFormat.length;
}
/*********************************************** Functions Ends ***************************************************************/
/********************************************************************************************************************************
	Created By		:	Sandeep Chhaya
	Created On		: 	19 june 2006	
	Function Name	:	onBlurMask(strTextBox) 
	Arguments		:	String Text box value of blur Field
	Purpose			:   Function will pass blank value when no digit founds.
*********************************************************************************************************************************/

function onBlurMask(strTextBox) 
{
	var strVal = strTextBox.value;
	// if no digits....nada entered.....blank it.
	if(strReOneOrMoreDigits.test(strVal) == false) 
	{
		strTextBox.value = '';
	}
}
/*********************************************** Functions Ends ***************************************************************/
/********************************************************************************************************************************
	Created By		:	Sandeep Chhaya
	Created On		: 	19 june 2006	
	Function Name	:	doMask(strTextBox,strEvt,strFormat) 
	Arguments		:	String Text box value , pass "EVENT" for events property and Pass Maks Format like ("##-##-####");
	Purpose			:   Function will pass all the value to Masking function get Mask Value
*********************************************************************************************************************************/

function doMask(strTextBox,strEvt,strFormat) 
{
	var keyCode = strEvt.which ?strEvt.which : strEvt.keyCode;
	
	// enter, backspace, delete and tab keys are allowed thru
	if(keyCode == 13 || keyCode == 8 || keyCode == 9 || keyCode == 46)
		return true;
	
	// keyCodes so that it can be used
	var keyCharacter = cleanKeyCode(keyCode);
	
	// grab the strTextBox value and the mask
	var strVal = strTextBox.value;
	var mask = strFormat;
	
	// simple Regex to check if key is a digit
	if(strReOneOrMoreDigits.test(keyCharacter) == false)
		return false;

	// get value minus any masking by removing all non-numerics
	strVal = strVal.replace(strReNoDigits,'');			
	// add current keystroke
	//strVal += keyCharacter;
	// mask it...val holds the existing TextBox.value + the current keystroke
	strTextBox.value = MaskValue(strVal,mask);
	setCaretAtEnd(strTextBox);
	return false;
}
/*********************************************** Functions Ends ***************************************************************/
/********************************************************************************************************************************
	Created By		:	Sandeep Chhaya
	Created On		: 	19 june 2006	
	Function Name	:	MaskValue((strValue,strMask) 
	Arguments		:	String Text box value , Pass Maks Format
	Purpose			:   Function will return Mask Formated value to DoMask Function.
*********************************************************************************************************************************/

function MaskValue(strValue,strMask) 
{
	var retVal = strMask;
	var strVal = strValue;
	//loop thru mask and replace #'s with current value one at a time
	for(var i=0;i<strVal.length;i++) 
	{
		retVal = retVal.replace(/#/i, strVal.charAt(i));
	}
	retVal = retVal.replace(/#/gi, "");
	return retVal;
}
/*********************************************** Functions Ends ***************************************************************/
/********************************************************************************************************************************
	Created By		:	Sandeep Chhaya
	Created On		: 	19 june 2006	
	Function Name	:	cleanKeyCode(intKey)
	Arguments		:	int Key Code Genrated By Event Property.
	Purpose			:   Function will Return Formated String Key Code
*********************************************************************************************************************************/

function cleanKeyCode(intKey)
{
	switch(intKey)
	{
		case 96: return "0"; break;
		case 97: return "1"; break;
		case 98: return "2"; break;
		case 99: return "3"; break;
		case 100: return "4"; break;
		case 101: return "5"; break;
		case 102: return "6"; break;
		case 103: return "7"; break;
		case 104: return "8"; break;
		case 105: return "9"; break;
		default: return String.fromCharCode(intKey); break;
	}
}
/*********************************************** Functions Ends ***************************************************************/
/********************************************************************************************************************************
	Created By		:	Sandeep Chhaya
	Created On		: 	19 june 2006	
	Function Name	:	setCaretAtEnd (strField) 
	Arguments		:	String field value
	Purpose			:   String field set value Charcter at the End.
*********************************************************************************************************************************/

function setCaretAtEnd (strField) 
{
  if (strField.createTextRange) 
  {
    var strRange = strField.createTextRange();
    strRange.moveStart('character', strField.value.length);
    strRange.collapse();
    strRange.select();
  }
}
/*********************************************** Functions Ends ***************************************************************/

/**
	* This method is used to create the XMLHttpRequest Object
	* XMLHttpRequest this is the core AJAX object. It handles all the requests and responses
	* @return the http object.
*/
function createRequestObject()
{
	//declare the variable to hold the object.
	var objRequest; 
	//find the browser name
	var strBrowser = navigator.appName;
	
	//Check the type of browser and acc. create the object.
	if(strBrowser == "Microsoft Internet Explorer"){
		objRequest = new ActiveXObject("Microsoft.XMLHTTP");
	}else{
		objRequest = new XMLHttpRequest();
	}
	
	//return the object
	return objRequest;
}

/**
	* This method is used to call the page which will return the requested HTML control through ajax.
	* @param	string		strFieldName	having the name of the field
	* @param	string		strFieldId		having the table constant anf field Id.
	* @param	string		strRequestvars	having the var name and the html field name whose value is to be passed in that var
*/
var strCallHttpResponseOFunction = "";
function getHTMLControl(strFieldName,strFieldId,strRequestVars)
{	
	
	// Created an Instance of the XMLHttpRequest object
	var objHttp = createRequestObject();

	//Set the url of the file which will return the HTML control
	strUrl="index.php?file=./../../base/meditab/med_getHTMLControl";
	
	//Add the selected values in the query string
	strUrl+="&"+strFieldName+"="+document.getElementById("hid_sel"+strFieldName).value;
	
	//Add the field id in the query string
	strUrl+="&strFieldId="+strFieldId;

	//Add the request variables to the query string if required
	if(strRequestVars!='')
	{
		arrRequestVars	=	strRequestVars.split(",");
		for(intRequestVars=0; intRequestVars<arrRequestVars.length; intRequestVars++)
		{
			arrVars	=	arrRequestVars[intRequestVars].split("=");		
			strVarName	=	arrVars[0];
			strVarValue	=	document.getElementById(arrVars[1]).value;
			
			strUrl+="&"+strVarName+"="+strVarValue;

		}
	}

	try{
		if(strUrl!=undefined && (objHttp.readyState==0 || objHttp.readyState==4))
		{
			objHttp.open('get', strUrl);
			objHttp.onreadystatechange =	function() { handleHttpResponse(objHttp); };
			objHttp.send(null);				
		}
	}
	catch(e)
	{
		return false;
	}
}

/**
	* This is a handle to the http request which will get the request from the http object and replace the contents of the corresponding division.
	* @param	object	objHttp is the http object for this particular response.
*/
function handleHttpResponse(objHttp)
{
	//The last time the function is called when the response is ready.		
	if(objHttp.readyState == 4 && objHttp.status == 200)
	{	
		
		strHtmlControl	=	objHttp.responseText;
		arrHtmlControl	=	strHtmlControl.split("!@#***#@!");
		strDivName		=	arrHtmlControl[1];
		document.getElementById(strDivName).innerHTML = arrHtmlControl[2];
		eval(strCallHttpResponseOFunction);
		strCallHttpResponseOFunction="";		
	}
}

function getHTMLControlMulti(strFieldName,strFieldId,strRequestVars,strCombo)
{	
	var arrControl;
	arrControl = strCombo.split("&&");
	var objHttp = createRequestObject();
	// Created an Instance of the XMLHttpRequest object
	//Set the url of the file which will return the HTML control
	strUrl="index.php?file=./../../base/meditab/med_getHTMLControl";
	
	//Add the selected values in the query string
	strUrl+="&"+strFieldName+"="+document.getElementById("hid_sel"+strFieldName).value;
	
	//Add the field id in the query string
	strUrl+="&strFieldId="+strFieldId;

	//Add the request variables to the query string if required
	if(strRequestVars!='')
	{
		arrRequestVars	=	strRequestVars.split(",");
		for(intRequestVars=0; intRequestVars<arrRequestVars.length; intRequestVars++)
		{
			arrVars	=	arrRequestVars[intRequestVars].split("=");		
			strVarName	=	arrVars[0];
			strVarValue	=	document.getElementById(arrVars[1]).value;
			
			strUrl+="&"+strVarName+"="+strVarValue;
		}
	}
	try{
		if(strUrl!=undefined && (objHttp.readyState==0 || objHttp.readyState==4))
		{
			objHttp.open('get', strUrl);
			objHttp.onreadystatechange =	function() { handleMultiHttpResponse(objHttp,arrControl); };
			objHttp.send(null);
						
		}
	}
	catch(e)
	{
		return false;
	}
}

/**
 * This is a handle to the http request which will get the request from the http object and replace the contents of the corresponding division.
 * @param	object	objHttp is the http object for this particular response.
*/
function handleMultiHttpResponse(objHttp,arrControl)
{
	//The last time the function is called when the response is ready.		
	if(objHttp.readyState == 4 && objHttp.status == 200)
	{	
		strHtmlControl	=	objHttp.responseText;
		arrHtmlControl	=	strHtmlControl.split("!@#***#@!");
		strDivName		=	arrHtmlControl[1];
		document.getElementById(strDivName).innerHTML = arrHtmlControl[2];
		var arrNewControl = Array();
		arrNewControl = arrControl[0].split("','");
		var strCombo = "";
		for(var intControl = 1; intControl < arrControl.length; intControl++)
		{
			strCombo += arrControl[intControl] +"&&";
		}
		strCombo = strCombo.substr(0,strCombo.length-2);
		arrNewControl[0] = arrNewControl[0].substr(1,arrNewControl[0].length);
			arrNewControl[2] = arrNewControl[2].substr(0,arrNewControl[2].length-1);
		if(strCombo != "")
		{
			getHTMLControlMulti(arrNewControl[0],arrNewControl[1],arrNewControl[2],strCombo);
		}
		else
		{
			getHTMLControl(arrNewControl[0],arrNewControl[1],arrNewControl[2]);
		}
	}
}

/***
 * This function is used to check for future date
 * It Will compare date with cureeent date
 * @param  		CURRENT_DATE	String		current date
 * @param 		FIELD_DATE		String 		Date to be compared
 * @param 		MESSAGE			String 		Message to be displayed
 * @return		true/false		Bollean
**/
function checkFutureDate(CURRENT_DATE,FIELD_DATE,MESSAGE)
{
	// If both Current date & date to be compared are not null then...
	sadate	=	Array();
	cdate	=	Array();
	sadate	=	FIELD_DATE.value.split("-");
	cadate	=	CURRENT_DATE.value.split("-");
	sdate	=	new Date(sadate[2],sadate[0]-1,sadate[1]);
	cdate	=	new Date(cadate[2],cadate[0]-1,cadate[1]);

	// Compare both current date & field date. if field date date is greater then current date then alert message...
	if(sdate>cdate)	
	{
		alert(MESSAGE+' can not be future date.');
		fldname=FIELD_DATE;
		setStyle(FIELD_DATE);
		eval(strStyle);
		FIELD_DATE.focus();
		return false;
	}
	else
	{
		return true;
	}
}

/**
 * This function is used to get value of text area with HTML Editor
**/
function getTextAreaValue(strFramId,strFieldId)
{
	var oEditorarent		=	document.getElementById(strFramId).contentWindow.window;
	var FCK					=	oEditorarent.FCK ;
	var FCKConfig			=	oEditorarent.FCKConfig ;
	strTxtAreaName			=	eval('document.getElementById("'+strFieldId+'")');
	strTxtAreaVal			=	FCK.GetXHTML( FCKConfig.FormatSource);
	strTxtAreaName.value	=	strTxtAreaVal;
	return strTxtAreaName.value;
}	

/**
 * This function is used to zoom in and zoom out text area
**/
function zoomTxtArea(strTxtAreaName,rowsno,intDefaultRows)
{
	strTxtArea	=	document.getElementById(strTxtAreaName);
	if(strTxtArea.rows!=rowsno)
	{
		strTxtArea.rows=rowsno;
		document.getElementById('zoom_'+strTxtAreaName).src='images/zoom_up.gif';
	}
	else
	{
		strTxtArea.rows=intDefaultRows;
		document.getElementById('zoom_'+strTxtAreaName).src='images/zoom_down.gif';
		
	}
}


function createRequestObject(){
	var request; //declare the variable to hold the object.
	var browser = navigator.appName; //find the browser name
	if(browser == "Microsoft Internet Explorer"){
		request = new ActiveXObject("Microsoft.XMLHTTP");
	}else{
		request = new XMLHttpRequest();
	}
	return request; //return the object
}
function getPageData(strUrl,strDiv)
{	
	// Created an Instance of the XMLHttpRequest object
	var http = createRequestObject(); 
	try
	{
		if(strUrl!=undefined && (http.readyState==0 || http.readyState==4))
		{
			http.open('get', strUrl);
			http.onreadystatechange = function() { handleHttpResponseObject(http,strDiv,''); };
			http.send(null);				
		}
	}
	catch(e)
	{
		return false;
	}
}
// Created an Instance of the XMLHttpRequest object
var httpGlobal = createRequestObject(); 
function getPageHandleData(strUrl,strHandle)
{	

	try
	{
		if(strUrl!=undefined && (httpGlobal.readyState==0 || httpGlobal.readyState==4))
		{
			httpGlobal.open('get', strUrl);
			httpGlobal.onreadystatechange = function() { eval(strHandle); };
			httpGlobal.send(null);				
		}
	}
	catch(e)
	{
		return false;
	}
}

function getPageDataEFun(strUrl,strDiv,strEfunction)
{	
	// Created an Instance of the XMLHttpRequest object
	var http = createRequestObject(); 
	try
	{
		if(strUrl!=undefined && (http.readyState==0 || http.readyState==4))
		{
			http.open('get', strUrl);
			http.onreadystatechange = function() { handleHttpResponseObject(http,strDiv,strEfunction); };
			http.send(null);				
		}
	}
	catch(e)
	{
		return false;
	}
}

function handleHttpResponseObject(http,strDiv,strEfunction)
{
	// the last time the function is called when the response is ready.		
	if(http.readyState == 4 && http.status == 200)
	{	
		$strHtml=http.responseText;	
		document.getElementById(strDiv).innerHTML = $strHtml;
		addJavaScript(document.getElementById(strDiv));
		eval(strEfunction);
		eval(strCallHttpResponseOFunction);
		strCallHttpResponseOFunction="";
	}
}


function addJavaScript(strHtmlPage)
{
	var strScript=strHtmlPage.getElementsByTagName('script');
	var strHead = document.getElementsByTagName("head")[0];
	if(document.getElementById("addScript"))
	{
		var node = document.getElementById('addScript');
		strHead.removeChild(node);
	}
	var scriptNode = document.createElement('script');
	scriptNode.id = 'addScript';
	scriptNode.type = 'text/javascript';
	scriptNode.language = 'javascript';
	var strText;
	strText = "";
	for(var x=0;x<strScript.length;x++)
	{
		with(window) 
		{ 
			strText = strText + " " + (strScript[x].text).replace('<!--','').replace('-->','');
		} 
	}
	if (window.navigator.appName.toLowerCase().indexOf("microsoft") > -1) 
	{   /// if ie
		scriptNode.text = strText;
	}
	else 
	{   // if mozzila
		scriptNode.innerHTML = strText;
	}
//	if(strText.match(/function (\s*)extraValid/i))
//	{
//		blnExtraValid=true
//	}
//	else
//	{
//		blnExtraValid=false
//	}
	
	document.getElementsByTagName("head")[0].appendChild(scriptNode);
}

/**
  * This function will submit the search form
 **/
function submitSearchForm(objFrm)
{
	if(checkValidSearch(objFrm) == false)
	{
		return false; 
	}
	//if some extra validation required
	if(window.extraSearchValid) //check whether the function for extra validation exist or not
	{
		if(extraSearchValid()==false) //if the function returns false then return false
		{
			return false;	
		}
	}
	
	//if function doesnot exist or return true return true
	//objFrm.submit();
	//return false;
	
}
/**
  * This function will check date validation for search form
 **/
function checkValidSearch(objFrm)
{
	var FORMID = objFrm.name;
	var frmname=document.getElementById(FORMID);
	var blnflag=true;
	var strDtTo = "";
	var strDtToMsg = "";
	var strDtFrom = "";
	var strDtFromMsg = "";
	alertMessage = "";	// reset the alert nessage
	alertfield = "";
	strStyle = "";
	strFocus = "";
	selcount = 0;
	itercount = 0;
	var frmcnt=document.getElementById(FORMID).elements.length;
	for(var i=0;i<frmcnt;i++)
	{
		try
		{
			MESSAGE=eval("LBL_"+frmname.elements[i].name);
		}
		catch(e)
		{
			MESSAGE="Field";
		}
		// handling of various textbox validations for search
		if(frmname.elements[i].type=='text' && !frmname.elements[i].name.match(/\[]/))		
		{	
			// first 3 characters of the textbox name are to identify the search variables
			var chkSerch = frmname.elements[i].name.substr(0,3);
			if(chkSerch == "Sr_")
			{
				// forth and fifth carector to check type of validation
				var ChkType=frmname.elements[i].name.substr(3,2);
				
				//sixth character is to identify required field...
				var RChr=frmname.elements[i].name.substr(5,1);
				
				var REQUIRED="";
				if(RChr=="R")
				{
					REQUIRED = true;
				}					
				else
				{
					REQUIRED = false;	
				}
				//Generate name of the field...
				FIELD_NAME=eval("document."+FORMID+"."+frmname.elements[i].name);			
				switch(ChkType)
				{
					case "Dt" :
						if(frmname.elements[i].name.substr(frmname.elements[i].name.length-4,4) == 'from' && strDtFrom == "")
						{
							strDtFrom 		= 	FIELD_NAME;
							strDtFromMsg 	= 	MESSAGE;
						}
						else if(frmname.elements[i].name.substr(frmname.elements[i].name.length-2,2) == 'to')
						{
							strDtTo 		= 	FIELD_NAME;
							strDtToMsg 		= 	MESSAGE;
						}
						if(!checkDate(FIELD_NAME,MESSAGE,REQUIRED))
						{
							blnflag = false;
						}
						break;
					case "In" :
						if(!checkInteger(FIELD_NAME,MESSAGE,REQUIRED))
						{
							blnflag = false;
						}
						break;
				}
				if(strDtTo != "" && strDtFrom != "")
				{
					if(!dateCompare(strDtFrom,strDtTo,strDtFromMsg,strDtToMsg))
					{	
						return false;
					}
				}
			}
		}
	}
	if(blnflag == false && alertMessage!="")
	{
		alertMessage="Following errors:\n\n" + alertMessage;	
		alert(alertMessage);	
		eval(strStyle);
		eval(strFocus);
		return false;
	}
	else
	{
		eval(strStyle);
		return true;
	}
}

/**
Function to show/hide an div based on condition
* @param strControlName	string name of the control on which condition is there
* @param strConditionVal  string value of the condition
* @param strDivName		string name of the div
*/
function showHideDiv(strControlName,strConditionVal,strDivName)
{

	CONTROL_NAME	=	eval(document.getElementById(strControlName));
	blnShowDiv		=	false;
	arrConditionVal	=	new Array();
	arrConditionVal	=	strConditionVal.split(",");
	
	if(CONTROL_NAME!=null)
	{		
		for(intConditionVal=0; intConditionVal<arrConditionVal.length; intConditionVal++)
		{
			if(CONTROL_NAME.value == arrConditionVal[intConditionVal])
			{
				blnShowDiv	=	true;
				break;
			}
		}
	
		if(blnShowDiv==true)
			strDivStyle	=	"inline";
		else
			strDivStyle	=	"none";
			
		//Get the names of div's
		arrDivName	=	strDivName.split(",");
		for(intDivName=0;	intDivName<arrDivName.length; intDivName++)
		{
			DIV_NAME		=	eval(document.getElementById(arrDivName[intDivName]));
			if(DIV_NAME!=null)
				DIV_NAME.style.display=strDivStyle;
		}
	}
}

/**
Function will return the absolute top position of div id or td id........better use td id
*/
function getAbsoluteTop(strObjectId) 
{
	// Get an object top position from the upper left viewport corner
	// Tested with relative and nested objects
	objDiv	=	document.getElementById(strObjectId)
	
	// Get top position from the parent object
	if(objDiv != null)
	{
		intTop	=	objDiv.offsetTop           
	
		while(objDiv.offsetParent!=null) 
		{ 
			// Parse the parent hierarchy up to the document element
			oParent = objDiv.offsetParent  // Get parent object reference
			intTop += oParent.offsetTop // Add parent top position
			objDiv = oParent
		}
		// Return top position
		return intTop;
	}
	else
	 return null;
	
}

function setlinks()
{
	if(document.getElementById('lnks').style.display!='none')
	{
		document.getElementById('lnks').style.display='none';
		document.getElementById('links_handler').src = "./images/shutter-open.gif";
	}
	else
	{
		document.getElementById('lnks').style.display='inline';
		document.getElementById('links_handler').src = "./images/shutter-close.gif";
	}
	
}

/********************************************************************************************************************************
	Created By		:	Madhav Vyas(madhav@meditab.in)
	Created On		: 	03 Feb 2007	
	Function Name	:	arrHasDupes
	Argument		:	Array  
	Purpose			:   Function to check array whether it contains duplicate value or not
*********************************************************************************************************************************/

function arrHasDupes( A ) {                          // finds any duplicate array elements using the fewest possible comparison
	var i, j, n;
	n=A.length;
                                                     // to ensure the fewest possible comparisons
	for (i=0; i<n; i++) {                      		 // outer loop uses each item i at 0 through n
		for (j=i+1; j<n; j++) {              		// inner loop only compares items j at i+1 to n
			if (A[i]==A[j]) 
			{
				return j+1;							// It returns the duplicate arrayindex+1 
			}
	}	}
	return false;
}

// This function will submit the form after assigning all values to hidden variables in the form passed as argument
// example of usage: submitCForm("frm_meeting","wm_id=intWmId&hid_week_id=intWeekId&file=med_weekly_report");
/*function submitCForm(strFormName,strArgs)
{
	arrArgs	= strArgs.split('&');
	for(intElement=0;intElement<arrArgs.length;intElement++)
	{
		arrElement = arrArgs[intElement].split('=');
		document.getElementById(arrElement[0]).value = arrElement[1];
	}
	document.getElementById(strFormName).submit();
}

*/
function submitCForm(strFormName,strArgs)
{
	arrArgs	= strArgs.split('&');
	var objForm	=	document.getElementById(strFormName);
	for(intElement=0;intElement<arrArgs.length;intElement++)
	{
		arrElement = arrArgs[intElement].split('=');
		objForm[arrElement[0]].value = arrElement[1];
	}
	objForm.submit();
}

// Custom ajax function which will directly returns data from the url and stops execution till that time...
function getURLData(strUrl)
{		
	
	try
	{
		var http = createRequestObject();
		if(strUrl!=undefined && (http.readyState==0 || http.readyState==4))
		{
			http.open('get', strUrl,false);
			http.send(null);
			return http.responseText;
		}
	}
	catch(e)
	{
		return false;
	}
}

// Common function to get Element

// Generalized for all browser

function getElement(element)
{
	var elm;
	if (document.getElementById) 
	{
		elm = document.getElementById(element);
	}
	else if (document.all) 
	{
		elm = document.all[element];
	}
	else if (document.layers) 
	{
		elm = document.layers[element];
	}
	return elm;
}

function checkCEmail(FIELD_NAME,REQUIRED)
{
	//Check For Mendatory field
	if(REQUIRED && checkBlank(FIELD_NAME,MESSAGE)) {return false;}
	if(FIELD_NAME.value!="")
	{
		if(FIELD_NAME.value.search(/^[\w-\.]+@[\w-\.]+\.\w+$/))
		{
			fldname=FIELD_NAME;
			setStyle(FIELD_NAME);
			return false;
		}
	}
	else
	{	
			resetStyle(FIELD_NAME);
			return true;	
	}
}

//---------------------------------------------------------------------------------\\
// Customized checking of blank field with custom message used in extraValid function
function checkCBlank(FIELD_NAME,MESSAGE,REQUIRED)
{
	//if value is null then alert message...
	if(Trim(FIELD_NAME.value) == '')
	{
		if(FIELD_NAME.type!='textarea')
		{
			setStyle(FIELD_NAME);
			FIELD_NAME.focus();
			eval(strStyle);
		}
		return true;
	}
	else
	{	
		if(FIELD_NAME.type!='textarea')
		{
			resetStyle(FIELD_NAME);
			eval(strStyle);
		}
		return false;	
	}
}

// This function will set selected elements of the given combo...
function setMultipleSelected(objTargetElement,arrSelectValues)
{
	for(var i = 0; i < objTargetElement.length; i++) 
	{
		for(var j = 0; j < arrSelectValues.length; j++)
			if(objTargetElement.options[i].value == arrSelectValues[j])
				objTargetElement.options[i].selected = true;
	}
}

//Function to canvert time to seconds
function compareTime(strFirstTime,strSecondTime,MESSAGE1,MESSAGE2)
{

	//Convert first time into seconds
	strFirstTimeSec		=	(strFirstTime.substring(0,strFirstTime.indexOf(':'))-0) * 60 + (strFirstTime.substring(strFirstTime.indexOf(':')+1,strFirstTime.length)-0);

	//Convert second time into seconds
	strSecondTimeSec	=	(strSecondTime.substring(0,strSecondTime.indexOf(':'))-0) * 60 + (strSecondTime.substring(strSecondTime.indexOf(':')+1,strSecondTime.length)-0);

	//Compare both the times
	if(strFirstTimeSec > strSecondTimeSec)
	{	
		alert(MESSAGE2+" cannot be less than "+MESSAGE1+".");	
		return false;
	}
	return true;
}

/**
Function to check whether the duration is valid or not
*/
function checkValidDuration(HOUR_FIELD,MIN_FIELD,strHourMsg,strMinMsg,intHourLimit,intMinLimit)
{
	if(HOUR_FIELD.value.search(/^[0-9]*$/))
	{
		alertMessage += "\nPlease enter valid "+strHourMsg+".";
		setStyle(HOUR_FIELD);
	}
	else
		resetStyle(HOUR_FIELD);
		
	if(MIN_FIELD.value.search(/^[0-9]*$/))
	{
		alertMessage += "\nPlease enter valid "+strMinMsg+".";
		setStyle(MIN_FIELD);
	}
	else
		resetStyle(MIN_FIELD);
		
	if( HOUR_FIELD.value == "" && MIN_FIELD.value == "")
	{
		alertMessage += "\nPlease enter the value for Duration.";
		setStyle(MIN_FIELD);
	}
		
	if((HOUR_FIELD.value == "00" && MIN_FIELD.value == "00") || (HOUR_FIELD.value == "0" && MIN_FIELD.value == "0") ||(HOUR_FIELD.value == "00" && MIN_FIELD.value == "0") || (HOUR_FIELD.value == "0" && MIN_FIELD.value == "00") || (HOUR_FIELD.value == "" && (MIN_FIELD.value == "00" || MIN_FIELD.value == "0")) || ((HOUR_FIELD.value == "0" || HOUR_FIELD.value == "00") && MIN_FIELD.value == "" ))
	{
		alertMessage += "\nDuration should not be zero.";
		setStyle(HOUR_FIELD);
	}

	if(intHourLimit != '' && intHourLimit != 0 && HOUR_FIELD.value > intHourLimit)
	{
		alertMessage += "\n"+strHourMsg+" between [00-"+intHourLimit+"] hours.";
		setStyle(HOUR_FIELD);
	}
	
	if(intMinLimit == '' || intMinLimit == 0)
		intMinLimit=59;
	
	if(MIN_FIELD.value > intMinLimit)
	{
		alertMessage += "\n"+strMinMsg+" between [00-"+intMinLimit+"] minutes.";
		setStyle(MIN_FIELD);
	}

	eval(strStyle);
	
	if(alertMessage != "")
	{
		alertMsg = "Following errors:\n" + alertMessage;	
		alert(alertMsg);	
		return false;
	}
	else
		return true;
}

/*
=============================== med_quicklist.js [start] =================================================
========================================================================================================
*/


//var QL_DataRowNormalCss = 'data';
var QL_DataRowHoverCss = 'dataH';
var QL_DataRowSelectedCss = 'dataS';
var blnAjaxList		=	'{$blnAjaxList}';
function QL_Submit(controlID, sourceType, sourceValue1, sourceValue2, dataRowIndex)
{
	var TEXT_SEARCH_LINK = 1;
	var ALPHABETIC_SEARCH_LINK = 2;
	var SORT_LINK = 3;
	var PAGE_LINK = 4;

	if (sourceType == TEXT_SEARCH_LINK)
	{
		// Text search button clicked
		var srchText = document.getElementById(controlID + "_tNSrchTxt");
		var srchField = document.getElementById(controlID + "_sNSrchFld");
		
		// Check for valid values
		if ((srchField.value.length > 0 && srchText.value.length <= 0) ||
			(srchField.value.length <= 0 && srchText.value.length > 0))
		{
			//if (typeof(container.srchInvalidValueMsg) != 'undefined')
				//alert(container.srchInvalidValueMsg);
			alert("Invalid values entered for search");
			return false;
		}
	}
	else if (sourceType == ALPHABETIC_SEARCH_LINK)
	{
		var srchTextObj = document.getElementById(controlID + "_hASrch");
		srchTextObj.value = sourceValue1;
	}
	else if (sourceType == SORT_LINK)
	{
		// Sort link clicked
		var orderObj = document.getElementById(controlID + "_hOFld");
		orderObj.value = sourceValue1;
		var orderDir = document.getElementById(controlID + "_hODirc");
		orderDir.value = sourceValue2;
	}
	else if (sourceType == PAGE_LINK)
	{
		// Page link clicked
		var pageObj = document.getElementById(controlID + "_hPg");
		pageObj.value = sourceValue1;
	}
	else
	{
		// External Source caused submit
	}
	var src 		= document.getElementById(controlID + "_hSubmitSrc");
	src.value 		= sourceType;
	
	/*---------------------------- This is how to submit the page ------------------------*/
	var strFormElements = '';
	var objAjaxDivId	= null;

	arrFrm = document.getElementsByTagName("form");
	
	if(document.forms[arrFrm.length-1] != undefined)
		strFormElements	=	getFormElements(document.forms[arrFrm.length-1].name);

	objTblFile		=	document.getElementById("file");
	objAjaxDivId	=	document.getElementById("div_med_"+controlID);
	
	//alert(blnAjaxList + " <> " + objTblFile + " <> " + objAjaxDivId + " <> " + controlID);
	if(blnAjaxList == 'Y' && objTblFile != null && objAjaxDivId != null)
	{
		strListDiv =  getURLData("index.php?file="+objTblFile.value+"&blnAjaxList=Y&control_id="+controlID+"&"+strFormElements);
		objAjaxDivId.innerHTML = strListDiv;
		$(".javascript").each(function() {
			eval($(this).text());
		});
	}
	else
		src.form.submit();
	
	/*---------------------------- This is how to submit the page ------------------------*/
}

function getFormElements(strFormName)
{	
	var objForm=document.getElementById(strFormName);
	
	var strPostVar='';
	var intFormNameLen=document.getElementById(strFormName).elements.length;
	for(var intLenSt=0;intLenSt<intFormNameLen-1;intLenSt++)
	{		
		if(objForm.elements[intLenSt].name != undefined)
		{
			//if(objForm.elements[intLenSt].type!='submit' && objForm.elements[intLenSt].type!='file')
			if(objForm.elements[intLenSt].type!='submit' && objForm.elements[intLenSt].name.substring(0,3) != 'Sr_')
			{
				if(objForm.elements[intLenSt].type=='checkbox')	
				{
					if(objForm.elements[intLenSt].checked==true)	
					{
						strPostVar+=objForm.elements[intLenSt].name+"="+objForm.elements[intLenSt].value+"&";
					}
				}
				else if(objForm.elements[intLenSt].type=='radio')	
				{
					if(objForm.elements[intLenSt].checked==true)	
					{
						strPostVar+=objForm.elements[intLenSt].name+"="+objForm.elements[intLenSt].value+"&";
					}	
				}			
				else
				{
					strPostVar+=objForm.elements[intLenSt].name+"="+objForm.elements[intLenSt].value+"&";
				}
			}	
		}
	}
	if(objForm.elements[intLenSt].type!='submit' && objForm.elements[intLenSt].type!='file' && objForm.elements[intLenSt].name.substring(0,3) != 'Sr_')
	{
		if(objForm.elements[intLenSt].type=='checkbox')	
		{
			if(objForm.elements[intLenSt].checked==true)	
			{
				strPostVar+=objForm.elements[intLenSt].name+"="+objForm.elements[intLenSt].value;
			}
		}
		else if(objForm.elements[intLenSt].type=='radio')	
		{
			if(objForm.elements[intLenSt].checked==true)	
			{
				strPostVar+=objForm.elements[intLenSt].name+"="+objForm.elements[intLenSt].value;
			}	
		}	
		else
		{
			strPostVar+=objForm.elements[intLenSt].name+"="+objForm.elements[intLenSt].value;
		}
	}
	else
	{
		strPostVar=strPostVar.substr(0,strPostVar.length-1);	
	}
	return strPostVar;
}

function QL_MOver(sourceRow)
{
	if (sourceRow.className != QL_DataRowSelectedCss && (sourceRow.className=='data1' || sourceRow.className=='data2'))
	{
		sourceRow.originalClass = sourceRow.className;
		sourceRow.className = QL_DataRowHoverCss;
	}
	else if(sourceRow.className!=sourceRow.originalClass+'S' && sourceRow.originalClass!='data1' && sourceRow.originalClass!='data2')
	{
		sourceRow.originalClass = sourceRow.className;
		sourceRow.className = sourceRow.originalClass+'H';			
	}		
}

function QL_MOut(sourceRow)
{
	if (sourceRow.className != QL_DataRowSelectedCss && (sourceRow.originalClass=='data1' || sourceRow.originalClass=='data2'))
		sourceRow.className = sourceRow.originalClass;
	else if(sourceRow.className!=sourceRow.originalClass+'S' && sourceRow.originalClass!='data1' && sourceRow.originalClass!='data2')	
		sourceRow.className = sourceRow.originalClass;					

}

////
function QL_CBClick(controlID, srcCheckBox, rowIndex)
{
	var container = document.getElementById(controlID);


	if (srcCheckBox.checked)
	{
		//Check the limit
		if (QL_LimitExceeded(container, srcCheckBox.form))
		{
			QL_LimitExceedAction(container, srcCheckBox.form, rowIndex);
		}
		else
		{
			QL_SetCBState(srcCheckBox, rowIndex);
		}
	}
	else
	{
		// If the state is unchecked, Update the Header Check box state if required
		var headerCB = document.getElementById(controlID + "_cSlcHd");
		if (headerCB)
		{
			headerCB.checked = false;
		}
		QL_SetCBState(srcCheckBox, rowIndex);
	}
}

function QL_HeaderChkClick(controlID,headerCB,chkName)
{
	var frm = headerCB.form;
	var targetCheckBox = eval('frm.elements["' + chkName + '"]');
	// Return if no child-checkboxes exist
	if (null == targetCheckBox || typeof(targetCheckBox) == 'undefined') return;
	if (targetCheckBox.length)
	{
		for (var idx=0; idx < targetCheckBox.length; idx++)
		{
			targetCheckBox[idx].checked = headerCB.checked;
		}
	}
	else
	{
		QL_SetCBState(targetCheckBox, 0, headerCB.checked);
	}
}
function QL_HeaderCBClick(controlID, headerCB)
{
	var frm = headerCB.form;
	var targetCheckBox = eval('frm.elements["' + controlID + '_cSlcPK[]"]');

	// Return if no child-checkboxes exist
	if (null == targetCheckBox || typeof(targetCheckBox) == 'undefined') return;

	if (targetCheckBox.length)
	{
		for (var idx=0; idx < targetCheckBox.length; idx++)
		{
			QL_SetCBState(targetCheckBox[idx], idx, headerCB.checked);
		}
	}
	else
	{
		QL_SetCBState(targetCheckBox, 0, headerCB.checked);
	}
}

//function QL_SetCBState(container, targetCheckBox, rowIndex, checked)
function QL_SetCBState(targetCheckBox, rowIndex, checked)
{
	var QL_PKValue_Enclosing_Char = '^';
	if (targetCheckBox)
	{
		var originalState = targetCheckBox.checked;

		//Set the checked-state, if passed
		if (null != checked)
		{
			targetCheckBox.checked = checked;
		}

		//Set the value

		var containerRow = targetCheckBox.parentNode.parentNode;

		if (targetCheckBox.checked)
		{	
			if (containerRow.className != QL_DataRowHoverCss && containerRow.className != QL_DataRowSelectedCss && (containerRow.className=='data1' || containerRow.className=='data2'))
			{
				containerRow.originalClass = containerRow.className;				
			}			
			else if (containerRow.className != QL_DataRowHoverCss && containerRow.className != QL_DataRowSelectedCss && containerRow.className.substr((containerRow.className.length)-1,containerRow.className.length) != 'H' && containerRow.className.substr((containerRow.className.length)-1,containerRow.className.length) != 'S' && containerRow.className!='data1' && containerRow.className!='data2')	
			{				
				containerRow.originalClass = containerRow.className;
			}
			
			if(containerRow.originalClass!='data1' && containerRow.originalClass!='data2')
			{
				containerRow.className = containerRow.originalClass+'S'
			}
			else
			{
				containerRow.className = QL_DataRowSelectedCss;	
			}						
			
		}
		else
		{				
			if (null != checked)
			{					
				if (targetCheckBox.checked != originalState)
					containerRow.className = containerRow.originalClass;	
			}
			else
				containerRow.className = containerRow.originalClass;
		}
	}
}

function QL_LimitExceeded(container, form)
{
	var slctLimit = container.getAttribute("slctLimit");
	if (slctLimit)
	{
		var checkBoxArray = eval('form.elements["' + container.id + '_cSlcPK[]"]');

		// Get Total Selected Checkboxes
		var selectionCount = 0;
		for (var idx=0; idx<checkBoxArray.length; idx++)
		{
			if (checkBoxArray[idx].checked)
				selectionCount++;
		}

		// Check if limit exceeded
		if (selectionCount > slctLimit)
		{
			return true;
		}
	}
	return false;
}

function QL_LimitExceedAction(container, form, rowIndex)
{
	var checkBoxArray = eval('form.elements["' + container.id + '_cSlcPK[]"]');
	var slctLimit = container.getAttribute("slctLimit");
	if (slctLimit == 1)
	{
		for (var idx=0; idx<checkBoxArray.length; idx++)
		{
			if (idx == rowIndex)
				QL_SetCBState(checkBoxArray[idx], idx, true);
			else
				QL_SetCBState(checkBoxArray[idx], idx, false);
		}
	}
	else
	{
		QL_SetCBState(checkBoxArray[rowIndex], rowIndex, false);
		var slctLimitMsg = container.getAttribute("slctLimitExceedMsg");
		if (slctLimitMsg)
			alert(slctLimitMsg);
	}
}

/**** JS Functions that can be called from elsewhere ****/
function QL_GetSelectorCheckBoxes(controlID)
{
	var src = document.getElementById(controlID + "_hSubmitSrc");
	var frm = src.form;

	var checkBoxArray = eval('frm.elements["' + controlID + '_cSlcPK[]"]');
	if (checkBoxArray)
	{
		return checkBoxArray;
	}
	return null;
}

function QL_GetSelectionCount(controlID)
{
	var src = document.getElementById(controlID + "_hSubmitSrc");
	var frm = src.form;

	var selectionCount=0;
	var checkBoxArray = eval('frm.elements["' + controlID + '_cSlcPK[]"]');
	if (checkBoxArray)
	{
		if (checkBoxArray.length)
		{
			for(var idx=0; idx <  checkBoxArray.length; idx++)
			{
				if (checkBoxArray[idx].checked)
					selectionCount++;
			}
		}
		else
		{
			if (checkBoxArray.checked) selectionCount++;
		}
	}
	return selectionCount;
}
function checkType(obj,contentType)
{
	if (contentType == "" )
	return true;
	if ( contentType == "integer" )
	{
		stringSet="0123456789.";
		returnString="";
		s=obj.value;
		cnt =0;
		for (i = 0; i < s.length; i++)
		{   
			var c = s.charAt(i);
			if ((c == '.' ) && (cnt > 0 ))
				break;
				
			if (c == '.' ) 
				cnt++;
			if ((c == '.') || (c >=0 && c<=9)) 
			{
				returnString += c;
			}
		}
		obj.value = returnString;
		obj.focus();
	}
	
}
function doAction(obj,controlID,url,doCheck,displayMessage)
{
	if (doCheck)
	{
		selectedRecs = QL_GetSelectionCount(controlID);
		if (selectedRecs == 0 )
		{
			alert("No Items were selected");
			return false;
		}
	}
	arrParam=  url.split(":");

	if (displayMessage.length == 0)
	{

		obj.form.file.value=arrParam[3];
		obj.form.hid_page_type.value=arrParam[1];
		if(obj.form.hid_page_type.value=="A")
		{
			obj.form.hid_table_id.value=arrParam[2];
		}
		else if(obj.form.hid_page_type.value=='N')
		{			
			window.location=arrParam[3];
			return false;
		}
		else
		{
			// checking no of rows
			var src = document.getElementById(controlID + "_rows");
			if (!src && src.value <= 0)
				return false;
			obj.form.hid_button_id.value=arrParam[0];
		}
		obj.form.submit();	
		return false;
	}
	if (obj.form.hid_page_type.value!="A")
	{
			// checking no of rows
			var src = document.getElementById(controlID + "_rows");
			if (!src && src.value <= 0)
			return false;
	}	
	ans = confirm(displayMessage);
	if (ans)
	{
		obj.form.file.value=arrParam[3];
		obj.form.hid_page_type.value=arrParam[1];

		if(obj.form.hid_page_type.value=="A")
		{
			obj.form.hid_table_id.value=arrParam[2];
		}		
		else
		{
			obj.form.hid_button_id.value=arrParam[0];
		}
		obj.form.submit();	
	}

}
/*
=============================== med_quicklist.js [end] =================================================
========================================================================================================
*/


/*
=============================== shortcut.js [start] =================================================
========================================================================================================
*/

function shortcut(shortcut,callback,opt) {
	//Provide a set of default options
	var default_options = {
		'type':'keydown',
		'propagate':false,
		'target':document
	}
	if(!opt) opt = default_options;
	else {
		for(var dfo in default_options) {
			if(typeof opt[dfo] == 'undefined') opt[dfo] = default_options[dfo];
		}
	}

	var ele = opt.target
	if(typeof opt.target == 'string') ele = document.getElementById(opt.target);
	var ths = this;

	//The function to be called at keypress
	var func = function(e) {
		e = e || window.event;
		
		//Find Which key is pressed
		if (e.keyCode) code = e.keyCode;
		else if (e.which) code = e.which;
		var character = String.fromCharCode(code).toLowerCase();

		var keys = shortcut.toLowerCase().split("+");
		//Key Pressed - counts the number of valid keypresses - if it is same as the number of keys, the shortcut function is invoked
		var kp = 0;
		
		//Work around for stupid Shift key bug created by using lowercase - as a result the shift+num combination was broken
		var shift_nums = {
			"`":"~",
			"1":"!",
			"2":"@",
			"3":"#",
			"4":"$",
			"5":"%",
			"6":"^",
			"7":"&",
			"8":"*",
			"9":"(",
			"0":")",
			"-":"_",
			"=":"+",
			";":":",
			"'":"\"",
			",":"<",
			".":">",
			"/":"?",
			"\\":"|"
		}
		//Special Keys - and their codes
		var special_keys = {
			'esc':27,
			'escape':27,
			'tab':9,
			'space':32,
			'return':13,
			'enter':13,
			'backspace':8,

			'scrolllock':145,
			'scroll_lock':145,
			'scroll':145,
			'capslock':20,
			'caps_lock':20,
			'caps':20,
			'numlock':144,
			'num_lock':144,
			'num':144,
			
			'pause':19,
			'break':19,
			
			'insert':45,
			'home':36,
			'delete':46,
			'end':35,
			
			'pageup':33,
			'page_up':33,
			'pu':33,

			'pagedown':34,
			'page_down':34,
			'pd':34,

			'left':37,
			'up':38,
			'right':39,
			'down':40,

			'f1':112,
			'f2':113,
			'f3':114,
			'f4':115,
			'f5':116,
			'f6':117,
			'f7':118,
			'f8':119,
			'f9':120,
			'f10':121,
			'f11':122,
			'f12':123
		}


		for(var i=0; k=keys[i],i<keys.length; i++) {
			//Modifiers
			if(k == 'ctrl' || k == 'control') {
				if(e.ctrlKey) kp++;

			} else if(k ==  'shift') {
				if(e.shiftKey) kp++;

			} else if(k == 'alt') {
					if(e.altKey) kp++;

			} else if(k.length > 1) { //If it is a special key
				if(special_keys[k] == code) kp++;

			} else { //The special keys did not match
				if(character == k) kp++;
				else {
					if(shift_nums[character] && e.shiftKey) { //Stupid Shift key bug created by using lowercase
						character = shift_nums[character]; 
						if(character == k) kp++;
					}
				}
			}
		}

		if(kp == keys.length) {
			callback(e);

			if(!opt['propagate']) { //Stop the event
				//e.cancelBubble is supported by IE - this will kill the bubbling process.
				e.cancelBubble = true;
				e.returnValue = false;

				//e.stopPropagation works only in Firefox.
				if (e.stopPropagation) {
					e.stopPropagation();
					e.preventDefault();
				}
				return false;
			}
		}
	}

	//Attach the function with the event	
	if(ele.addEventListener) ele.addEventListener(opt['type'], func, false);
	else if(ele.attachEvent) ele.attachEvent('on'+opt['type'], func);
	else ele['on'+opt['type']] = func;
}
/*
=============================== shortcut.js [end] =================================================
========================================================================================================
*/

/*
=============================== overlibmws.js [start] =================================================
========================================================================================================
*/

/*
 Do not remove or change this notice.
 overlibmws.js core module - Copyright Foteos Macrides 2002-2005. All rights reserved.
   Initial: August 18, 2002 - Last Revised: June 8, 2005
 This module is subject to the same terms of usage as for Erik Bosrup's overLIB,
 though only a minority of the code and API now correspond with Erik's version.
 See the overlibmws Change History and Command Reference via:

	http://www.macridesweb.com/oltest/

 Published under an open source license: http://www.macridesweb.com/oltest/license.html
 Give credit on sites that use overlibmws and submit changes so others can use them as well.
 You can get Erik's version via: http://www.bosrup.com/web/overlib/
*/

// PRE-INIT -- Ignore these lines, configuration is below.
var OLloaded=0,pmCnt=1,pMtr=new Array(),OLcmdLine=new Array(),OLrunTime=new Array(),OLv,OLudf,
OLpct=new Array("83%","67%","83%","100%","117%","150%","200%","267%"),OLrefXY,
OLbubblePI=0,OLcrossframePI=0,OLdebugPI=0,OLdraggablePI=0,OLexclusivePI=0,OLfilterPI=0,
OLfunctionPI=0,OLhidePI=0,OLiframePI=0,OLovertwoPI=0,OLscrollPI=0,OLshadowPI=0,OLprintPI=0;
if(typeof OLgateOK=='undefined')var OLgateOK=1;
var OLp1or2c='inarray,caparray,caption,closetext,right,left,center,autostatuscap,padx,pady,'
+'below,above,vcenter,donothing',OLp1or2co='nofollow,background,offsetx,offsety,fgcolor,'
+'bgcolor,cgcolor,textcolor,capcolor,width,wrap,wrapmax,height,border,base,status,autostatus,'
+'snapx,snapy,fixx,fixy,relx,rely,midx,midy,ref,refc,refp,refx,refy,fgbackground,bgbackground,'
+'cgbackground,fullhtml,capicon,textfont,captionfont,textsize,captionsize,timeout,delay,hauto,'
+'vauto,nojustx,nojusty,fgclass,bgclass,cgclass,capbelow,textpadding,textfontclass,'
+'captionpadding,captionfontclass,sticky,noclose,mouseoff,offdelay,closecolor,closefont,'
+'closesize,closeclick,closetitle,closefontclass,decode',OLp1or2o='text,cap,close,hpos,vpos,'
+'padxl,padxr,padyt,padyb',OLp1co='label',OLp1or2=OLp1or2co+','+OLp1or2o,OLp1=OLp1co+','+'frame';
OLregCmds(OLp1or2c+','+OLp1or2co+','+OLp1co);
function OLud(v){return eval('typeof ol_'+v+'=="undefined"')?1:0;}

// DEFAULT CONFIGURATION -- See overlibConfig.txt for descriptions
if(OLud('fgcolor'))var ol_fgcolor="#ccccff";
if(OLud('bgcolor'))var ol_bgcolor="#333399";
if(OLud('cgcolor'))var ol_cgcolor="#333399";
if(OLud('textcolor'))var ol_textcolor="#000000";
if(OLud('capcolor'))var ol_capcolor="#ffffff";
if(OLud('closecolor'))var ol_closecolor="#eeeeff";
if(OLud('textfont'))var ol_textfont="Verdana,Arial,Helvetica";
if(OLud('captionfont'))var ol_captionfont="Verdana,Arial,Helvetica";
if(OLud('closefont'))var ol_closefont="Verdana,Arial,Helvetica";
if(OLud('textsize'))var ol_textsize=1;
if(OLud('captionsize'))var ol_captionsize=1;
if(OLud('closesize'))var ol_closesize=1;
if(OLud('fgclass'))var ol_fgclass="";
if(OLud('bgclass'))var ol_bgclass="";
if(OLud('cgclass'))var ol_cgclass="";
if(OLud('textpadding'))var ol_textpadding=2;
if(OLud('textfontclass'))var ol_textfontclass="";
if(OLud('captionpadding'))var ol_captionpadding=2;
if(OLud('captionfontclass'))var ol_captionfontclass="";
if(OLud('closefontclass'))var ol_closefontclass="";
if(OLud('close'))var ol_close="Close";
if(OLud('closeclick'))var ol_closeclick=0;
if(OLud('closetitle'))var ol_closetitle="Click to Close";
if(OLud('text'))var ol_text="Default Text";
if(OLud('cap'))var ol_cap="";
if(OLud('capbelow'))var ol_capbelow=0;
if(OLud('background'))var ol_background="";
if(OLud('width'))var ol_width=200;
if(OLud('wrap'))var ol_wrap=0;
if(OLud('wrapmax'))var ol_wrapmax=0;
if(OLud('height'))var ol_height= -1;
if(OLud('border'))var ol_border=1;
if(OLud('base'))var ol_base=0;
if(OLud('offsetx'))var ol_offsetx=10;
if(OLud('offsety'))var ol_offsety=10;
if(OLud('sticky'))var ol_sticky=0;
if(OLud('nofollow'))var ol_nofollow=0;
if(OLud('noclose'))var ol_noclose=0;
if(OLud('mouseoff'))var ol_mouseoff=0;
if(OLud('offdelay'))var ol_offdelay=300;
if(OLud('hpos'))var ol_hpos=RIGHT;
if(OLud('vpos'))var ol_vpos=BELOW;
if(OLud('status'))var ol_status="";
if(OLud('autostatus'))var ol_autostatus=0;
if(OLud('snapx'))var ol_snapx=0;
if(OLud('snapy'))var ol_snapy=0;
if(OLud('fixx'))var ol_fixx= -1;
if(OLud('fixy'))var ol_fixy= -1;
if(OLud('relx'))var ol_relx=null;
if(OLud('rely'))var ol_rely=null;
if(OLud('midx'))var ol_midx=null;
if(OLud('midy'))var ol_midy=null;
if(OLud('ref'))var ol_ref="";
if(OLud('refc'))var ol_refc='UL';
if(OLud('refp'))var ol_refp='UL';
if(OLud('refx'))var ol_refx=0;
if(OLud('refy'))var ol_refy=0;
if(OLud('fgbackground'))var ol_fgbackground="";
if(OLud('bgbackground'))var ol_bgbackground="";
if(OLud('cgbackground'))var ol_cgbackground="";
if(OLud('padxl'))var ol_padxl=1;
if(OLud('padxr'))var ol_padxr=1;
if(OLud('padyt'))var ol_padyt=1;
if(OLud('padyb'))var ol_padyb=1;
if(OLud('fullhtml'))var ol_fullhtml=0;
if(OLud('capicon'))var ol_capicon="";
if(OLud('frame'))var ol_frame=self;
if(OLud('timeout'))var ol_timeout=0;
if(OLud('delay'))var ol_delay=0;
if(OLud('hauto'))var ol_hauto=0;
if(OLud('vauto'))var ol_vauto=0;
if(OLud('nojustx'))var ol_nojustx=0;
if(OLud('nojusty'))var ol_nojusty=0;
if(OLud('label'))var ol_label="";
if(OLud('decode'))var ol_decode=0;
// ARRAY CONFIGURATION - See overlibConfig.txt for descriptions.
if(OLud('texts'))var ol_texts=new Array("Text 0","Text 1");
if(OLud('caps'))var ol_caps=new Array("Caption 0","Caption 1");
// END CONFIGURATION -- Don't change anything below, all configuration is above.

// INIT -- Runtime variables.
var o3_text="",o3_cap="",o3_sticky=0,o3_nofollow=0,o3_background="",o3_noclose=0,o3_mouseoff=0,
o3_offdelay=300,o3_hpos=RIGHT,o3_offsetx=10,o3_offsety=10,o3_fgcolor="",o3_bgcolor="",
o3_cgcolor="",o3_textcolor="",o3_capcolor="",o3_closecolor="",o3_width=200,o3_wrap=0,
o3_wrapmax=0,o3_height= -1,o3_border=1,o3_base=0,o3_status="",o3_autostatus=0,o3_snapx=0,
o3_snapy=0,o3_fixx= -1,o3_fixy= -1,o3_relx=null,o3_rely=null,o3_midx=null,o3_midy=null,o3_ref="",
o3_refc='UL',o3_refp='UL',o3_refx=0,o3_refy=0,o3_fgbackground="",o3_bgbackground="",
o3_cgbackground="",o3_padxl=0,o3_padxr=0,o3_padyt=0,o3_padyb=0,o3_fullhtml=0,o3_vpos=BELOW,
o3_capicon="",o3_textfont="Verdana,Arial,Helvetica",o3_captionfont="",o3_closefont="",
o3_textsize=1,o3_captionsize=1,o3_closesize=1,o3_frame=self,o3_timeout=0,o3_delay=0,o3_hauto=0,
o3_vauto=0,o3_nojustx=0,o3_nojusty=0,o3_close="",o3_closeclick=0,o3_closetitle="",o3_fgclass="",
o3_bgclass="",o3_cgclass="",o3_textpadding=2,o3_textfontclass="",o3_captionpadding=2,
o3_captionfontclass="",o3_closefontclass="",o3_capbelow=0,o3_label="",o3_decode=0,
CSSOFF=DONOTHING,CSSCLASS=DONOTHING,OLdelayid=0,OLtimerid=0,OLshowid=0,OLndt=0,over=null,
OLfnRef="",OLhover=0,OLx=0,OLy=0,OLshowingsticky=0,OLallowmove=0,OLcC=null,
OLua=navigator.userAgent.toLowerCase(),
OLns4=(navigator.appName=='Netscape'&&parseInt(navigator.appVersion)==4),
OLns6=(document.getElementById)?1:0,
OLie4=(document.all)?1:0,
OLgek=(OLv=OLua.match(/gecko\/(\d{8})/i))?parseInt(OLv[1]):0,
OLmac=(OLua.indexOf('mac')>=0)?1:0,
OLsaf=(OLua.indexOf('safari')>=0)?1:0,
OLkon=(OLua.indexOf('konqueror')>=0)?1:0,
OLkht=(OLsaf||OLkon)?1:0,
OLopr=(OLua.indexOf('opera')>=0)?1:0,
OLop7=(OLopr&&document.createTextNode)?1:0;
if(OLopr){OLns4=OLns6=0;if(!OLop7)OLie4=0;}
var OLieM=((OLie4&&OLmac)&&!(OLkht||OLopr))?1:0,
OLie5=0,OLie55=0;if(OLie4&&!OLop7){
if((OLv=OLua.match(/msie (\d\.\d+)\.*/i))&&(OLv=parseFloat(OLv[1]))>=5.0){
OLie5=1;OLns6=0;if(OLv>=5.5)OLie55=1;}if(OLns6)OLie4=0;}
if(OLns4)window.onresize=function(){location.reload();}
var OLchkMh=1,OLdw;
if(OLns4||OLie4||OLns6)OLmh();
else{overlib=nd=cClick=OLpageDefaults=no_overlib;}

/*
 PUBLIC FUNCTIONS
*/
// Loads defaults then args into runtime variables.
function overlib(){
if(!(OLloaded&&OLgateOK))return;
if((OLexclusivePI)&&OLisExclusive(arguments))return true;
if(OLchkMh)OLmh();
if(OLndt&&!OLtimerid)OLndt=0;if(over)cClick();
OLload(OLp1or2);OLload(OLp1);
OLfnRef="";OLhover=0;
OLsetRunTimeVar();
OLparseTokens('o3_',arguments);
if(!(over=OLmkLyr()))return false;
if(o3_decode)OLdecode();
if(OLprintPI)OLchkPrint();
if(OLbubblePI)OLchkForBubbleEffect();
if(OLdebugPI)OLsetDebugCanShow();
if(OLshadowPI)OLinitShadow();
if(OLiframePI)OLinitIfs();
if(OLfilterPI)OLinitFilterLyr();
if(OLexclusivePI&&o3_exclusive&&o3_exclusivestatus!="")o3_status=o3_exclusivestatus;
else if(o3_autostatus==2&&o3_cap!="")o3_status=o3_cap;
else if(o3_autostatus==1&&o3_text!="")o3_status=o3_text;
if(!o3_delay){return OLmain();
}else{OLdelayid=setTimeout("OLmain()",o3_delay);
if(o3_status!=""){self.status=o3_status;return true;}
else if(!(OLop7&&event&&event.type=='mouseover'))return false;}
}

// Clears popups if appropriate
function nd(time){
if(OLloaded&&OLgateOK){if(!((OLexclusivePI)&&OLisExclusive())){
if(time&&over&&!o3_delay){if(OLtimerid>0)clearTimeout(OLtimerid);
OLtimerid=(OLhover&&o3_frame==self&&!OLcursorOff())?0:
setTimeout("cClick()",(o3_timeout=OLndt=time));}else{
if(!OLshowingsticky){OLallowmove=0;if(over)OLhideObject(over);}}}}
return false;
}

// Close function for stickies
function cClick(){
if(OLloaded&&OLgateOK){OLhover=0;if(over){
if(OLovertwoPI&&over==over2)cClick2();OLhideObject(over);OLshowingsticky=0;}}
return false;
}

// Sets page-specific defaults.
function OLpageDefaults(){
OLparseTokens('ol_',arguments);
}

// For unsupported browsers.
function no_overlib(){return false;}

/*
 OVERLIB MAIN FUNCTION SET
*/
function OLmain(){
o3_delay=0;
if(o3_frame==self){if(o3_noclose)OLoptMOUSEOFF(0);else if(o3_mouseoff)OLoptMOUSEOFF(1);}
if(o3_sticky)OLshowingsticky=1;OLdoLyr();OLallowmove=0;if(o3_timeout>0){
if(OLtimerid>0)clearTimeout(OLtimerid);OLtimerid=setTimeout("cClick()",o3_timeout);}
if(o3_ref){OLrefXY=OLgetRefXY(o3_ref);if(OLrefXY[0]==null){o3_ref="";o3_midx=0;o3_midy=0;}}
OLdisp(o3_status);if(OLdraggablePI)OLcheckDrag();
if(o3_status!="")return true;else if(!(OLop7&&event&&event.type=='mouseover'))return false;
}

// Loads o3_ variables
function OLload(c){var i,m=c.split(',');for(i=0;i<m.length;i++)eval('o3_'+m[i]+'=ol_'+m[i]);}

// Chooses LGF 
function OLdoLGF(){
return (o3_background!=''||o3_fullhtml)?OLcontentBackground(o3_text,o3_background,o3_fullhtml):
(o3_cap=="")?OLcontentSimple(o3_text):
(o3_sticky)?OLcontentCaption(o3_text,o3_cap,o3_close):OLcontentCaption(o3_text,o3_cap,'');
}

// Makes Layer
function OLmkLyr(id,f,z){
id=(id||'overDiv');f=(f||o3_frame);z=(z||1000);var fd=f.document,d=OLgetRefById(id,fd);
if(!d){if(OLns4)d=fd.layers[id]=new Layer(1024,f);else if(OLie4&&!document.getElementById){
fd.body.insertAdjacentHTML('BeforeEnd','<div id="'+id+'"></div>');d=fd.all[id];
}else{d=fd.createElement('div');if(d){d.id=id;fd.body.appendChild(d);}}if(!d)return null;
if(OLns4)d.zIndex=z;else{var o=d.style;o.position='absolute';o.visibility='hidden';o.zIndex=z;}}
return d;
}

// Creates and writes layer content
function OLdoLyr(){
if(o3_background==''&&!o3_fullhtml){
if(o3_fgbackground!='')o3_fgbackground=' background="'+o3_fgbackground+'"';
if(o3_bgbackground!='')o3_bgbackground=' background="'+o3_bgbackground+'"';
if(o3_cgbackground!='')o3_cgbackground=' background="'+o3_cgbackground+'"';
if(o3_fgcolor!='')o3_fgcolor=' bgcolor="'+o3_fgcolor+'"';
if(o3_bgcolor!='')o3_bgcolor=' bgcolor="'+o3_bgcolor+'"';
if(o3_cgcolor!='')o3_cgcolor=' bgcolor="'+o3_cgcolor+'"';
if(o3_height>0)o3_height=' height="'+o3_height+'"';else o3_height='';}
if(!OLns4)OLrepositionTo(over,(OLns6?20:0),0);var lyrHtml=OLdoLGF();
if(o3_sticky&&OLtimerid>0){clearTimeout(OLtimerid);OLtimerid=0;}
if(o3_wrap&&!o3_fullhtml){OLlayerWrite(lyrHtml);
o3_width=(OLns4?over.clip.width:over.offsetWidth);
if(OLns4&&o3_wrapmax<1)o3_wrapmax=o3_frame.innerWidth-40;
o3_wrap=0;if(o3_wrapmax>0&&o3_width>o3_wrapmax)o3_width=o3_wrapmax;lyrHtml=OLdoLGF();}
OLlayerWrite(lyrHtml);o3_width=(OLns4?over.clip.width:over.offsetWidth);
if(OLbubblePI)OLgenerateBubble(lyrHtml);
}

/*
 LAYER GENERATION FUNCTIONS
*/
// Makes simple table without caption
function OLcontentSimple(txt){
var t=OLbgLGF()+OLfgLGF(txt)+OLbaseLGF();
OLsetBackground('');return t;
}

// Makes table with caption and optional close link
function OLcontentCaption(txt,title,close){
var closing=(OLprintPI?OLprintCapLGF():''),closeevent='onmouseover',caption,t,
cC='javascript:return '+OLfnRef+(OLovertwoPI&&over==over2?'cClick2();':'cClick();');
if(o3_closeclick)closeevent=(o3_closetitle?'title="'+o3_closetitle+'" ':'')+'onclick';
if(o3_capicon!='')o3_capicon='<img src="'+o3_capicon+'" /> ';
if(close){closing+='<td align="right"><a href="'+cC+'" '
+closeevent+'="'+cC+'"'+(o3_closefontclass?' class="'+o3_closefontclass
+'">':'>'+OLlgfUtil(0,'','span',o3_closecolor,o3_closefont,o3_closesize))+close
+(o3_closefontclass?'':OLlgfUtil(1,'','span'))+'</a></td>';}
caption='<table'+OLwd(0)+' border="0" cellpadding="'+o3_captionpadding+'" cellspacing="0"'
+(o3_cgclass?' class="'+o3_cgclass+'"':o3_cgcolor+o3_cgbackground)+'><tr><td'+OLwd(0)
+(o3_cgclass?' class="'+o3_cgclass+'">':'>')+(o3_captionfontclass?'<div class="'
+o3_captionfontclass+'">':'<strong>'
+OLlgfUtil(0,'','div',o3_capcolor,o3_captionfont,o3_captionsize))+o3_capicon+title
+OLlgfUtil(1,'','div')+(o3_captionfontclass?'':'</strong>')+'</td>'+closing+'</tr></table>';
t=OLbgLGF()+(o3_capbelow?OLfgLGF(txt)+caption:caption+OLfgLGF(txt))+OLbaseLGF();
OLsetBackground('');return t;
}

// For BACKGROUND and FULLHTML commands
function OLcontentBackground(txt, image, hasfullhtml){
var t;if(hasfullhtml){t=txt;}else{t='<table'+OLwd(1)
+' border="0" cellpadding="0" cellspacing="0" '+'height="'+o3_height
+'"><tr><td colspan="3" height="'+o3_padyt+'"></td></tr><tr><td width="'
+o3_padxl+'"></td><td valign="top"'+OLwd(2)+'>'
+OLlgfUtil(0,o3_textfontclass,'div',o3_textcolor,o3_textfont,o3_textsize)+txt+
OLlgfUtil(1,'','div')+'</td><td width="'+o3_padxr+'"></td></tr><tr><td colspan="3" height="'
+o3_padyb+'"></td></tr></table>';}
OLsetBackground(image);return t;
}

// LGF utilities
function OLbgLGF(){
return '<table'+OLwd(1)+o3_height+' border="0" cellpadding="'+o3_border+'" cellspacing="0"'
+(o3_bgclass?' class="'+o3_bgclass+'"':o3_bgcolor+o3_bgbackground)+'><tr><td>';
}
function OLfgLGF(t){
return '<table'+OLwd(0)+o3_height+' border="0" cellpadding="'+o3_textpadding
+'" cellspacing="0"'+(o3_fgclass?' class="'+o3_fgclass+'"':o3_fgcolor+o3_fgbackground)
+'><tr><td valign="top"'+(o3_fgclass?' class="'+o3_fgclass+'"':'')+'>'
+OLlgfUtil(0,o3_textfontclass,'div',o3_textcolor,o3_textfont,o3_textsize)+t
+(OLprintPI?OLprintFgLGF():'')+OLlgfUtil(1,'','div')+'</td></tr></table>';
}
function OLlgfUtil(end,tfc,ele,col,fac,siz){
if(end)return ('</'+(OLns4?'font':ele)+'>');else return (tfc?'<div class="'+tfc+'">':
('<'+(OLns4?'font color="'+col+'" face="'+OLquoteMultiNameFonts(fac)+'" size="'+siz:ele
+' style="color:'+col+';font-family:'+OLquoteMultiNameFonts(fac)+';font-size:'+siz+';'
+(ele=='span'?'text-decoration:underline;':''))+'">'));
}
function OLquoteMultiNameFonts(f){
var i,v,pM=f.split(',');
for(i=0;i<pM.length;i++){v=pM[i];v=v.replace(/^\s+/,'').replace(/\s+$/,'');
if(/\s/.test(v) && !/['"]/.test(v)){v="\'"+v+"\'";pM[i]=v;}}
return pM.join();
}
function OLbaseLGF(){
return ((o3_base>0&&!o3_wrap)?('<table width="100%" border="0" cellpadding="0" cellspacing="0"'
+(o3_bgclass?' class="'+o3_bgclass+'"':'')+'><tr><td height="'+o3_base
+'"></td></tr></table>'):'')+'</td></tr></table>';
}
function OLwd(a){
return(o3_wrap?'':' width="'+(!a?'100%':(a==1?o3_width:(o3_width-o3_padxl-o3_padxr)))+'"');
}

// Loads image into the div.
function OLsetBackground(i){
if(i==''){if(OLns4)over.background.src=null;
else{if(OLns6)over.style.width='';over.style.backgroundImage='none';}
}else{if(OLns4)over.background.src=i;
else{if(OLns6)over.style.width=o3_width+'px';over.style.backgroundImage='url('+i+')';}}
}

/*
 HANDLING FUNCTIONS
*/
// Displays layer
function OLdisp(s){
if(!OLallowmove){if(OLshadowPI)OLdispShadow();if(OLiframePI)OLdispIfs();OLplaceLayer();
if(OLndt)OLshowObject(over);else OLshowid=setTimeout("OLshowObject(over)",1);
OLallowmove=(o3_sticky||o3_nofollow)?0:1;}OLndt=0;if(s!="")self.status=s;
}

// Decides placement of layer.
function OLplaceLayer(){
var snp,X,Y,pgLeft,pgTop,pWd=o3_width,pHt,iWd=100,iHt=100,SB=0,LM=0,CX=0,TM=0,BM=0,CY=0,
o=OLfd(),nsb=(OLgek>=20010505&&!o3_frame.scrollbars.visible)?1:0;
if(!OLkht&&o&&o.clientWidth)iWd=o.clientWidth;
else if(o3_frame.innerWidth){SB=Math.ceil(1.4*(o3_frame.outerWidth-o3_frame.innerWidth));
if(SB>20)SB=20;iWd=o3_frame.innerWidth;}
pgLeft=(OLie4)?o.scrollLeft:o3_frame.pageXOffset;
if(OLie55&&OLfilterPI&&o3_filter&&o3_filtershadow)SB=CX=5;else
if((OLshadowPI)&&bkdrop&&o3_shadow&&o3_shadowx){SB+=((o3_shadowx>0)?o3_shadowx:0);
LM=((o3_shadowx<0)?Math.abs(o3_shadowx):0);CX=Math.abs(o3_shadowx);}
if(o3_ref!=""||o3_fixx> -1||o3_relx!=null||o3_midx!=null){
if(o3_ref!=""){X=OLrefXY[0];if(OLie55&&OLfilterPI&&o3_filter&&o3_filtershadow){
if(o3_refp=='UR'||o3_refp=='LR')X-=5;}
else if((OLshadowPI)&&bkdrop&&o3_shadow&&o3_shadowx){
if(o3_shadowx<0&&(o3_refp=='UL'||o3_refp=='LL'))X-=o3_shadowx;else
if(o3_shadowx>0&&(o3_refp=='UR'||o3_refp=='LR'))X-=o3_shadowx;}
}else{if(o3_midx!=null){
X=parseInt(pgLeft+((iWd-pWd-SB-LM)/2)+o3_midx);
}else{if(o3_relx!=null){
if(o3_relx>=0)X=pgLeft+o3_relx+LM;else X=pgLeft+o3_relx+iWd-pWd-SB;
}else{X=o3_fixx+LM;}}}
}else{
if(o3_hauto){
if(o3_hpos==LEFT&&OLx-pgLeft<iWd/2&&OLx-pWd-o3_offsetx<pgLeft+LM)o3_hpos=RIGHT;else
if(o3_hpos==RIGHT&&OLx-pgLeft>iWd/2&&OLx+pWd+o3_offsetx>pgLeft+iWd-SB)o3_hpos=LEFT;}
X=(o3_hpos==CENTER)?parseInt(OLx-((pWd+CX)/2)+o3_offsetx):
(o3_hpos==LEFT)?OLx-o3_offsetx-pWd:OLx+o3_offsetx;
if(o3_snapx>1){
snp=X % o3_snapx;
if(o3_hpos==LEFT){X=X-(o3_snapx+snp);}else{X=X+(o3_snapx-snp);}}}
if(!o3_nojustx&&X+pWd>pgLeft+iWd-SB)
X=iWd+pgLeft-pWd-SB;if(!o3_nojustx&&X-LM<pgLeft)X=pgLeft+LM;
pgTop=OLie4?o.scrollTop:o3_frame.pageYOffset;
if(!OLkht&&!nsb&&o&&o.clientHeight)iHt=o.clientHeight;
else if(o3_frame.innerHeight)iHt=o3_frame.innerHeight;
if(OLbubblePI&&o3_bubble)pHt=OLbubbleHt;else pHt=OLns4?over.clip.height:over.offsetHeight;
if((OLshadowPI)&&bkdrop&&o3_shadow&&o3_shadowy){TM=(o3_shadowy<0)?Math.abs(o3_shadowy):0;
if(OLie55&&OLfilterPI&&o3_filter&&o3_filtershadow)BM=CY=5;else
BM=(o3_shadowy>0)?o3_shadowy:0;CY=Math.abs(o3_shadowy);}
if(o3_ref!=""||o3_fixy> -1||o3_rely!=null||o3_midy!=null){
if(o3_ref!=""){Y=OLrefXY[1];if(OLie55&&OLfilterPI&&o3_filter&&o3_filtershadow){
if(o3_refp=='LL'||o3_refp=='LR')Y-=5;}else if((OLshadowPI)&&bkdrop&&o3_shadow&&o3_shadowy){
if(o3_shadowy<0&&(o3_refp=='UL'||o3_refp=='UR'))Y-=o3_shadowy;else
if(o3_shadowy>0&&(o3_refp=='LL'||o3_refp=='LR'))Y-=o3_shadowy;}
}else{if(o3_midy!=null){
Y=parseInt(pgTop+((iHt-pHt-CY)/2)+o3_midy);
}else{if(o3_rely!=null){
if(o3_rely>=0)Y=pgTop+o3_rely+TM;else Y=pgTop+o3_rely+iHt-pHt-BM;}else{
Y=o3_fixy+TM;}}}
}else{
if(o3_vauto){
if(o3_vpos==ABOVE&&OLy-pgTop<iHt/2&&OLy-pHt-o3_offsety<pgTop)o3_vpos=BELOW;else
if(o3_vpos==BELOW&&OLy-pgTop>iHt/2&&OLy+pHt+o3_offsety+((OLns4||OLkht)?17:0)>pgTop+iHt-BM)
o3_vpos=ABOVE;}Y=(o3_vpos==VCENTER)?parseInt(OLy-((pHt+CY)/2)+o3_offsety):
(o3_vpos==ABOVE)?OLy-(pHt+o3_offsety+BM):OLy+o3_offsety+TM;
if(o3_snapy>1){
snp=Y % o3_snapy;
if(pHt>0&&o3_vpos==ABOVE){Y=Y-(o3_snapy+snp);}else{Y=Y+(o3_snapy-snp);}}}
if(!o3_nojusty&&Y+pHt+BM>pgTop+iHt)Y=pgTop+iHt-pHt-BM;if(!o3_nojusty&&Y-TM<pgTop)Y=pgTop+TM;
OLrepositionTo(over,X,Y);
if(OLshadowPI)OLrepositionShadow(X,Y);if(OLiframePI)OLrepositionIfs(X,Y);
if(OLns6&&o3_frame.innerHeight){iHt=o3_frame.innerHeight;OLrepositionTo(over,X,Y);}
if(OLscrollPI)OLchkScroll(X-pgLeft,Y-pgTop);
}

// Chooses body or documentElement
function OLfd(f){
var fd=((f)?f:o3_frame).document,fdc=fd.compatMode,fdd=fd.documentElement;
return (!OLop7&&fdc&&fdc!='BackCompat'&&fdd&&fdd.clientWidth)?fd.documentElement:fd.body;
}

// Gets location of REFerence object
function OLgetRefXY(r){
var o=OLgetRef(r),ob=o,rXY=[o3_refx,o3_refy],of;
if(!o)return [null,null];
if(OLns4){if(typeof o.length!='undefined'&&o.length>1){
ob=o[0];rXY[0]+=o[0].x+o[1].pageX;rXY[1]+=o[0].y+o[1].pageY;
}else{if((o.toString().indexOf('Image')!= -1)||(o.toString().indexOf('Anchor')!= -1)){
rXY[0]+=o.x;rXY[1]+=o.y;}else{rXY[0]+=o.pageX;rXY[1]+=o.pageY;}}
}else{rXY[0]+=OLpageLoc(o,'Left');rXY[1]+=OLpageLoc(o,'Top');}
of=OLgetRefOffsets(ob);rXY[0]+=of[0];rXY[1]+=of[1];
return rXY;
}
function OLgetRef(l){var r=OLgetRefById(l);return (r)?r:OLgetRefByName(l);}

// Seeks REFerence by id
function OLgetRefById(l,d){
var r="",j;l=(l||'overDiv');d=(d||o3_frame.document);
if(OLie4&&d.all){return d.all[l];}else if(d.getElementById){return d.getElementById(l);
}else if(d.layers&&d.layers.length>0){if(d.layers[l])return d.layers[l];
for(j=0;j<d.layers.length;j++){r=OLgetRefById(l,d.layers[j].document);if(r)return r;}}
return null;
}

// Seeks REFerence by name (for img and a)
function OLgetRefByName(l,d){
var r=null,j;d=(d||o3_frame.document);
if(typeof d.images[l]!='undefined'&&d.images[l]){return d.images[l];
}else if(typeof d.anchors[l]!='undefined'&&d.anchors[l]){return d.anchors[l];
}else if(d.layers&&d.layers.length>0){
for(j=0;j<d.layers.length;j++){r=OLgetRefByName(l,d.layers[j].document);
if(r&&r.length>0)return r;else if(r)return [r,d.layers[j]];}}
return null;
}

// Gets layer vs REFerence offsets
function OLgetRefOffsets(o){
var c=o3_refc.toUpperCase(),p=o3_refp.toUpperCase(),W=0,H=0,pW=0,pH=0,of=[0,0];
pW=(OLbubblePI&&o3_bubble)?o3_width:OLns4?over.clip.width:over.offsetWidth;
pH=(OLbubblePI&&o3_bubble)?OLbubbleHt:OLns4?over.clip.height:over.offsetHeight;
if((!OLop7)&&o.toString().indexOf('Image')!= -1){W=o.width;H=o.height;
}else if((!OLop7)&&o.toString().indexOf('Anchor')!= -1){c=o3_refc='UL';}else{
W=(OLns4)?o.clip.width:o.offsetWidth;H=(OLns4)?o.clip.height:o.offsetHeight;}
if((OLns4||(OLns6&&OLgek))&&o.border){W+=2*parseInt(o.border);H+=2*parseInt(o.border);}
if(c=='UL'){of=(p=='UR')?[-pW,0]:(p=='LL')?[0,-pH]:(p=='LR')?[-pW,-pH]:[0,0];
}else if(c=='UR'){of=(p=='UR')?[W-pW,0]:(p=='LL')?[W,-pH]:(p=='LR')?[W-pW,-pH]:[W,0];
}else if(c=='LL'){of=(p=='UR')?[-pW,H]:(p=='LL')?[0,H-pH]:(p=='LR')?[-pW,H-pH]:[0,H];
}else if(c=='LR'){of=(p=='UR')?[W-pW,H]:(p=='LL')?[W,H-pH]:(p=='LR')?[W-pW,H-pH]:
[W,H];}
return of;
}

// Gets x or y location of object
function OLpageLoc(o,t){
var l=0;while(o.offsetParent&&o.offsetParent.tagName.toLowerCase()!='html'){
l+=o['offset'+t];o=o.offsetParent;}l+=o['offset'+t];
return l;
} 

// Moves layer
function OLmouseMove(e){
var e=(e||event);
OLcC=(OLovertwoPI&&over2&&over==over2?cClick2:cClick);
OLx=(e.pageX||e.clientX+OLfd().scrollLeft);OLy=(e.pageY||e.clientY+OLfd().scrollTop);
if((OLallowmove&&over)&&(o3_frame==self||over==OLgetRefById())){
OLplaceLayer();if(OLhidePI)OLhideUtil(0,1,1,0,0,0);}
if(OLhover&&over&&o3_frame==self&&OLcursorOff())if(o3_offdelay<1)OLcC();else
{if(OLtimerid>0)clearTimeout(OLtimerid);OLtimerid=setTimeout("OLcC()",o3_offdelay);}
}

// Capture mouse and chain other scripts.
function OLmh(){
var fN,f,j,k,s,mh=OLmouseMove,w=(OLns4&&window.onmousemove),re=/function[ ]*(\w*)\(/;
OLdw=document;if(document.onmousemove||w){if(w)OLdw=window;f=OLdw.onmousemove.toString();
fN=f.match(re);if(!fN||fN[1]=='anonymous'||fN[1]=='OLmouseMove'){OLchkMh=0;return;}
if(fN[1])s=fN[1]+'(e)';else{j=f.indexOf('{');k=f.lastIndexOf('}')+1;s=f.substring(j,k);}
s+=';OLmouseMove(e);';mh=new Function('e',s);}
OLdw.onmousemove=mh;if(OLns4)OLdw.captureEvents(Event.MOUSEMOVE);
}

/*
 PARSING
*/
function OLparseTokens(pf,ar){
var i,v,md= -1,par=(pf!='ol_'),p=OLpar,q=OLparQuo,t=OLtoggle;OLudf=(par&&!ar.length?1:0);
for(i=0;i< ar.length;i++){if(md<0){if(typeof ar[i]=='number'){OLudf=(par?1:0);i--;}
else{switch(pf){case 'ol_':ol_text=ar[i];break;default:o3_text=ar[i];}}md=0;
}else{
if(ar[i]==INARRAY){OLudf=0;eval(pf+'text=ol_texts['+ar[++i]+']');continue;}
if(ar[i]==CAPARRAY){eval(pf+'cap=ol_caps['+ar[++i]+']');continue;}
if(ar[i]==CAPTION){q(ar[++i],pf+'cap');continue;}
if(Math.abs(ar[i])==STICKY){t(ar[i],pf+'sticky');continue;}
if(Math.abs(ar[i])==NOFOLLOW){t(ar[i],pf+'nofollow');continue;}
if(ar[i]==BACKGROUND){q(ar[++i],pf+'background');continue;}
if(Math.abs(ar[i])==NOCLOSE){t(ar[i],pf+'noclose');continue;}
if(Math.abs(ar[i])==MOUSEOFF){t(ar[i],pf+'mouseoff');continue;}
if(ar[i]==OFFDELAY){p(ar[++i],pf+'offdelay');continue;}
if(ar[i]==RIGHT||ar[i]==LEFT||ar[i]==CENTER){p(ar[i],pf+'hpos');continue;}
if(ar[i]==OFFSETX){p(ar[++i],pf+'offsetx');continue;}
if(ar[i]==OFFSETY){p(ar[++i],pf+'offsety');continue;}
if(ar[i]==FGCOLOR){q(ar[++i],pf+'fgcolor');continue;}
if(ar[i]==BGCOLOR){q(ar[++i],pf+'bgcolor');continue;}
if(ar[i]==CGCOLOR){q(ar[++i],pf+'cgcolor');continue;}
if(ar[i]==TEXTCOLOR){q(ar[++i],pf+'textcolor');continue;}
if(ar[i]==CAPCOLOR){q(ar[++i],pf+'capcolor');continue;}
if(ar[i]==CLOSECOLOR){q(ar[++i],pf+'closecolor');continue;}
if(ar[i]==WIDTH){p(ar[++i],pf+'width');continue;}
if(Math.abs(ar[i])==WRAP){t(ar[i],pf+'wrap');continue;}
if(ar[i]==WRAPMAX){p(ar[++i],pf+'wrapmax');continue;}
if(ar[i]==HEIGHT){p(ar[++i],pf+'height');continue;}
if(ar[i]==BORDER){p(ar[++i],pf+'border');continue;}
if(ar[i]==BASE){p(ar[++i],pf+'base');continue;}
if(ar[i]==STATUS){q(ar[++i],pf+'status');continue;}
if(Math.abs(ar[i])==AUTOSTATUS){v=pf+'autostatus';
eval(v+'=('+ar[i]+'<0)?('+v+'==2?2:0):('+v+'==1?0:1)');continue;}
if(Math.abs(ar[i])==AUTOSTATUSCAP){v=pf+'autostatus';
eval(v+'=('+ar[i]+'<0)?('+v+'==1?1:0):('+v+'==2?0:2)');continue;}
if(ar[i]==CLOSETEXT){q(ar[++i],pf+'close');continue;}
if(ar[i]==SNAPX){p(ar[++i],pf+'snapx');continue;}
if(ar[i]==SNAPY){p(ar[++i],pf+'snapy');continue;}
if(ar[i]==FIXX){p(ar[++i],pf+'fixx');continue;}
if(ar[i]==FIXY){p(ar[++i],pf+'fixy');continue;}
if(ar[i]==RELX){p(ar[++i],pf+'relx');continue;}
if(ar[i]==RELY){p(ar[++i],pf+'rely');continue;}
if(ar[i]==MIDX){p(ar[++i],pf+'midx');continue;}
if(ar[i]==MIDY){p(ar[++i],pf+'midy');continue;}
if(ar[i]==REF){q(ar[++i],pf+'ref');continue;}
if(ar[i]==REFC){q(ar[++i],pf+'refc');continue;}
if(ar[i]==REFP){q(ar[++i],pf+'refp');continue;}
if(ar[i]==REFX){p(ar[++i],pf+'refx');continue;}
if(ar[i]==REFY){p(ar[++i],pf+'refy');continue;}
if(ar[i]==FGBACKGROUND){q(ar[++i],pf+'fgbackground');continue;}
if(ar[i]==BGBACKGROUND){q(ar[++i],pf+'bgbackground');continue;}
if(ar[i]==CGBACKGROUND){q(ar[++i],pf+'cgbackground');continue;}
if(ar[i]==PADX){p(ar[++i],pf+'padxl');p(ar[++i],pf+'padxr');continue;}
if(ar[i]==PADY){p(ar[++i],pf+'padyt');p(ar[++i],pf+'padyb');continue;}
if(Math.abs(ar[i])==FULLHTML){t(ar[i],pf+'fullhtml');continue;}
if(ar[i]==BELOW||ar[i]==ABOVE||ar[i]==VCENTER){p(ar[i],pf+'vpos');continue;}
if(ar[i]==CAPICON){q(ar[++i],pf+'capicon');continue;}
if(ar[i]==TEXTFONT){q(ar[++i],pf+'textfont');continue;}
if(ar[i]==CAPTIONFONT){q(ar[++i],pf+'captionfont');continue;}
if(ar[i]==CLOSEFONT){q(ar[++i],pf+'closefont');continue;}
if(ar[i]==TEXTSIZE){q(ar[++i],pf+'textsize');continue;}
if(ar[i]==CAPTIONSIZE){q(ar[++i],pf+'captionsize');continue;}
if(ar[i]==CLOSESIZE){q(ar[++i],pf+'closesize');continue;}
if(ar[i]==TIMEOUT){p(ar[++i],pf+'timeout');continue;}
if(ar[i]==DELAY){p(ar[++i],pf+'delay');continue;}
if(Math.abs(ar[i])==HAUTO){t(ar[i],pf+'hauto');continue;}
if(Math.abs(ar[i])==VAUTO){t(ar[i],pf+'vauto');continue;}
if(Math.abs(ar[i])==NOJUSTX){t(ar[i],pf+'nojustx');continue;}
if(Math.abs(ar[i])==NOJUSTY){t(ar[i],pf+'nojusty');continue;}
if(Math.abs(ar[i])==CLOSECLICK){t(ar[i],pf+'closeclick');continue;}
if(ar[i]==CLOSETITLE){q(ar[++i],pf+'closetitle');continue;}
if(ar[i]==FGCLASS){q(ar[++i],pf+'fgclass');continue;}
if(ar[i]==BGCLASS){q(ar[++i],pf+'bgclass');continue;}
if(ar[i]==CGCLASS){q(ar[++i],pf+'cgclass');continue;}
if(ar[i]==TEXTPADDING){p(ar[++i],pf+'textpadding');continue;}
if(ar[i]==TEXTFONTCLASS){q(ar[++i],pf+'textfontclass');continue;}
if(ar[i]==CAPTIONPADDING){p(ar[++i],pf+'captionpadding');continue;}
if(ar[i]==CAPTIONFONTCLASS){q(ar[++i],pf+'captionfontclass');continue;}
if(ar[i]==CLOSEFONTCLASS){q(ar[++i],pf+'closefontclass');continue;}
if(Math.abs(ar[i])==CAPBELOW){t(ar[i],pf+'capbelow');continue;}
if(ar[i]==LABEL){q(ar[++i],pf+'label');continue;}
if(Math.abs(ar[i])==DECODE){t(ar[i],pf+'decode');continue;}
if(ar[i]==DONOTHING){continue;}
i=OLparseCmdLine(pf,i,ar);}}
if((OLfunctionPI)&&OLudf&&o3_function)o3_text=o3_function();
if(pf=='o3_')OLfontSize();
}
function OLpar(a,v){eval(v+'='+a);}
function OLparQuo(a,v){eval(v+"='"+OLescSglQt(a)+"'");}
function OLescSglQt(s){return s.toString().replace(/'/g,"\\'");}
function OLtoggle(a,v){eval(v+'=('+v+'==0&&'+a+'>=0)?1:0');}
function OLhasDims(s){return /[%\-a-z]+$/.test(s);}
function OLfontSize(){
var i;if(OLhasDims(o3_textsize)){if(OLns4)o3_textsize="2";}else
if(!OLns4){i=parseInt(o3_textsize);o3_textsize=(i>0&&i<8)?OLpct[i]:OLpct[0];}
if(OLhasDims(o3_captionsize)){if(OLns4)o3_captionsize="2";}else
if(!OLns4){i=parseInt(o3_captionsize);o3_captionsize=(i>0&&i<8)?OLpct[i]:OLpct[0];}
if(OLhasDims(o3_closesize)){if(OLns4)o3_closesize="2";}else
if(!OLns4){i=parseInt(o3_closesize);o3_closesize=(i>0&&i<8)?OLpct[i]:OLpct[0];}
if(OLprintPI)OLprintDims();
}
function OLdecode(){
var re=/%[0-9A-Fa-f]{2,}/,t=o3_text,c=o3_cap,u=unescape,d=!OLns4&&(!OLgek||OLgek>=20020826)
&&typeof decodeURIComponent?decodeURIComponent:u;if(typeof(window.TypeError)=='function'){
if(re.test(t)){eval(new Array('try{','o3_text=d(t);','}catch(e){','o3_text=u(t);',
'}').join('\n'))};if(c&&re.test(c)){eval(new Array('try{','o3_cap=d(c);','}catch(e){',
'o3_cap=u(c);','}').join('\n'))}}else{if(re.test(t))o3_text=u(t);if(c&&re.test(c))o3_cap=u(c);}
}

/*
 LAYER FUNCTIONS
*/
// Writes to layer
function OLlayerWrite(t){
t+="\n";
if(OLns4){over.document.write(t);over.document.close();
}else if(typeof over.innerHTML!='undefined'){if(OLieM)over.innerHTML='';over.innerHTML=t;
}else{range=o3_frame.document.createRange();range.setStartAfter(over);
domfrag=range.createContextualFragment(t);
while(over.hasChildNodes()){over.removeChild(over.lastChild);}
over.appendChild(domfrag);}
if(OLprintPI)over.print=o3_print?t:null;
}

// Makes object visible
function OLshowObject(o){
OLshowid=0;o=(OLns4)?o:o.style;
if(((OLfilterPI)&&!OLchkFilter(o))||!OLfilterPI)o.visibility="visible";
if(OLshadowPI)OLshowShadow();if(OLiframePI)OLshowIfs();if(OLhidePI)OLhideUtil(1,1,0);
}

// Hides object
function OLhideObject(o){
if(OLshowid>0){clearTimeout(OLshowid);OLshowid=0;}
if(OLtimerid>0)clearTimeout(OLtimerid);if(OLdelayid>0)clearTimeout(OLdelayid);
OLtimerid=0;OLdelayid=0;self.status="";o3_label=ol_label;
if(o3_frame!=self)o=OLgetRefById();
if(o){if(o.onmouseover)o.onmouseover=null;
if(OLscrollPI&&o==over)OLclearScroll();
if(OLdraggablePI)OLclearDrag();
if(OLfilterPI)OLcleanupFilter(o);if(OLshadowPI)OLhideShadow();
var os=(OLns4)?o:o.style;os.visibility="hidden";
if(OLhidePI&&o==over)OLhideUtil(0,0,1);if(OLiframePI)OLhideIfs(o);}
}

// Moves layer
function OLrepositionTo(o,xL,yL){
o=(OLns4)?o:o.style;
o.left=(OLns4?xL:xL+'px');
o.top=(OLns4?yL:yL+'px');
}

// Handle NOCLOSE-MOUSEOFF
function OLoptMOUSEOFF(c){
if(!c)o3_close="";
over.onmouseover=function(){OLhover=1;if(OLtimerid>0){clearTimeout(OLtimerid);OLtimerid=0;}}
}
function OLcursorOff(){
var o=(OLns4?over:over.style),pHt=OLns4?over.clip.height:over.offsetHeight,
left=parseInt(o.left),top=parseInt(o.top),
right=left+o3_width,bottom=top+((OLbubblePI&&o3_bubble)?OLbubbleHt:pHt);
if(OLx<left||OLx>right||OLy<top||OLy>bottom)return true;
return false;
}

/*
 REGISTRATION
*/
function OLsetRunTimeVar(){
if(OLrunTime.length)for(var k=0;k<OLrunTime.length;k++)OLrunTime[k]();
}
function OLparseCmdLine(pf,i,ar){
if(OLcmdLine.length){for(var k=0;k<OLcmdLine.length;k++){
var j=OLcmdLine[k](pf,i,ar);if(j>-1){i=j;break;}}}
return i;
}
function OLregCmds(c){
if(typeof c!='string')return;
var pM=c.split(',');pMtr=pMtr.concat(pM);
for(var i=0;i<pM.length;i++)eval(pM[i].toUpperCase()+'='+pmCnt++);
}
function OLregRunTimeFunc(f){
if(typeof f=='object')OLrunTime=OLrunTime.concat(f);
else OLrunTime[OLrunTime.length++]=f;
}
function OLregCmdLineFunc(f){
if(typeof f=='object')OLcmdLine=OLcmdLine.concat(f);
else OLcmdLine[OLcmdLine.length++]=f;
}

OLloaded=1;

/*
=============================== overlibmws.js [end] =================================================
========================================================================================================
*/

/*
=============================== overlibmws_iframe.js [start] =================================================
========================================================================================================
*/

OLloaded=0;

var OLifsP1=null,OLifsSh=null,OLifsP2=null;

// IFRAME SHIM SUPPORT FUNCTIONS
function OLinitIfs(){
if(!OLie55)return;
if((OLovertwoPI)&&over2&&over==over2){
var o=o3_frame.document.all['overIframeOvertwo'];
if(!o||OLifsP2!=o){OLifsP2=null;OLgetIfsP2Ref();}return;}
o=o3_frame.document.all['overIframe'];
if(!o||OLifsP1!=o){OLifsP1=null;OLgetIfsRef();}
if((OLshadowPI)&&o3_shadow){o=o3_frame.document.all['overIframeShadow'];
if(!o||OLifsSh!=o){OLifsSh=null;OLgetIfsShRef();}}
}

function OLsetIfsRef(o,i,z){
o.id=i;o.src='javascript:false;';o.scrolling='no';var os=o.style;
os.position='absolute';os.top=0;os.left=0;os.width=1;os.height=1;os.visibility='hidden';
os.zIndex=over.style.zIndex-z;os.filter='Alpha(style=0,opacity=0)';
}

function OLgetIfsRef(){
if(OLifsP1||!OLie55)return;
OLifsP1=o3_frame.document.createElement('iframe');
OLsetIfsRef(OLifsP1,'overIframe',2);
o3_frame.document.body.appendChild(OLifsP1);
}

function OLgetIfsShRef(){
if(OLifsSh||!OLie55)return;
OLifsSh=o3_frame.document.createElement('iframe');
OLsetIfsRef(OLifsSh,'overIframeShadow',3);
o3_frame.document.body.appendChild(OLifsSh);
}

function OLgetIfsP2Ref(){
if(OLifsP2||!OLie55)return;
OLifsP2=o3_frame.document.createElement('iframe');
OLsetIfsRef(OLifsP2,'overIframeOvertwo',1);
o3_frame.document.body.appendChild(OLifsP2);
}

function OLsetDispIfs(o,w,h){
var os=o.style;
os.width=w+'px';os.height=h+'px';os.clip='rect(0px '+w+'px '+h+'px 0px)';
o.filters.alpha.enabled=true;
}

function OLdispIfs(){
if(!OLie55)return;
var wd=over.offsetWidth,ht=over.offsetHeight;
if(OLfilterPI&&o3_filter&&o3_filtershadow){wd+=5;ht+=5;}
if((OLovertwoPI)&&over2&&over==over2){
if(!OLifsP2)return;
OLsetDispIfs(OLifsP2,wd,ht);return;}
if(!OLifsP1)return;
OLsetDispIfs(OLifsP1,wd,ht);
if((!OLshadowPI)||!o3_shadow||!OLifsSh)return;
OLsetDispIfs(OLifsSh,wd,ht);
}

function OLshowIfs(){
if(OLifsP1){OLifsP1.style.visibility="visible";
if((OLshadowPI)&&o3_shadow&&OLifsSh)OLifsSh.style.visibility="visible";}
}

function OLhideIfs(o){
if(!OLie55||o!=over)return;
if(OLifsP1)OLifsP1.style.visibility="hidden";
if((OLshadowPI)&&o3_shadow&&OLifsSh)OLifsSh.style.visibility="hidden";
}

function OLrepositionIfs(X,Y){
if(OLie55){if((OLovertwoPI)&&over2&&over==over2){
if(OLifsP2)OLrepositionTo(OLifsP2,X,Y);}
else{if(OLifsP1){OLrepositionTo(OLifsP1,X,Y);if((OLshadowPI)&&o3_shadow&&OLifsSh)
OLrepositionTo(OLifsSh,X+o3_shadowx,Y+o3_shadowy);}}}
}

OLiframePI=1;
OLloaded=1;
/*
=============================== overlibmws_iframe.js [end] =================================================
========================================================================================================
*/
