//ViewControlFunctions2
//functions called by the showCalAppVCF() function in functions.js
//these functions only deal with taking the event objects created in VCFFuncs1.js and displaying them to the user


function displayEventList(eventMap){ //pass in the semester to view also?
	//how often does this function get called? A: Twice, why?
	//this needs to have a filter, which will filter out anything not of the current Semester

	
	// 1) iterate through the objects and only add them to the list if they have the current Book Date (calXML)
	// 2) same as above, but check the Semester Tag
	//SummerBegin = April 21; SummerEnd = July 18; have year pull in dynamically in external file
	
	
	//var semesterBegin = '4/21/2008'; //store these in session object, after being pulled from an external JS file
	//var semesterEnd = '6/28/2008';
	//var SummerEnd = '7/18/2008';
	var currentDate = session.getAttribute('semester').curDate;
	var curSemester = session.getAttribute('semester').curSemester;
	
	var semesterBegin = session.getAttribute('semester')[curSemester].begin;//test only, was SummerBegin
	var semesterEnd = session.getAttribute('semester')[curSemester].end;//test only, was SummerEnd
	//var semesterBegin = strToDate('4/21/2008');
	//var semesterEnd = strToDate('7/18/2008');
	
	var eventList = new Array;
	
	/*
	if(currentDate >= semesterBegin && currentDate <= semesterEnd){ //test only
		//alert('currentDate is within the bounds');
	}else{
		//alert('currentDate is outside of the bounds');
	}*/
	
	
	for (objAttribute in eventMap){ //foreach loops are bad, but only way to loop through the eventMap object
		//filter out dates that fall outside the range
		//sendConsole("VCFuncs2.js:32 - " + eventMap[objAttribute][0].date);
		//loop through all the event iterations
		var currentObjLength = eventMap[objAttribute].length;
		for(var j=0; j<currentObjLength; j++){
			
			//sendConsole("VCFuncs2.s:40 - " + objAttribute + " j:" + j);
			var eventDate = strToDate(eventMap[objAttribute][j].getDate());
			
			if (eventDate){//if the event instance has a date (it's scheduled in CalXML...)
				//if any of the date instances are within the bounds of SemesterBegin & SemesterEnd, add it to the event list
				
				if(isWithinDateRange(semesterBegin, semesterEnd, eventDate) || session.getAttribute('curAreaSettings').area != 'Outdoor' ){
					eventList.push(objAttribute);
					//end loop if 1 is found
					break;
				}
			}else{ //if it's in customXML
				if(isSemesterOffered(eventMap[objAttribute][j].getSemester(), curSemester)){
					eventList.push(objAttribute); //display all of the semester events from 
				}
			}
		}
		
	}
	
	eventList.sort();
	session.addAttribute('curEventList', eventList);
	//alert('eventList should be full: ' + eventList);//test only
	
	//output the eventList
	var output = '';
	var eventListLength = eventList.length;
	for(var i=0; i < eventListLength; i++){
		//alert('ie7 test');//test only -- ie doesn't enter this block
		//return; //test only
		
		var eventAmt = '';
		if(getEventDates(eventList[i]).length > 1){ //don't display number of time this event occurs if it's only 1
			eventAmt = " (" + getEventDates(eventList[i]).length + ")";
		}
		
		var className = '';
		if(getEventDates(eventList[i]).length){className = "class='active' ";} //if the event is scheduled add the classname
		
		output += "<li><a href='#' " + className + "onclick=\"switchActiveLink(this); displayRightCol('" + escapeQuotes(eventList[i]) + "'); return false; \">" + eventList[i] + eventAmt + "</a></li>";
	}
	
	if (eventListLength == 0){
		output = "No events have been scheduled for this semester yet";
		document.getElementById('eventList').innerHTML = output;
		return;
	}
	
	document.getElementById('eventList').innerHTML = output;
	//sendConsole("VCFuncs2.js:76 - EventList: " + output);
	//alert("output is: " + output);//test only, empty in IE7
	//document.getElementById('eventList').innerHTML = "testing in IE7";//test only
	
	displayRightCol(eventList[0]); //display the content for the 1st event
	switchActiveLink(); //make the first event tab active
}


