var ldajax = new Object();

// Some defaults:
ldajax.filter_id = '245'; //this can be a comma separated list of node ids
ldajax.detailLink = 'ld_detail_view.html'; // calendar widget will link to this page for a detail view of an event (while passing an event id)

// ******************************************************************
// wrapper for events by week display.  This doesn't do much now except for establish some defaults, but could be more featurefull in the future...
// Parameters: 
//		filter_id = node id of any category or geography that you want to filter by.
//		dateStamp = dateStamp (with thousandths) of desired default date for displaying items.
//		prevLink & nextLink = image or text for next and previous links
// ******************************************************************
ldajax.ldWeek = function (params) {
	var showfirst = false; // whether to show the detail view of the first event of the week
	this.nextLink = '&gt;&gt;';
	this.prevLink = '&lt;&lt;';
	if(params == undefined) params = {};
	if (params.filter_id != undefined) this.filter_id = params.filter_id
	if (params.nextLink != undefined) this.nextLink = params.nextLink;
	if (params.prevLink != undefined) this.prevLink = params.prevLink;

	if (params.dateStamp == undefined) params.dateStamp = new Date().getTime();

	var passed_in_id = this.viewpage();
	if(!passed_in_id) showfirst = true;

	this.getLdEvents(params.dateStamp, showfirst);
};

// show week of events at a time, with detail box for each event.
ldajax.getLdEvents = function (dateStamp, showfirst) {
	if(showfirst == undefined) showfirst = false;
	this.display_date = dateStamp = new Number(dateStamp);
	startStamp = new Date();
	endStamp = new Date();
	startStamp.setTime(dateStamp);
	endStamp.setTime(dateStamp + 604800000);
	startDate = $.datepicker.formatDate('yy-mm-dd', startStamp);
	endDate = $.datepicker.formatDate('yy-mm-dd', endStamp);

	// configure title for new list
	var today = new Date().getTime();
	if(Number(today) == dateStamp) { list_label = "This Week";
	} else { list_label = $.datepicker.formatDate('M d',startStamp) + ' - ' + $.datepicker.formatDate('M d',endStamp); }

	//clear out old list
	$("#event_list").html('');

	$.ajax({
		type: "GET",
		url: 'http://iutah.tv/nodeSearch/search_list?callback=?',
		data: { begDatetime: startDate, endDatetime: endDate, type: 'event', ajax: 'true', tids: this.filter_id}, 
		dataType: 'jsonp',
		success: function(items, stat) {
			var content = '';
			var utitle = '';
			if((ldajax.nextLinkImg != undefined) && (ldajax.prevLinkImg != undefined)) {
			$("#event_list").append('<h1 style="text-align:center;"><a href="#" onclick="return ldajax.last_week();"><img src="' + ldajax.prevLinkImg + 
									'" style="float:left;" /></a><a href="#" onclick="return ldajax.next_week();"><img src="' + 
									ldajax.nextLinkImg + '" style="float:right;"/></a>' + list_label + '</h1>');

			} else {
				$("#event_list").append('<h1 style="text-align:center;"><a href="#" onclick="return ldajax.last_week();">' + ldajax.prevLink + 
										'</a>&nbsp;' + list_label + '&nbsp;<a href="#" onclick="return ldajax.next_week();">' + 
										ldajax.nextLink + '</a></h1>');
			}
			if (items.data == undefined){
				$("#event_list ul").append('<li><strong>Sorry! No events this week.</strong></li>');
			} else {
				//start off the list
				var dofw = ldajax.getDoW(items.data.list[0].begDay);
				$("#event_list").append('<h2>' + dofw + 
					$.datepicker.formatDate(', MM d', ldajax.dateFromDB(items.data.list[0].begDay)) + 
					'</h2><ul id="iutah_event_list_' + dofw + '">');

				// if the detail box is not populated alreday, then show the first in the week
				if(showfirst) ldajax.getLdEvent(items.data.list[0].id);
				
				for (x in items.data.list) {
					var next_dofw = ldajax.getDoW(items.data.list[x].begDay);
					if(next_dofw != dofw) {
						$("#event_list").append('</ul><h2>' + next_dofw + 
							$.datepicker.formatDate(', MM d', ldajax.dateFromDB(items.data.list[x].begDay)) + 
							'</h2><ul id="iutah_event_list_' + next_dofw + '">');
						dofw = next_dofw;
					}
					utitle = items.data.list[x].uniqueTitle;
					time = utitle.substr(utitle.indexOf(':') + 1);
					content = '<li><a href="#" onclick="return ldajax.getLdEvent(' + items.data.list[x].id + ');" target="_blank">' + items.data.list[x].title + '</a>'
					content += '<br/>' + time + '</li>';
					$("#event_list ul#iutah_event_list_" + dofw).append(content);
				}
			}
		},
		error: function(req, stat, err) {
			alert("Error retrieving events: " + stat);
		}
	});

	return false;
};

// next and previous weeks
ldajax.last_week = function() { return this.getLdEvents(this.display_date - 604800000); };
ldajax.next_week = function() { return this.getLdEvents(this.display_date + 604800000); };

ldajax.getDoW = function(dstring) {
	var weekday=new Array(7);
	weekday[0]="Sunday";
	weekday[1]="Monday";
	weekday[2]="Tuesday";
	weekday[3]="Wednesday";
	weekday[4]="Thursday";
	weekday[5]="Friday";
	weekday[6]="Saturday";

	var d = ldajax.dateFromDB(dstring);

	dnum = d.getDay();
	return weekday[dnum];
};
ldajax.dateFromDB = function(dstring) { 
	var d = new Date;
	d.setTime(Date.parse(dstring.replace(/-/g,'/'))); 
	return d;
};

