function NewCal(pCtrl,pFormat,pShowTime,pTimeMode)
{
	Cal=new Calendar(dtToday);
	if ((pShowTime!=null) && (pShowTime))
	{
		Cal.ShowTime=true;
		if ((pTimeMode!=null) &&((pTimeMode=='12')||(pTimeMode=='24')))
		{
			TimeMode=pTimeMode;
		}		
	}	
	if (pCtrl!=null)
		Cal.Ctrl=pCtrl;
	if (pFormat!=null)
		Cal.Format=pFormat.toUpperCase();
	
	exDateTime=document.getElementById(pCtrl).value;
	if (exDateTime!="")//Parse Date String
	{
		var Sp1;//Index of Date Separator 1
		var Sp2;//Index of Date Separator 2 
		var tSp1;//Index of Time Separator 1
		var tSp1;//Index of Time Separator 2
		var strMonth;
		var strDate;
		var strYear;
		var intMonth;
		var YearPattern;
		var strHour;
		var strMinute;
		var strSecond;
		//parse month
		Sp1=exDateTime.indexOf(DateSeparator,0)
		Sp2=exDateTime.indexOf(DateSeparator,(parseInt(Sp1)+1));
		
		if ((Cal.Format.toUpperCase()=="DDMMYYYY") || (Cal.Format.toUpperCase()=="DDMMMYYYY"))
		{
			strMonth=exDateTime.substring(Sp1+1,Sp2);
			strDate=exDateTime.substring(0,Sp1);
		}
		else if ((Cal.Format.toUpperCase()=="MMDDYYYY") || (Cal.Format.toUpperCase()=="MMMDDYYYY"))
		{
			strMonth=exDateTime.substring(0,Sp1);
			strDate=exDateTime.substring(Sp1+1,Sp2);
		}
		if (isNaN(strMonth))
			intMonth=Cal.GetMonthIndex(strMonth);
		else
			intMonth=parseInt(strMonth,10)-1;	
		if ((parseInt(intMonth,10)>=0) && (parseInt(intMonth,10)<12))
			Cal.Month=intMonth;
		//end parse month
		//parse Date
		if ((parseInt(strDate,10)<=Cal.GetMonDays()) && (parseInt(strDate,10)>=1))
			Cal.Date=strDate;
		//end parse Date
		//parse year
		strYear=exDateTime.substring(Sp2+1,Sp2+5);
		YearPattern=/^\d{4}$/;
		if (YearPattern.test(strYear))
			Cal.Year=parseInt(strYear,10);
		//end parse year
		//parse time
		if (Cal.ShowTime==true)
		{
			tSp1=exDateTime.indexOf(":",0)
			tSp2=exDateTime.indexOf(":",(parseInt(tSp1)+1));
			strHour=exDateTime.substring(tSp1,(tSp1)-2);
			Cal.SetHour(strHour);
			strMinute=exDateTime.substring(tSp1+1,tSp2);
			Cal.SetMinute(strMinute);
			strSecond=exDateTime.substring(tSp2+1,tSp2+3);
			Cal.SetSecond(strSecond);
		}	
	}
	winCal=window.open("","DateTimePicker","toolbar=0,status=0,menubar=0,fullscreen=no,width=300,height=300,resizable=0,top="+cnTop+",left="+cnLeft);
	docCal=winCal.document;
	RenderCal();
}

