/* MAINSCRIPT.JS */
/* ************* */
// --> THIS ONE USES 6-char tab <-- //

if(!this.FUNCHLD) this.FUNCHLD = new Array();

// ---------.---------.---------.---------.---------.---------.---------.---------.---------.---------.
// -- CREATE THE OTHER STORIES OBJECT HOLDER
if(!this.cc_otherStoriesList) { var cc_otherStoriesList = function(pName) {
	var o = this;
	o.name = pName;
	
	// -- VARIABLES
	FUNCHLD[o.thisInd = FUNCHLD.length] = o;

	// -- DEFAULTS
	if(!o.dataList) 			o.dataList 				= new Array();
	if(!o.listTemplate) 		o.listTemplate 			= "";

	// -- THINK WE HAD TO CREATE THE IFRAME?
	document.write("<DIV STYLE='display:none;'>" +
		"<IFRAME SRC='#' HEIGHT=1 WIDTH=1 NAME='pnl"+o.name+"__ld'></IFRAME>"+
		"</DIV>");
	
	
	// -- INITIALIZE
	o.init = function() {
		if(!this.hasInit) {
			this.hasInit = true;
			
			// -- OBJECT DEFAULTS
			this.obj = {
				mainPanel		: document.getElementById("pnl"+this.name+"__main"),
				mainList		: document.getElementById("pnl"+this.name+"__li"),
				navBar		: document.getElementById("pnl"+this.name+"__nb"),
				loadStat		: document.getElementById("pnl"+this.name+"__lstat"),
				loader		: eval("pnl"+this.name+"__ld")
			}
			
		}
	}
	
	
	// ---------.---------.---------.---------.---------.---------.---------.
	// -- LOADING LIST:
	/* 	This will enable loading of list. The loader object contains the dynamic loader info. */
	/*	The loader is disabled when it was not set prior to here; but can be enabled later. */
	o.loader = {disabled:true}; {
		var o2 = o.loader;
		o2.parent = o;
		FUNCHLD[o2.thisInd = FUNCHLD.length] = o2;
		
		// -- VARIABLES
		if(!o2.oQuery)			o2.oQuery			= {};						// -- OTHER QUERY TO BE LOADED WITH SRC PATH
		if(!o2.loaderPath)		o2.loaderPath		= "";						// -- SOURCE PATH OF DATA
		
		
		// -- CONFIG
		if(!o2.conf)			o2.conf = {}
		if(!o2.conf.msg)			o2.conf.msg 		= {}; {					// -- STATUS MESSAGES
			var o2_3 = o2.conf.msg;
			o2_3.statusLoading 		= "Loading...";
			var o2_3;
		}
		
		
		// -- OTHERS
		o2.intLoad			= null;						// -- LOADING INTERVAL
		o2.intLoad_waitSec	= 0;

		
		// -- WE WILL MAKE THE LOADING HERE POSSIBLE
		o2.load = function() {
			var objLoader = this.parent.obj.loader;
			var tcQuery = "";
			
			// -- COMPILE QUERY
			for(var i in this.oQuery) {	
				tcQuery += "" +
					(tcQuery ? "&" : "") +
					i + "=" + escape(this.oQuery[i]);
			}
			
			
			// -- RUN THE PATH
			objLoader.isLoaded = false;
			objLoader.location.href = this.loaderPath + "?" + tcQuery;
			
			// -- SHOW THE MAIN PANEL
			this.parent.obj.mainPanel.style.display = "";
			
			// -- WAIT FOR LOADING
			clearInterval(this.intLoad);
			this.loadStatusToggle(true);
			this.intLoad_waitSec = 0;
			this.intLoad = setInterval("FUNCHLD["+this.thisInd+"].do__waitLoad();", 100);
		}
		o2.do__waitLoad = function() {
			var objLoader = this.parent.obj.loader;
			
			// -- SHOW THE LOADED DATA
			if(objLoader.isLoaded) {
				clearInterval(this.intLoad);
			
				var objData = objLoader.tData;
				this.parent.dataList 		= objData.dataList;
				this.parent.loader.navData	= objData.loader.navData;
				
				this.parent.postList();
				this.loadStatusToggle(false);

			}
			// -- WAIT UNTIL DATA IS LOADED OR UNTIL TIMEOUT
			else {
				this.intLoad_waitSec++;
				if(this.intLoad_waitSec>300) {	
					clearInterval(this.intLoad);
					
					this.intLoad_waitSec = 0;
					alert("Sorry, but the request timed out while loading data.");
					this.loadStatusToggle(false);
				}
			}
		}
		
		// -- SHOW/HIDE STATUS
		o2.loadStatusToggle = function (pShow) {	
			var objLoadStat = this.parent.obj.loadStat;
		
			if(pShow) {
				objLoadStat.style.display = "";
				objLoadStat.innerHTML = this.conf.msg.statusLoading;
			}
			else {
				objLoadStat.style.display = "none";
				objLoadStat.innerHTML = "";
			}
		}

		
		
		// -- GOTO PAGE
		o2.gotoPage = function(pPage) {
			this.oQuery.pg = pPage;
			this.load();
		}
		
		
		// -- CLEAR		
		var o2;
	}
	
	
	// ---------.---------.---------.---------.---------.---------.---------.
	// -- POST THE STORIES BY DOM
	o.postList = function() {
		this.init();
	
		var objList = this.obj.mainList;
		
		// -- CLEAR PREVIOUS LIST
		objList.innerHTML = "";
		

		// -- START ADDING THE LIST
		for(var i=0; i<this.dataList.length; i++) {
			var item = this.dataList[i];
			var html = this.listTemplate;
			
			// -- FILL UP THE BLANKS
			var tlItem = new Array("evOnClick");
			for(var j=0; j<tlItem.length; j++)
				if(!item[tlItem[j]]) item[tlItem[j]] = null;
			
			// -- REPLACE NOW	
			for(var pp in item) {
				html = html.split("<!--t:"+pp+"-->").join(item[pp]);
			}
			
			// -- FOR OBJECT
			var node = document.createElement("LI");
			node.innerHTML = html;
			objList.appendChild(node);
		}
		
		// -- SHOW OR HIDE MAIN
		if(this.dataList.length) 
			this.obj.mainPanel.style.display = "";
		else
			this.obj.mainPanel.style.display = "none";
		
		
		// -- NAVBAR
		this.postNavBar();
	}
	
	
	// -- CREATE JAVASCRIPT NAVBAR
	/* 	This will run only when the loader is enabled. */
	o.postNavBar = function() {
		this.init();

		// -- VARS
		var objNavBar	= this.obj.navBar;
		var objNavData 	= this.loader.navData;		
		

		// -- LOAD THE DATA
		if(!this.loader.disabled) {
			var html = this.generateNavBarPages("js:FUNCHLD["+this.thisInd+"].loader.gotoPage([pg]);", 	
					objNavData.current,
					5,
					1,
					objNavData.numPages
				);
			
			objNavBar.innerHTML = html;
			objNavBar.style.display = "";
		}
		else
			objNavBar.style.display = "none";
	}
	
	
	// -- NAVBAR GENERATOR
	o.generateNavBarPages = function(fil, indNum, spcNum, minNum, maxNum, otherOpts) {
		/*
			fil		= FILENAME: 
			indNum	= NUMBER OF INDEXES
			spcNum	= CURRENT CHOICE
			minNum	= MININUM PAGE
			maxNUm	= MAXIMUM PAGE
			
			This one has been converted from PHP to JavaScript by MJR
		*/
	
		// ---------.---------.---------.---------.---------.---------.---------.
		// -- INITIALIZE
	
		// -- DEFAULTS
		// *  OTHER OPTIONS
		if(!otherOpts) var otherOpts 	= {};
		// *  ARROWS
		if(!otherOpts.txtPrevArrow)		otherOpts.txtPrevArrow 		= "◄";
		if(!otherOpts.txtNextArrow)		otherOpts.txtNextArrow 		= "►";
		
	
		// -- VARS
		var spcDiv, spcNum;
		var _sln;
	
		// -- INDEX CREATION
		spcDiv = Math.floor(spcNum/2);
		_sln = new Array(indNum - spcDiv, indNum+spcDiv, "", 0, 0);
		if(indNum-spcDiv <= minNum) {
			_sln[0]=minNum; 
			_sln[1]=spcNum+1; 
			_sln[3]=1;
		}
		if(indNum+spcDiv >= maxNum) {
			_sln[0]=maxNum-spcNum+1; 
			_sln[1]=maxNum+1; 
			_sln[4]=1;
		}
		if(maxNum-minNum<spcNum) {
			_sln[0]=minNum; 
			_sln[1]=maxNum+1; 
			_sln[3]=1; 
			_sln[4]=1;
		}
		
		// -- know if it is for JS or HREF
		/* To run as javascript, append this one on the fil paraeter : "js:" */
		var str = fil.split(":",2);
		var the_cmd;
		if(str[0]=="js") {
			// THIS IS FOR JS
			the_cmd = " HREF='javascript:' ONCLICK='"+str[1]+"' ";
		} else {
			// THIS IS FOR HREF: DEFAULT
			the_cmd = " HREF='"+ fil +"' ";
		}
			
		// ---------.---------.---------.---------.---------.---------.---------.
		// -- WRITE
		var html = "";
		if(1==1) 
			html += "<TABLE CELLSPACING=0 CELLPADDING=0 BORDER=0 ALIGN='center'>\n";
			
		// *  FIRST
		if(_sln[3]==0) {
			html+="<TD>" +
				"<A CLASS='Lst' "+ the_cmd.split("[pg]").join(minNum) +">" +
					"First"+
				"</A>"+
			"</TD>"+
			"<TD CLASS='n'>&nbsp;</TD>\n";
		}

		// *  LEFT ARROW
		if(true) {
			if(indNum > 1) 
				html += "<TD>" + 
					"<A CLASS='Lst' " + 
						the_cmd.split("[pg]").join(indNum-1) +
						">" +
						otherOpts.txtPrevArrow +
					"</A></TD>\n" +
					"<TD CLASS='n'>&nbsp;</TD>";
		}
		
		// *  THE NUMBER OF PAGES
		for(var x=_sln[0]; x <_sln[1]; x++) {
			html+=("<TD>" +
					"<A "+ the_cmd.split("[pg]").join(x) +
					"CLASS='Lst "+((x==indNum) ? "Cur" : "")+"' "+
					">"+x+"</A>" +
				"</TD>\n");
			if(x<_sln[1]-1) 
				html+= "<TD CLASS='n'>&nbsp;</TD>\n";
		}
		
		// *  RIGHT ARROW
		if(true) {
			if(indNum < maxNum) 
				html += 
					"<TD CLASS='n'>&nbsp;</TD>" +
					"<TD>" + 
					"<A CLASS='Lst' " + 
						the_cmd.split("[pg]").join(indNum+1) +
						">" +
						otherOpts.txtNextArrow +
					"</A></TD>\n";
		}
				
		// *  LAST
		if(_sln[4]==0) {
			html+= "<TD CLASS='n'>&nbsp;</TD>";
			html+= "<TD>" +
				"<A CLASS='Lst' " + the_cmd.split("[pg]").join(maxNum) + ">" +
					"Last" +
				"</A></TD>\n";
		}
		if(1==1) 
			html += ("</TABLE>\n");
			
		
		// -- PRINT HTML
		return (html);
	}
	
	// -- CLEAR
	var o;
} }
