//Get the following variables from config js file, e.g. cal_en.js cal_zh.js etc
//var mArray	= new Array("January","February","March","April","May","June","July","August","September","October","November","December");
//var dArray 	= new Array("Su","Mo","Tu","We","Th","Fr","Sa");
//var selectLabel	= "Select a Date:";
//var closeLabel	= "close";
//var prevLabel	= "&lt;&lt; previous month";
//var nextLabel	= "next month &gt;&gt;";

var o_navigator		= navigator.userAgent.toLowerCase();
var isMacIE			= (o_navigator.indexOf("msie 5")>-1&&o_navigator.indexOf("mac")>-1) ? 1 : 0;
var isPCIE			= (o_navigator.indexOf("msie")>-1&&!isMacIE&&o_navigator.indexOf("opera")==-1) ? 1 : 0;
var isOpera			= o_navigator.indexOf("opera")>-1 ? 1 : 0;
var datesArray		= new Array(31,28,31,30,31,30,31,31,30,31,30,31);
var today			= new Date();			//todays date
var cD				= today.getDay();		//current day of week 0-6
var cT				= today.getDate();		//current day 1-31
var cM				= today.getMonth();		//current month 0-11
var cMDs 			= datesArray[cM];		//number of days in current month
var cY				= today.getFullYear();	//js method	not used here//current Year
var newT			= cT;					//cal selected date
var newM			= cM;					//cal selected month
var newY			= cY;					//cal selected year
var newDs			= cMDs;					//days for selected Month
var newD			= cD;					//day of week
var numCalendars	= 2;					//number of calendars you want to create
var calDirection	= "horizontal";			//put "horizontal" or "vertical"
var notClose		= false;				//inline calendar: true; popup calendar: false
var calopen 		= 0;					//boolean set state of iframe "0" closed "1" open
var o_windowparent  = top;					//set parent frame
var o_input 		= 0;
var o_month			= 0;
var o_date			= 0;
var o_iframecal		= 0;
var o_from;
var o_to;
var v_from;
var v_to;
var d_makefrom		= 0;
var d_maketo		= 0;
var s_lang			= "us";
var o_currentDate	= false;
var i_firstYear		= cY;
var i_firstMonth	= cM;
var i_last_firstM	= -1;
var o_row			= null;
var i_numcal		= 0;
var o_calbody		= null; //where to write the calendar
var s_closecal		= "<table width='100%'><tr><td class='calSelect'>"+selectLabel+"</td><td class='calClose'><a href='#' onclick='top.closeCal();return false;'>"+closeLabel+"</a></td></tr></table>";
var b_date331		= 0;
var a_input			= 0;
var o_parent;
var s_inputtype		= "object"; //for text input or select list input
var a_v_input		= null;
var last_v_input	= null;
var last_s_from		= null;
var last_s_to		= null;
var last_s_cal		= null;
var last_s_parent	= null;
var last_s_mode		= "us";
var last_s_caldir	= null;
var last_s_not_close= notClose;
var last_s_position	= null;
var last_s_cal_position = null;
var last_s_num_cal	= numCalendars;
var last_s_callback = false;

function findFirstDay(){
	firstDay = new Date();
	firstDay.setDate(1);
	firstDay.setMonth(newM);
	firstDay.setFullYear(newY);
	return firstDay.getDay();
}

function check331(d_date){
	/*
	i_date331 = Math.floor((d_date-today)/86400000);
	b_check331 = (i_date331>330) ? 1 : 0;
	*/
	//return d_date.getFullYear()>(cY+1) || (d_date.getFullYear()>cY && (d_date.getMonth()>cM || (d_date.getMonth()==cM && d_date.getDate()>=cT)));
	return d_date.getFullYear()>(cY+1) || (d_date.getFullYear()>cY && (d_date.getMonth()>=cM));
}

function vm_setupCal(){
	i_numcal = 0;
	vm_makeCal(cM);
}

function preventClose(evt){
	if(isOpera)evt.stopPropagation()
}

