

/*

	BELOW ARE THE JAVASCRIPT FUNCTIONS USED FOR THE SITETHEORY.COM WEBSITE.
	THIS FILE INCLUDED THE SITE NAVIGATION FUNCTIONS, AS WELL AS 
	ANY SIMPLE FUNCTIONS THAT ANY OF THE MODULES MIGHT USE.  ALSO NOTE THAT 
	SOME MODULES MIGHT INCLUDE JAVASCRIPT EMBEDDED INTO THE HTML.
	
	ALL CODE IS WRITTEN AND COPYRIGHT (C) 2005 BY REECE PEGUES, 
	BUT IF YOU WANT TO USE IT JUST ASK!
	(I'd like to know if someone was making use of it so I can feel special)
	reece.pegues [AT] gmail [DOT] com

*/








/*##################################################################################
		            simple hide and show an element script 
##################################################################################*/

function show( id ){
    document.getElementById(id).style.display = 'block';
}

function hide( id ){
    document.getElementById(id).style.display = 'none';
}

function trim(str){
	 return str.replace(/^\s*|\s*$/g,"");
}
function get_args() {
	var args = new Object();
	var query = location.search.substring(1);
	var pairs = query.split("&");
	for(var i = 0; i < pairs.length; i++) {
	var pos = pairs[i].indexOf('=');
	if (pos == -1) continue;
	var argname = pairs[i].substring(0,pos);
	var value = pairs[i].substring(pos+1);
	args[argname] = unescape(value);
	}
	return args;
}






/*##################################################################################
						  GLOBAL XMLHTTPREQUEST FUNCTIONS
			used for site navigation, and some modules (such as ninjachat)
##################################################################################*/

var req;
var objectid;
var page = "libs/sval.php";

function setupXML() {
	req = false;
    // branch for native XMLHttpRequest object
    if(window.XMLHttpRequest) {
    	try {
			req = new XMLHttpRequest();
        } catch(e) {
			req = false;
        }
    // branch for IE/Windows ActiveX version
    } else if(window.ActiveXObject) {
       	try {
        	req = new ActiveXObject("Msxml2.XMLHTTP");
      	} catch(e) {
        	try {
          		req = new ActiveXObject("Microsoft.XMLHTTP");
        	} catch(e) {
          		req = false;
        	}
		}
    }
}
function loadGallery(n){
	//alert("loading module...");
	loadModule(n);
	//alert("updating image list...");
	myLightbox.updateImageList(); 
	//alert('done');
}
function loadModulePage(n){
	document.location.href = 'index.php?m='+n;
}
function loadModule(n){
	// check if module is hard coded into the URL
	args = get_args();
	try{
		// if module is not hard coded, just fetch the new module
		if(args['m']==null){
			setupXML();
			objectid = 'layout_module';
			if(req){
				document.getElementById(objectid).innerHTML = "<br><br><br><br><br><br><center><span style='font-size: 18px; color: #AA5555;'>Loading Module: "+n+"<br><span style='font-size: 14px;'>(this may take a couple seconds)</span></span></center>";
				insertXML('index.php?n='+n);
			} else{
				document.location.href = "index.php?m="+n;
			}
		}
		// if module is hard coded, set module and then redirect whole page.
		// this is to avoid a page refresh taking them back to the original module later on
		else{
			setSVAL("m",n);
			document.location.href = 'index.php';
		}
	}catch(err){
		document.location.href = 'index.php?m='+n;
	}
}
function insertXML(url){
	if(req){
		//req.onreadystatechange = insertXML2;
		req.open("GET", url, false);
		req.send(null);
        if (req.status == 200) {
			document.getElementById(objectid).innerHTML = req.responseText;
        } else {
			document.getElementById(objectid).innerHTML = 
				"<center><span style='font-size: 18px; color: #AA5555;'>SERVER ERROR: Failed To Load XML.</span></center>";
            // alert("There was a problem retrieving the XML data:\n" +req.statusText);
        }
	}else alert("failed to load XMLHttpRequest Object");
}
function insertXML2() {
    // only if req shows "loaded"
    if (req.readyState == 4) {
        // only if "OK"
        if (req.status == 200) {
			document.getElementById(objectid).innerHTML = req.responseText;
        } else {
			document.getElementById(objectid).innerHTML = 
				"<center><span style='font-size: 18px; color: #AA5555;'>SERVER ERROR: Failed To Load XML.</span></center>";
            // alert("There was a problem retrieving the XML data:\n" +req.statusText);
        }
    }
}
function setSVAL(key, val) {
	var url = page+"?k="+key+"&v="+val;
    // branch for native XMLHttpRequest object
	setupXML();
	if(req) {
		req.open("GET", url, true);
		req.send(null);
	}
}









