// ******************************************************* //
// **** var_tools.js Copyright (C) 2006 Roe K Studios **** //
// ******************************************************* //

// init globals //
gDebug = {};
gDebug.enabled = false;
gDebug.color = "#C07BA8";
if(typeof(gPaths) != "object"){gPaths = {}}
gBrowser = {};
gBrowser.supported = false;
gBrowser.filters = false;

// check browsers //
lBrowsers = ["Opera","Netscape","Firefox"]
for(var x in lBrowsers){
	if(navigator.userAgent.indexOf(lBrowsers[x]) != -1){
		gBrowser.vendor = lBrowsers[x]
		gBrowser.version = navigator.vendorSub;
		break;
	}
}

// check for IE //
if(!gBrowser.vendor){
	if(navigator.appMinorVersion){
		gBrowser.vendor = navigator.appName.split(" ")[0];
	}
}

switch(gBrowser.vendor){
	case "Microsoft":
		gBrowser.vendor = "IE";
		lUserAgent = navigator.userAgent.split(";");
		gBrowser.version = lUserAgent[1].split(" ")[2];
		if(gBrowser.version >= "5.5"){
			gBrowser.supported = true;
			gBrowser.filters = true;
		}
		break;
	case "Netscape":
		if(gBrowser.version >= "7.1"){
			gBrowser.supported = true;
		}
		break;
	case "Firefox":
		var ua = navigator.userAgent
		var lFFCharPos = ua.indexOf("Firefox")
		gBrowser.version = ua.substr(lFFCharPos).split("/")[1]
		if(gBrowser.version >= "1.0"){
			gBrowser.supported = true;
		}
		break;
}


var lArray = unescape(location.href).split("/");
var lNewString = "";
var lHtml = lArray[lArray.length-1];
//var lNum = (lHtml == "index.html")? -1 : -2;
var lNum = (gPaths.index)? -1 : -2;
for(var i=0; i<(lArray.length + lNum); i++) {
	lNewString += lArray[i] + "/";
}


gPaths.base = lNewString;
gPaths.page = (gPaths.index)? "index.html" : lHtml;
//gPaths.html = (gPaths.page.indexOf("index") < 0)? gPaths.base + "html/" : gPaths.base; 
gPaths.html = (gPaths.index)? gPaths.base : gPaths.base + "html/"; 
gPaths.js = gPaths.base + "js/";
gPaths.css = gPaths.base + "css/";
gPaths.graphics = gPaths.base + "media/graphics/";
gPaths.swf = gPaths.base + "media/swf/";

