var menus = new Object();
var cache = new Object();
var content = new Array('col_left','col_middle','col_right');
var current_page = 'index';
var menutimer;

setInterval('resize()',100);
window.onresize = resize;

function load(page,location){
 	current_page=page;
	resize();
	var date = new Date();
	for(i in links[page]){
		var id = page + '_' + links[page][i];
		var cache_page = current_language + '/' + links[page][i];
		if(document.getElementById(content[i]).offsetWidth == 14){
			document.getElementById(content[i]).innerHTML = '';
		
		}
		else if(cache[cache_page]){
			document.getElementById(content[i]).innerHTML = cache[cache_page];
		}
 		else if (links[page][i]){
			document.getElementById('page').innerHTML +=('<IFRAME ID="' + id 
				+ '" SRC="load.pl?content=' + content[i] 
				+ '&file=' + current_language + '/' + links[page][i] + '&id=' + id 
				+ '" STYLE="display:none;position:absolute;top:90px"></IFRAME>');	
		}
	}
	document.getElementById('loc').innerHTML = (location ||  loopmenu() || '');
}

function narrow(obj){
	if(obj.offsetWidth == 14){
		obj.style.width='210px';
		obj.style.overflowY = 'auto';
		load(current_page);
	}
	else{
		obj.style.width='2px';
		obj.style.overflowY = 'hidden';
		obj.innerHTML = '';
	}
	//unselect for safari... use try to not break ie
	try{
		window.getSelection().collapse(obj,0);
	}
	catch(error){}
	resize();
	resize();
}
function resize(){
	try{
		var height = (document.getElementById('page').offsetHeight) - find_top(document.getElementById('col_left')).y -30;
		document.getElementById('col_left').style.height = height + 'px';
		document.getElementById('col_left').style.width =  (document.getElementById('col_middle').offsetLeft - 22) + 'px';
		document.getElementById('col_middle').style.height = height + 'px';
		document.getElementById('col_middle').style.right = (document.getElementById('col_right').offsetWidth) + 'px';
		document.getElementById('col_right').style.height = height + 'px';
		document.getElementById('footer').style.top = (document.getElementById('page').offsetHeight - 18) + 'px';
		document.getElementById('footer').style.left = '0px';
		document.getElementById('footer').style.display = 'block';
	}
	catch(error){
		//alert(error);
	}
}


function send(address){
	var addr = address + '@' + 'iloveuguys' + '.org';
	return('<A HREF="mailto:' + addr + '?subject=From the Website">' + addr + '<\/A>');
}

function loopmenu(){
	for(var i in lang[current_language]){
		for(var j in lang[current_language][i]){
			if (lang[current_language][i][j] == current_page){
// 				alert(j + ' ' + lang[current_language][i][j] + ' ' + current_page);
				return j;
			}
		}
	}
}

function change_lang(_lang, obj){
	obj.blur();
	parent.current_language=_lang;
	document.getElementById('mainmenu').innerHTML=writemenu(_lang);
	load(current_page);
}

function writemenu(_lang){
	var string = '';
	for(var i in lang[_lang]){
		if(i.toLowerCase() != 'hidden'){
			string += '<A HREF="" onclick="return false;"'
				+ ' CLASS=menu  onfocus="this.blur();" onmouseover="menutimer=0;showmenu(this)">' 
				+ i 
				+ '<\/A>';
			menus[i] = '';
			for( var j in lang[_lang][i]){
				menus[i] += '<A HREF="" onclick="load(\''   + lang[_lang][i][j] + '\',\'' + j + '\');hidemenu();return false;" CLASS=submenu onfocus="this.blur();" >' + j  + '<\/A>';
			}
		}
	}
	return(string);
}

function showmenu(obj){
	var label = obj.innerHTML
	var loc = find_top(obj);
	document.getElementById('diags').innerHTML = loc.x + ' ' + loc.y + ' ' + obj;
	document.getElementById('menubox').style.left = loc.x + 'px';
	document.getElementById('menubox').style.top = (loc.y + 16) + 'px';
	document.getElementById('menubox').style.display='block';
	
	document.getElementById('menubox').innerHTML = menus[label]
	if(document.getElementById('menubox').offsetHeight){
		document.getElementById('menubox_shadow').style.display	='block';
		document.getElementById('menubox_shadow').style.height 	= (document.getElementById('menubox').offsetHeight + 4) + 'px';
		document.getElementById('menubox_shadow').style.width 	= document.getElementById('menubox').offsetWidth + 'px';
		document.getElementById('menubox_shadow').style.left 	= (loc.x + 4)  + 'px';
		document.getElementById('menubox_shadow').style.top  	= (loc.y + 16) + 'px';
	}
	else{
		document.getElementById('menubox_shadow').style.display	='none';
	}
}

