//////HELP TIPS AND CALENDAR//////

var ShowLayerOn = 0;
var zn = 0;
var zl = 0;
var zi = 0;

	if (document.getElementById) {
		zi = 1; ShowLayerOn = 1;
	} else { 
		if (document.all) {zl = 1; ShowLayerOn = 1;} else { browserVersion = parseInt(navigator.appVersion); 
		if ((navigator.appName.indexOf('Netscape') != -1) && (browserVersion == 4)) {zn = 1; ShowLayerOn = 1;}}
	}

function iecheck() {
	var appVer = navigator.appVersion.toLowerCase();
	if (appVer.indexOf('msie') != -1) { return 1; }
	var agt=navigator.userAgent.toLowerCase();
	if (agt.indexOf('msie') != -1) { return 2; }
	return 0;
}

function fd(objid, wS) {
	if (zi) return wS ? document.getElementById(objid).style:document.getElementById(objid);
	if (zl) return wS ? document.all[objid].style: document.all[objid];
	if (zn) return document.layers[objid];
}

function pw() {
	return window.innerWidth != null? window.innerWidth: document.body.clientWidth != null? 	document.body.clientWidth:null;
}

function mouseX(obj) {
	var curleft=0;
	if(obj.offsetParent) {
		while(obj.offsetParent){
		curleft+=obj.offsetLeft
		obj=obj.offsetParent;
 		}
	} else if(obj.x) {
		curleft+=obj.x;
	}
	return curleft;

}

function mouseY(obj) {
	var curtop=0;
	if(obj.offsetParent){
		while(obj.offsetParent){
		curtop+=obj.offsetTop
		obj=obj.offsetParent;
		}
  	} else if(obj.y) {
		curtop+=obj.y;
	}
	return curtop;
}


function ShowLayer(obj,objid,plc,stytop,styright,stywidth,stycolor,styIH) {
	if (ShowLayerOn) {
	var wp = pw(); ietrue = iecheck(); ds = fd(objid,1); dm = fd(objid,0); st = ds.visibility;
	if (stywidth > 0) {if (ietrue > 0) {ds.width = stywidth + 'px';} else {ds.setProperty('width',stywidth + 'px','');}}
	if (stycolor) {if (ietrue > 0) {ds.color = stycolor;} else {ds.setProperty('color',stycolor,'');}}
	if (styIH == "clear") { dm.innerHTML = ""; } else if (styIH) { dm.innerHTML = styIH; }

	if (plc == "prev" || plc == "next") {
		ds.visibility = "visible";
	} else if (stytop > 0) {
		ds.right = styright; ds.top = stytop; ds.visibility = "visible";
	} else {
		switch(plc) {
		case "n": var tv = mouseY(obj) - 70; var lv = mouseX(obj) + 10; break;
		case "nw": var tv = mouseY(obj) - 50; var lv = mouseX(obj) - 10; break;
		case "ne": var tv = mouseY(obj) - 50; var lv = mouseX(obj) + 50; break;
		case "w": var tv = mouseY(obj); break;
		case "e": var tv = mouseY(obj) - 30; var lv = mouseX(obj) + 50; break;
		case "s": var tv = mouseY(obj) + 30; var lv = mouseX(obj) + 10; break;
		case "sw": var tv = mouseY(obj) + 30; break;
		case "se": var tv = mouseY(obj) + 30; break;
		case "caln": var tv = mouseY(obj) - 165; var lv = mouseX(obj) - 30; break;
		case "calw": var tv = mouseY(obj) - 20; var lv = mouseX(obj) + 30; break;
		case "customrel": var tv = mouseY(obj) + stytop; var lv = mouseX(obj) + styright; break;
		default: var tv = mouseY(obj) + 30; var lv = mouseX(obj) + 10; break;
		}
		if (lv < 2) { lv = 2; } if (!zn) {lv += 'px'; tv += 'px';} 
		ds.left = lv; ds.top = tv; ds.visibility = "visible";
	}
	}
}