// redirect unsupported browser //
if(!gBrowser.supported){
	location.href = gPaths.base + "html/nobrowser.html";
}
// Assign the keypress if gDebugEnabled //
if(gDebug.enabled){
	/*
	if(BR.name == "NS4"){document.captureEvents(Event.KEYPRESS);}
	if(BR.name == "NS6"){document.addEventListener("keyup",debugTools_ON,false);}
	*/

	var gDebugTitle = [];
	gDebugTitle[0] = ["GetVar","getVariable_debugTool()"];
	gDebugTitle[1] = ["Browser Info","browserInfo_debugTool()"];
	gDebugTitle[2] = ["Show Div's","divShow_debugTool()"];
	gDebugTitle[3] = ["View Source","viewSource_debugTool()"];
	gDebugTitle[4] = ["Javascript Src","showScripts_debugTool()"];
	gDebugTitle[5] = ["JavaConsole","view_JavaConsole()"];
	gDebugTitle[6] = ["document","view_documentAll()"];
	gDebugTitle[7] = ["CSS Src","showCSS_debugTool()"];	
	
	
	
	if(gBrowser.vendor == "IE"){
		document.onkeypress = debugTools_ON;
		document.ondblclick = mouseDoubleClick_DebugTool;	
		var DebugList = [0,1,2,4,6,7];
	}else{
		document.addEventListener("dblclick",mouseDoubleClick_DebugTool,false);
		document.addEventListener("keyup",debugTools_ON,false);
		//document.addEventListener("mouseover",pass_Function,false);
		//document.addEventListener("mouseout",pass_Function,false);
		var DebugList = [0,1,3,5,6];
	}
	
	// do not write the debug layer for the graphic window //
	if(location.href.indexOf("graphic.html") == -1){
		var s = '<div id="DebugButtonLayer" style="display:none;">';			
		s += '<table border=1 cellpadding=1 cellspacing=1 bgcolor="gray">';
		var lType = "DEBUG"
		s += '<tr align="center" bgcolor="' + gDebug.color + '"><td><span class="debugText">'+ lType +'</span></td></tr>';
		// build the button debug tools //		
		for(var i in DebugList){
			s += '<tr align="left" bgcolor="#C0C0C0"><td><a href="javascript:void(0);" onmouseup="debugButtonClick('+i+',1);" onmousedown="debugButtonClick('+i+',0);" onclick="'+ gDebugTitle[DebugList[i]][1] +'; return false;" onfocus="this.blur()"><div id="debugbutton'+i+'" class="debugButtons">'+ gDebugTitle[DebugList[i]][0] +'</div></a></td></tr>';
		}
		s += '<tr align="center" bgcolor="' + gDebug.color + '"><td><span class="debugText">TOOLS</span><div id="debugTracerLyr"></div></tr>';
		s += '</table></div>';
		
		document.write(s);
	}

	
	
}
var lNumber = 0;
function view_documentAll(){
	
	var lLaunched = false;
	if(gBrowser.vendor == "IE"){
		if(window.event.ctrlLeft){
			lNumber = prompt("What # to start with?", lNumber)
			lLaunched = true;
			getVariable_debugTool("document.all["+lNumber+"]")
		}
	}
	if(!lLaunched){
		getVariable_debugTool("document")
	}
	lNumber++


}


// ***************************** //
// read a variable prompt key #1 //
var lLastVar = null; // init to null

function getVariable_debugTool(p_object){

	if((lLastVar == null) && !p_object){lLastVar = "gButtons"}
	
	if(!p_object){
		var lValue = prompt("Which variable do you want to read?", lLastVar)
	}else{
		var lValue = p_object
	}

	var lNum = 0;
	
	
	if(lValue != null && lValue != ""){
		lLastVar = lValue
		if (eval(lValue)=="undefined"){
			alert(lValue + " is not defined")
			}else{
				var lVar = eval(lValue)
				
				if(typeof(lVar)=="object"){

					var s = lValue + "\n\n"
					var t = new String(lValue).bold() + "<br><br>"
					var lTempArray = []
					for(var i in lVar){
						//(typeof(lVar[i])!="function") && 
						if((i != "domConfig") && (typeof(lVar[i])!="unknown")){
							if(i=="cookie"){
								var lSetting = unescape(lVar[i]);
							}else{
								var lSetting = lVar[i];
							}
						
							if(typeof(lVar[i])=="function"){
								var lSetting = new String(lVar[i]).split("(")[0] + "();";
							}
						
							//gDebugOutput.innerHTML = gDebugOutput.innerHTML + "<br>" + i + " = " + typeof(lVar[i]);
						
							lTempArray.push(i + " = " + lSetting);
						}
					}
					
					for(var i in lTempArray.sort()){
						s += lTempArray[i] + "\n";
						t += lTempArray[i] + "<br>";
						lNum += 1;
					}

					
					// long list use the masterAlert_debugTools
					if(lNum > 30){
						showDebugLayer(t);
						//alert(t);
					}else{
						alert(s);
					}
					
				}else{
					alert(lVar);
				}
		}
	}
}

function showDebugLayer(p_text){
	gDebugOutput = document.getElementById("ContentLayer");
	gDebugOutput.innerHTML = '<p style="padding-left:25px; text-align: left;">' + p_text + '</p>';
}

// ***************************** //
// alert the browser info # 2 //
function browserInfo_debugTool(){

	var s = "BROWSER INFO:\n\n"
	var lArray = [];
	
	for(prop in navigator){
		lArray.push(prop + " = " + navigator[prop])
	}
	
	for(prop in lArray.sort()){
		s += lArray[prop] + "\n";
	}

	alert(s)
}