function ty_makeDate(which){
	d_makedate = new Date(newY,newM,which);
	b_date331 = check331(d_makedate);
	if((cT>which && cM == newM && cY == newY)||b_date331){
		s_makeDate = "<td class='calDateOff'>";
		s_makeDate+= which;
	}else{
		if(d_makefrom||d_maketo){
			s_makeDate = ((d_makedate.toString()==d_makefrom.toString())||(d_makedate.toString()==d_maketo.toString())) ? "<td class='calDateSel'>" : (d_makedate>d_makefrom&&d_makedate<d_maketo&&d_makefrom) ? "<td class='calDateRng'>" : "<td class='calDate'>";
		}else{
			s_makeDate = "<td class='calDate'>";
		}
		s_makeDate+= "<a href='#' onclick='top.ty_setDate("+newM+","+which+",this.parentNode,"+newY+");return false;' class='calDateA'>";
		s_makeDate+= which;
		s_makeDate+="</a>";
	}
	s_makeDate+="</td>\n";
	return s_makeDate;
}

function ty_maketr(what){
	s_tr = "<tr>\n";
	s_tr+= what;
	s_tr+= "</tr>\n";
	return s_tr;
}

function ty_changeMonths(which){
	i_numcal = 0;
	o_calbody.innerHTML ="";
	if(which < 0){
		which=11;
		newY--;
	}
	vm_makeCal(which);
}

function vm_makeCal(whichMonth){
	o_cal= "";
	o_caltr="";
	o_caltd="";
	newM=whichMonth;
	if(newM<cM) newY = cY+1;
	if (newM>=12){
		newM=whichMonth-12;
		newY++;
	}
	if(newM>cM && newY>cY){
		newY--;
	}
	if(i_numcal==0){
		i_firstMonth  = newM;
	}
	newDs = datesArray[newM];
	isLeap 	= (newY % 4 == 0 && (newY % 100 !=0 || newY % 400 ==0 )) ? 1:0
	if (newM==1) newDs=newDs+isLeap;
	newD = findFirstDay();
	countDay = newD;
	s_calalign = (calDirection=="vertical")? "top" : "left";
	o_cal+="<table month='"+newM+"' year='"+newY+"' align='"+s_calalign+"' cellpadding='0' cellspacing='0' border='0' class='calTable'>\n";
	o_caltr+= "<tr class='calRowHighlight'>\n";
	o_caltd+= "<td colspan='7' class='calLabel'>";
	o_caltd+= mArray[newM]+"&nbsp;"+newY;
	o_caltd+= "</td>";
	o_caltr+=o_caltd;
	o_caltr+="</tr>\n";
	o_cal+=o_caltr;
	o_caltd = "";
	for(i=0;i < dArray.length;i++){
		o_caltd+="<td class='calDayName'>";
		o_caltd+=dArray[i];
		o_caltd+="</td>\n";
	}
	
	o_caltr = ty_maketr(o_caltd);
	o_cal+=o_caltr;
	o_caltd = "";
	i_calRows = 0;
	
	for (d=1;d<=newDs;d++){
	
		if(d==1) 
		
		if(d==1)for(bde=0;bde < newD;bde++)o_caltd += "<td class='calDate'>&nbsp;</td>\n";
		o_caltd += ty_makeDate(d);
		countDay++;
		if(countDay==7){
			countDay=0;
			o_caltr = ty_maketr(o_caltd);
			o_cal+=o_caltr;
			o_caltd = "";
			i_calRows++
		}
		if(d==newDs && countDay!=0){
			for (bde=countDay;bde < 7;bde++) o_caltd += "<td class='calDate'>&nbsp;</td>\n";
			o_caltr = ty_maketr(o_caltd);
			o_cal+=o_caltr;			
			o_caltd ="";
			i_calRows++
		}
		
		
	}
	
	if(i_calRows < 6){
		o_caltd = "";
		for(bde=0;bde < 7;bde++) o_caltd += "<td class='calDate'>&nbsp;</td>\n";
		o_caltr = ty_maketr(o_caltd);
		o_cal+= o_caltr;
	}
	o_cal+="</table>";
	
	
	if(i_numcal==0){
		if (!last_s_not_close) {o_calbody.innerHTML += s_closecal;}
		tmp_previous = (newM==cM&&newY==cY) ? "&nbsp;" : "<a href='#' onclick='top.ty_changeMonths("+i_firstMonth+"-1);top.preventClose(event);return false' class='calNavA'>"+prevLabel+"</a>";
		tmp_last_month = newM + numCalendars - 1;
		tmp_last_year = newY;
		if (tmp_last_month > 11) { tmp_last_month -= 12; tmp_last_year += 1 ;}
		tmp_next = (tmp_last_month==cM&&tmp_last_year!=cY) ? "&nbsp;" : "<a href='#' onclick='top.ty_changeMonths("+i_firstMonth+"+1);top.preventClose(event);return false;' class='calNavA'>"+nextLabel+"</a>";
		o_calbody.innerHTML += "<table width='100%'><tr><td class='calSelect'>"+tmp_previous+"</td><td class='calClose'>"+tmp_next+"</td></tr></table>";
	}
	o_calbody.innerHTML += o_cal;
	i_numcal++;
	if(i_numcal < numCalendars)vm_makeCal(newM+1);
	else if (i_firstMonth > newM){
		newY--;
	}
}

