﻿// JScript File

function CompareDates( fDate, compType, sDate )
{
	if( (typeof fDate) == "string" )
		fDate = new Date(fDate);

	if( (typeof sDate) == "string" )
		sDate = new Date(sDate);
		
	var dtNumf = fDate.getFullYear() + "" + ( fDate.getMonth() > 9 ? "" : "0" ) + (fDate.getMonth() + 1) + (fDate.getDate() < 10 ? "0" : "" ) + fDate.getDate();
	var dtNums = sDate.getFullYear() + "" + ( sDate.getMonth() > 9 ? "" : "0" ) + (sDate.getMonth() + 1) + (sDate.getDate() < 10 ? "0" : "" ) + sDate.getDate();
	
	switch( compType )
	{
		case "<": return (dtNumf < dtNums); break;
		case "<=": return (dtNumf <= dtNums); break;
		case ">": return (dtNumf > dtNums); break;
		case ">=": return (dtNumf >= dtNums); break;
		case "==": return (dtNumf == dtNums); break;
	}
}

function UpdateCalendar( result )
{
	var xmlDoc, cal_id, cal_title, cal_description;
	
	
	var flags = parseInt( GetElementVal( "flags", result ) );
	var daysofweek, cal_time = "";
	var checkdate;
	var tds = document.getElementsByTagName( "div" );
	var start_day = parseInt( GetElementVal( "start_day", result ) );
	var start_month = parseInt( GetElementVal( "start_month", result ) );
	var start_year = parseInt( GetElementVal( "start_year", result ) );
	var drStart = GetElementVal( "begin_date", result ), drEnd = GetElementVal( "date_end", result );
	
	cal_id = GetElementVal( "calendar_id", result );
	cal_title = GetElementVal( "title", result );
	cal_description = GetElementVal( "description", result );

	cal_time = GetElementVal( "time_start", result );
	
	
	if( drStart != null && drStart != "" )
		drStart = drStart.substring(5, 7) + "/" + drStart.substring( 8, 10 ) + "/" + drStart.substring(0, 4)
		
	if( drEnd != null && drEnd != "" )
		drEnd = drEnd.substring(5, 7) + "/" + drEnd.substring( 8, 10 ) + "/" + drEnd.substring(0, 4)
		
	if( cal_time != "" )
		cal_time = cal_time + "-" + GetElementVal( "time_end", result );
		
	if( !( flags & ( 4 | 8 | 16 | 32 ) ) )
	{
		for( var x = 0; x < tds.length; x++ )
		{
			checkdate = new Date(tds[x].id.replace( /td/g, "" ).replace( /-/g, "/" ));
			if( (checkdate.getMonth() + 1) == start_month && checkdate.getDate() == start_day && checkdate.getFullYear() == start_year )
			{
				AddEventToTd( tds[x], cal_id, cal_title, cal_description, cal_time );
				x = tds.length;
			}
		}
	} else
		switch( flags & ( 4 | 8 | 16 | 32 ) )
		{
			case 4: //Daily
			case 8: //Weekly
				daysofweek = GetElementArray( "day_of_week", "day", result );
				for( var x = 0; x < tds.length; x++ )
				{
					checkdate = new Date(tds[x].id.replace( /td/g, "" ).replace( /-/g, "/" ));
					
					if( MemberArray( daysofweek, checkdate.getDay() ) != -1 && ( drStart == "" || CompareDates(drStart, "<=", checkdate) ) 
						&& ( drEnd == "" || CompareDates(drEnd, ">=", checkdate) ) )
						AddEventToTd( tds[x], cal_id, cal_title, cal_time ); 
				}	
				break;
			case 16: //Monthly
				var dayofweek = parseInt( GetElementVal( "day", result ) );
				var weekplace = parseInt( GetElementVal( "week_place", result ) );
				var day_count = 0

				for( var x = 0; x < tds.length; x++ )
				{
					checkdate = new Date(tds[x].id.replace( /td/g, "" ).replace( /-/g, "/" ));

					if( start_day )
					{
						if( checkdate.getDate() == start_day && ( drStart == "" || CompareDates(drStart, "<=", checkdate) ) 
							&& ( drEnd == "" || CompareDates(drEnd, ">=", checkdate) ) )
						{
							AddEventToTd( tds[x], cal_id, cal_title, cal_time );
							x = tds.length;
						}
					} else {
						if( dayofweek == checkdate.getDay() && day_count == weekplace && ( drStart == "" || CompareDates(drStart, "<=", checkdate) ) 
							&& ( drEnd == "" || CompareDates(drEnd, ">=", checkdate) ) )
						{
							AddEventToTd( tds[x], cal_id, cal_title, cal_time );
							x = tds.length;
						} else if( dayofweek == checkdate.getDay() && tds[x].getElementsByTagName( "div" )[0].className != "overlap" )
							day_count += 1;
					}
				}
				break;
			case 32: //Yearly
				if( !start_month || !start_day ) break;

				for( var x = 0; x < tds.length; x++ )
				{
					checkdate = new Date(tds[x].id.replace( /td/g, "" ).replace( /-/g, "/" ));
					
					if( ( checkdate.getMonth() + 1 ) == start_month && checkdate.getDate() == start_day && ( drStart == "" || CompareDates(drStart, "<=", checkdate) ) 
						&& ( drEnd == "" || CompareDates(drEnd, ">=", checkdate) ) )
						AddEventToTd( tds[x], cal_id, cal_title, cal_description, cal_time );
				}
				
				break;
			default:
		}
}