function RenderCal()
{
	var vCalHeader;
	var vCalData;
	var vCalTime;
	var i;
	var j;
	var SelectStr;
	var vDayCount=0;
	var vFirstDay;

	docCal.open();
	docCal.writeln("<html><head><title>"+WindowTitle+"</title><LINK href='" + ThemeStyleSheet +"' type='text/css' rel='stylesheet'>");
	
	docCal.writeln("<script>var winMain=window.opener;</script>");
	docCal.writeln("</head><body background='"+ThemeBg+"' link="+FontColor+" vlink="+FontColor+"><form name='Calendar'>");

	vCalHeader="<table border=1 cellpadding=1 cellspacing=1 width='100%' Height='100%' align=\"center\" valign=\"top\">\n";
	//Month Selector
	vCalHeader+="<tr>\n<td colspan='7'><table border=0 width='100%' cellpadding=0 cellspacing=0><tr><td align='left'>\n";
	vCalHeader+="<select name=\"MonthSelector\" onChange=\"javascript:winMain.Cal.SwitchMth(this.selectedIndex);winMain.RenderCal();\">\n";
	for (i=0;i<12;i++)
	{
		if (i==Cal.Month)
			SelectStr="Selected";
		else
			SelectStr="";	
		vCalHeader+="<option "+SelectStr+" value >"+MonthName[i]+"\n";
	}
	vCalHeader+="</select></td>";
	//Year selector
	vCalHeader+="\n<td align='right'><a href=\"javascript:winMain.Cal.DecYear();winMain.RenderCal()\"><b><font color=\""+YrSelColor+"\"><</font></b></a><font face=\"Verdana\" color=\""+YrSelColor+"\" size=2><b> "+Cal.Year+" </b></font><a href=\"javascript:winMain.Cal.IncYear();winMain.RenderCal()\"><b><font color=\""+YrSelColor+"\">></font></b></a></td></tr></table></td>\n";	
	vCalHeader+="</tr>";
	//Calendar header shows Month and Year
	if (ShowMonthYear)
		vCalHeader+="<tr><td colspan='7'><font face='Verdana' size='2' align='center' color='"+MonthYearColor+"'><b>"+Cal.GetMonthName(ShowLongMonth)+" "+Cal.Year+"</b></font></td></tr>\n";
	//Week day header
	vCalHeader+="<tr bgcolor="+WeekHeadColor+">";
	for (i=0;i<7;i++)
	{
		vCalHeader+="<td align='center'><font face='Verdana' size='2'>"+WeekDayName[i].substr(0,WeekChar)+"</font></td>";
	}
	vCalHeader+="</tr>";	
	docCal.write(vCalHeader);
	
	//Calendar detail
	CalDate=new Date(Cal.Year,Cal.Month);
	CalDate.setDate(1);
	vFirstDay=CalDate.getDay();
	vCalData="<tr>";
	for (i=0;i<vFirstDay;i++)
	{
		vCalData=vCalData+GenCell();
		vDayCount=vDayCount+1;
	}
	for (j=1;j<=Cal.GetMonDays();j++)
	{
		var strCell;
		vDayCount=vDayCount+1;
		if ((j==dtToday.getDate())&&(Cal.Month==dtToday.getMonth())&&(Cal.Year==dtToday.getFullYear()))
			strCell=GenCell(j,true,TodayColor);//Highlight today's date
		else
		{
			if (j==Cal.Date)
			{
				strCell=GenCell(j,true,SelDateColor);
			}
			else
			{	 
				if (vDayCount%7==0)
					strCell=GenCell(j,false,SaturdayColor);
				else if ((vDayCount+6)%7==0)
					strCell=GenCell(j,false,SundayColor);
				else
					strCell=GenCell(j,null,WeekDayColor);
			}		
		}						
		vCalData=vCalData+strCell;

		if((vDayCount%7==0)&&(j<Cal.GetMonDays()))
		{
			vCalData=vCalData+"</tr>\n<tr>";
		}
	}
	docCal.writeln(vCalData);	
	//Time picker
	if (Cal.ShowTime)
	{
		var showHour;
		showHour=Cal.getShowHour();		
		vCalTime="<tr>\n<td colspan='7' align='center'>";
		vCalTime+="<input type='text' name='hour' maxlength=2 size=1 style=\"WIDTH: 22px\" value="+showHour+" onchange=\"javascript:winMain.Cal.SetHour(this.value)\">";
		vCalTime+=" : ";
		vCalTime+="<input type='text' name='minute' maxlength=2 size=1 style=\"WIDTH: 22px\" value="+Cal.Minutes+" onchange=\"javascript:winMain.Cal.SetMinute(this.value)\">";
		vCalTime+=" : ";
		vCalTime+="<input type='text' name='second' maxlength=2 size=1 style=\"WIDTH: 22px\" value="+Cal.Seconds+" onchange=\"javascript:winMain.Cal.SetSecond(this.value)\">";
		if (TimeMode==12)
		{
			var SelectAm =(parseInt(Cal.Hours,10)<12)? "Selected":"";
			var SelectPm =(parseInt(Cal.Hours,10)>=12)? "Selected":"";

			vCalTime+="<select name=\"ampm\" onchange=\"javascript:winMain.Cal.SetAmPm(this.options[this.selectedIndex].value);\">";
			vCalTime+="<option "+SelectAm+" value=\"AM\">AM</option>";
			vCalTime+="<option "+SelectPm+" value=\"PM\">PM<option>";
			vCalTime+="</select>";
		}	
		vCalTime+="\n</td>\n</tr>";
		docCal.write(vCalTime);
	}	
	//end time picker
	docCal.writeln("\n</table>");
	docCal.writeln("</form></body></html>");
	docCal.close();
}