function hidemenu(){
		document.getElementById('menubox').style.display='none';
		document.getElementById('menubox_shadow').style.display='none';
}

function find_top(obj){
// http://www.quirksmode.org/js/findpos.html
	var curleft = 0;
	var curtop = 0;
	try{
		if (obj.offsetParent) {
			do {
				curleft += obj.offsetLeft;
				curtop += obj.offsetTop;
			} while (obj = obj.offsetParent);// this is a deliberate assignment... not a typo. Pretty clever.	
		}
	}
	catch(error){
		alert('find_top: ' + error + '\nobject invalid');
	}
	
	return {x:curleft,y:curtop};
}




function repeat(string, count){
	string = count ? string : '';
	var returnstring = '';
	for(i = 0; i < count; i++){
		returnstring += string;
	}
	return returnstring;
}



function toJudo(_obj, language, count, string_flag){
	//related: http://blog.stchur.com/2007/04/06/serializing-objects-in-javascript/
	count = count ? count : 0;
	var type = '';
	var xml = null;
	switch(language){
		case 'js':
			type = ':';
			break;
		case 'pl':
			type = '=>'
			break;
		case 'xml':
			xml = 1;
			break;
		default:
			type = 'default :';
 			break;
	}
	switch (typeof _obj){
		// numbers, booleans, and functions are trivial:
		// just return the object itself since its default .toString()
		// gives us exactly what we want
		case 'number':
		case 'boolean':
		case 'function':
			return _obj;
			break;
		// for JSON format, strings need to be wrapped in quotes
		// JMK - same for JUDO
		case 'string':
			if(xml){
				if(string_flag){
					return '' + _obj + '';
				}
				else{
					return this.repeat('\t', count) + '' + _obj + '';
				}
			}
			else{
				if(string_flag){
					return '\'' + _obj + '\'';
				}
				else{
					return this.repeat('\t', count) + '\'' + _obj + '\'';
				}
			}
		break;
		case 'object':
			var str = '';
			
			if (_obj.constructor || _obj.constructor == Array || typeof _obj[0] != 'undefined'){
// 				str +=  '\n' + this.repeat('\t', count) + '[\n';
				
				str += xml ? '\n' : '[\n';
				var len = _obj.length;
				count = len ? count + 1 : count;
				var i = 0;
				for ( i = 0; i < len-1; i++){
					if(xml){
						var elem = string_flag ? '&lt;!ELEMENT ![PCDATA[' : '';
						var quot = string_flag ? ']]&gt;' : '';
						str += this.repeat('\t', count) + elem + this.toJudo(_obj[i], language, count, 'string_flag_array') +  quot + '\n';
					}
					else{
						str += this.repeat('\t', count)  + this.toJudo(_obj[i], language, count, 'string_flag') + ',\n';
					}
				}
				if(string_flag && xml){
					str += this.repeat('\t', count) + '&lt;!ELEMENT ![PCDATA[' + this.toJudo(_obj[i], language, count, 'string_flag_array') + ']]&gt;\n';
				}
				else if(xml){
					str += this.repeat('\t', count) + '' + this.toJudo(_obj[i], language, count, 'string_flag_array') + '';
				}
				else{
					str += this.repeat('\t', count) + this.toJudo(_obj[i], language, count, 'string_flag_array') + '\n';
				}
				count--;
				if(xml){
					str += this.repeat('\t', count) + '';
				}
				else{
					str = str.replace(/\,\n*$/, '\n') + this.repeat('\t', count) + ']';
				}
			}
			else{
				str += xml ? '\n' : '{\n';
				count++;
				var key;
				for (key in _obj) {
					if(xml){
						str += this.repeat('\t', count) + '&lt;' + key + '&gt;' + type + this.toJudo(_obj[key], language, count, 'string_flag_hash') + '&lt;/' + key + '&gt;' + '\n';
					}
					else{
						str += this.repeat('\t', count) + "'" + key + "'"  + type + this.toJudo(_obj[key], language, count, 'string_flag_hash') + ',\n';
					}
				}
				count--;
				if(xml){
					str += this.repeat('\t', count);
				}
				else{
					str = str.replace(/\,\n*$/, '\n') + this.repeat('\t', count) + '}';
				}
			}
			str = str.replace(/\n+/g,'\n');
			return str;
			break;
		default:
			return '\'' + typeof _obj + '\'';
			break;
	}
}