function ty_setDate(whatMonth,whatDate,whatTD,whatYear){
	o_currentDate = whatTD;
	o_currentDate.className = "calDateSel";
	if(typeof(o_input)=="object"){
		o_input.value = (s_lang=="us") ? (whatMonth+1)+"/"+whatDate+"/"+whatYear : whatDate+"/"+(whatMonth+1)+"/"+whatYear;
	}else{
		tmpOpts = top.document.getElementById(a_v_input[0]).options;
		for (i=0; i<tmpOpts.length; i++) {
			if (eval(tmpOpts[i].value.substring(4)) == whatMonth) {
				top.document.getElementById(a_v_input[0]).selectedIndex = i;
				break;
			}
		}
		tmpOpts = top.document.getElementById(a_v_input[1]).options;
		for (i=0; i<tmpOpts.length; i++) {
			if (eval(tmpOpts[i].value) == whatDate) {
				top.document.getElementById(a_v_input[1]).selectedIndex = i;
				break;
			}
		}
	}
	i_last_firstM = (whatMonth==i_firstMonth) ? -1 : i_firstMonth;
	closeCal();
	if(last_s_callback)jsCalCallback();
}

function hideCalendar(){
	o_caldiv.style.display = "none";
	//if(o_parent) o_parent.className = "daterow";
}

function splitDate(s_input, s_mode){
	this.delimitor = (s_input.indexOf("/")>-1) ? "/" : (s_input.indexOf(".")>-1) ? "." : (s_input.indexOf("-")>-1) ? "-" : (s_input.indexOf(",")>-1) ? "," : "/";
	a_input = s_input.split(this.delimitor);
	this.date = -1;this.month = -1;this.year = -1;
	if(a_input.length==3&&!isNaN(a_input[0])&&!isNaN(a_input[1])&&!isNaN(a_input[2])){
		this.month = (s_mode=="us") ? parseInt(a_input[0],10)-1 : parseInt(a_input[1],10)-1;
		this.date = (s_mode=="us") ? parseInt(a_input[1],10) : parseInt(a_input[0],10);
		this.year = a_input[2];
		if(this.month>11||this.month<0)this.month=-1;
		if(this.date>31||this.month<0)this.date=-1;
		i_yrlength = this.year.toString().length;
		if(i_yrlength==2)this.year = "20"+this.year;//fix this in the next 96 years...
		if(i_yrlength<1||i_yrlength==3||this.year<cY)this.year=-1;
	}
}

var o_caldiv=0;var calopen=0;
var t_calcloser = null;

