// JavaScript Document
  $(document).ready(function(){
  $('div.tab> div.april').hide();  
  $('a.ttnext').hide(); 
	$('div.tab  a.ttnext').click(function() {
   	$('div.april').hide();
   	$('a.ttnext').hide()
   	$('a.ttprev').show()
   	$('div.june').show()
	return false;
  });  
	$('div.tab  a.ttprev').click(function() {
   	$('div.june').hide()
   	$('a.ttprev').hide()
   	$('a.ttnext').show()
   	$('div.april').show()
	return false;
  });
});
// <![CDATA[
var months = ["January","February","March","April","May","June","July","August","September","October","November","December"];
var days = ["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"];
var results = false;
var emailpattern=/^([a-zA-Z0-9_.-])+@([a-zA-Z0-9_.-])+\.([a-zA-Z])+([a-zA-Z])+/;
var markeddays = new Array();
markeddays[3] = new Array();
markeddays[4] = new Array();
markeddays[5] = new Array();

var shortdays = ["Mon","Tue","Wed","Thu","Fri","Sat","Sun"];
var sorting = ["first","second","third","forth","fifth"];


function checkexams() {
	if($("#examtable tr").length < 2) { 
		$("#examlist").hide();
		$("span.examsemptytext").show();
	}
}

function examtabletext() {
	var rows = $("#examtable tr[class!='alt']");
	var cols;
	var str = "";
	for(var i=0;i<rows.length;i++) {
		$(rows[i]).children(":lt(4)").each(function(i) { str+= $(this).text()+((i<3) ? "|" : "");});
		str+=",";		
	}
	return str.substring(0,str.length-1);
}

function flasherror(errormsg) {
	$("#errormsg").html(errormsg).show().fadeOut(3400);	
}

$(document).ready(function() {
	$.getJSON("/timetable/timetable/getqual", function(data) {
		for(var i=0;i<data.length;i++)
			$("#qualifications").append($("<option />").val(data[i]).html(data[i]));
	});
	$.getJSON("/timetable/timetable/getsubj", function(data) {
		for(var i=0;i<data.length;i++)
			$("#subjects").append($("<option />").val(data[i]).html(data[i]));
	});

	var cal = new Calendar();
	cal.setYear(2012);
	cal.setMonth(3);
	cal.setAttachToElement($("div.april"));
	cal.setUseBlanksForMonths(true);
	cal.generateHTML();

	cal.setMonth(4);
	cal.setAttachToElement($("div.may"));
	cal.generateHTML();

	cal.setMonth(5);
	cal.setAttachToElement($("div.june"));
	cal.generateHTML();

	$("li.ttiCal a").click(function(e) {
		e.preventDefault();
		$("#timetablesearch").attr("action","/timetable/timetable/getical");
		var selectedspans = $("span[name^='s']");
		if(selectedspans.length > 0) {
			for(var i=0;i<selectedspans.length;i++) 
				$("#timetablesearch").append($("<input />").attr("type","hidden").attr("name","tids").val($(selectedspans[i]).attr("name").substring(1)));
			$("#timetablesearch").submit();
		} else {
			alert("You need to have at least 1 exam in your timetable to use this function.");
		}
	});

	var showmail = function(e) {
		e.preventDefault();
		$("#emailsuccess").remove();
		$("#emailtimetable").show("fast");
		$(this).unbind("click");
	};
	
	$("li.ttemail a").click(showmail);

	$("#emailbutton").click(function(e) {
		if(!$("#emailtt").val().match(emailpattern)) { flasherror("Please enter a valid email");}
		else {
			var text = examtabletext();
			var emailtext = $("#emailtt").val();
			if(text.length > 0) {
				var u = "/timetable/timetable/emailexams?ma="+$("#emailtt").val();
				u+="&e="+encodeURI(text);
				$.getJSON(u);
				$(this).parents("div:eq(0)").hide();
				$("#emailtt").val("Enter your email");
				$("li.ttemail a").click(showmail);
				$("<div />").attr("id","emailsuccess").html("An email has been sent to <strong>"+emailtext+"</strong> listing your exams.").insertAfter("#emailtimetable");
				
			} else { flasherror('There is nothing in your timetable to email'); }
		}
	});

	$("#searchbutton").click(function() {
		if($("#qualifications").val() == "" && $("#subjects").val() == "")
			$(this).parent().children("span[name='error']").show().fadeOut(3000);
			
		else {
			var q="/timetable/timetable/search?";
			if($("#qualifications").val() != "") q+="q="+$("#qualifications").val()+"&";
			if($("#subjects").val() != "") q+="s="+$("#subjects").val();

			$.getJSON(q, function(data) {
				$("#searchresults span").remove();
				if(data.length > 0) {
					$("#restable tr:gt(0)").remove();
					results = true;
					var linknames = "";
					var links = $("#examtable a"); 
					if(links.length > 0) {
						for(var i=0;i<links.length;i++) linknames += $(links[i]).attr("name"); 
					}
					for(var i=0;i<data.length;i++) {					
						var subject = $("<span />").attr("class","spSubject").append(data[i].subject);
						var qualif = $("<span />").attr("class","spQual").append(data[i].qualificationLevel);
						var date = new Date(data[i].examDate.time); 
						var dateStr = days[(date.getDay()==0?6:date.getDay()-1)]+" "+date.getDate()+" "+months[date.getMonth()]+" "+date.getFullYear()
							+", "+data[i].fromTime1+" - "+data[i].toTime1;
						var dateSpan = $("<span />").attr("class","spDate").append(dateStr);
						var link = $("<a />");
						var row = $("<tr />").append($("<td />").append(subject).append("<br />").append(qualif).append("<br />").append(dateSpan));
						if(linknames.length > 0 && linknames.indexOf(data[i].timetableId) > 0) { 
							$(link).attr({"class" : "ttRemove", "href" : "#", "title" : "Remove from timetable"}).html("Remove");
							$(row).attr("class","removed");								
						} else {
							$(link).attr({"class" : "ttAdd", "href" : "#", "title" : "Add to timetable"}).html("Add");
							$(row).attr("class","alt");							
						}
						$(link).attr("name","r"+data[i].timetableId).data('jsond',data[i]).click(function(e) { e.preventDefault();toggle($(this)); });
						$(row).append($("<td  />").attr("width","50px").append(link));
						$("#restable").append(row);
						$("#restable").show();			
					}					
				} else { 
						$("#restable").hide();
						$("#searchresults").append($("<span />").attr("class","noresults").html("No results found"));
						results = false;
				}
				$("#searchresults").css("display","block");
			});
		}		 
	});	
});