/*##################################################################################
			               Picture Popup stuff - used by SPGM 
##################################################################################*/


function popupPicture(pictureURL, width, height, justPicture) {
  width = width + 5;
  height = height + 5;
  if (justPicture) {
    var frame = window.open('', '', 'width='+width+',height='+height+',scrollbars=0,location=0,menubar=0,resizable=1');
    frame.document.write(
      '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" '
      +'"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\n'
      +'<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\n'
      +'  <head>\n'
      +'    <title>SPGM: '+pictureURL+'</title>'
      +'    <style type="text/css">body {margin: 0px}</style>\n'
      +'    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />\n'
      +'  </head>\n'
      +'  <body><center>\n'
      +'    <div style="margin: 0px;">\n'
      +'      <img src="'+pictureURL+'" alt="'+pictureURL+'" />\n'
      +'    </div>\n'
      +'  </center></body>\n'
      +'</html>'
    );
  } else {
    window.open(pictureURL, '', 'width='+width+',height='+height+',scrollbars=1,location=0,menubar=0,resizable=1');
  }
}







/*##################################################################################
			                Menu dhtml functions
##################################################################################*/

var m1 = new Image();
m1.src = "images/menufolder.gif";

var m2 = new Image();
m2.src = "images/menufolder_bw.gif";

function menu_disp(n){
	var tt = document.getElementById("menu_"+n);
	var kk = document.getElementById(n+"_folder");
	if(tt.style.display=="none"){
		tt.style.display = "block";
		kk.src = m1.src;
		setSVAL("menu_"+n, "0");
	}else{
		tt.style.display = "none";
		kk.src = m2.src;
		setSVAL("menu_"+n, "1");
	}
}
function menuover(n){
	var tt = document.getElementById(n+"_mpic");
	tt.style.display = "block";
}
function menuout(n){
	var tt = document.getElementById(n+"_mpic");
	tt.style.display = "none";
}




/*##################################################################################
			                 Title dhtml functions
##################################################################################*/
	
var mm;

function logo_finishswap(newlogo){
        var ss = document.getElementById("sitetheory_logo");
        ss.src = mm.src;
        document.getElementById('img_clink').style.display = 'inline';
        document.getElementById('img_cmsg').style.display = 'none';
	setSVAL("logo", newlogo);
}
function logo_swap(newlogo){
	document.getElementById("img_clink").style.display = "none";
	document.getElementById("img_cmsg").style.display = "inline";
	mm = new Image();
	mm.onload = function(){
		logo_finishswap(newlogo);
	};
	mm.onerror = function(){ alert("Error Loading Image");};
	mm.src = "logo/"+newlogo;
}