function buildDate(s_monthdate){
	a_monthdate = s_monthdate.split("|");
	bd_oMonth = document.getElementById(a_monthdate[0]);
	bd_oDate = document.getElementById(a_monthdate[1]);
	i_month = eval((bd_oMonth[bd_oMonth.selectedIndex].value).substring(4)) + 1;
	i_date = bd_oDate[bd_oDate.selectedIndex].value;
	s_date = "";
	s_date = i_month+"/"+i_date+"/";
	s_date+= (i_month < cM+1) ? cY+1 : cY;
	return s_date;
}

function makeCalendar(v_input,s_from,s_to,s_mode){
	o_input = v_input;
	if(isPCIE){
		//document.getElementById("calbox").innerHTML="<iframe id=\"calframe\" src=\"javascript:'calendar'\" scrolling=\"no\" marginheight=\"0\" marginwidth=\"0\" frameborder=\"0\"></iframe>";
		document.getElementById("calbox").innerHTML="<iframe id=\"calframe\" src=\"/chl/javascript/IEFrameWarningBypass.html\" scrolling=\"no\" marginheight=\"0\" marginwidth=\"0\" frameborder=\"0\"></iframe>";
		s_iecalcss = "<link rel='STYLESHEET' type='text/css' href='"+document.getElementById("calendarcss").href+"' />";
		top.calframe.document.open();
		top.calframe.document.write("<html><head>"+s_iecalcss+"</head><body id='calbox' class='calendar'></body></html>");
		top.calframe.document.close();	
	}
	
	i_numcal = 0;
	//o_calframeclass = (calDirection=="vertical")? (numCalendars==2?"calframeV2":"calframeV") : (numCalendars==2?"calframeH2":"calframeH");
	o_calframeclass = "calframeH";
	if(calDirection=="vertical") {
		if(numCalendars==2){
			if(notClose){
				o_calframeclass = "calframeV2";
			}else{
				o_calframeclass = "calframeV2abs";
			}
		}else{
			if(notClose){
				o_calframeclass = "calframeV";
			}else{
				o_calframeclass = "calframeVabs";
			}
		}
	}else{
		if(numCalendars==2){
			if(notClose){
				o_calframeclass = "calframeH2";
			}else{
				o_calframeclass = "calframeH2abs";
			}
		}else{
			if(notClose){
				o_calframeclass = "calframeH";
			}else{
				o_calframeclass = "calframeHabs";
			}
		}
	}
	if(isPCIE)document.getElementById("calframe").className=o_calframeclass;
	o_calbody = (isPCIE) ? top.calframe.document.getElementById("calbox") : document.getElementById("calbox");
	o_calbody.innerHTML="";
	o_udate = (typeof(o_input)=="object") ? new splitDate(o_input.value,'us') : new splitDate(buildDate(o_input),'us');
	a_from = s_from.split("|");
	v_from = (a_from.length==1) ? new splitDate(document.getElementById(s_from).value,s_mode) : new splitDate(buildDate(s_from),s_mode);
	a_to = s_to.split("|");
	v_to = (a_to.length==2) ? new splitDate(buildDate(s_to),s_mode) : (document.getElementById(s_to)) ? new splitDate(document.getElementById(s_to).value,s_mode) : new splitDate("",s_mode);
	d_makefrom = (v_from.month!=-1) ? new Date(v_from.year,v_from.month,v_from.date) : 0;
	d_maketo = (v_to.month!=-1) ? new Date(v_to.year,v_to.month,v_to.date) : 0;
	if(o_udate.month!=-1&&o_udate.year!=-1&&o_udate.date!=-1){
		newY=o_udate.year;
		newM=o_udate.month;
		newD=o_udate.date;
	}else if(o_udate!=document.getElementById(s_from)&&d_makefrom){
		newY=v_from.year;
		newM=v_from.month;
		newD=v_from.date;
	}else if(o_udate!=document.getElementById(s_to)&&d_maketo){
		newY=v_to.year;
		newM=v_to.month;
		newD=v_to.date;
	}else{
		newY=cY;
		newM=cM;
		newD=cD;
	}
	
	//vm_makeCal(newM);
	vm_makeCal((i_last_firstM!=-1) ? i_last_firstM : newM);
}