function GenCell(pValue,pHighLight,pColor)//Generate table cell with value
{
	var PValue;
	var PCellStr;
	var vColor;
	var vHLstr1;//HighLight string
	var vHlstr2;
	var vTimeStr;
	
	if (pValue==null)
		PValue="";
	else
		PValue=pValue;
	
	if (pColor!=null)
		vColor="bgcolor=\""+pColor+"\"";
	else
		vColor="";	
	if ((pHighLight!=null)&&(pHighLight))
		{vHLstr1="color='red'><b>";vHLstr2="</b>";}
	else
		{vHLstr1=">";vHLstr2="";}	
	
	if (Cal.ShowTime)
	{
		vTimeStr="winMain.document.getElementById('"+Cal.Ctrl+"').value+=' '+"+"winMain.Cal.getShowHour()"+"+':'+"+"winMain.Cal.Minutes"+"+':'+"+"winMain.Cal.Seconds";
		if (TimeMode==12)
			vTimeStr+="+' '+winMain.Cal.AMorPM";
	}	
	else
		vTimeStr="";		
	PCellStr="<td "+vColor+" width="+CellWidth+" align='center'><font face='verdana' size='2'"+vHLstr1+"<a href=\"javascript:winMain.document.getElementById('"+Cal.Ctrl+"').value='"+Cal.FormatDate(PValue)+"';"+vTimeStr+";window.close();\">"+PValue+"</a>"+vHLstr2+"</font></td>";
	return PCellStr;
}

function Calendar(pDate,pCtrl)
{
	//Properties
	this.Date=pDate.getDate();//selected date
	this.Month=pDate.getMonth();//selected month number
	this.Year=pDate.getFullYear();//selected year in 4 digits
	this.Hours=pDate.getHours();	
	
	if (pDate.getMinutes()<10)
		this.Minutes="0"+pDate.getMinutes();
	else
		this.Minutes=pDate.getMinutes();
	
	if (pDate.getSeconds()<10)
		this.Seconds="0"+pDate.getSeconds();
	else		
		this.Seconds=pDate.getSeconds();
		
	this.MyWindow=winCal;
	this.Ctrl=pCtrl;
	this.Format="ddMMyyyy";
	this.Separator=DateSeparator;
	this.ShowTime=false;
	if (pDate.getHours()<12)
		this.AMorPM="AM";
	else
		this.AMorPM="PM";	
}

function GetMonthIndex(shortMonthName)
{
	for (i=0;i<12;i++)
	{
		if (MonthName[i].substring(0,3).toUpperCase()==shortMonthName.toUpperCase())
		{	return i;}
	}
}
Calendar.prototype.GetMonthIndex=GetMonthIndex;

function IncYear()
{	Cal.Year++;}
Calendar.prototype.IncYear=IncYear;

function DecYear()
{	Cal.Year--;}
Calendar.prototype.DecYear=DecYear;
	
function SwitchMth(intMth)
{	Cal.Month=intMth;}
Calendar.prototype.SwitchMth=SwitchMth;

function SetHour(intHour)
{	
	var MaxHour;
	var MinHour;
	if (TimeMode==24)
	{	MaxHour=23;MinHour=0}
	else if (TimeMode==12)
	{	MaxHour=12;MinHour=1}
	else
		alert("TimeMode can only be 12 or 24");		
	var HourExp=new RegExp("^\\d\\d$");
	if (HourExp.test(intHour) && (parseInt(intHour,10)<=MaxHour) && (parseInt(intHour,10)>=MinHour))
	{	
		if ((TimeMode==12) && (Cal.AMorPM=="PM"))
		{
			if (parseInt(intHour,10)==12)
				Cal.Hours=12;
			else	
				Cal.Hours=parseInt(intHour,10)+12;
		}	
		else if ((TimeMode==12) && (Cal.AMorPM=="AM"))
		{
			if (intHour==12)
				intHour-=12;
			Cal.Hours=parseInt(intHour,10);
		}
		else if (TimeMode==24)
			Cal.Hours=parseInt(intHour,10);	
	}
}
Calendar.prototype.SetHour=SetHour;

function SetMinute(intMin)
{
	var MinExp=new RegExp("^\\d\\d$");
	if (MinExp.test(intMin) && (intMin<60))
		Cal.Minutes=intMin;
}
Calendar.prototype.SetMinute=SetMinute;

function SetSecond(intSec)
{	
	var SecExp=new RegExp("^\\d\\d$");
	if (SecExp.test(intSec) && (intSec<60))
		Cal.Seconds=intSec;
}
Calendar.prototype.SetSecond=SetSecond;

function SetAmPm(pvalue)
{
	this.AMorPM=pvalue;
	if (pvalue=="PM")
	{
		this.Hours=(parseInt(this.Hours,10))+12;
		if (this.Hours==24)
			this.Hours=12;
	}	
	else if (pvalue=="AM")
		this.Hours-=12;	
}
Calendar.prototype.SetAmPm=SetAmPm;