//////SHOW HELP TIPS///////////
function ShowHelpTip(obj,objid,plc,stytop,styright,stywidth,stycolor) {

	var tipContainer=document.getElementById('tipContainer');

	if(!tipContainer){ 
		var tipContainer=document.createElement('DIV');
		document.body.appendChild(tipContainer);
		tipContainer.id='tipContainer';
		tipContainer.className='helptip';
		tipContainer.style.zIndex='100';
	}

	tipContainer.innerHTML=document.getElementById(objid).innerHTML;
	tipContainer.innerHTML += "<br /><a href=\"javascript:closeHelpTip();\">close</a>"

	if ((stywidth==undefined) || (stywidth=="")) { stywidth = 250; }
	if ((stycolor==undefined) || (stycolor=="")) { stycolor = "#000"; }
	ShowLayer(obj,'tipContainer',plc,stytop,styright,stywidth,stycolor);
}

function closeHelpTip() {
	document.getElementById('tipContainer').style.visibility = "hidden";
}


//////SHOW HELP CALENDAR///////////
var targetForm = '';
var targetElement = '';
var isCalShowing = false;
var whichCalShowing = '';

function ShowHelpCalendar(obj,str_targetForm,str_target,str_datetime,act,plc,curView) {

	var dateSelect=document.getElementById('dateSelect');

	if(!dateSelect){ 
		var dateSelect=document.createElement('DIV');
		document.body.appendChild(dateSelect);
		dateSelect.id='dateSelect';
		dateSelect.style.width='200';
		dateSelect.style.position='absolute';
		dateSelect.style.zIndex='10';
	} else if (act == "new") {
		isCalShowing = false;
		dateSelect.style.visibility = "hidden";
	}

	if (act == "new") { act = null; }

	styIH=GetCalendar(str_targetForm,str_target,str_datetime,act,curView);
	if (act == "prev" || act == "next") { plc = act; } if (!plc) { plc = "calw"; }
	ShowLayer(obj,'dateSelect',plc,0,0,0,0,styIH);
}