// ***************************** //
// Show divs #3 //
function divShow_debugTool(){
	
	var lName = prompt("Enter the Layer name to show, or press OK to view the entire layout.", "document")
	var lDivList = false;
	
	if(lName == "document"){
		var lDivList = document.getElementsByTagName("div");
	}else{
		var lDiv = document.getElementById(lName);
		
		if(lDiv){
			var lDivList = lDiv.getElementsByTagName("div");
		}else{
			if(lName != null){
				alert(lName + " is not a layer.");
			}
		}
	}
	
	if(lDivList){
		for(var lLayer in lDivList){
			if(lLayer.indexOf("debug") == -1){
				var lObj = document.getElementById(lLayer);
				
				if(lObj){
					var lColor = "red";
					lObj.style.border = "1px solid " + lColor;
				}
			}
	    }
	}	

}

// ***************************** //
// view the html file #4 //
function viewSource_debugTool(){
	location="view-source:" + window.location.href
}

// ***************************** //
// show the javascript files #5 //
function showScripts_debugTool(p_return){
	var s = "JAVASCRIPTS:\n\n";

	for (var i=0; i<document.scripts.length; i++){
		if(document.scripts[i].src != ""){
	        s += document.scripts[i].src + "\n";
			//s += getFileDate(document.scripts[i].src,"m") + "\n";
		}
    }

	if(p_return){
		return s;
	}else{
		alert(s);
	}
}

// ***************************** //
// show the css files #5 //
function showCSS_debugTool(p_return){
	var s = "STYLESHEETS:\n\n";

	for (var i=0; i<document.styleSheets.length; i++){
		if(document.styleSheets[i].src != ""){
	        s += document.styleSheets[i].href + "\n";
		}
    }

	if(p_return){
		return s;
	}else{
		alert(s);
	}
}

// ***************************** //
// view java console #0
function view_JavaConsole(){
	location="javaScript:"
}

// ******************************************************

function debugButtonClick(p_num,p_up){
	
	//gDebugButton = document.getElementById(window.event.srcElement.id);
	gDebugButton = document.getElementById("debugbutton" + p_num)
	//debugbutton
	switch(p_up){
		case 0:
			gDebugButton.style.border = "2px inset buttonhighlight";
			break;
		case 1:
			gDebugButton.style.border = "2px outset buttonhighlight";
			break;
	}
	
}



// Debug Tools case statement //
function debugTools_ON(e) {
	
	if(gBrowser.vendor == "IE"){
		switch (event.keyCode) {
			case 49: // #1 
				getVariable_debugTool();
			break
			case 50: // #2 
				browserInfo_debugTool();
			break
			case 51: // #3
			 	divShow_debugTool();
			break
			case 52: // #4
			 	showScripts_debugTool();
			break
			case 53: // #5
				view_documentAll();			 	
			break
			case 54: // #6
				showCSS_debugTool();			 	
			break
		}
	
	}else{
		switch (e.which){
			case 49: // #1 
				getVariable_debugTool();
			break	
			case 50: // #2 
				browserInfo_debugTool();
			break
			case 51: // #3 
				viewSource_debugTool();
			break
			case 52: // #4
			 	view_JavaConsole();
			break
			case 53: // #5
			 	view_documentAll();
			break
		}
		
	}
	
}

function moveDebugLayer(){

	//var lDLT = parseInt(gDebugLayer.currentStyle.top);
	//var lBT = document.body.scrollTop;
	document.getElementById("debugLayer").style.top = document.body.scrollTop + "px";

}

// ********************************* //
// show variable in hidden layer //
function tracer_debugTool(p_var){
	
	if(typeof(gDebugTracerLyr)=="undefined"){
		gDebugTracerLyr = document.getElementById("debugTracerLyr")
		gDebugTracerLyr.style.display = "block";
	}
	
	if(gDebugTracerLyr){
		gDebugTracerLyr.innerHTML += "<br>" + p_var
		//setTimeout("tracer_debugTool(" + AV.curPos + ")", 2000);
	}
	
}