var toggle = function (element) {
	var jsonobj = element.data('jsond');
	var date = new Date(jsonobj.examDate.time);
	if($(element).parents("tr").attr("class") == "alt") {		
		var dateStr = days[(date.getDay()==0?6:date.getDay()-1)]+" "+date.getDate()+" "+months[date.getMonth()]+" "+date.getFullYear();
		var timeStr = jsonobj.fromTime1+" - "+jsonobj.toTime1;
		var link = $("<a />").attr({"class" : "ttRemove" , "title" : "Remove", "href" : "#", "name" : "e"+jsonobj.timetableId })
							 .html("Remove").click(function(e) {
								 e.preventDefault();
								 toggleResults(element);
								 removeFromExams(element);
								 removeFromTT(element, date);
								 $(this).parents("tr").remove();
								 checkexams();								  
							});
		var row = $("<tr />").append($("<td />").append(jsonobj.subject)).
							  append($("<td />").append(jsonobj.qualificationLevel)).
							  append($("<td />").append(dateStr)).
							  append($("<td />").append(timeStr)).
							  append($("<td />").append(link)).data("date",date);
		
		var rows = $("#examtable tr[class!='alt']");
		var inserted = false;
		for(var i=0;!inserted && i<rows.length ;i++) {
			if($(rows[i]).data("date").getDate() == date.getDate() && $(rows[i]).data("date").getMonth() == date.getMonth()) {
				var datetext = $(rows[i]).children("td:eq(3)").html();
				var rowDate = parseFloat(datetext);
				if(datetext.substr(datetext.indexOf(".")+4,2) == 'pm') rowDate += 12;
				datetext = jsonobj.fromTime1; 
				var newDate = parseFloat(datetext);
				if(datetext.substr(datetext.indexOf(".")+4,2) == 'pm') newDate += 12;
				
				if(rowDate > newDate) {
					$(rows[i]).before(row);
					inserted = true;
				}				
			}	
			else if($(rows[i]).data("date") > date) {
				$(rows[i]).before(row);
				inserted = true;				
			}	 
		}
		if(!inserted) $("#examtable").append(row);
		
		$(element).parents("tr").attr("class","removed");
		$(element).attr("class","ttRemove");
		$(element).attr("title","Remove from timetable");
		$("span.examsemptytext").hide();
		$("#examlist").show();

		// adding to timetable
		var dateStr2 = shortdays[(date.getDay()==0?6:date.getDay()-1)]+" "+date.getDate()+" "+months[date.getMonth()]+" "+date.getFullYear()
					  +", "+jsonobj.fromTime1+" - "+jsonobj.toTime1;
		  
		if(markeddays[date.getMonth()][date.getDate()] == null) {
			var link2 = $("<a />").click(function(e) { e.preventDefault(); }).
                                       attr({"href":"#", "name":"a"+date.getDate()}).append(date.getDate()).append($("<span />").addClass("hidden").append($("<span />").addClass("item1").addClass("items").append($("<strong />").append(jsonobj.subject)).
					    append("<br />").append(jsonobj.qualificationLevel).append("<br />").append(dateStr2).
					    append($("<span />").attr("name","s"+jsonobj.timetableId).addClass("first").addClass("itemremove").html("Remove "+jsonobj.subject).click(function(e) {
						    e.preventDefault();
						    toggleResults(element); 
						    removeFromExams(element);
						    removeFromTT(element, date);
						    checkexams();					    					    
					    }))).append($("<span />").addClass("hiddenfoot").html("&nbsp;"))); 
			markeddays[date.getMonth()][date.getDate()] = link2; 
			$("div."+months[date.getMonth()].toLowerCase()+" td:gt(6) span.d"+date.getDate()).replaceWith(link2);
	    } else { 
			var thelink = markeddays[date.getMonth()][date.getDate()];
			var newspan = $("<span />").addClass("item"+thelink.children("span").children().length).addClass("items").
						  append($("<strong />").append(jsonobj.subject)).append("<br />").append(jsonobj.qualificationLevel).append("<br />").append(dateStr2).
						  append($("<span />").attr("name","s"+jsonobj.timetableId).addClass("itemremove").addClass(sorting[thelink.children("span").children().length-1]).
						  html("Remove "+jsonobj.subject).click(function(e) {
							  e.preventDefault();
							  toggleResults(element); 
							  removeFromExams(element);
							  removeFromTT(element, date);
							  checkexams();
						  }));			  			  
			$(thelink).children("span").children("span.hiddenfoot").before(newspan);						
	    }
		
	} else {
		toggleResults(element);
		removeFromExams(element);
		removeFromTT(element, date);
		checkexams();		
	}
}

