// Freedom Web Calendar Script

var xhr;

function calendar_init()
{
    xhr = new Array();
    for(var i=0; i<calendarCount; i++)
    {
        var req;
        if(window.XMLHttpRequest) { req = new XMLHttpRequest(); }
        else if(window.ActiveXObject) { req = new ActiveXObject("Microsoft.XMLHTTP"); }
        xhr[i] = req;
        calendar_navigate(i, '', '');
    }
}

function calendar_navigate(id, month, year)
{
    var req = xhr[id];
    var filterTypeId = "";
    var searchString = "";
    if(document.getElementById('selCalendarFilter_' + id)) { filterTypeId = document.getElementById('selCalendarFilter_' + id).value; }
    if(document.getElementById('tfCalendarSearch_' + id)) { searchString = document.getElementById('tfCalendarSearch_' + id).value; }
    var url = "scripts/calendar.php?displayType=" + calendarDisplayType[id] + "&id=" + id + "&dataSource=" + calendarDataSource + "&month=" + month + "&year=" + year + "&filterTypeId=" + filterTypeId + "&searchString=" + searchString + "&allowSearch=" + calendarAllowSearch[id] + "&allowFilter=" + calendarAllowFilter[id] + "&largeLink=" + calendarLargeLink[id];
    if(calendarPreview[id] == 1) { url += "&preview=1"; }
    req.open("GET", url, true);
    req.onreadystatechange = function(){ calendar_callback(id) };
    req.send(null);
}

function calendar_callback(id)
{
    var req = xhr[id];
    obj = document.getElementById("calendar_" + id);
    calendar_setFade(0, id);
    if(req.readyState == 4)
    {
        if(req.status == 200)
        {
            response = req.responseText;
            obj.innerHTML = response;
            calendar_fade(0, id);
        }
        else
        {
            calendar_fade(100, id);
            obj.innerHTML = "Could not retrieve calendar data.";
        }
    }
}

function calendar_fade(amt, id)
{
	if(amt <= 100)
	{
		calendar_setFade(amt, id);
		amt += 10;
		setTimeout("calendar_fade(" + amt + ", " + id + ")", 5);
    }
}

function calendar_setFade(amt, id)
{
	obj = document.getElementById("calendar_" + id);
	
	if(obj)
	{
	    amt = (amt == 100)?99.999:amt;

	    // IE
	    obj.style.filter = "alpha(opacity:"+amt+")";
      
	    // Safari<1.2, Konqueror
        obj.style.KHTMLOpacity = amt/100;
      
	    // Mozilla and Firefox
        obj.style.MozOpacity = amt/100;

	    // Safari 1.2, newer Firefox and Mozilla, CSS3
        obj.style.opacity = amt/100;
	}
}

function calendar_showDetails(id, day)
{
    document.getElementById('calendar_' + id + '_default').style.display = 'none';
    for(var i=0; i<32; i++) if(document.getElementById('calendar_' + id + '_' + i)) { document.getElementById('calendar_' + id + '_' + i).style.display = 'none'; }
    if(document.getElementById('calendar_' + id + '_' + day)) { document.getElementById('calendar_' + id + '_' + day).style.display = 'block'; }
}

function calendar_showCloudDetails(e, id, day)
{
	var obj = null;
	if(document.getElementById) { obj = document.getElementById('calendar_' + id + '_' + day); }
	else if(document.all) { obj = document.all['calendar_' + id + '_' + day]; }
	
	if(obj)
	{
		obj.style.top = (calendar_getMouseY(e) - (parseInt(calendar_getStyle(obj, "height")) / 2));
		obj.style.left = (calendar_getMouseX(e) + 10);
		obj.style.visibility = "visible";
	}
}

function calendar_hideCloudDetails(e, id, day)
{
	var obj = null;
	if(document.getElementById) { obj = document.getElementById('calendar_' + id + '_' + day); }
	else if(document.all) { obj = document.all['calendar_' + id + '_' + day]; }
	
	if(obj)
	{
		obj.style.visibility = "hidden";
	}
}

function calendar_showAll(id, month, year)
{
    if(document.getElementById('selCalendarFilter_' + id)) document.getElementById('selCalendarFilter_' + id).selectedIndex=0;
    if(document.getElementById('tfCalendarSearch_' + id)) document.getElementById('tfCalendarSearch_' + id).value='';
    calendar_navigate(id, month, year);
}

function calendar_getStyle(el, style)
{
	if(!document.getElementById) { return; }

	var value = el.style[calendar_toCamelCase(style)];

	if(!value)
	{
		if(document.defaultView) { value = document.defaultView.getComputedStyle(el, "").getPropertyValue(style); }
		else if(el.currentStyle) { value = el.currentStyle[calendar_toCamelCase(style)]; }
	}
	
	return value;
}

function calendar_toCamelCase( sInput )
{
	var oStringList = sInput.split('-');
	if(oStringList.length == 1) { return oStringList[0]; }
	var ret = sInput.indexOf("-") == 0 ? oStringList[0].charAt(0).toUpperCase() + oStringList[0].substring(1) : oStringList[0];
	for(var i = 1, len = oStringList.length; i < len; i++)
	{
		var s = oStringList[i];
		ret += s.charAt(0).toUpperCase() + s.substring(1)
	}
	return ret;
}

function calendar_getMouseX(e)
{
	var tempX = 0;
	if(document.all) { tempX = e.clientX + document.body.scrollLeft; }
	else { tempX = e.pageX; }
	
	if(tempX < 0) { tempX = 0; }
	
	return tempX;
}

function calendar_getMouseY(e)
{
	var tempY = 0;
	if(document.all) { tempY = e.clientY + document.body.scrollTop; }
	else { tempY = e.pageY; }
	
	if(tempY < 0) { tempY = 0; }
	
	return tempY;
}