// ********************************* //
// doubleClick Alert object info //
function mouseDoubleClick_DebugTool(e){
	//alert(event.button)
	//alert(e.target)
	if(gBrowser.vendor == "IE"){
		var lObj = event.srcElement;
		var lAbort = false;
		var lCtrlKey = window.event.ctrlLeft;
	}else{
		var lObj = e.target;
		var lAbort = true;
		var lCtrlKey = e.ctrlKey;
	}
	
	//if(typeof(lObj)=="object" && window.event.ctrlLeft){
	if(typeof(lObj)=="object" && lCtrlKey){
		if(typeof(lObj.id)=="string"){
		
			if(lAbort){
				gObject = document.getElementById(e.target.id);
				//gObject = e.originalTarget.id;
				getVariable_debugTool("gObject");
				return;
			}
		
			if(lObj.tagName == "BODY"){
				var s = "DOCUMENT INFO:\n"
				s += "tag = " + lObj.tagName + "\n";
				s += "width = " + lObj.currentStyle.width + "\n";
				s += "height = " + lObj.currentStyle.height + "\n";
				s += "color = " + lObj.currentStyle.color + "\n";
				s += "textAlign = " + lObj.currentStyle.textAlign + "\n";
				s += "left = " + lObj.currentStyle.left + "\n";
				s += "top = " + lObj.currentStyle.top + "\n";
				s += "backgroundImage = " + lObj.currentStyle.backgroundImage + "\n";
				//s += "\nfileCreatedDate = " + document.fileCreatedDate +"\n";			
				s += "\nfileModifiedDate = " + document.fileModifiedDate +"\n";
				
				if(document.styleSheets.length){
					s += "\nSTYLESHEETS:\n";
	                for(var i=0; i<document.styleSheets.length; i++){
					    s += "styleSheet href = " + document.styleSheets[i].href + "\n"
	                }
				}
				
				s += "\n" + showScripts_debugTool(true);
				
			}else{

				var s = "OBJECT INFO:\n"
				s += "id = " + lObj.id + "\n";
				s += "tag = " + lObj.tagName + "\n";
				s += "class = " + lObj.className + "\n";
				s += "IMG.src = " + lObj.src + "\n";
	
				s += "\nOBJECT STYLE:\n"
				s += "width = " + lObj.currentStyle.width + "\n";
				s += "height = " + lObj.currentStyle.height + "\n";
				s += "color = " + lObj.currentStyle.color + "\n";
				s += "textAlign = " + lObj.currentStyle.textAlign + "\n";
				s += "fontSize = " + lObj.currentStyle.fontSize + "\n";				
				s += "left = " + lObj.currentStyle.left + "\n";
				s += "top = " + lObj.currentStyle.top + "\n";
				s += "backgroundImage = " + lObj.currentStyle.backgroundImage + "\n";
				s += "position = " + lObj.currentStyle.position + "\n\n";
				
				if(lObj.tagName == "IMG"){
					//s += "fileCreatedDate = " + lObj.fileCreatedDate +"\n";			
					s += "fileModifiedDate = " + document.fileModifiedDate +"\n";
				}
				
				if(typeof(lObj.innerHTML)=="string" && lObj.innerHTML != ""){
					s += "innerHTML = " + lObj.innerHTML + "\n"
				};
			
			}
				alert(s)
		}
	}
}

// Write all the .js files needed //
function writeJS(){

	var ws = '';
	var lA = [];
	lA.push("functions");
	lA.push("layout");
	gPaths.page = gPaths.page.split(".")[0]; 
	lA.push(gPaths.page);
	for (var i=0; i<lA.length; i++){
		ws += '<script language="JavaScript" type="text/javascript" src="' + gPaths.js + lA[i] + '.js"></script>\n';
    }
	document.write(ws);
}

// Write all the style sheets needed //
function writeCSS(){

	var ws = '';
	var lA = [];
	lA.push("common");
	if(gBrowser.vendor == "IE"){lA.push("ie")};	
	for (var i=0; i<lA.length; i++){
		ws += '<link rel="stylesheet" type="text/css" href="' + gPaths.css + lA[i] + '.css">\n';
    }
	document.write(ws);
	
	writeTransition();
}



function assignBasePath(p_path, p_pos) {
	// init vars
	var lArray = unescape(p_path).split("/")
	var lNewString = ""
	
	for(var i=0; i<lArray.length-p_pos; i++) {
		lNewString += lArray[i] + "/"
	}
	return lNewString;
}
