var winCal;
var autosgdiv;
var dtToday=new Date();
var Cal;
var docCal;
var pfcall;
var MonthName=["January", "February", "March", "April", "May", "June","July",
	"August", "September", "October", "November", "December"];
var WeekDayName=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];
var exDateTime;//Existing Date and Time

//Configurable parameters
var WeekChar=1;//number of character for week day. if 2 then Mo,Tu,We. if 3 then Mon,Tue,Wed.
var CellWidth=20;//Width of day cell.  tb delet rahul
var DateSeparator="-";//Date Separator, you can change it to "/" if you want.
var ShowLongMonth=true;//Show long month name in Calendar header. example: "January".
var ShowMonthYear=true;//Show Month and Year in Calendar header.
var MonthYearColor="#cc0033";//Font Color of Month and Year in Calendar header.
var WeekHeadColor="#d8deee";//Background Color in Week header.  tb delet rahul
var SundayColor="white";//Background color of Sunday.
var SaturdayColor="white";//Background color of Saturday.
var WeekDayColor="white";//Background color of weekdays.
var FontColor="blue";//color of font in Calendar day cell.
var TodayColor="#119acc";//Background color of today.
var SelDateColor="#119acc";//Backgrond color of selected date in textbox.
var YrSelColor="#555555";//color of font of Year selector.  tb delete rahul
var ThemeBg="";//Background image of Calendar window.
//end Configurable parameters
//end Global variable
function NewCal(pCtrl,pFormat,divName,FutureDt,pfd, autodiv){

	document.getElementById(divName).style.zIndex = 3;

	if(autodiv != '' && document.getElementById(autodiv) != undefined) {
		hideDiv(autodiv);
	}

	winCal = divName;
	autosgdiv = autodiv;
	document.getElementById(winCal).style.display='block';
	document.getElementById(winCal).style.visibility='visible';
	Cal=new Calendar(dtToday);

	if(document.getElementById(pCtrl))
	{
		var dateVal = document.getElementById(pCtrl).value;
		if(dateVal)
		{
			dateValArr1 = dateVal.split(' ');
			dateValArr = dateValArr1['0'].split('-');
			dtExisting = new Date();
			dtExisting.setFullYear(dateValArr[0],dateValArr[1]-1,dateValArr[2]);
			if(dtExisting<dtToday)
			{
				Cal=new Calendar(dtExisting);
			}
		}
	}

	if (pCtrl!=null)
		Cal.Ctrl=pCtrl;


	Cal.pfcall="";
	if(pfd){
		Cal.pfcall=pfd;
	}

	if (pFormat!=null)
		Cal.Format=pFormat.toUpperCase();
		RenderCal(FutureDt);

	if(autosgdiv != '' && document.getElementById(autosgdiv) != undefined) {
		showDiv(autosgdiv);
	}
}
function RenderCal(FutureDt)
{
	var vCalHeader;
	var vCalData;
	var vCalTime;
	var i;
	var j;
	var SelectStr;
	var vDayCount=0;
	var vFirstDay;

	vCalHeader="<div class='txt_12_blue align_r pad_5 mPtr' onclick='hideDiv(\""+winCal+"\");"
	if(autosgdiv != '' && document.getElementById(autosgdiv) != undefined) {
		vCalHeader+="showDiv(autosgdiv);";
	}
	vCalHeader+="'><b>Close</b></div><div class='align_c pad_b_5'>\n";
	vCalHeader+="<select name=\"MonthSelector\" onChange=\"javascript:Cal.SwitchMth(this.selectedIndex);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>";
	//Year selector
	vCalHeader += "\n &nbsp;&nbsp;&nbsp;<a href=\"javascript:Cal.DecYear();RenderCal();\" ><b> << </b></a> &nbsp;<b> "+Cal.Year+" </b> &nbsp; <a href=\"javascript:Cal.IncYear();RenderCal();\" ><b> >> </b></a></div><table cellpadding='0' cellspacing='0' >\n";

	if (ShowMonthYear)
		vCalHeader += "<tr><td></td><td></td></tr>\n";
	//Week day header
	vCalHeader += "<tr ><td class='WeekHeadColor'></td>";
	for (i=0;i<7;i++)
	{
		vCalHeader += "<td class='WeekHeadColor'><b>"+WeekDayName[i].substr(0,WeekChar)+"</b></td>";
	}
	vCalHeader += "<td class='WeekHeadColor'></td></tr>";
	divcal = vCalHeader;
	//Calendar detail
	CalDate=new Date(Cal.Year,Cal.Month);
	CalDate.setDate(1);
	vFirstDay=CalDate.getDay();
	vCalData="<tr><td width='10px'></td>";
	for (i=0;i<vFirstDay;i++)
	{
		vCalData=vCalData+GenCell();
		vDayCount=vDayCount+1;
	}
	curdateovee = false;
	for (j=1;j<=Cal.GetMonDays();j++)
	{
		var strCell;
		vDayCount=vDayCount+1;

		// Disable future data picker -- dev
		if((Cal.Month > dtToday.getMonth())&&(Cal.Year == dtToday.getFullYear()) ||(Cal.Year > dtToday.getFullYear())){
			if(!FutureDt){
				curdateovee = true;
			}
		}

		if ((j==dtToday.getDate())&&(Cal.Month==dtToday.getMonth())&&(Cal.Year==dtToday.getFullYear())){
			strCell = GenCell(j,true,TodayColor); //Highlight today's date
			if(!FutureDt){
				curdateovee = true;
			}
		}else{
			if (j==Cal.Date)
			{
				strCell=GenCell(j,true,SelDateColor,curdateovee);
			}
			else
			{
				if (vDayCount%7==0)
					strCell=GenCell(j,false,SaturdayColor,curdateovee);
				else if ((vDayCount+6)%7==0)
					strCell=GenCell(j,false,SundayColor,curdateovee);
				else
					strCell=GenCell(j,null,WeekDayColor,curdateovee);
			}
		}
		vCalData=vCalData+strCell;

		if((vDayCount%7==0)&&(j<Cal.GetMonDays()))
		{
			vCalData = vCalData+"<td></td></tr><tr><td></td><td height='4px' colspan='7'></td><td></td></tr><tr><td></td>";
		}
	}

	divcal += vCalData+"<tr><td bgcolor='#ffffff' colspan='20'></td></tr>";
	document.getElementById(winCal).innerHTML=divcal;
}