function openCal(v_input,s_from,s_to,s_cal,s_parent,s_mode,s_caldir,s_not_close,s_position,cal_pos,s_num_cal,s_callback){
	last_v_input = v_input;
	last_s_from = s_from;
	last_s_to = s_to;
	last_s_cal = s_cal;
	last_s_parent = s_parent;
	last_s_mode = s_mode;
	last_s_caldir = s_caldir;
	last_s_not_close = s_not_close;
	last_s_position = s_position;
	last_s_cal_position = cal_pos;
	last_s_num_cal = s_num_cal;
	last_s_callback = s_callback;
	calDirection = s_caldir;
	numCalendars = s_num_cal;
	notClose = s_not_close;
	
	//if(o_parent) o_parent.className = "daterow";
	clearTimeout(t_calcloser);
	s_inputtype = typeof(v_input);
	a_v_input = null;
	if(s_inputtype!="object") a_v_input = v_input.split("|");
	calopen = 0;
	o_caldiv = top.document.getElementById(s_cal);
	o_caldiv.style.display = "block";
	//o_caldiv.className = (calDirection=="vertical")? (numCalendars==2?"calboxonV2":"calboxonV") : (numCalendars==2?"calboxonH2":"calboxonH");
	o_caldiv.className = "calboxonH";
	
	if(calDirection=="vertical") {
		if(numCalendars==2){
			if(notClose){
				o_caldiv.className = "calboxonV2";
			}else{
				o_caldiv.className = "calboxonV2abs";
			}
		}else{
			if(notClose){
				o_caldiv.className = "calboxonV";
			}else{
				o_caldiv.className = "calboxonVabs";
			}
		}
	}else{
		if(numCalendars==2){
			if(notClose){
				o_caldiv.className = "calboxonH2";
			}else{
				o_caldiv.className = "calboxonH2abs";
			}
		}else{
			if(notClose){
				o_caldiv.className = "calboxonH";
			}else{
				o_caldiv.className = "calboxonHabs";
			}
		}
	}
	
	makeCalendar(v_input,s_from,s_to,s_mode);
	
	o_parent = document.getElementById(s_parent);
	
	o_cal = document.getElementById(s_cal);
	
	//o_parent.className+="seldaterow";
	i_last_firstM = -1;
	
	if(!notClose){
		i_calx = 0;
		i_caly = 0;
		if(s_position) {
			var positionObject = getObj(cal_pos);
			if(positionObject) {
				i_calx = findPosX(positionObject) + ((document.body.scrollLeft)?document.body.scrollLeft:0);
				i_caly = findPosY(positionObject) + ((document.body.scrollTop)?document.body.scrollTop:0);
			}
		}else{
			o_inputright = (s_inputtype!="object") ?  document.getElementById(a_v_input[0]) : v_input;
			i_calx = parseInt(o_inputright.offsetLeft)+parseInt(o_inputright.offsetWidth);
			i_caly = parseInt(o_parent.offsetTop)+(parseInt(o_parent.offsetHeight)/2)-(parseInt(o_cal.offsetHeight)/2);
		}

		i_calx = i_calx - 120;
		i_caly = i_caly + 20;		
		
		o_cal.style.top = (i_caly>0) ? i_caly+"px" : "0px";
		o_cal.style.left = i_calx+"px";
		setTimeout("calopen = 1",500);
	}
}

function closeCal(){
	if(o_caldiv&&calopen)t_calcloser = setTimeout("hideCalendar()",500);
	calopen=0;
	if(last_s_not_close)openCal(last_v_input,last_s_from,last_s_to,last_s_cal,last_s_parent,last_s_mode,last_s_caldir,true,last_s_position,last_s_cal_position,last_s_num_cal,last_s_callback);
}

//window.onclick=closeCal;
//window.document.onclick=closeCal;
