/**
 * Copyright 2006, Internet Broadcasting Systems. All Rights Reserved.
 * Version:   $Name: REL_2_39_0 $
 * ID:        $Id: LeadersNav.js,v 1.7 2007/03/03 15:56:12 crambo Exp $
 */
using("nbcsp.leadersNav");

/**
* leadersNav - use ajax to update page with stats tables from path determined by 
*	piecing together form values. 
* dependent on AjaxForm.js and prototype.js
*/
nbcsp.leadersNav = new function() {
	var self = this;
	/**
	* our instance of AjaxForm (this.fetcher) calls this when response comes back 
	*/
	this.showResults = function(response) {
		//handy for debugging response
		self.response = response;
		//don't do anything if response isn't valid
		if(response.status == 200) {
			if(!$('leaders')) {
				self.removeContentFromInitialPageLoad();
				//create a new div that we'll use to display results from now on
				self.buildNewContainerForAjaxContent();
			}
			//update with returned content
			$('leaders').innerHTML = response.responseText;
			
			//at this point, the page has been updated with new content.    
			self.doStatsTableUpdatedEvent();
		}
	}
	this.doStatsTableUpdatedEvent = function() {
		var self = this;
		//set timeout runs process in new thread.  desireable to avoid performance
		//issues related to page view event. 
		window.setTimeout(function() {
			//enable table sorting
			self.enableSortTableFromReturnedHTML();
			//page view event 
			nbcsp.firePageViewEvent(false);
		},10);
	}
	this.buildNewContainerForAjaxContent = function() {
		var leaders = document.createElement("div");
		leaders.id = "leaders";
		this.parent.appendChild(leaders);
	}
	this.enableSortTableFromReturnedHTML = function() {
		var self = this;
		var tables = document.getElementsByClassName("sortable",this.parent);
		var ignoreClassName = "nosort";
		$A(tables).each(function (value, index) {
			var titlebars = document.getElementsByClassName("titlebar1",value); 
			$A(titlebars).each(function(titlebar) {
				titlebar.parentNode.className = "nosort";
			});
			var headerRow = document.getElementsByClassName("headerRow", value);
			if (headerRow.length > 0) {
				value.tablesort = new ibsys.TableSort(value, headerRow[0], ignoreClassName);
				Event.observe(headerRow[0],"click",function(e) {
					self.changeTitlebarTextToReflectNewSort(e,titlebars[0]);
				},false);
			}
		}, false);
	}
	this.changeTitlebarTextToReflectNewSort = function(event,titlebar) {
		var event = typeof window.event != "undefined" ? window.event : event;
		var el = Event.element(event);
		while(el.nodeName.toLowerCase() != "td") {
			el = el.parentNode;
		}
		if(el.title) {
			var titlebarText = titlebar.innerHTML;
			var newText = titlebar.innerHTML.split("-")[0] + "- sorted by " + el.title;
			titlebar.innerHTML = newText;
		}
			
	}
	this.removeContentFromInitialPageLoad = function() {
		this.parent.innerHTML = "";
	}
	/**
	* "constructor"
	**/
	this.init = function() {
		var self = this;
		/* parent of stats should be a sectionwidget0 */ 
		this.parent = document.getElementsByClassName("sectionwidget0",$('alpha'))[0];
		/* create new instance of AjaxForm */
		this.fetcher = new ibsys.AjaxForm(
			"statsLeadersForm",	/*immediate parent of form elements*/
			false,				/*action*/
			false,				/*submit button*/
			self.showResults
		);
		
		/* Click event for submit button - create path from select widgets and 
			get content via ajax */
		Event.observe($("FilterRsults"),"click",function() {
			path = new Array();
			$A(self.fetcher.inputs).each(function(value,index) {
				if(value.nodeName.toLowerCase() == "select") {
					path.push(value.options[value.options.selectedIndex].value);
				}
			});
			// fetch HTML output
			//path = "/_object/" + path.join("").split("/")[1] + "/index.html";
			//path = "/_object/" + path.join("").split("/")[1] + "/index.html";
			path = "/" + path.join("").split("/")[0] + "/" + path.join("").split("/")[1] + "/detail.html";
			window.location = path;
			//self.fetcher.action = path;
			//self.fetcher.sendAjaxQuery("");
		},false);
		
		/* enable titlebar text changing on sort for this table. 
			note that this is done to returned ajax content as well, but in 
			enableSortTableFromReturnedHTML() */
		var titlebars = document.getElementsByClassName("titlebar1",this.parent);
		var sortableTables = document.getElementsByClassName("sortable",this.parent);
		if(titlebars.length > 0 && sortableTables.length > 0) {
			var headerRow = document.getElementsByClassName("headerRow",sortableTables[0])[0];
			Event.observe(headerRow,"click",function(e) {
				self.changeTitlebarTextToReflectNewSort(e,titlebars[0]);
			},false);
		}
			
		
		/* hide/show selects on nav hover */
		nbcsp.onNoNavsShowingEvent.push(function() { $('statsLeadersForm').style.visibility = "visible"; });
		nbcsp.onNavsShowingEvent.push(function() { $('statsLeadersForm').style.visibility = "hidden"; });
	}
}
Event.observe(window,"load",function() {
	if($('statsLeadersForm')) nbcsp.leadersNav.init();
},false);