function removeFromTT(element, date) {
	var name = $(element).attr("name").substring(1);
	// if(document.getElementsByName('s'+name).length > 0) {
	if($(".timetable span[name='s"+name+"']").length > 0) {
		// var thespan = $(document.getElementsByName('s'+name)[0]);
		var thespan = $(".timetable span[name='s"+name+"']");
		if($(thespan).parent().hasClass("item1") && $(thespan).parent().next().hasClass("hiddenfoot")) { 
			var d = $(thespan).parents("a").html().substr(0,2);
	    	if(d.charAt(1) == '<') d = d.charAt(0);
		    $(thespan).parents("a").replaceWith($("<span />").addClass('d'+d).html(d)); 
		    markeddays[date.getMonth()][date.getDate()] = null;
		} else {
			if($(thespan).parent().next().attr("class") != "hiddenfoot") {
				$(thespan).parent().next().attr("class", $(thespan).parent().attr("class"));
				$(thespan).parent().next().children("span").attr("class", $(thespan).attr("class"));
			} 
			$(thespan).parent().remove();
			$(thespan).parents("a").focus();
		} 
	}	
}
function removeFromExams(element) {
	$("#examtable a[name='e"+$(element).attr("name").substring(1)+"']").parents("tr").remove();
}
function toggleResults(element) {
	$("#restable a[name='r"+$(element).attr("name").substring(1)+"']").attr("class","ttAdd").parents("tr").attr("class","alt");
}
// ]]>

