//
// Layer functions for client-side calendar
//
/** Internationalised vars
var cal_current_month = "Current month";
var cal_select_date = "Select date";	
var cal_months = new makeArray0('January','February','March','April','May','June','July','August','September','October','November','December');
var cal_dow    = new makeArray0('Sun','Mon','Tue','Wed','Thu','Fri','Sat');
**/

var cal_current; // current date key 
var cal_day;
var cal_month;
var cal_year;
var cal_days   = new makeArray0(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);

var cal_mx = 0;
var cal_my = 0;
var cal_mousemove_chained;

var cal_x, cal_y, cal_w, cal_h;

cal_mousemove_chained = document.onmousemove;
document.onmousemove = on_cal_mousemove;

if (document.layers)
	document.captureEvents(Event.MOUSEMOVE);

function makeArray0() {
    for (i = 0; i<makeArray0.arguments.length; i++)
        this[i] = makeArray0.arguments[i];
}

function on_cal_mousemove(e) {
	if(b_ns4 || b_ns6) {
		cal_mx = e.pageX;
		cal_my = e.pageY;
	} else if(b_ie6 && !b_quirks) {
		cal_mx = event.x + document.documentElement.scrollLeft;
		cal_my = event.y + document.documentElement.scrollTop;
	} else {
		cal_mx = event.x + document.body.scrollLeft;
		cal_my = event.y + document.body.scrollTop;
	}
	
	if(cal_mousemove_chained)
		cal_mousemove_chained(e);
}

function cal_close() {
	hide_cal_layer();
}

function get_cal_layer() {
	if(b_ns4)
		return document.calLayer;
	if(b_ns6)
		return document.getElementById("calLayer");
	
	// msie	
	return document.all["calLayer"];
}

function hide_cal_layer() {
	var lyr = get_cal_layer();
	
	if(b_ns4)
		lyr.visibility = "hide";
	else
		lyr.style.visibility = "hidden";

	if(b_msie) {
		var selEl = b_ie4 ? document.all.tags("SELECT") : document.getElementsByTagName("SELECT");
		for (var i=0; i<selEl.length; i++) {
			if(typeof selEl[i].isImmutable != 'undefined')
				continue;
			if(typeof selEl[i].isHidden !=  'undefined' && selEl[i].isHidden) {
	                        selEl[i].style.visibility = 'visible';
				selEl[i].isHidden = 0;
			}
                }
	}
}

function show_cal_layer() {
	var lyr = get_cal_layer();
	
	if(b_ns4)
		lyr.visibility = "show";
	else
		lyr.style.visibility = "visible";

	if(b_msie) {
		var x,y,w,h;
		var selEl = b_ie4 ? document.all.tags("SELECT") : document.getElementsByTagName("SELECT");

		for (var i=0; i<selEl.length; i++) {
			/* FIXME: pageLocation used from OverLib !! */
			x = pageLocation(selEl[i],'Left');
			y = pageLocation(selEl[i],'Top');
			w = selEl[i].offsetWidth;
			h = selEl[i].offsetHeight;
			if((cal_x+cal_w) < x || cal_x > (x+w) || (cal_y+cal_h) < y || cal_y > (y+h)) 
				continue;
			if(selEl[i].name == 'month' || selEl[i].name == 'year') {
				selEl[i].isImmutable = 1;
				continue;
			}
			selEl[i].isHidden = 1;
			selEl[i].style.visibility = 'hidden';
                }
	}
}
		
function set_cal_layer_text(text) {
	var lyr = get_cal_layer();
	
	text += "\n";

	if(b_ns4) {
		lyr.document.write(text);
		lyr.document.close();
	} else {
		lyr.innerHTML = text;
	}
}