function GetCalendar(str_targetForm,str_target,str_datetime,act,curView) {

  if (!isCalShowing || act != null || (str_target != targetElement && (str_target)) || whichCalShowing != 0){

  	if (!act){
	  if (str_target.indexOf('/') == -1){
		  if (document.forms[str_targetForm][str_target].value != ""){
			str_datetime = document.forms[str_targetForm][str_target].value
			act = "selected";
		  }
	  }
	}
		targetForm = str_targetForm;
		targetElement = str_target;
		whichCalShowing = 0;

		var arr_months = ["January", "February", "March", "April", "May", "June","July",
		"August", "September", "October", "November", "December"];

		var week_days = ["S", "M", "T", "W", "T", "F", "S"];
		var n_weekstart = 0; // day week starts from (normally 0 or 1)
	
		var dt_datetime = (str_datetime == null || str_datetime =="" ?  new Date() : str2dt(str_datetime));
		var dt_prev_year = new Date(dt_datetime); dt_prev_year.setYear(dt_datetime.getFullYear()-1);
		var dt_next_year = new Date(dt_datetime); dt_next_year.setYear(dt_datetime.getFullYear()+1);
		var dt_prev_month = new Date(dt_datetime); dt_prev_month.setMonth(dt_datetime.getMonth()-1);
		var dt_next_month = new Date(dt_datetime); dt_next_month.setMonth(dt_datetime.getMonth()+1);
		var dt_firstday = new Date(dt_datetime); 
			dt_firstday.setDate(1);	dt_firstday.setDate(1-(7+dt_firstday.getDay()-n_weekstart)%7);
		var dt_lastday = new Date(dt_next_month);	dt_lastday.setDate(0);
		var today = new Date()

		// html generation (feel free to tune it for your particular application)
		// print calendar header
		var str_buffer = new String (
			"<table width=\"200\" id=\"dateSelectTable\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" "+
			"class=\"caltable\" borderColor=\"#405167\">\n"+
			"<tr>\n"+
			"<td height=\"24\" align=\"center\" class=\"caldaynames\">\n"+
			"<table width=\"100%\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"caltable\" "+
			"borderColor=\"#405167\">\n"+
			"<tr>\n<td height=\"24\" width=\"24\" align=\"center\" class=\"caldaynames\" "+
			"style=\"border-left:1px solid #405167; border-top:1px solid #405167;\">"+
			"<a title=\"Previous Year\" href=\"javascript:ShowHelpCalendar(this,'" + targetForm + "','"+
			str_target + "','" + jsDate(dt_prev_year) + "','prev','" + curView + "');\">&laquo;</a></td>\n"+

			"<td height=\"24\" width=\"24\" align=\"center\" class=\"caldaynames\" "+
			"style=\"border-top:1px solid #405167;\">"+
			"<a title=\"Previous Month\" href=\"javascript:ShowHelpCalendar(this,'" + targetForm + "','"+
			str_target + "','" + jsDate(dt_prev_month) + "','prev','" + curView + "');\">&lsaquo;</a></td>\n"+

			"<td height=\"24\" align=\"center\" class=\"caldaynames\" colspan=\"2\" "+
			"style=\"border-top:1px solid #405167;\"><a>"+
			arr_months[dt_datetime.getMonth()]+" "+dt_datetime.getFullYear()+"</a></td>\n"+

			"<td height=\"24\" width=\"24\" align=\"center\" class=\"caldaynames\" "+
			"style=\"border-top:1px solid #405167;\">"+
			"<a title=\"Next Month\" href=\"javascript:ShowHelpCalendar(this,'" + targetForm + "','"+
			str_target + "','" + jsDate(dt_next_month) + "','next','" + curView + "');\">&rsaquo;</a></td>\n"+

			"<td height=\"24\" width=\"24\" align=\"center\" class=\"caldaynames\" "+
			"style=\"border-right:1px solid #405167; border-top:1px solid #405167;\">"+
			"<a title=\"Next Year\" href=\"javascript:ShowHelpCalendar(this,'" + targetForm + "','"+
			str_target + "','" + jsDate(dt_next_year) + "','next','" + curView + "');\">&raquo;</a></td></tr>\n"
		);
	
		str_buffer += "<tr><td align=\"center\" valign=\"top\" nowrap colspan=\"6\">"
		str_buffer += "<table border=\"1\" bordercolor=\"#405167\" style=\"border-collapse: collapse;\" "
		str_buffer += "cellpadding=\"0\" cellspacing=\"0\" class=\"offWhtBg\" width=\"100%\">"
		
		var dt_current_day = new Date(dt_firstday);
		// print weekdays titles
		str_buffer += "<tr height=\"15\" ALIGN=\"center\" class=\"monthDayWeek\">\n";
		for (var n=0; n<7; n++){
			str_buffer += "<td class=\"leftBarBg\">"+week_days[(n_weekstart+n)%7]+"</td>\n";
		}
		// print calendar table
		str_buffer += "</tr>\n";
		while (dt_current_day.getMonth() == dt_datetime.getMonth() ||
			dt_current_day.getMonth() == dt_firstday.getMonth()) {
			// print row header
			str_buffer += "<tr height=\"18\" bgcolor=\"#FFFCF9\""
			if(curView == 'week'){
			str_buffer += " onmouseover=\"doHighlight(this,'calsmallselect','class');\""
			str_buffer += " onmouseout=\"doHighlight(this,'','class');\""
			}
			str_buffer += ">\n";
				
			for (var n_current_wday=0; n_current_wday<7; n_current_wday++) {
			if (dt_current_day.getMonth() != dt_datetime.getMonth()) {
			// print dates not in current month
			str_buffer += "<td bgcolor=\"#f2f2f2\" class=\"notCurMonDate\" align=\"center\">";
			} else if (dt_current_day.getDate() == dt_datetime.getDate() 
			&& dt_current_day.getMonth() == dt_datetime.getMonth() 
			&& dt_current_day.getFullYear() == dt_datetime.getFullYear() && act == "selected") {
			// print selected date
			str_buffer += "<td align=\"center\" bgcolor=\"red\" color=\"white\" style=\"cursor:pointer\" "
			str_buffer += "onclick=\"selectDate('"+jsDate(dt_current_day)+"','" + str_target +"');return false;\">";
			} else if (dt_current_day.getDate() == today.getDate() 
			&& dt_current_day.getMonth() == today.getMonth()
			&& dt_current_day.getFullYear() == today.getFullYear()) {
			// print current date
			str_buffer += "<td align=\"center\" bgcolor=\"#ffffbf\" style=\"cursor:pointer\" "
			str_buffer += "onMouseOver=\"this.bgColor = '#E6ECF2'\" "
			str_buffer += "onMouseOut =\"this.bgColor = '#ffffbf'\" "
			str_buffer += "onclick=\"selectDate('"+jsDate(dt_current_day)+"','"
			str_buffer += str_target +"','" + curView + "');return false;\">"
			} else {
			// print working days of current month
			str_buffer += "<td align=\"center\" onMouseOver=\"this.bgColor = '#E6ECF2'\" "
			str_buffer += "onMouseOut =\"this.bgColor = ''\" style=\"cursor:pointer\" "
			str_buffer += "onclick=\"selectDate('"+jsDate(dt_current_day)+"','"
			str_buffer += str_target +"','" + curView + "');return false;\">"
			}

			str_buffer += "<a href=\"javascript:void(0);\" onclick=\"selectDate('"+jsDate(dt_current_day)+"','"
			str_buffer += str_target +"','" + curView + "');return false;\">"
			str_buffer += dt_current_day.getDate()+"</a></td>\n";
			dt_current_day.setDate(dt_current_day.getDate()+1);
			}
			// print row footer
			str_buffer += "</tr>\n";
		}
		
		str_buffer += "</table>\n"
		str_buffer += "<tr>\n<td colspan=\"3\" height=\"24\" align=\"center\" class=\"caldaynames\" "
		str_buffer += "style=\"border-left:1px solid #405167; border-bottom:1px solid #405167;\">"
		str_buffer += "<a href=\"javascript:selectDate('"+jsDate(today)+"','"+str_target +"','" + curView + "');\">"
		str_buffer += "Today</a></td>"
		str_buffer += "<td colspan=\"3\" height=\"24\" align=\"center\" class=\"caldaynames\" "
		str_buffer += "style=\"border-right:1px solid #405167; border-bottom:1px solid #405167;\">"
		str_buffer += "<a href=\"javascript:closeCalendar();\">Close</a></td></tr></table>"
		str_buffer += "</td>\n</tr>\n</table>\n";
	
		isCalShowing = true;
		return str_buffer;
	} else {
		isCalShowing = false;
		return "clear";
	}
}

