// City Council Agenda Naviagation class
<!--
//Create new Nav class
//------------------------------
var Nav = new function() {  
//------------------------------
	this.ajax = null;
	this.proc = 'ready'; 			//states: 'ready','proc','done'
	this.fadeIncr = 0;
	this.statusInterval = null;
	this.agendaPrevButn = null;
	this.agendaNextButn = null;
	this.agendaYearSelect = null;
	this.searchHeadDiv = null;
	this.agendaDiv = null;
	this.yearRange = 0;
	this.firstYear = 0;
	this.lastYear = 0;
	this.currentYear = 0;
	this.town = '';
	this.menu = null;
	
	//--------------------------
	this.init = function() {
		var self = Nav;
		self.ajax = new Ajax();
		self.agendaPrevButn = document.getElementById('agendaPrevButn');
		self.agendaNextButn = document.getElementById('agendaNextButn');
		self.agendaYearSelect = document.getElementById('agendaYear');
		self.searchHeadDiv = document.getElementById('searchHeadDiv');
		self.agendaDiv = document.getElementById('agendaDiv');
		self.menu = document.getElementById("menu2");
	
		//determin what years I have to work with
		self.yearRange = self.agendaYearSelect.length;
		self.firstYear = self.agendaYearSelect[0].value;
		self.lastYear = self.agendaYearSelect[self.yearRange-1].value;
		//alert('first: '+self.firstYear+'. last: '+self.lastYear);
		self.currentYear = self.agendaYearSelect.value;
		
		//get the hidden town
		self.town = document.getElementById('cityHid');
		//alert(self.town.value);
		//alert(self.form.innerHTML);
		self.loadMenu();
	};
	
	//--------------------------
	this.loadYear = function(selectedYear){
		var self = Nav;
		//make sure year is different
		if(self.currentYear == selectedYear)
			return;
		
		self.proc = 'proc';
		self.currentYear = selectedYear;
		self.startStatusAnim();
		self.lockInput(true);
		self.retrieveAgendas();
	};
	
	//---------------------------
	this.startStatusAnim = function(){
		var self = Nav;
		self.changeTextState(true);
		self.fadeIncr = 0;
		self.doStatusAnim();
		self.statusInterval = setInterval(self.doStatusAnim, 200);
	};
	
	//----------------------------
	this.changeTextState = function(changeText){
		var self = Nav;
		if(self.searchHeadDiv.firstChild) {
			self.searchHeadDiv.removeChild(self.searchHeadDiv.firstChild);
		}
		if(changeText){	
			self.searchHeadDiv.appendChild(document.createTextNode('Loading'));
		}
		else{
			self.searchHeadDiv.appendChild(document.createTextNode('Choose Agenda'));
		}
	};
	
	//----------------------------
	this.doStatusAnim = function(){
		var self = Nav;
		var r = 1;
		var g = 1;
		var fadeDiv = null;
		fadeDiv = self.searchHeadDiv;
		if(self.fadeIncr < 50){
			self.fadeIncr += 5;
		}
		else{
			if(self.proc == 'proc'){
				self.fadeIncr = 0;
			}
			else{
				self.fadeIncr = 50;
				self.stopReset();	//end animation gracefully
			}
		}
		r += self.fadeIncr;
		g += self.fadeIncr;
		fadeDiv.style.background = 'rgb('+r+','+g+',51)';
	};
	
	//-----------------------------
	this.stopReset = function(){
		var self = Nav;
		//alert('in stopReset');
		clearInterval(self.statusInterval);
		self.lockInput(false);
		self.changeTextState(false);
		self.proc = 'ready';
	};
	
	//-----------------------------
	this.lockInput = function(turnOff){
		var self = Nav;
		
		if(turnOff){
			self.agendaPrevButn.onclick = null;
			self.agendaPrevButn.disabled = true;
			self.agendaNextButn.onclick = null;
			self.agendaNextButn.disabled = true;
			self.agendaYearSelect.onclick = null;
			self.agendaYearSelect.disabled = true;
		}
		else{
		//find out where we are and reenable accordingly
			var priorYear = parseInt(self.currentYear)-1;
			var nextYear = parseInt(self.currentYear)+1;
			if(parseInt(self.currentYear) > parseInt(self.firstYear)){
				self.agendaPrevButn.onclick = function () {self.loadYear(priorYear)};
				self.agendaPrevButn.disabled = false;
			}
			if(parseInt(self.currentYear) < parseInt(self.lastYear)){
				self.agendaNextButn.onclick = function () {self.loadYear(nextYear)};
				self.agendaNextButn.disabled = false;
			}
			self.agendaYearSelect.value = self.currentYear;
			self.agendaYearSelect.onclick = function () {self.loadYear(self.currentYear)};
			self.agendaYearSelect.disabled = false;
		}
	};
	
	//-------------------------------
	this.retrieveAgendas = function(){
		var self = Nav;
		self.ajax.doGet('ajax_getYearAgendaArr.php?year='+self.currentYear+'&town='+self.town.value, self.handleListResp);	
	};
	
	//-------------------------------
	this.handleListResp = function(str) {
		var self = Nav;
		var curMoListObj = null;
		var err = '';
		//alert(str);
		str = str.replace(/^\s*|\s*$/g,"");
		var respArr = str.split('|');
		var respType = respArr[0].toLowerCase();	//success | error
		var respMsg = respArr[1];
		//alert(document.getElementById('agenda_menu').innerHTML);
		switch(respType){
			case 'error':
				//alert('status: '+respType);
				self.updateMessage(respMsg);
				self.clearCalendar();	
				Agenda.resetBottom();
				break;
			case 'success':
				//alert('status: '+respType);
				self.updateMessage(respMsg);
				self.clearCalendar();
				self.updateCalendar(respArr);
				Agenda.resetBottom();
				break;
			default:
				//alert('status: bad');
				err = 'Error occured while receiving data';
				break;
		}

		self.proc = 'done';
		if(err){
			alert(err);
		}		
	};
	
	//----------------------------------
	this.clearCalendar = function(){
		var self = Nav;
		var curMonth = '';
		var monthName=new Array("January","February","March","April","May","June","July","August", "September","October","November","December");
		//alert('clearing calendar');
		for(var i=0; i<12; i++){
			curMonth = document.getElementById('m_'+i);
			//clear segment
			while(curMonth.firstChild) {
				curMonth.removeChild(curMonth.firstChild);
			}
			//load default data
			//<span id='mSpan"+i+"' class='subind'></span>
			curMonth.innerHTML = "<a href='javascript:void(0)'>"+monthName[i]+"</a>";
		}
		//alert(document.getElementById('agenda_menu').innerHTML);
	};
	
	//----------------------------------
	this.updateCalendar = function(respArr){
		var self = Nav;
		var curMoListObj = null;
		
		//respArr[0] - response type
		//respArr[1] - response message
		//respArr[2n] - response results
		//alert('updateing calendar');
		for(var i=2; i<14; i++){
			if(respArr[i]){
				var meetingArr = respArr[i].split('^');
				var monthDiv = meetingArr[0];
				var meeting = meetingArr[1];
				//alert("monthDiv: "+monthDiv+",\n meetings: "+meeting);
				
				//get month
				curMoListObj = document.getElementById(monthDiv);
				//alert('updateing calendar: '+curMoListObj.innerHTML);		
				//load segment with new data	
				curMoListObj.innerHTML = meeting;
			}
		}
		//alert("before\n" +document.getElementById('agenda_menu').innerHTML);
		self.loadMenu();
	};
	
	//----------------------------------
	this.updateMessage = function(msgTxt){
		var self = Nav;
		//alert('updateing message');
		if(msgTxt != ''){
			//display note to user why no agendas
			while(self.agendaDiv.firstChild) {
				self.agendaDiv.removeChild(self.agendaDiv.firstChild);
			}
			self.agendaDiv.innerHTML = msgTxt;
		}
	};

	this.cleanup = function() {
		var self = Nav;
		//IE is very messy with memory
		self.form = null;
		this.agendaPrevButn = null;
		this.agendaNextButn = null;
		this.agendaYearSelect = null;
		this.searchHeadDiv = null;
		this.agendaDiv = null;
	};
	//----------------------------------------------------------
	this.loadMenu = function(){
		var self = Nav;
		self.collapseMenu();
		self.prepareMenu();
	};
	//http://www.blazenewmedia.com/articles/creating-a-dynamic-navigation-menu
	//hide child nodes in menu
	//----------------------------------------------------------
	this.collapseMenu = function(node) {
		var self = Nav;
		if(!node) node = self.menu;
		//alert('colapaseing menu');
		if (node.childNodes.length > 0) {
			for (var i=0; i<node.childNodes.length; i++) {
				var child = node.childNodes[i];
				if (child.nodeName == "UL") {
					child.style.display = "none";
				}
				self.collapseMenu(child);
			}		
		}
	};
	//assign onclick events to fields with children
	//----------------------------------------------------------
	this.prepareMenu = function(){
		var self = Nav;
		
		var links = self.menu.getElementsByTagName("a");
		for (var i=0; i<links.length; i++) {
			
			var curNode = links[i].parentNode.getElementsByTagName("UL");
			var nodeLink = links[i].href;
			//alert("length: "+curNode.length+",\nparent: "+curNode+", \nlink: "+nodeLink+", \ntext: "+links[i].text);
			
			if(curNode.length == 1){	
				//alert('setting onclick event');
				links[i].onclick = function() {
   					Nav.toggleMenu(this.parentNode.getElementsByTagName("UL")[0], this.href);
   					return false;
  				}
				//links[i].appendChild(document.createTextNode(">"))
				//add a submenu indicator
				var curId = links[i].parentNode.id.replace(/m_/,"");
				//alert(curId);
				//alert(links[i].innerHTML);
				var curSpan = document.getElementById("mSpan"+curId);
				curSpan.appendChild(document.createTextNode('>'));
				//alert('applying float');
				curSpan.setAttribute("style","float:right");
				curSpan.style.styleFloat = "right";
			}
		}
		//alert(self.menu.innerHTML);
	};
	//----------------------------------------------------------
	this.toggleMenu = function(node, tlink){
		var self = Nav;
		//alert('in toggle menu, style: '+node.style);
		if (!node){
			//alert('no node, going to: '+tlink.href);
			location.href = tlink.href;
		}
		if (node.style.display == "") {
			node.style.display = "none";
		} else {
			node.style.display = "";
		}
	}
}

window.onunload = Nav.cleanup;


// collapse the top level nodes when any top level node is clicked

//-->	