function place_cal_layer() {
	var lyr = get_cal_layer();
	var width, height, xofs, yofs, winy, posx, posy;

	if(b_ns4) {
		lyr.left = "0"; lyr.top = "0";
		width = lyr.document.width;
		height = lyr.document.height;
		xofs = pageXOffset;
		yofs = pageYOffset;
		winy = innerHeight;
	} else if(b_ns6) {
		lyr.style.left = "0px"; lyr.style.top = "0px";
		width = lyr.offsetWidth;
		height = lyr.offsetHeight;
		xofs = pageXOffset;
		yofs = pageYOffset;
		winy = innerHeight;
	} else {
		lyr.style.left = "0px"; lyr.style.top = "0px";
		width = lyr.clientWidth;
		height = lyr.clientHeight;
		if(b_ie6 && !b_quirks) {
			xofs = document.documentElement.scrollLeft;
			yofs = document.documentElement.scrollTop;
			winy = document.documentElement.clientHeight;
		} else {
			xofs = document.body.scrollLeft;
			yofs = document.body.scrollTop;
			winy = document.body.clientHeight;
		}
	}
	
	posx = cal_mx - width + 12;
	if(posx < 0)
		posx = 0;
		
	posy = cal_my - 12;
	if(posy - yofs + height > winy)
		posy = winy + yofs - height - 1;
	if(posy < 0) 
		posy = 0;

//	alert('b_ns4='+b_ns4+'\nb_ns6='+b_ns6+'\nb_msie='+b_msie+'\nwidth='+width+'\nheight='+height+'\nxofs='+xofs+'\nyofs='+yofs+'\nwiny='+winy+'\nmousex='+comment_mx+'\nmousey='+comment_my+'\ncompatMode='+document.compatMode+'\nlayer at ('+posx+','+posy+')\n');
		
	cal_x = posx;
	cal_y = posy;
	cal_w = width;
	cal_h = height;

	if(b_ns4) {
		lyr.left = posx;
		lyr.top = posy;
	} else {
		lyr.style.left = posx +"px";
		lyr.style.top = posy +"px";
	}
}

function cal_store(day) {
	var d_new, m_new, y_new;

	if(!cal_current)
		return;
	
	d_new = (day < 10 ? '0':'') + day;
	m_new = parseInt(rtrv(document.cal_form.month))+1;
	if (m_new < 10) 
		m_new = '0'+m_new;
	y_new = rtrv(document.cal_form.year);
	stor(ffe(cal_current+'_dy'), d_new);
	stor(ffe(cal_current+'_mn'), m_new);
	stor(ffe(cal_current+'_yr'), y_new);
	eval("check_"+cal_current+"_pre();");
	cal_current = "";
}

function cal_value(key,title) {
	var tmp;

	hide_cal_layer();

	cal_current = key;
	cal_title = title;
	tmp = load(ffe(key+'_dy'));
	if (tmp && tmp.charAt(0) == '0')
		tmp = tmp.substr(1);
	cal_day = parseInt(tmp);
	tmp = load(ffe(key+'_mn'));
	if (tmp && tmp.charAt(0) == '0')
		tmp = tmp.substr(1);
	cal_month = parseInt(tmp);
	cal_year = parseInt(load(ffe(key+'_yr')));
	update_cal_value();
	place_cal_layer();
	show_cal_layer();

	return false;
}