function str2dt (tDateTime) {
	var re_date = /^(\d+)\/(\d+)\/(\d+)$/;
	if (!re_date.exec(tDateTime)){
		/////alert("Invalid date format: "+ tDateTime);
	}

	if (RegExp.$3 < 70) { y = 2000 + parseInt(RegExp.$3);
	} else if (RegExp.$3 < 101) { y = 1900 + parseInt(RegExp.$3);
	} else { y = RegExp.$3; }
	
	return (new Date (y, RegExp.$1-1, RegExp.$2));
}

function jsDate(tDateTime){
	month = (tDateTime.getMonth()+1); if (Math.abs(parseInt(month)) < 10){ month = "0"+ Math.abs(month); }
	day = tDateTime.getDate(); if (Math.abs(parseInt(day)) < 10){ day = "0"+ Math.abs(day); }
	return (new String (month + '/' + day + '/' + tDateTime.getFullYear()));
}

function selectDate(tDate,act,view) {
  if (act.indexOf('/') == -1){
	document.forms[targetForm][targetElement].value = tDate
	if (document.forms[targetForm]){
		if (document.forms[targetForm].calUsed){
			document.forms[targetForm].calUsed.value = whichCalShowing;
		}
	}

	document.getElementById('dateSelect').style.visibility = "hidden";
	isCalShowing = false;
  } else {
  	if (act.indexOf("?") == -1){
		document.location.href = act + '?tDate=' +tDate;
	} else {
		document.location.href = act + '&tDate=' + tDate;
	}
  }
}

function doHighlight(oRow,newStyle,changeType) {
	for (var i = 0; i < oRow.cells.length; i++){
	  if (changeType == "class"){
		oRow.cells[i].className = newStyle;
	  } else if (changeType == "bgcolor"){
		oRow.cells[i].bgColor = newStyle;
	  }
	}
}

function closeCalendar() {
	document.getElementById('dateSelect').style.visibility = "hidden";
	isCalShowing = false;
}


//////HIDE HELP ELEMENTS///////////

function hideHelpElements() {
	if (document.getElementById('tipContainer')) { document.getElementById('tipContainer').style.visibility = "hidden"; }
	if (document.getElementById('dateSelect')) { document.getElementById('dateSelect').style.visibility = "hidden"; }

}