function displayRightCol(eventName, bookDate){//change this name?; this will change by area, keep it dynamic, use a hashmap? or use some other form of seperation
	if(!eventName){return};
	var eventMap = session.getAttribute('eventMap');
	var currentNode = eventMap[eventName];
	var semesterObj = session.getAttribute('semester');
	
	//for outdoor first
	
	//select which date instance we're using of the current eventObject
	if (bookDate){
		//find the i of the bookdate
		var num_current = currentNode.length;
		for(var i=0; i < num_current; i++){
			if(currentNode[i].getDate() == bookDate){
				break;
			}
		}
	}
	else{
		var i = 0;
	}
	
	
	//build title & description
	document.getElementById('event_title').innerHTML = truncateTitle(currentNode[i].getName(), 32);
	document.getElementById('main_description').innerHTML = currentNode[i].getDescription();
	
	//build detail tab
	document.getElementById('event_date').innerHTML = buildDateDropdown(currentNode[i], bookDate);
	document.getElementById('event_time').innerHTML = currentNode[i].getTime();
	
	//alert(currentNode[i].getRoomName() + "room Name" + currentNode[i].getOffLoc() + "Off Location");
	
	if (currentNode[i].getOffLoc() == undefined){
		document.getElementById('event_place').innerHTML = currentNode[i].getRoomName();//getOffLoc(); //use the offCampus Location, else use onCampus
	}else{
		document.getElementById('event_place').innerHTML = currentNode[i].getOffLoc();
	}
	
	//document.getElementById('event_new_date').innerHTML = currentNode[i].getNewDate();

	document.getElementById('event_cost').innerHTML = currentNode[i].getCost();
	
	if((session.getAttribute('curAreaSettings').area == 'Social') && (currentNode[i].getName() == 'Debate Tournament')){
		document.getElementById('title_cost').innerHTML = 'Prize';
		document.getElementById('temp_date').innerHTML = '11/15/08';
		document.getElementById('temp_date').style.display = "block";
	}else if(session.getAttribute('curAreaSettings').area == 'Social'){
		document.getElementById('title_cost').innerHTML = 'Cost';
		document.getElementById('temp_date').style.display = "none";
	}

	document.getElementById('event_contact').innerHTML = currentNode[i].getContactName();
	//document.getElementById('event_gear_list').innerHTML = currentNode[i].getGearList();
	
	//if there are no dropdown dates scheduled, it's not scheduled, so hide the details tab
	if(buildDateDropdown(currentNode[i], bookDate)){
		showDetailTab();
	}else{
		hideDetailTab();
	}
	
	//build white col -- navigate to the last object in the event array
	
/*	if(session.getAttribute('curAreaSettings').area == 'Outdoor'){
		document.getElementById('imgBar_img').src = currentNode[i].getImageURL()
		if(document.getElementById('imgBar_img').src = currentNode[i].getImageURL()){
		}
		else{document.getElementById('imgBar_img').src = "http://activities.byui.edu/images_db/webButtons/outdoor_default.png";
	}
/*	
	if(session.getAttribute('curAreaSettings').area == 'Service'){
		document.getElementById('imgBar_img').src = currentNode[i].getImageURL()
		if(document.getElementById('imgBar_img').src  != undefined){
		}
		else{document.getElementById('imgBar_img').src = "http://activities.byui.edu/images_db/webButtons/outdoor_default.png";
	}
	
*/
	document.getElementById('imgBar_img').src = currentNode[i].getImageURL();
	
	//window.alert(document.getElementById('imgBar_img').src);
	
	
	
	if (currentNode[i].getDate() && isWithinDateRange(semesterObj[semesterObj.curSemester].begin, semesterObj[semesterObj.curSemester].end, strToDate(currentNode[i].getDate()) ) || (session.getAttribute('curAreaSettings').area != 'Outdoor' && currentNode[i].getDate())){ //if this event is scheduled in the calendar... AND it falls within the time of the current semester tab...
		document.getElementById('status').innerHTML = 'Scheduled';
	}
	else{
		document.getElementById('status').innerHTML = 'Not Scheduled';
		 //if it's not scheduled there won't be any details
	}
	
	var curSemester = session.getAttribute('semester').curSemester;
	i = currentNode.length -1; //go to the last array index to get the customXML data
	
	
	/*if no semester is entered into the local xml document, the current semester name (fall winter spring) will be inserted. 
	thus null or undefined will not be displayed to the user. It will say nicley the current semester! --added by David 10-14-08
	Band-Aid added by David and Jakob on 6-2-09 to quick fix the Summer to spring change... Please fix the summer to spring change in the rest of the documents... when you have time.
	*/
	
	if(document.getElementById('seasons').innerHTML = currentNode[i].getSemester()){
	}
	else{
		if(curSemester == "Summer"){
			document.getElementById('seasons').innerHTML = "Summer";
		}
		else{
		document.getElementById('seasons').innerHTML = curSemester;
		}
	}
	
}


