// utility functions
if(!document.$) { function $(e) { return document.getElementById(e); } }
if(!document.getRealPos) { function getRealPos(element){ var x = element.offsetLeft; var y = element.offsetTop; if(offset = element.offsetParent) { while(offset.offsetParent) { x += offset.offsetLeft; y += offset.offsetTop; offset = offset.offsetParent; } } var h = element.offsetHeight; var w = element.offsetWidth; return x+":"+y+":"+w+":"+h; } }

// IE fix
if(!document.documentElement) document.documentElement = document.body;

// AJAX-CALENDAR Settings
var calendarPHP = "/includes/ajax-calendar.php";

// AJAX-CALENDAR Code
var curControl = "";
var fbdate = "";
var fbtype = "";
function hideDateControls() { $('date-blanker').style.display="none"; $('choose-date').style.display="none"; }
function calUpdate(newdate) { modal = $('choose-date'); ajax.update(calendarPHP+"?date="+newdate, "choose-date"); }
function calChooseDate(newdate) { //26.05.08 added fallback type and testing to limit date selection based on fallback date
	//alert(newdate + " needs to be " + fbtype + " "+fbdate+".");
	switch(fbtype) {
		case "before": 
			if(dateCompare(newdate, fbdate) < 0) { alert("You must select a date that is BEFORE "+fbdate+".");
			} else { curControl.value = newdate; hideDateControls(); }
		break;
		case "after": 
			if(dateCompare(newdate, fbdate) > 0) { alert("You must select a date that is AFTER "+fbdate+".");
			} else { curControl.value = newdate; hideDateControls(); }
		break;
		default: curControl.value = newdate; hideDateControls(); 
	}
}

function dateCompare(date1, date2, sep) {
    var d1 = new Date();
    var d2 = new Date();
    d1 = date1.split("/");
    d2 = date2.split("/");
    if(parseInt(d1[2]) < parseInt(d2[2])) return 1;
    if(parseInt(d1[2]) > parseInt(d2[2])) return -1; 
    if(parseInt(d1[1]) < parseInt(d2[1])) return 1;
    if(parseInt(d1[1]) > parseInt(d2[1])) return -1; 
    if(parseInt(d1[0]) < parseInt(d2[0])) return 1;
    if(parseInt(d1[0]) > parseInt(d2[0])) return -1; 
    return 0;
}

// 26.05.08 added fallback type for limiting date selection in calChooseDate() - jason
// 20.03.08 added fallback source for default date - usefull when selecting date range - jason
function chooseDate(control, fallback, fallbacktype) { 

	fbdate = $(fallback).value;
	fbtype = fallbacktype;

	blankit(control);	
	curControl = $(control) 
	pos = getRealPos($(control)).split(":");
	modal = $('choose-date');
	if(!modal) { // create modal block if not defined 
		modal = document.createElement("div");
		modal.id = "choose-date";
		document.body.appendChild(modal);
		modal = $('choose-date');
	}
	modal.style.position = "absolute";
	modal.style.left = (parseInt(pos[0]) )+ "px";
	modal.style.top = (parseInt(pos[1]) + parseInt(pos[3])) + "px";
	modal.style.zIndex = 1000;
	modal.style.display = "block";
	var defaultDate = $(control).value;
	if(defaultDate == "") {
		defaultDate = $(fallback).value;
		fbdate = defaultDate;
	}
	ajax.update(calendarPHP+"?date="+defaultDate,"choose-date");
}

function blankit() {
	pos = 
	blanker = $('date-blanker');
	if(!blanker) { // create blanker if not defined
		blanker = document.createElement("div");
		blanker.id = "date-blanker";
		document.body.appendChild(blanker);
		blanker = $('date-blanker');
		blanker.style.backgroundColor = "#fff";
		blanker.style.width="100%";
	}
	if(document.all) {
		blanker.style.position = "absolute";
		blanker.style.filter = "alpha(opacity=1)";
		blanker.style.backgroundColor="transparent";
		blanker.style.top = document.documentElement.scrollTop;// ? document.documentElement.scrollTop : document.body.scrollTop;
		blanker.style.height = "100%";
		blanker.style.width =  document.documentElement.clientWidth;
		blanker.style.height = document.documentElement.clientHeight+30;
	} else {
		blanker.style.position = "fixed";
		blanker.style.opacity = ".01"; 
		blanker.style.height = "100%";
		blanker.style.left = 0;
		blanker.style.top = 0;
	}
	blanker.style.backgroundColor = "#004";
	blanker.onclick = hideDateControls;
	blanker.style.zIndex = 999;
	blanker.style.display = "block";	
}
