var WTF = {};

WTF.vars = {
	// directions for calendar (classes)
	up : "up",
	down : "down",
	left : "left",
	right : "right",
	// other
	onData : "on",
	list : "list", 
	grid : "grid",
	tabs : '<div class="tabs clearfix"><div id="tabCalendar" class="tab">Calendar View<\/div><div id="tabList" class="tab">Lists View<\/div><\/div>',
	ajaxCl : 'calAjax',
	ajaxGfx : '../../_res/images/cal-ajax-loader.gif'
}

WTF.closeDay = function(e){
	$('#calBig.grid div.calDayData').hide().parent().removeClass(WTF.vars.onData);
	e.stopPropagation();
};

WTF.toggleTab = function(obj){
	if (obj.id == 'tabCalendar') {
		setCookie('tablist','false',1);
		$('#tabCalendar').addClass(WTF.vars.onData);
		$('#tabList').removeClass(WTF.vars.onData);
	} else {
		setCookie('tablist','true',1)
		$('#tabCalendar').removeClass(WTF.vars.onData);
		$('#tabList').addClass(WTF.vars.onData);
	};
	$(obj).blur();
};

WTF.setupGrid = function(){
	// IE6- rules
	if ($.browser.msie == true && $.browser.version < 7) {
		$('#calBig #calDays ul.calDayShort li:first-child').addClass('first-child');
		$('#calBig #calHeader ul li:first-child').addClass('first-child');
		$('#calBig.grid #calDays li.data').hover(
			function(){
				$(this).addClass('hover')
			},
			function(){
				$(this).removeClass('hover')
			}
		)
	}
	
	// show close links for big calendar
	if ( $('#calBig.grid div.calDayData span.close').size() < 1 ) {
		$('#calBig.grid div.calDayData').prepend('<span class="close">Close</span>');
	}
	$('#calBig.grid div.calDayData span.close').show().click(WTF.closeDay);

	// if grid is not set up
	var strs = "li." + WTF.vars.up + ", li." + WTF.vars.down + ", li." + WTF.vars.left + ", li." + WTF.vars.right;
	if ( $(strs, '#calBig.grid').size() < 1 ) {
		// get current Year and Month
		var yearMonth = $('#calBig #calHeader').get(0);
			yearMonth = yearMonth.className.split(" ");
		var month = yearMonth[0]-1; 
		var year = yearMonth[1];
		var start = new Date(year, month).getDay();

		$('#calBig #calDays li.data').each(function() {
			var thisDayNum = parseInt($(this).find('div:first-child').text());
			var thisDate = new Date(year, month, thisDayNum).getDay();
			// what day of week to place right or left
			(thisDate >= 4) ? $(this).addClass(WTF.vars.left) : $(this).addClass(WTF.vars.right);
			// ((start date + day) / 7)+1 = what week is it? up or down
			var work = parseInt(((start + thisDayNum)/7)+1);
			(work > 3) ? $(this).addClass(WTF.vars.up) : $(this).addClass(WTF.vars.down);
		});
	};
	
	// show day detail
	$('#calBig li.data').click(function(event) {
		WTF.closeDay(event);
		$(this).addClass(WTF.vars.onData).find('div.calDayData').show();
	});

	// TODO: this needs to key off the "body" element
	$('#calBig.grid').parent().click(WTF.closeDay);
}

WTF.setDay = function(txtNode){
	$('#instr').remove();
	$('#cal span.on').removeClass('on');
	$(txtNode).addClass('on');
	$('#highlight').text($(txtNode).text())
};

WTF.setLoader = function(){
	$('#hpCal div.p10').empty().html('<img class="' + WTF.vars.ajaxCl + '" src="' + WTF.vars.ajaxGfx + '" alt="loading..." />');
};

WTF.setErr = function(){
	window.setTimeout(function(){
		$('#hpCal div.p10').empty().html('<p>Error loading content. Please refresh and try again.</p>');
	}, 500);
};

WTF.loadSuc = function(jaxData){
	window.setTimeout(function(){
		$('body').append('<div id="calSet" style="display:none"></div>');
		var zzz = $('#calSet').html(jaxData).find('#calForm').html();
		$('#hpCal div.p10').hide().empty().html(zzz).fadeIn();
		$('#calSet').remove();
		WTF.buildCal();
	}, 500);	
};