function buildDateDropdown(anEventNode, bookDate){ //move this function to VCFuncs1?
	var eventDatesArray = getEventDates(anEventNode.getName()); 
	var numDates = eventDatesArray.length;
	
	if(numDates > 1){ // if numDates is > 1 show a dropdown, else, don't
		var dateOutput = "<select onchange=\"displayRightCol('" + anEventNode.getName() + "', this.value); \">";
		for(var j=0; j < numDates; j++){
			if (eventDatesArray[j] == bookDate){var selected = "selected='selected'";}else{ selected = null;}
			dateOutput += "<option " + selected + " value=\"" + eventDatesArray[j] + "\">" + eventDatesArray[j] + "</option>";
		}
		dateOutput += "</select>";
	}else{
		dateOutput = eventDatesArray[0];
	}
	return dateOutput;
}

function getEventDates(eventName){ //only get the EventDates that are in the current Semester ; make this function part of the Event Obj in VCFuncs1?, move to vcfuncs 1?
	var eventMap = session.getAttribute('eventMap');
	var anEventNode = eventMap[eventName];
	var eventDatesArray = new Array();
	
	var semesterObj = session.getAttribute('semester'); //get semester object
	var curSemesterBegin = semesterObj[semesterObj.curSemester].begin; //get begin date of current Semester
	var curSemesterEnd = semesterObj[semesterObj.curSemester].end;
	
	
	for(var i=0; i < anEventNode.length; i++){
		if(anEventNode[i].getDate() && isWithinDateRange(curSemesterBegin, curSemesterEnd, strToDate(anEventNode[i].getDate())) || (session.getAttribute('curAreaSettings').area != 'Outdoor' && anEventNode[i].getDate())){//if the node has a date AND the date falls in the current semester, add it
			eventDatesArray.push(anEventNode[i].getDate());
		}
	}
	
	return eventDatesArray;
}

//pass in a date string, return a date object
function strToDate(string){ //string must be formatted like  12/31/2008
	if(string == null){
		return;
	}
	
	var dateArray = new Array();
	dateArray = string.split('/');
	
	var dateObj = new Date();
	//year, month, day
	dateObj.setFullYear(dateArray[2], dateArray[0] -1, dateArray[1]);
	//hour,min,sec,millisec
	dateObj.setHours(0,0,0,0); //so all the dates will be set to midnight
	
	return dateObj;
}

//return true if the event is offered during the selected semester, else false
function isSemesterOffered(string, curSemester){ //change name to eventOffered?
	//strip out all white space
	var string2 = string.replace(/\s/g,''); 
	//split string and return array
	var semestersArray = new Array();
	semestersArray = string2.split(',');
	
	var semestersArrayLength = semestersArray.length;
	for(var i=0; i<semestersArrayLength; i++){
		if(semestersArray[i] == curSemester){
			return true;
		}
	}
	
	return false;
}

//evaluate whether newDate is within the range
function isWithinDateRange(rangeBegin, rangeEnd, newDate){ //requires date Objects, not strings
	
	//strToDate turns all the strings into date objects
	if (newDate >= rangeBegin && newDate <= rangeEnd){
		return true;
	}
	
	return false;
}