ldajax.getLdEvent = function(eventid) {
	//clear out old list
	$("#event_detail div").each(function(){ $(this).html('');});
	$("#event_detail").slideDown(800);

	$.ajax({
		type: "GET",
		url: 'http://iutah.tv/nodeEvent/head/' + eventid + '?callback=?',
		data: { ajax: 'true'},
		dataType: 'jsonp',
		success: function(e_info, stat) {
			if (e_info.data == undefined){
				$("#event_detail").append('<strong>Sorry! Error ocurred.</strong>');
			} else {
				// image
				if(e_info.data.node.main_photo_id != '') $('#event_detail img').attr('src',e_info.data.node.main_photo_id).css('width','135px').show();
				else if(e_info.data.node.icon_photo_id != '') $('#event_detail img').attr('src',e_info.data.node.icon_photo_id).css('width','50px').show();
				else $('#event_detail img').hide();

				// title
				$('#event_detail h2').html(e_info.data.node.title);   

				// when
				for(x in e_info.data.times) {
					$('#event_when').append(ldajax.formatDbDateStr(e_info.data.times[x].begDay) + ": " + ldajax.parseDbTime(e_info.data.times[x].begTime) + '<br/>');   
				}

				// where
				try { //getting tags returned is pretty variable.  Old way: if(e_info.data.tags.entity != undefined && e_info.data.tags != null) {
					for (y in e_info.data.tags.entity) {
						if(e_info.data.tags.entity[y].tag_type == 'location') {
							$('#event_where').append(e_info.data.tags.entity[y].title + "<br/>" + e_info.data.tags.entity[y].street1 + ", " + e_info.data.tags.entity[y].city);    
						}
					}
				} catch (err) {$('#event_where').append("<br/>No Location Provided.");}    



				// Details
				$('#event_desc').append(e_info.data.node.content);    
				$('#event_desc').append('<a href="http://iutah.tv/event/view/' + e_info.data.node.id + '" target="_blank">View in iUtah</a>');    
			}
		},
		error: function(req, stat, err) {
			alert("Error retrieving events: " + stat);
		}
	});
	return false;
}

// format a database returned date string
ldajax.formatDbDateStr = function(dstring, format) { 
	if (format == undefined) format = 'MM d';
	var d = new Date;
	d.setTime(Date.parse(dstring.replace(/-/g,'/'))); 
	return $.datepicker.formatDate(format, d);
};
// format a database returned time string
ldajax.parseDbTime = function(tstring) {
	var ampm = 'am';
	tstring = tstring.split(':');
	if (tstring[0] > 12) {
		tstring[0] -= 12;               
		ampm = 'pm';
	} else if (tstring[0].substr(0,1) == '0') tstring[0] = tstring[0].substr(1,1);

	return tstring[0] + ':' + tstring[1] + ' ' + ampm;
};

ldajax.viewpage = function() { 
	var qstring = window.location.search;
	if(qstring.indexOf('event_id') > -1) {
		qstring = qstring.substring(qstring.indexOf('event_id') + 9);
		if(qstring.indexOf('&') > -1) qstring = qstring.substring(0, qstring.indexOf('&'));
		ldajax.getLdEvent(qstring);
		return true;
	} else {
		return false;
		//$("#event_detail").append('<strong>Sorry! No event id submitted.</strong>');
	}
};
			


//**************************************************************************************
// Calendar Widget
//**************************************************************************************
ldajax.calendar = function() {
	$("#iutah_cal").datepicker({ dateFormat: '@',
		onSelect: function(dateStamp) {
			ldajax.calendarSelect(dateStamp);
		}
	});
	var today = new Date();
	this.calendarSelect(today);
};

ldajax.calendarSelect = function(dateStamp) {
	dateStamp = new Number(dateStamp);
	startStamp = new Date();
	endStamp = new Date();
	startStamp.setTime(dateStamp);
	endStamp.setTime(dateStamp + 86400000);
	startDate = $.datepicker.formatDate('yy-mm-dd', startStamp);
	endDate = $.datepicker.formatDate('yy-mm-dd', endStamp);
	displayDate = $.datepicker.formatDate('DD, MM d',startStamp);

	//construct link correctly
	var qstrchar = '?';
	if(ldajax.detailLink.indexOf('?') > -1) qstrchar = '&';

	$.ajax({
		type: "GET",
		url: 'http://iutah.tv/nodeSearch/search_list?callback=?',
		data: { begDatetime: startDate, endDatetime: endDate, type: 'event', ajax: 'true', tids: ldajax.filter_id}, 
		dataType: 'jsonp',
		success: function(items, stat) {
			$("#event_detail span").html(displayDate);
			$("#event_detail ul").html("");
			if (items.data == undefined){
				$("#event_detail ul").append('<li><strong>No Events</strong></li>');
			} else {
				for (x in items.data.list) {
					$("#event_detail ul").append('<li><a href="' + ldajax.detailLink + qstrchar + 'event_id=' + items.data.list[x].id + '">' + items.data.list[x].title + '</a></li>');
				}
			}
		},
		error: function(req, stat, err) {
			alert("Error retrieving events: " + stat);
		}
	});
	$(document).ready(function() {
	 // toggles the slickbox on clicking the noted link  
		$("#iutah_cal").click(function () {
		$('#event_detail').slideDown(600);
		
		
		 });
       
  });

}