/*##################################################################################
			                sukoku function
##################################################################################*/
function sudoku_check(n){
	var a = new Array();
	a[0] = n;
	var i = n[0];
	var j = n[1];
	var c = "sudoku_bad";
	var g = "sudoku_reg";
	var dr = "sudoku_disreg";
	var db = "sudoku_disbad";
	var t = document.getElementById("input_"+n).value;
	var debug = 0;
	var debug2 = 0;
	sudoku_checklines();
	sudoku_checksquare();

	function sudoku_checklines(){
		// set the box in question to regular.
		sudoku_setclass(n,0);
		if(!sudoku_isvalue(t)){
			sudoku_setclass(n,1);
		}
		if(t=="") t = "AA";
		for(var k=1;k<=9;k++){
			if(document.getElementById("input_"+i+k).value==t && n!=""+i+k){
				if(debug) alert("found duplicate at "+i+k);
				sudoku_setclass(""+i+k,1);
				sudoku_setclass(n,1);
			}else if(n!=""+i+k && document.getElementById("input_"+i+k).value!=""){
				if(debug) alert("checking is "+i+k+" red");
				if((document.getElementById("input_"+i+k).className==c || document.getElementById("input_"+i+k).className==db) && !a.find(""+i+k)){
					a.push(""+i+k);
					if(debug) alert("it was RED!");
					sudoku_check(""+i+k);
				}
			}
		}
		for(var k=1;k<=9;k++){
			if(document.getElementById("input_"+k+j).value==t && n!=""+k+j){
				if(debug) alert("found duplicate at "+k+j);
				sudoku_setclass(""+k+j,1);
				sudoku_setclass(n,1);
			}else if(n!=""+k+j && document.getElementById("input_"+k+j).value!=""){
				if(debug) alert("checking is "+k+j+" red");
				if((document.getElementById("input_"+k+j).className==c || document.getElementById("input_"+k+j).className==db) && !a.find(""+k+j)){
					a.push(""+k+j);
					if(debug) alert("it was RED!");
					sudoku_check(""+k+j);
				}
			}
		}
	}
	function sudoku_checksquare(){
		var s1; var s2; var t1; var t2
		var ii = parseInt(i);  
		var jj = parseInt(j);
		if(ii%3==0){ s1 = ii-2; s2 = ii;}
		else if(ii%3==2){ s1 = ii-1; s2 = ii+1;}
		else if(ii%3==1){ s1 = ii; s2 = ii+2;}
		if(jj%3==0){ t1 = jj-2; t2 = jj;}
		else if(jj%3==2){ t1 = jj-1; t2 = jj+1;}
		else if(jj%3==1){ t1 = jj; t2 = jj+2;}
		if(debug2) alert("entering square check");
		if(debug2) alert("i: "+ii+"\nj: "+jj+"\ns1: "+s1+"\ns2: "+s2+"\nt1: "+t1+"\nt2: "+t2);
		for(var ss=s1;ss<=s2;ss++){
			for(var tt=t1;tt<=t2;tt++){
				if(document.getElementById("input_"+ss+tt).value==t && n!=""+ss+tt){
					if(debug2) alert("found duplicate at "+ss+tt);
					sudoku_setclass(""+ss+tt,1);
					sudoku_setclass(n,1);
				}else if(n!=""+ss+tt && document.getElementById("input_"+ss+tt).value!=""){
					if(debug2) alert("checking is "+ss+tt+" red");
					if((document.getElementById("input_"+ss+tt).className==c || document.getElementById("input_"+ss+tt).className==db) && !a.find(""+ss+tt)){
						a.push(""+ss+tt);
						if(debug2) alert("it was RED!");
						sudoku_check(""+ss+tt);
					}
				}else if(debug2) alert("You should never see this...\n\ns1: "+ss+"\nt1: "+tt+"\nvalue: "+document.getElementById("input_"+ss+tt).value);
			}
		}
	}
	function sudoku_setclass(n,w){
		b = document.getElementById("input_"+n);
		if(debug || debug2) alert("Setting "+n+" to "+w);
		if(!w){
			if(b.className==c) b.style.backgroundColor = "#FFFFFF";
			else if(b.className==db) b.style.backgroundColor = "#DDDDDD";
			if(b.className==c) b.className = g;
			else if(b.className==db) b.className = dr;
		}else{
			if(b.className==g) b.style.backgroundColor = "#EEAAAA";
			else if(b.className==dr) b.style.backgroundColor = "#BB8888";
			if(b.className==g) b.className = c;
			else if(b.className==dr) b.className = db;
		}
	}
	
}



function sudoku_isvalue(n){
	for(var i=1;i<=9;i++){
		if(i==n) return 1;
	}
	if(n=="") return 1;
	return 0;	
}


// create the "find" function for arrays
Array.prototype.find = function (s)
{
	for(var i=0;i<this.length;i++)
		if(this[i] == s) return true;
	return false;
};



// this is used by portsentry to have the tabs there.
function site_showtab(id){
	document.getElementById('portsentry_htab_body').style.display = 'none';
	document.getElementById('portsentry_ltab_body').style.display = 'none';
	document.getElementById(id+"_body").style.display = 'block';
	document.getElementById('portsentry_htab').className = 'site_tab';
	document.getElementById('portsentry_ltab').className = 'site_tab';
	document.getElementById(id).className = 'site_tab2';
}