function escapeQuotes(string){ //escape the quotes for the event titles
	var newString = string.replace("'","\\'"); //replace a ' with \'
	var newString2 = newString.replace('"','\\"'); //replace a " with \"
	return newString2;
}

function truncateTitle(stringToTrunc, size){//size of how small it should be
	if (stringToTrunc.length > size){//if it's bigger than 32 trunc it
		return stringToTrunc.substr(0, size) + "...";
	}else{//if it's not, just return it
		return stringToTrunc;
	}
}

//GUI control functions
function switchGlobalTab(curTab){ //change this name later?
		
	if(session.getAttribute('curAreaSettings').area == 'Outdoor'){
		//switch the tab highlight
		//make all of them inactive, then activate the current semester one
		changeClassName('tab_fall', ''); //this is dependent on change class name, include the general functions here somewhere
		changeClassName('tab_winter', ''); 
		changeClassName('tab_summer', '');
		changeClassName('tab_home', 'homeButton'); 
		
		//activate the current semester tab
		if(curTab == 'Fall'){
			changeClassName('tab_fall', 'active');
		}else if(curTab == 'Winter'){
			changeClassName('tab_winter', 'active');
		}else if(curTab == 'Summer'){
			changeClassName('tab_summer', 'active');
		}
	
	}else if(session.getAttribute('curAreaSettings').area == 'Talent'){
		//switch the tab highlight
		//make all of them inactive, then activate the current semester one
		//changeClassName('tab_exploration', ''); //this is dependent on change class name, include the general functions here somewhere
		//changeClassName('tab_performance', ''); 
		changeClassName('tab_home', 'homeButton'); 
		
		//activate the current semester tab
		if(curTab == 'Exploration'){
			changeClassName('tab_exploration', 'active');
		}else if(curTab == 'Performance'){
			changeClassName('tab_performance', 'active');
		}
	
	
	}else if(session.getAttribute('curAreaSettings').area == 'Social'){
		//switch the tab highlight
		//make all of them inactive, then activate the current semester one
		//changeClassName('tab_dances', ''); //this is dependent on change class name, include the general functions here somewhere
		//changeClassName('tab_events', ''); //should be put in the default page on the onclick
		changeClassName('tab_home', 'homeButton'); 
		
		//activate the current semester tab
		if(curTab == 'Dances'){
			changeClassName('tab_dances', 'active');
		}else if(curTab == 'Events'){
			changeClassName('tab_events', 'active');
		}
		
		
	}else if(session.getAttribute('curAreaSettings').area == 'Fitness'){
		//switch the tab highlight
		//make all of them inactive, then activate the current semester one
		//changeClassName('tab_classes', ''); //this is dependent on change class name, include the general functions here somewhere
		//changeClassName('tab_programs', ''); 
		changeClassName('tab_home', 'homeButton'); 
		
		//activate the current semester tab
		if(curTab == 'Workshops'){
			changeClassName('tab_workshops', 'active');
		}else if(curTab == 'Events'){
			changeClassName('tab_events', 'active');
		}else if(curTab == 'Classes'){
			changeClassName('tab_classes', 'active');
		}else if(curTab == 'Groups'){
			changeClassName('tab_groups', 'active');
		}
	
	}else if(session.getAttribute('curAreaSettings').area == 'Service'){
	
		changeClassName('tab_home', 'homeButton'); 
		
		//activate the current semester tab
		if(curTab == 'Community'){
			changeClassName('tab_community', 'active');
		}else if(curTab == 'Humanitarian'){
			changeClassName('tab_humanitarian', 'active');
		}else if(curTab == 'Campus'){
			changeClassName('tab_campus', 'active');
		}	
	}
	
}


function activateHomeTab(){ //make these names more descriptive
	switchGlobalTab();//should this be called here? 
	changeClassName('tab_home', 'homeButton_active'); 
	
	toggleSpecific('home_layer', 'block'); 
	toggleSpecific('events_layer', 'none');
}

function activateEventTabs(){ //make these names more descriptive
	//switchSemesterTab(); //should this be called?
	
	toggleSpecific('events_layer', 'block');
	toggleSpecific('home_layer', 'none'); 
}