function GenCell(pValue,pHighLight,pColor,curdateover){//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="><b class='txt_12_white'>";vHLstr2="</b>";}
	else
		{vHLstr1=">";vHLstr2="";}
	vTimeStr="";

	if(!curdateover){
		PCellStr="<td "+vColor+"><font face='Arial' "+vHLstr1+"<a href=\"javascript:putVal('"+Cal.Ctrl+"','"+PValue+"','"+Cal.pfcall+"');\" class='fontfordate' >"+PValue+"</a>"+vHLstr2+"</font></td>";
	}else{
		PCellStr="<td "+vColor+" width="+CellWidth+" align='center' class='fontfordate'><font face='Arial' size='2'"+vHLstr1+""+PValue+vHLstr2+"</font></td>";
	}
	return PCellStr;
}

function putVal(dividl,PValue,pfcall){
	aaaa= Cal.FormatDate(PValue);
	document.getElementById(dividl).value=aaaa;
	document.getElementById(winCal).style.display='none';
	if((dividl=='dateinput')||(dividl=='dateinput1')||(dividl=='dateinputsip')){
		amtHolding(3,aaaa);
	}
}
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;
}
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 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)
{
	var numMon = this.Month+1;
	numMon = String(numMon);
	if((numMon.length==1)){
			numMon = 0+numMon;
	}
	pDate = String(pDate);
	if((pDate.length==1)){
			pDate = 0+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 ((numMon)+DateSeparator+pDate+DateSeparator+this.Year);
	else if (this.Format.toUpperCase()=="MMMDDYYYY")
		return (this.GetMonthName(false)+DateSeparator+pDate+DateSeparator+this.Year);
	else if (this.Format.toUpperCase()=="YYYYMMDD")
		return (this.Year+DateSeparator+(numMon)+DateSeparator+pDate);
}
Calendar.prototype.FormatDate=FormatDate;