function getShowHour()
{
	var finalHour;
    if (TimeMode==12)
    {
    	if (parseInt(this.Hours,10)==0)
		{
			this.AMorPM="AM";
			finalHour=parseInt(this.Hours,10)+12;	
		}
		else if (parseInt(this.Hours,10)==12)
		{
			this.AMorPM="PM";
			finalHour=12;
		}		
		else if (this.Hours>12)
		{
			this.AMorPM="PM";
			if ((this.Hours-12)<10)
				finalHour="0"+((parseInt(this.Hours,10))-12);
			else
				finalHour=parseInt(this.Hours,10)-12;	
		}
		else
		{
			this.AMorPM="AM";
			if (this.Hours<10)
				finalHour="0"+parseInt(this.Hours,10);
			else
				finalHour=this.Hours;	
		}
	}
	else if (TimeMode==24)
	{
		if (this.Hours<10)
			finalHour="0"+parseInt(this.Hours,10);
		else	
			finalHour=this.Hours;
	}	
	return finalHour;	
}				
Calendar.prototype.getShowHour=getShowHour;		

function GetMonthName(IsLong)
{
	var Month=MonthName[this.Month];
	if (IsLong)
		return Month;
	else
		return Month.substr(0,3);
}
Calendar.prototype.GetMonthName=GetMonthName;