function update_cal_value() {

	// use today if now set
	var today = new Date();
	var text, month, ty, year, first_day, start_day, off, column, last_month;

	if (!cal_day)
                cal_day = today.getDate();
	if (!cal_month)
                cal_month = today.getMonth()+1;
        if (!cal_year)
                cal_year = today.getYear();
        if (cal_year < 1000)
                cal_year += 1900;

	text = '<TABLE CELLPADDING=0 CELLSPACING=0 CLASS=\"ss_form_cmt\">'
                +'<COLGROUP><COL WIDTH=\"1*\"><COL WIDTH=\"0*\"></COLGROUP>'
                +'<TR><TD CLASS=\"ss_form_cmt_head\">'+cal_select_date+' &quot;'+cal_title
                +'&quot;</TD><TD CLASS=\"ss_form_cmt_head\" STYLE="width: 0%; text-align: right; vertical-align: top; white-space: nowrap;">'
                +'<A HREF="javascript:void(0)" ONCLICK="cal_close(); return 0;">'
                +'<IMG SRC="'+ssl_prefix+'/public/icons/close.gif" BORDER="0" STYLE="margin-top: 3px;" ALT="Close"></A></TD></TR>'
                +'<TR><TD COLSPAN=2 CLASS=\"ss_form_cmt_main\" STYLE="text-align: center;">'
                +'<FORM NAME="cal_form">\n'
		+'<TABLE BORDER=0 CELLSPACING=0 CELLPADDING=0>'
		+'<TR><TD CLASS="ss_form_cmt_main" STYLE="font-size: 85%; vertical-align: top;">'
    		+'<A HREF="javascript:void()" ONCLICK="cal_change_today();">'+cal_current_month+'</A>'
		+'</TD>'
		+'<TD CLASS="ss_form_cmt_main" STYLE="font-size: 85%; white-space: nowrap; vertical-align: baseline;">'
		+'<SELECT NAME="month" CLASS="ialt" OnChange="cal_change_month();">\n';

    	for (month=0; month<12; month++) 
		text += '<OPTION VALUE="' +month+ '"'+(month==cal_month-1 ? ' SELECTED':'') +'>' + cal_months[month] + '</OPTION>\n';

    	text += '</SELECT>\n'
		+'<SELECT NAME="year" CLASS="ialt" OnChange="cal_change_year();">\n';

	ty = today.getYear();
	if (ty < 1000)
		ty += 1900;
    	for (year=ty-105; year<ty+30; year++) 
		text += '<OPTION VALUE="' +year+ '"' +(year==cal_year ? ' SELECTED':'')+ '>' + year + '</OPTION>';

    	text += '</SELECT></TD></TR>\n'
		+'<TR><TD COLSPAN=2 CLASS=\"ss_form_cmt_main\" STYLE="text-align: center;">';

  	first_day = new Date(cal_year,cal_month-1,1);
    	start_day = first_day.getDay();

    	if (((cal_year % 4 == 0) && (cal_year % 100 != 0)) || (cal_year % 400 == 0))
        	cal_days[1] = 29;
    	else
        	cal_days[1] = 28;

    	text += '<TABLE cellspacing=0 cellpadding=1><TR>';

    	for (i=0; i<7; i++)
        	text += '<TH CLASS="tab'+(!i ? '0' : '1')+'" WIDTH=\"25\">' +cal_dow[i]+'</TH>';

    	text += '<\TR>\n<TR>';

    	column = 0;
    	last_month = cal_month - 2;
    	if (last_month < 0) last_month = 12+last_month;

    	for (i=0; i<start_day; i++, column++)
        	text += '<TD ALIGN="CENTER" CLASS="tab'+(!column ? '2' : '3')+'"><SPAN CLASS="ss_form_cmt_cal2">' +
               		(cal_days[last_month] - start_day+i+1) + '</SPAN></TD>';

	off = 2;
    	for (i=1; i<=cal_days[cal_month-1]; i++, column++) {
		if (i == today.getDate() && (cal_year%1900) == (today.getYear()%1900) && cal_month-1 == today.getMonth())
			style = "ss_form_cmt_cal0";
		else 
			style = "ss_form_cmt_cal1";
        	text += '<TD ALIGN="CENTER" CLASS="tab'+(!column ? off : off+1 )+'"><A CLASS="'+style+'" HREF="javascript:cal_change_day('+i+')">'+i+'</A></TD>';
        	if (column == 6) {
            		text += '</TR><TR>';
            		column = -1;
			if (i >= cal_days[cal_month-1]-7)
				off = 0;
        	}
    	}

    	if (column > 0) 
        	for (i=1; column<7; i++, column++)
            		text +=  '<TD ALIGN="CENTER" CLASS="tab1"><SPAN CLASS="ss_form_cmt_cal2">' +i+ '</SPAN></TD>';

	text += '</TR></TABLE></FORM>'
		+'</TD></TR>'
		+'</TABLE>';

	set_cal_layer_text(text);
}

function cal_change_day(day) {
        cal_store(day);
	cal_close();
}

function cal_change_month() {
    	cal_month = parseInt(rtrv(document.cal_form.month))+1;
    	update_cal_value();
}

function cal_change_year() {
    	cal_year = document.cal_form.year.options[document.cal_form.year.selectedIndex].value;
    	update_cal_value();
}

function cal_change_today() {
        cal_day = 0;
        cal_month = 0;
        cal_year = 0;
    	update_cal_value();
}