function showDetailTab(){
	get('tab_det').style.visibility = 'visible';
	//toggleSpecific('tab_det', 'inline');
}
		
function hideDetailTab(){
	get('tab_det').style.visibility = 'hidden';
	activateDescTab();
	//toggleSpecific('tab_det', 'none');
}


function activateDetailTab(obj){
	changeClassName(obj.id, 'active'); 
	changeClassName('tab_desc', ''); 
	
	toggleSpecific('main_detail', 'block'); 
	toggleSpecific('main_description', 'none');
}
		
function activateDescTab(){
	changeClassName('tab_desc', 'active'); 
	changeClassName('tab_det', ''); 
	
	toggleSpecific('main_description', 'block'); 
	toggleSpecific('main_detail', 'none'); 
}


//loop through the eventList and reset the class of each one
function switchActiveLink(obj){
	
	for(var i=0; i < get('eventList').childNodes.length; i++){
		//reset the inactive links
		//if the className of the li is not null, set it to null
		if (get('eventList').childNodes[i].firstChild.className == "scheduled active"){
			get('eventList').childNodes[i].firstChild.className = 'scheduled';
			
		}else if (get('eventList').childNodes[i].firstChild.className == "active" || get('eventList').childNodes[i].firstChild.className == " active"){
			get('eventList').childNodes[i].firstChild.className = '';
		}	
		
	}
	
	//set the link that was just clicked to active
	if(obj){
		obj.className += ' active';
	}else if(get('eventList').childNodes.length > 0){
		get('eventList').childNodes[0].firstChild.className += ' active';
	}
		
	
	//alert('after for loop');
}

function displayEventByBookId(bogusParam, bookId){
	//example http://activities.byui.edu/talent/default2.htm?bookId=2136862
	//have some check right here that terminates if there's nothing...
	//if it's passed in, else get it from the url. If neither work, return.
	
	if(!bookId){
		//part 1
		//check the url
		var url = String(window.location.search);    
		var argString = url.substr(url.indexOf("?")+ 1, url.length); 
		if(argString.length < 1){
			return;
		}
		var argStringArray = argString.split("&"); 
		
		var args = new Array(); 
				
		for (var i = 0; i < argStringArray.length; i++) { 
			var valueArray = argStringArray[i].split("="); 
			args[valueArray[0]] = valueArray[1]; 
		} 
	    //alert(valueArray[1] + " =value array1 " + bookId + " =book id " + url + " =url " + valueArray[0] + " =value array 0");             
		//alert( + " = " + valueArray[1] );
		
		if(valueArray[0] != "bookId"){ //if bookId is not in the URL params, end function
			return;
		}
			
		var bookId = valueArray[1]; //doesn't need to declared because it's a param
		//alert("bookId = " + bookId);
	}
	
	//if(!bookId){return;}
	
	//part 2
	var anEventNode = getObjByBookId(bookId); //get the eventNode
	//alert("event node = " + anEventNode);
	if((anEventNode == null) && (anEventNode != "is_empty") && !(session.getAttribute("loop_status")))
	{
		//alert("testing for null statement");
		if(session.getAttribute('curAreaSettings').area == 'Talent')
		{
			setAreaSettings('Category=Activities/Talent/Performance&ForDays=120','http://activities.byui.edu/scripts_sitewide/cal_app/talent_xml/talent_performance.xml', 'Talent'); 
			handleRequest('loadTab'); 
			changeClassName('tab_performance','active'); 
			changeClassName('tab_exploration', ''); 
			session.addAttribute("loop_status","end");
			return false;
		}
		if(session.getAttribute('curAreaSettings').area == 'Social')
		{
			setAreaSettings('Category=Activities/Social/Dances&ForDays=120','http://activities.byui.edu/scripts_sitewide/cal_app/social_xml/social_dances.xml', 'Social'); 
			handleRequest('loadTab'); 
			changeClassName('tab_dances', 'active'); 
			changeClassName('tab_events', ''); 
			session.addAttribute("loop_status","end");
			return false;
		}
		if(session.getAttribute('curAreaSettings').area == 'Fitness')
		{
		//	window.alert('Hello, i am executing the desired function. Thank You!');
			setAreaSettings('Category=Activities/Fitness/Events&ForDays=1','http://activities.byui.edu/scripts_sitewide/cal_app/fitness_xml/fitness_info_events.xml', 'Fitness'); 
			handleRequest('loadTab'); 
			changeCategoryHeight();
			if(anEventNode == null && anEventNode != "is_empty")
			{
				setAreaSettings('Category=Activities/Fitness/Workshops&ForDays=1','http://activities.byui.edu/scripts_sitewide/cal_app/fitness_xml/fitness_info_workshops.xml', 'Fitness'); 
			handleRequest('loadTab'); 
			changeCategoryHeight();
				/*if(anEventNode == null && anEventNode != "is_empty")
				{
					setAreaSettings('Category=Activities/Fitness/Groups&ForDays=1','http://activities.byui.edu/scripts_sitewide/cal_app/fitness_xml/fitness_info_groups.xml', 'Fitness'); 
				handleRequest('loadTab'); 
				changeCategoryHeight();
				return false;
				}*/
			return false;				
			}
		return false;
		}
		return false;
		
	}
	if(anEventNode != "is_empty"){
		//alert("i am in this time");
		//if(anEventNode){
		setSemesterDates(null, anEventNode.getDate()); //select the proper tab to show
		showCalAppVCF(); //functions called by the showCalAppVCF() function in functions.js
			
		var curEventIndex = session.getAttribute('curEventList').contains(anEventNode.getName());
			
		//get obj from eventList
		switchActiveLink(document.getElementById('eventList').childNodes[curEventIndex].childNodes[0]); //for the eventList
		//alert("book id " + bookId);
		
		
		//part 3
		displayRightCol(anEventNode.getName(), anEventNode.getDate());
		changeCategoryHeight();
		//}
	}	
}