WTF.buildCal = function(){
	// set dynamic
	$('#cal.small .calDayShort').addClass('dyn').each(function(){
		if ($(this).parent()[0].firstChild.nodeType == 3){
			$($(this).parent()[0].firstChild).wrap('<span></span>');
		};
	});
	
	var fadeSp = 'fast';
	
	// no stuff
	if ( $('#cal.small li.data').size() == 0 ) {
		WTF.setInstruction(0);
	// todays stuff
	} else if ( $('#cal.small li.today').find('.calDayShort').size() > 0 ){
		var x = $('#cal.small li.today .calDayShort').fadeIn(fadeSp).parent().find('span').eq(0);
		WTF.setDay( x );
	// next days stuff
	} else if ( $('#cal.small li.today').children().size() == 1 ) {
		var x = $('#cal.small li.today').nextAll('li.data').eq(0).find('.calDayShort').fadeIn(fadeSp).parent().find('span').eq(0);
		WTF.setDay( x );
		WTF.setInstruction(1);
	// first day (no 'today')
	} else if ( $('#cal.small li.today').find('.calDayShort').size() == 0 ) {
		var x = $('#cal.small li.data:eq(0) .calDayShort').fadeIn(fadeSp).parent().find('span').eq(0);
		WTF.setDay( x );
	};
	
	// add click events
	$('#cal.small li.data').addClass('click').click(function(){
		$('#cal.small li.data .calDayShort:visible').fadeOut(fadeSp);
		WTF.setDay( $(this).find('div.today').find('span').eq(0) );
		$(this).find('.calDayShort').fadeIn(fadeSp);
	});
	
	// set up ajaxie stuff
	var nextPrev = $('#hpCal div.headlinetools a');
	nextPrev.eq(0).click(function(){
		WTF.setLoader();
		$.ajax({
			type : "GET",
			url : $(this).attr('rel'),
			timeout : 5000,
			global : false,
			//data : encodeURI(new Date()),
			error : function(){ WTF.setErr() },
			success: function(data){ WTF.loadSuc(data) },
			dataType:"html"
		});
		return false;
	});
	nextPrev.eq(1).click(function(){
		WTF.setLoader();
		$.ajax({
			type : "GET",
			url : $(this).attr('rel'),
			timeout : 5000,
			global : false,
			//data : encodeURI(new Date()),
			error : function(){ WTF.setErr() },
			success: function(data){ WTF.loadSuc(data) },
			dataType:"html"
		});
		return false;
	});	
}

WTF.setInstruction = function(yesNo){
	var txt = (yesNo) ? 'Select a day to the left to see the day\'s information.' : 'No information for this month. You may<br \/>click "Previous" or "Next" to see another month.';
	$('#calHighlights').append('<p id="instr">' + txt + '</p>');
};

$(document).ready(function() {
	// if big calendar exists, set it up
	if ( $('#calBig').size() > 0 ) {
		$('#tabs').replaceWith(WTF.vars.tabs);
		// start with calendar view even tho page defaults to list
		if ($('#calBig').get(0).className == "list") {
			$('#calBig').removeClass("list").addClass("grid");
		}
		WTF.setupGrid();
	};

	// set up small calendar if present
	if ($('#cal.small').size() > 0){
		WTF.buildCal();
	}

	// build tab functions
	// TODO: this var x will need to change
	var x = $('div#filter').next('div');
	$('#tabList').click(function(){
		WTF.toggleTab(this);
		$(x).attr('class','list').attr('id','calBig');
		// destroy grid bindings
		$('li.data').unbind('click').find('div.calDayData').show();
		$('#calBig.list div.calDayData span.close').hide();
		return false;
	});
	$('#tabCalendar').click(function(){
		WTF.toggleTab(this);
		$('li.data').removeClass('on').find('div.calDayData').hide();
		$(x).attr('class','grid').attr('id','calBig');
		WTF.setupGrid();
		return false;
	});
	
	(getCookie('tablist') == 'true') ? $('#tabList').trigger('click') : $('#tabCalendar').trigger('click');
});


//WTF

// configuration variables
var animspeed = 500; // reuseable value for animation times. in milliseconds.
var txt_expand = "Expand";
var txt_collapse = "Collapse";
var txt_mailLink = "mailto:";
	txt_mailLink+= "?subject=Wolf Trap Show! Let's Go!";
	txt_mailLink+= "&body=" + location.href;
// reuseable functions
function getCookie( name ) {
	var start = document.cookie.indexOf( name + "=" );
	var len = start + name.length + 1;
	if ( ( !start ) && ( name != document.cookie.substring( 0, name.length ) ) ) {
		return null;
	}
	if ( start == -1 ) return null;
	var end = document.cookie.indexOf( ';', len );
	if ( end == -1 ) end = document.cookie.length;
	return unescape( document.cookie.substring( len, end ) );
}