function GetMonDays()//Get number of days in a month
{
	var DaysInMonth=[31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
	if (this.IsLeapYear())
	{
		DaysInMonth[1]=29;
	}	
	return DaysInMonth[this.Month];	
}
Calendar.prototype.GetMonDays=GetMonDays;

function IsLeapYear()
{
	if ((this.Year%4)==0)
	{
		if ((this.Year%100==0) && (this.Year%400)!=0)
		{
			return false;
		}
		else
		{
			return true;
		}
	}
	else
	{
		return false;
	}
}
Calendar.prototype.IsLeapYear=IsLeapYear;

function FormatDate(pDate)
{
	if (this.Format.toUpperCase()=="DDMMYYYY")
		return (pDate+DateSeparator+(this.Month+1)+DateSeparator+this.Year);
	else if (this.Format.toUpperCase()=="DDMMMYYYY")
		return (pDate+DateSeparator+this.GetMonthName(false)+DateSeparator+this.Year);
	else if (this.Format.toUpperCase()=="MMDDYYYY")
		return ((this.Month+1)+DateSeparator+pDate+DateSeparator+this.Year);
	else if (this.Format.toUpperCase()=="MMMDDYYYY")
		return (this.GetMonthName(false)+DateSeparator+pDate+DateSeparator+this.Year);			
}
Calendar.prototype.FormatDate=FormatDate;


//From here starts the functionalities not related to date Calendar



		if (showLookup==true)
		{
			var returnValue=window.showModalDialog('../LookupHost.aspx'); 
			if(returnValue != null && returnValue!='|')
			{
				var splitArr=returnValue.split('|');
		
				if (splitArr.length>0)
				{
				if (document.getElementById(containerName)!=null)
					document.getElementById(containerName).value = splitArr[0];
				}
					
				if(splitArr.length>1)
				{
				if (document.getElementById(ContainerValueName)!=null)
					document.getElementById(ContainerValueName).value = splitArr[1];
				}
			}
			showLookup=false
		}

function assignValue(name,value)
{
	document.getElementById(name).value = value
}

function readValue(name)
{
	return(document.getElementById(name).value)
}


		
		function AddQuantityandTotal(txtQuantity,txtValue,txtTotal)
		{
			if (IsNumeric(txtQuantity.value) && IsNumeric(txtValue.value))
			{
				txtTotal.value = txtValue.value * txtQuantity.value
			}
			else
			{
				txtTotal.value = ""
				txtNetPay.value = ""
			}
		}
		
		function AddQuantityandTotalwithDiscount(txtQuantity,txtValue,txtDiscount,txtNetPay, txtTotal)
		{
			if (IsNumeric(txtQuantity.value) && IsNumeric(txtValue.value))
			{
				txtTotal.value = txtValue.value * txtQuantity.value
				txtNetPay.value = txtTotal.value - (txtTotal.value * txtDiscount.value/100)
			}
			else
			{
				txtTotal.value = ""
				txtNetPay.value = ""
			}
		}

		
		function AddIDs(IDs,totalID)
		{
			var ArrIDs, total=0
			ArrIDs = IDs.split(",")
			for(var i=0;i<ArrIDs.length;i++)
			{
				if(document.getElementById(ArrIDs[i]) !=null)
				{
					if (document.getElementById(ArrIDs[i]).value!="")
						total = parseFloat(total) + parseFloat(document.getElementById(ArrIDs[i]).value);
				}
			}
			
			document.getElementById(totalID).value = total;
		}
		
		function handlelookupReturnDataModal(valueId, textId,openPage,valueStr,BtnID,ClickorChange)
		{
			var returnedData;
			if (document.getElementById(textId).value=="")
			{
				document.getElementById(valueId).value="";
				if (ClickorChange=="change")
				{
					document.getElementById(BtnID).focus();
					return;
				}
			}

			valueStr = eval(valueStr);
			
			openPage = openPage.replace("[[VALUESTR]]",valueStr);
			openPage = openPage.replace("[[SEARCHSTR]]",document.getElementById(textId).value);
			openPage = openPage.replace("[[CURRENTVALUE]]",document.getElementById(valueId).value);
			returnedData = window.showModalDialog(openPage);


			if(returnedData==null)
			return(false);

			var retnArr;
			retnArr = returnedData.split("|*|");

			if (retnArr.length >= 0)
				document.getElementById(textId).value = retnArr[0];


			if (retnArr.length > 0)
				document.getElementById(valueId).value = retnArr[1];

			return(false);

		}
		
		function handlelookupReturnData(valueId, textId,openPage,valueStr,BtnID,ClickorChange)
		{
			valueStr = eval(valueStr);
			openPage = openPage.replace("[[VALUESTR]]",valueStr);
			openPage = openPage.replace("[[CURRENTVALUE]]",document.getElementById(valueId).value);
			openPage = openPage.replace("[[SEARCHSTR]]",document.getElementById(textId).value);
			open_win(openPage);
		}


		function deleteCurrentItem(textId,valueId,listId)
		{
			var listbox = document.all.item(listId);
			if ((listbox.selectedIndex!=-1) && (listbox.length!=0))
			{
				listbox.options[listbox.selectedIndex]=null;
				var i;
				var txtvalue=document.getElementById(valueId)
				txtvalue.value=""
				document.getElementById(textId).value=""
				for(i=0;i<listbox.length;i++)
				{
					if (i==0)
						txtvalue.value = listbox.options[i].value
					else
						txtvalue.value = txtvalue.value + "," + listbox.options[i].value
				}
			}		
		}


		

		function transferlistbox(origlistbox, destlistbox)
		{
			var i,opt;
			destlistbox.length=0;
			for (i=0;i<origlistbox.length;i++)
			{
				opt = new Option(origlistbox.options[i].text, origlistbox.options[i].value); 
				destlistbox.add(opt)
			}
		}
		
		function FillListbox(valueId,textValues,listID)
		{			
			var valueObj = document.getElementById(valueId);
			//var textObj = document.getElementById(textId);
			var listObj = document.all.item(listID);
			
			listObj.length = 0;
			var valueArr=valueObj.value.split(",");
			var textArr=textValues.split(",");
			var i,opt;
			for(i=0;i<valueArr.length;i++)
			{
				if (valueArr[i]!="")
				{
					opt = new Option(DeriveValueFromArray(textArr,i),valueArr[i])
					listObj.add(opt)
				}
			}
			return;
		}

		function MakeDropdownsVisible(Visible)
		{
			var obj,i,hidVar;
			if(Visible==true)
				hidVar="VISIBLE"
			else
				hidVar="HIDDEN"
				
			for(i=0;i<document.all.length ;i++)
			{
				if (document.all.item(i).type=="select-one")
					document.all.item(i).style.visibility=hidVar
			}
			
		}
		
		function DeriveValueFromArray(DateArr,Pos)
		{
			if (DateArr.length>Pos)
			return(DateArr[Pos])
		else
			return("")
		}

//DATE VALIDATION FUNCTIONS

function ValidateDate(dateObj)
{
	var monthArr = ["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];
	var sepArr = ["-",".","/"," "];
	
	var dateValue = dateObj.value
	
	if (dateValue=="")
		return(true);
		
	var dateValueArr,i,seperator,retnValue;
	seperator = ""
	
	for (i=0;i<sepArr.length;i++)
	{
		if (dateValue.indexOf(sepArr[i])>0)
		{
			seperator=sepArr[i];	
		}
	}
	if (seperator=="")
	{
		alert("Invalid Date")
		alert("(Seperator) - Invalid Dateformat.it should be dd-mmm-yyyy(31-DEC-9999) format")
		dateObj.focus
		return(false)
	}
	
	dateValueArr = dateValue.split(seperator)
	
	if (dateValueArr.length < 3)
	{
		alert("Invalid Date")
		alert("Invalid Dateformat.it should be dd-mmm-yyyy(31-DEC-9999) format")
		return(false)
	}
	
	var tDay, tMonth, tYear, tMonthchar=false
	
	tDay = dateValueArr[0]
	tMonth = dateValueArr[1]
	tYear = dateValueArr[2]

	for (i=0;i<monthArr.length;i++)
	{
		if (monthArr[i].toUpperCase() == tMonth.toUpperCase())
		{
			tMonthchar=true
			break;
		}

		if (monthArr[i].toUpperCase() == tDay.toUpperCase())
		{
			tMonthchar=true;
			tmonth=tDay;
			tDay = dateValueArr[1];
			break;
		}
	}
	
	if(parseFloat(tDay)>31 || parseFloat(tDay)<0 ||isNaN(tDay)) 
	{
		alert("Invalid Date")
		dateObj.value=""
		return(false)		
	}

	if (tMonthchar==true)
	{
		if(tMonth.toUpperCase()=="FEB")
		{
			if(CheckleapYearDay(tDay,tYear)==false)
			{
				dateObj.value=""
				return(false)
			}
		}
		dateObj.value =  tDay + '-' + tMonth + '-' + tYear
		return(true);
	}
	
	var temp
	if(parseFloat(tMonth)>12)
	{
		if (parseFloat(tDay)<=12)
		{
			temp = tDay
			tDay = tMonth
			tMonth = temp
		}
	}
	
	if ((parseFloat(tMonth)>12 || parseFloat(tMonth)<=0 ||isNaN(parseFloat(tMonth))))
	{	
		alert("Invalid Date")
		dateObj.value=""
		return
	}
	
	if (parseFloat(tMonth)==2)
	{
		if(CheckleapYearDay(tDay,tYear)==false)
		{
			dateObj.value=""
			return(false)
		}
	}
		
	dateObj.value = tDay + '-' + monthArr[tMonth-1] + '-' + tYear
	return(true)
		
}

function CheckleapYearDay(tDay,tYear)
{
	var leapYear = CheckLeapYear(tYear)
	if (leapYear)
		{
			if(parseFloat(tDay)>29)
			{
				alert("Invalid Date")
				return(false)		
			}
		}
		else
		{
			if(parseFloat(tDay)>28)
			{
				alert("Invalid Date")
				return(false)		
			}
		}
		return(true)
}


function CheckLeapYear(Year)
{
	if ((Year%4)==0)
	{
		if ((Year%100==0) && (Year%400)!=0)
		{
			return false;
		}
		else
		{
			return true;
		}
	}
	else
	{
		return false;
	}
}
///////////////////////



		function open_win(what_link)
		{ 
			window.open(what_link,"Selection","menubar=no;scrollbars=yes");
			return;
			var the_url = what_link
			var the_x = 1024;
			var the_y = 750;
			the_x -= 0;
			the_y -= 0;
			var how_wide = screen.availWidth;
			var how_high = screen.availHeight;
			if(what_link != ""){the_url=what_link;}
			var the_toolbar = "no";
			var the_addressbar = "no";
			var the_directories = "no";
			var the_statusbar = "yes";
			var the_menubar = "no";
			var the_scrollbars = "yes";
			var the_do_resize =  "yes";
			var the_copy_history = "no";
			top_pos = 10//(how_high/2) -  (the_y/2);
			left_pos = (how_wide/2) -  (the_x/2);
			if (window.outerWidth )
			{
				var option = "toolbar="+the_toolbar+",location="+the_addressbar+",directories="+the_directories+",status="+the_statusbar+",menubar="+the_menubar+",scrollbars="+the_scrollbars+",resizable="+the_do_resize+",outerWidth="+the_x+",outerHeight="+the_y+",copyhistory="+the_copy_history+",left="+left_pos+",top="+top_pos;
				site=open(the_url, "DisplayWindow", option);
				var Opera = (navigator.userAgent.indexOf('Opera') != -1);
				if(Opera)
				{
				site.resizeTo(the_x,the_y);
				site.moveTo(0,0);
				}
			}
			else
			{
				var option = "toolbar="+the_toolbar+",location="+the_addressbar+",directories="+the_directories+",status="+the_statusbar+",menubar="+the_menubar+",scrollbars="+the_scrollbars+",resizable="+the_do_resize+",Width="+the_x+",Height="+the_y-200+",copyhistory="+the_copy_history+",left="+left_pos+",top="+top_pos;
				site=open('', "DisplayWindow", option);
				site.location=the_url;
				if(site.open){site.focus();return false;}
				site.resizeTo(the_x,the_y);
			}
		} 
		// --> 


		//Function to check a value is numeric
		function IsNumeric(sText)
		{
		var ValidChars = "0123456789.";
		var IsNumber=true;
		var Char;

		 
		for (i = 0; i < sText.length && IsNumber == true; i++) 
			{ 
			Char = sText.charAt(i); 
			if (ValidChars.indexOf(Char) == -1) 
				{
				IsNumber = false;
				}
			}
		return(IsNumber);
		   
		}
		
		//Setting focus if Required
		if (setFocus==true)
		{
			if(objSetFocus!=null)
			{
				document.getElementById(objSetFocus).focus();
				document.getElementById(objSetFocus).select();
				objSetFocus = null;
			}
			setFocus = false
		}


//DATE VALIDATION FUNCTIONS

function ValidateDate(dateObj)
{
	var leapYear
	var monthArr = ["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];
	var sepArr = ["-",".","/"," "];
	
	var dateValue = dateObj.value
	
	if (dateValue=="")
		return(true);
		
	var dateValueArr,i,seperator,retnValue;
	seperator = ""
	
	for (i=0;i<sepArr.length;i++)
	{
		if (dateValue.indexOf(sepArr[i])>0)
		{
			seperator=sepArr[i];	
		}
	}
	if (seperator=="")
	{
		alert("Invalid Date")
		alert("(Seperator) - Invalid Dateformat.it should be dd-mmm-yyyy(31-DEC-9999) format")
		dateObj.focus
		return(false)
	}
	
	dateValueArr = dateValue.split(seperator)
	
	if (dateValueArr.length < 3)
	{
		alert("Invalid Date")
		alert("Invalid Dateformat.it should be dd-mmm-yyyy(31-DEC-9999) format")
		return(false)
	}
	
	var tDay, tMonth, tYear, tMonthchar=false
	
	tDay = dateValueArr[0]
	tMonth = dateValueArr[1]
	tYear = dateValueArr[2]
	
	leapYear = CheckLeapYear(tYear)

	for (i=0;i<monthArr.length;i++)
	{
		if (monthArr[i].toUpperCase() == tMonth.toUpperCase())
		{
			tMonthchar=true
			break;
		}

		if (monthArr[i].toUpperCase() == tDay.toUpperCase())
		{
			tMonthchar=true;
			tmonth=tDay;
			tDay = dateValueArr[1];
			break;
		}
	}
	
	if(parseInt(tDay)>31 || parseInt(tDay)<0 ||isNaN(tDay)) 
	{
		alert("Invalid Date")
		dateObj.value=""
		return(false)		
	}

	if (tMonthchar==true)
	{
		if(tMonth.toUpperCase()=="FEB")
		{
			if(CheckleapYearDay(tDay,leapYear)==false)
			{
				dateObj.value=""
				return(false)
			}
		}
		dateObj.value =  tDay + '-' + tMonth + '-' + tYear
		return(true);
	}
	
	if (!(tMonth=="09" || tMonth=="08") && (parseInt(tMonth)>12 || parseInt(tMonth)<=0 ||isNaN(parseInt(tMonth))))
	{	
		alert("Invalid Date")
		dateObj.value=""
		return
	}
	
	if (parseInt(tMonth)==2)
	{
		if(CheckleapYearDay(tDay,leapYear)==false)
		{
			dateObj.value=""
			return(false)
		}
	}
		
	dateObj.value = tDay + '-' + monthArr[tMonth-1] + '-' + tYear
	return(true)
		
}

function CheckleapYearDay(tDay,leapYear)
{
	if (leapYear)
		{
			if(parseInt(tDay)>29)
			{
				alert("Invalid Date")
				return(false)		
			}
		}
		else
		{
			if(parseInt(tDay)>28)
			{
				alert("Invalid Date")
				return(false)		
			}
		}
		return(true)
}


function CheckLeapYear(Year)
{
	if ((Year%4)==0)
	{
		if ((Year%100==0) && (Year%400)!=0)
		{
			return false;
		}
		else
		{
			return true;
		}
	}
	else
	{
		return false;
	}
}

function onPressKey(e,idtofocusNext,idtofocusPrevious)
{
	var KeyPressActive 
	
	var isIE = document.all?true:false;
	var isNS = document.layers?true:false;
	
	var key = (isIE) ? window.event.keyCode : e.which;
	
	var k = 1
	var idtoFocus
	switch(key)
	{
	case 38:
		idtoFocus = idtofocusPrevious
		break
	case 40:
		idtoFocus = idtofocusNext
		break
	//case 37:
	//	index2 = parseInt(index2) - 1		
	//	k = (currentObj.value.length==0)?1:0
	//	break
	//case 39:
	//	index2 = parseInt(index2) + 1
	//	k = (currentObj.value.length==0)?1:0
	//	break
	}
	var itemtofocus = document.getElementById(idtoFocus)
	if (itemtofocus==null)
		return
		
	try {
		itemtofocus.focus()
		}
	catch(catchvar)
		{
			return
		}
}

function clear_value() 
{ 
obj = window.event.srcElement; 
obj.setAttribute("persistValue",""); 
} 

function divert_entry(obj) 
{ 
//obj = window.event.srcElement; 
//debugger; 
if (obj.getAttribute("persistValue") == null) 
obj.setAttribute("persistValue",""); 
var iKey; 
var eAny_Event = window.event; 

iKey = eAny_Event.keyCode; 

var sChr = String.fromCharCode(iKey); 

if (iKey >=37  && iKey <= 40) 
{ 
obj.setAttribute("persistValue",""); 
status="";
eAny_Event.returnValue = iKey; 
return(true);
} 

if (iKey == 13 || iKey == 9) 
{ 
obj.setAttribute("persistValue","");
status ="";
return true; 
} 

if (iKey == 8) 
{ 
sDelete_Chr = obj.getAttribute("persistValue"); 
obj.setAttribute("persistValue", sDelete_Chr.substring(0,sDelete_Chr.length - 1)); 
sChr = ''; 
eAny_Event.returnValue = false;
} 

obj.setAttribute("persistValue",obj.getAttribute("persistValue") + sChr); 
lookupItem(obj); 

if (iKey > 33 && iKey < 255) // (iKey == 8)) && (iKey ! = 40) && (iKey != 38)) 
eAny_Event.returnValue = false; 
} 

function lookupItem(obj) 
{ 

var sCurValue = obj.getAttribute("persistValue").toLowerCase(); 
var bFound = false; 
var iIndex = obj.selectedIndex; 
var iNumOptions = obj.options.length; 
var iPos = 0; 
// Repeat until found or end of list is reached 
while ((!bFound) && (iPos < iNumOptions)) 
{ 
// Do comparisons in lowercase 
bFound = (obj.options[iPos].text.toLowerCase().indexOf(sCurValue)==0) ; 
if (bFound) 
iIndex = iPos; 
iPos++; 
} 
status=obj.getAttribute("persistValue");
if (bFound) 
// Updated listbox 
	{
	obj.selectedIndex = iIndex; 
	}
} 


function DropdownControl_onkeydown(scontrolname,bRedo) {
	
	var skey;
	var thecontrol;
	var n, min, max, cmp;
	var scmpstr;
	var schar;
	var llength;
	skey = ('' + document.getElementById(scontrolname + 'Search').value).toUpperCase();  // Retrieve the previous Charactors pressed
	schar = String.fromCharCode(event.keyCode); // The new key pressed
	if (event.keyCode == 8) // Check for Backspace
	{	
		skey = skey.substr(0,skey.length-1);
	}
	else
	{
		if ((event.keyCode == 38) || (event.keyCode == 40))  // Check for up and down keys
		{
			document.getElementById(scontrolname + 'Search').value = '';
			return false;
			
		}
		else
		{
			if (((schar >= 'A') && (schar <= 'Z')) || ((schar >= '0') && (schar <= '9'))) // Check for any Alphanumberic or Numberic Character
			{
				skey = skey + schar;
			}
			else
			{
				return 0;
			}
		}
	}
	llength = skey.length; // length of pressed charactors
	thecontrol = document.getElementById(scontrolname);
	
	// init for bubble sort
	min = 0;
	max = thecontrol.options.length - 1;
	n = Math.floor(max / 2); 
    // do bubble sort on values
    while (min < max) 
    { 
		// compare against value in position n
		scmpstr = (thecontrol.options[n].text).toUpperCase();
        // compare the pressed keys with the current item of selection
        if (skey == scmpstr)
        {	
			min = n;
			max = n;
        }
        else
        {
			if (skey < scmpstr) 
			    max = n; 
			else 
			    min = n + 1; 
				n = Math.floor((min + max) / 2);
        }
    } 
    event.returnValue = 0;
    
    // set the value to the selected item (n);
	thecontrol.selectedIndex = n;
	
	// for remembering the keys.  If the selected item is same as selected values,
	// then remember the whole string, else init to just last charactor pressed 
	scmpstr = (thecontrol.options[n].text).toUpperCase();
	if (scmpstr.substr(0,llength) != skey)
	{
		skey = schar;
	}
	
	// set remember control, to last pressed keys
	document.getElementById(scontrolname + 'Search').value = skey;
	
}

///////////////////////


function verifythiscontrol(thiscontrol)
{
if ((thiscontrol.value.length!=7))
	{
	alert('Length of the number must be Seven (7)')
	thiscontrol.focus; return(false)
	}
	return(true);
}