function getObjByBookId(bookId){ //test this in IE7
	var eventMap = session.getAttribute('eventMap');
	if(eventMap == null){
		return "is_empty";
	}
	for(obj in eventMap){
		obj_num = eventMap[obj].length;
		for(var i=0; i < obj_num; i++){
			//alert("eventMap = " + i);
			//alert(eventMap[obj][i].getBookId());
			if(eventMap[obj][i].getBookId() == bookId){
				//alert('test after');
				return eventMap[obj][i]; //return evtNode with the correct bookId
			}
			
		}
		
	}
}


//todo: move all of these basic use functions somewhere else
Array.prototype.contains = function (element){
	var indeces = new Array();
	for (var i = 0; i < this.length; i++){
		if (this[i] == element){
			indeces.push(i);
		}
	}
	
	return indeces;
}


function outputEventBookId (){ //this is used by the '/eventbookid.htm' page | generates little bookId table
	var eventMap = session.getAttribute('eventMap');
	var output = '';
	var eventList = new Array();
	
	output += "<table>";
	
	output += "<tr><td><strong>Event Name</strong></td><td><strong>Date</strong></td><td><strong>BookId</strong></td></tr>";
	
	var hasEvents = false;
	for (objAttribute in eventMap){ //foreach loops are bad, but only way to loop through the eventMap object
		hasEvents = true;
		//loop through all the event iterations
		var currentObjLength = eventMap[objAttribute].length;
		output += "<tr>";
		for(var i=0; i<currentObjLength; i++){
			
			var eventDate = strToDate(eventMap[objAttribute][i].getDate());
			
			if (eventDate){//if the event instance has a date (it's scheduled in CalXML...)
				output += "<td>" + eventMap[objAttribute][i].getName() + "</td><td>" + eventMap[objAttribute][i].getDate() + "</td><td>" + eventMap[objAttribute][i].getBookId() + "</td>";
			}
		}
		output += "</tr>";
		
	}
	
	if(!hasEvents){
		output += "No Events are currently scheduled in this area";
	}
	
	output += "</table>";
	
	document.getElementById('eventBookIdOutput').innerHTML = output;
}

function changeCategoryHeight() //so that when we link to a book id, the page will be resized accordingly (see line 414 about linking by book id)
		{
			document.getElementById("main").style.height = "362px";
		}