function setCookie( name, value, expires, path, domain, secure ) {
	var today = new Date();
	today.setTime( today.getTime() );
	if ( expires ) {
		expires = expires * 1000 * 60 * 60 * 24;
	}
	var expires_date = new Date( today.getTime() + (expires) );
	document.cookie = name+'='+escape( value ) +
		( ( expires ) ? ';expires='+expires_date.toGMTString() : '' ) + //expires.toGMTString()
		( ( path ) ? ';path=' + path : '' ) +
		( ( domain ) ? ';domain=' + domain : '' ) +
		( ( secure ) ? ';secure' : '' );
}
// jQuery code
$(document).ready(function(){
	// add a class of "last" to the last LI in every UL
	$('ul').each(function(){
		$('li:last',this).addClass('last');
	});
	// adjust icons in navigation lists
	$('#leftnav ul.nav li li li.active').parents('li').find('a:first').addClass('open');
	// replace HR tags with a DIV using the class "hr"
	$('hr').wrap('<div class="hr"><\/div>');
	// mild adjustment for two-column bullet lists
	$('.two-col li:odd').css('float','right');
	$('.two-col li:even').css('clear','left');
	// right rail tabbed module
	$('div#radiovideo div.tabs a').click(function(){
		var switchto = $(this).attr('class');
		$(this).parents('#radiovideo').removeClass('radio').removeClass('video').addClass(switchto);
		this.blur();
		return false;
	});
	// search page column switcher
	$('#col1 .insert .p10').prepend('<div class="switcher"><a class="collapse" href="#">'+txt_collapse+'<\/a><\/div>');
	$('#col2 .insert .p10').prepend('<div class="switcher"><a class="expand" href="#">'+txt_expand+'<\/a><\/div>');
	$('#col1 .switcher a').click(function(){
		if(this.className=='collapse'){
			$('#col1').removeClass('grid-ad').addClass('grid-ab');
			$('.grid-ab').css({
				margin:'10px 0 10px 10px',
				width:'315px'
			});
			$('#col2').removeClass('grid-ef').addClass('grid-cf');
			$(this).removeClass('collapse').addClass('expand').text(txt_expand);
			$('#col2 .switcher a').removeClass('expand').addClass('collapse').text(txt_collapse);
			setCookie('searchcol','col2',1,'/'); // set col2 as open
		}else{
			$('#col1').removeClass('grid-ab').addClass('grid-ad');
			$('.grid-ad').attr('style','');
			$('#col2').removeClass('grid-cf').addClass('grid-ef');
			$(this).removeClass('expand').addClass('collapse').text(txt_collapse);
			$('#col2 .switcher a').removeClass('collapse').addClass('expand').text(txt_expand);
			setCookie('searchcol','col1',1,'/'); //set col1 as open
		}
		this.blur();
		return false;
	});
	$('#col2 .switcher a').click(function(){
		if(this.className=='expand'){
			$('#col1').removeClass('grid-ad').addClass('grid-ab');
			$('.grid-ab').css({
				margin:'10px 0 10px 10px',
				width:'315px'
			});
			$('#col2').removeClass('grid-ef').addClass('grid-cf');
			$(this).removeClass('expand').addClass('collapse').text(txt_collapse);
			$('#col1 .switcher a').removeClass('collapse').addClass('expand').text(txt_expand);
			setCookie('searchcol','col2',1,'/'); // set col2 as open
		}else{
			$('#col1').removeClass('grid-ab').addClass('grid-ad');
			$('.grid-ad').attr('style','');
			$('#col2').removeClass('grid-cf').addClass('grid-ef');
			$(this).removeClass('collapse').addClass('expand').text(txt_expand);
			$('#col1 .switcher a').removeClass('expand').addClass('collapse').text(txt_collapse);
			setCookie('searchcol','col1',1,'/'); // set col1 as open
		}
		this.blur();
		return false;
	});
	if($('#col1').get(0) && getCookie('searchcol')=='col2'){
		$('#col1').removeClass('grid-ad').addClass('grid-ab');
		$('.grid-ab').css({
			margin:'10px 0 10px 10px',
			width:'315px'
		});
		$('#col2').removeClass('grid-ef').addClass('grid-cf');
		$('#col1 .switcher a').removeClass('collapse').addClass('expand').text(txt_expand);
		$('#col2 .switcher a').removeClass('expand').addClass('collapse').text(txt_collapse);
	}
	$("li a.emailLink").attr("href", txt_mailLink);
});