//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
   // window.alert(eventMap);
	
	// 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';
	
	//alert("inside dislpay event");
	/*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');
	}*/
	
	//alert("test1");
	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++){
		
		eventList.push(objAttribute);
			/*
			//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 
				}
			}*/
		}
		
	}
	//alert("test2");
	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
		//alert("test3");
		var eventAmt = '';
		/*if(getEventDates(eventList[i]).length > 1){ //don't display number of time this event occurs if it's only 1
			alert("test 3.1");
			eventAmt = " (" + getEventDates(eventList[i]).length + ")";
		}*/
		
		var className = '';
		//alert("test 3.2");
		//if(getEventDates(eventList[i]).length){className = "class='active' ";} //if the event is scheduled add the classname
		//alert("test 3.3");
		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;
		//alert("test4");
		return;
	}
	//alert("test5");
	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
	//alert("test6");
	switchActiveLink(); //make the first event tab active
	//alert("test7");
}


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 = currentNode[i].getDate();// buildDateDropdown(currentNode[i], bookDate);
	document.getElementById('event_time').innerHTML = currentNode[i].getTime();
	
	//if(currentNode[i].getMap() != null)
	//{
		//document.getElementById('service_place').style.display = "block";	
		document.getElementById('event_place').innerHTML = currentNode[i].getRoomName();
	//}
	
	//document.getElementById('event_new_date').innerHTML = currentNode[i].getNewDate();
	//document.getElementById('event_cost').innerHTML = currentNode[i].getCost();
	document.getElementById('event_contact').innerHTML = currentNode[i].getContactName();
	

	if(currentNode[i].getMap() != null)
	{
		//alert("checking for map");
		document.getElementById('service_map').style.display = "block";		
		document.getElementById('event_map').innerHTML = "<a href='" + currentNode[i].getMap() + "' target="+'_blank'+">Click Here For Map</a>";
		document.getElementById("main").style.height = "415px";
		document.getElementById("events_col").style.height = "390px";
	}
	else{
		//alert("checking for map twice");
		document.getElementById('service_map').style.display = "none";
	    document.getElementById("main").style.height = "362px";
		document.getElementById("events_col").style.height = "342px";
	}
	
	if(currentNode[i].getApplication() != null)
	{
		document.getElementById('service_application').style.display = "block";			
		document.getElementById('event_application').innerHTML = "<a href='" + currentNode[i].getApplication() + "' target="+'_blank'+">Click Here For Application</a>";	
	}
	else{
		document.getElementById('service_application').style.display = "none";
	}
	document.getElementById('event_participate').innerHTML = "<a href='" + currentNode[i].getParticipate() + "' target="+'_blank'+">Click Here To Participate</a>";
	
	
	//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();
	}*/
	showDetailTab();
	
	//build white col -- navigate to the last object in the event array
	document.getElementById('imgBar_img').src = currentNode[i].getImageURL();
	
	document.getElementById('status').innerHTML = 'Scheduled';
	

	
/*	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
	}
	*/
	i = currentNode.length -1; //go to the last array index to get the customXML data
	document.getElementById('seasons').innerHTML = currentNode[i].getSemester();
	
}


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?
	//alert("getEventDates");
	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){
	//alert("switchActiveLink");
	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] );
		
		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
	}
	
	//if(!bookId){return;}
	
	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', ''); 
			changeCategoryHeight(); 
			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', ''); 
			changeCategoryHeight(); 
			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;
		}
		if(session.getAttribute('curAreaSettings').area == 'Service')
		{
			//alert("service_area session = " + session.getAttribute('service_area'));
			if(session.getAttribute("service_area") != "community"){
			   // alert("inside community loop");
				setAreaSettings('Category=Activities/Service/Community&ForDays=120','http://activities.byui.edu/scripts_sitewide/cal_app/service_xml/service_community.xml', 'Service'); 
				session.addAttribute("service_area","community");
				handleRequest('loadTab'); 
				//alert('after loadTab');
				changeClassName('tab_community', 'active');
				changeClassName('tab_humanitarian', ''); 
				changeClassName('tab_campus', '');
				changeCategoryHeight();
				session.removeAttribute('eventMap');
			}
			else{
				//alert('campus inside');
				setAreaSettings('Category=Activities/Service/Campus&ForDays=120','http://activities.byui.edu/scripts_sitewide/cal_app/service_xml/service_campus.xml', 'Service'); 
				handleRequest('loadTab'); 
				//var anEventNode = getObjByBookId(session.getAttribute('bookId'));
				changeClassName('tab_community', '');
				changeClassName('tab_humanitarian', ''); 
				changeClassName('tab_campus', 'active');
				changeCategoryHeight();		
				session.removeAttribute('eventMap');
				session.addAttribute("loop_status","end");
				return false;
			}
			//alert("before ending");
		}
	}
		
	if((anEventNode != "is_empty") && (anEventNode != null)){
		//alert("i am in this time");
//		setSemesterDates(null, anEventNode.getDate()); //select the proper tab to show
		
		//alert("kkk");
		
		showCalAppVCF(); //functions called by the showCalAppVCF() function in functions.js
		
		//alert("abc");
		
		var curEventIndex = session.getAttribute('curEventList').contains(anEventNode.getName());
		//alert("efg");
		//get obj from eventList
		switchActiveLink(document.getElementById('eventList').childNodes[curEventIndex].childNodes[0]); //for the eventList
		//alert("book id " + bookId);
		//alert("ghi");
	
		//part 3
		displayRightCol(anEventNode.getName(), anEventNode.getDate());
		//alert("jkl");
		
	}
	
}

function getObjByBookId(bookId){ //test this in IE7
	var eventMap = session.getAttribute('eventMap');
	var areaURL = session.getAttribute('curAreaSettings');
	//alert("localXMLFileUrl = " + areaURL.localXMLFileURL);
	//alert("eventMap = " + 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("i = " + i);
			//alert("eventMap[obj][i].getBookId() = " + 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";
		}