function AddEventToTd( obTd, calendar_id, calendar_title, calendar_descrip, time_string )
{
	var obOl = obTd.getElementsByTagName( "ol" )[0];
	var apLi = document.createElement( "li" );
	var tmpDt = obTd.id.replace( /td/g, "" ).split( "-" );
	var tmp_title;
	
	if( !obOl ) return;
	
	if( calendar_title.length > 21 )
		tmp_title = calendar_title.substr( 0, 18 ) + "&#8230;";
	else
		tmp_title = calendar_title;
		
	apLi.id = obTd.id + "cal" + calendar_id;
	
	apLi.innerHTML = "<a href=\"event.aspx?calendar_id=" + calendar_id + "&month=" + tmpDt[0] + "&day=" + tmpDt[1]
		+ "&year=" + tmpDt[2] + "\" " 
		+ "onMouseOver=\"showToolTip( 'calDetail" + calendar_id + "-" + obTd.id.replace( /-/g, "") + "', event, 'event_brief' )\" " 
		+ "onMouseOut=\"showToolTip( 'calDetail" + calendar_id + "-" + obTd.id.replace( /-/g, "") + "', event, 'print_only' )\" "
		+ ">"+ tmp_title + "</a>"
		+ "<div class=\"print_only\" id=\"calDetail" + calendar_id + "-" + obTd.id.replace( /-/g, "") + "\">"
		+ "<h4>" + calendar_title + "</h4>" + ( time_string != "" ? "<p class=\"event_time\">" + time_string + "</p>" : "" ) + "<p>" + calendar_descrip + "</p></div>";

	var sibs = obOl.getElementsByTagName( "li" );
    if( sibs.length > 0 )
    {
		if( sibs.length > 4 )
		{
			if( sibs[4].innerHTML.indexOf( "More" ) > -1 )
				obOl.removeChild( sibs[3] );
			else
				sibs[4].innerHTML = "<a href=\"day.aspx?month=" + tmpDt[0] + "&day=" + tmpDt[1] + "&year=" + tmpDt[2] + "\">More&#8230;</a>";
		}
        obOl.insertBefore( apLi, sibs[0] );
    } else
		obOl.appendChild( apLi );
	
	Fat.fade_element( apLi.id, 30, 3500, "#FFFFCC" );
}

function ChangeDate() {
    var ahref = document.getElementById("aMonthYear");

    if (ahref.style.display == "none") {
        ahref.style.display = "";
        document.getElementById("selMonthYear").style.display = "none";
        return;
    }

    ahref.style.display = "none";
    document.getElementById("selMonthYear").style.display = "";
}

function UpdateViewDate(ob, cal_type) {
    ob.href += "?month=" + GetSelectVal("selectMonth") + "&year=" + GetSelectVal("selectYear") + "&type=" + cal_type;
}

function mouseX(evt) {
	if (evt.pageX)
		return evt.pageX;
	else if (evt.clientX)
		return evt.clientX + (document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft);
	else
		return 0;
}

function mouseY(evt) {
	if (evt.pageY)
		return evt.pageY;
	else if (evt.clientY)
		return evt.clientY + (document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop);
	else
		return 0;
}

function showToolTip(id, event, css_class) {
	var ob = document.getElementById(id);

	if (ob.parentNode.id != document.body.id) {
		ob.parentNode.removeChild(ob);
		document.body.appendChild(ob);
	}

	ob.style.top = (mouseY(event) + 2) + "px";
	ob.style.left = (mouseX(event) + 10) + "px";

	ob.className = css_class;
}


function GetSelectVal(elementId) {
	var elOb = document.getElementById(elementId);

	if (!elOb) return "";

	return elOb[elOb.selectedIndex].value;
}
