jQuery(document).ready(init);


//===== APP =====\\

var command;
var alert_box;
var echo_on = false;
var explorer = false;
var iev = 0;

document.onkeydown = function (e)
{
	var e = window.event || e;
	if (browse.state.val)
	{
		if (e.keyCode == 39) browse.nav.n();
		if (e.keyCode == 37) browse.nav.p();
	}
}

function init(stage) {
	echo(stage,'Init');
	if (stage == 1) {
		nav.make();
	} else if (stage == 2) {
		/*var portal = '<ul id="admin_cp"><li><a id="acp_view" class="active" title="View" onClick="JavaScript: acp.toggle(1);">View</a></li>';
		portal += '<li><a id="acp_edit" title="Edit" onClick="JavaScript: acp.toggle(2);">Edit</a></li>';
		portal += '<li><a id="acp_cms" title="CMS" onClick="JavaScript: acp.toggle(3);">CMS</a></li>';
		portal += '<li><a id="acp_upload" title="Upload" onClick="JavaScript: acp.toggle(4);">Upload</a></li></ul>';
		document.getElementById('portal').innerHTML = portal;*/
		document.getElementById('content').innerHTML = '';
		pollHash();
		setInterval(pollHash, 300);
		//load_page(window.location.hash);
	} else {
		if (navigator.appName == 'Microsoft Internet Explorer')
		{
			explorer = true;
			var ua = window.navigator.userAgent;
			var msie = ua.indexOf('MSIE');
			iev = parseInt( ua.substring( msie+5, ua.indexOf('.',msie)));
		}
		loadScreen('content','Application');
		if (echo_on) command = new cmnd(true);
		page.urls.loadme('init(1);');
	}
}
var siteroot = 'http://www.elenawright.com/newsite/';
var pre = '#!/';
function load_page(url) {
	echo('loading '+url);
	for(i=0;i<pre.length;i++){url=(url.charAt(i)!=pre.charAt(i))?pre+url.substr(i,url.length-i):url}
	window.location.hash = url;
	url = url.substr(pre.length,url.length-pre.length);
	//url = url.substr(1,url.length-1);
	if (url=='') url = 'home';
	url = url.split('/');
	
	if (url[0]=='cms') {
		// load content management system / whatever the url is.
		
	} else if (url[0]=='view') {
		page.create('',url[1]);
	} else {
		//page.create(url[0]);
		// php request db table 'pages' and return all for url==url
		//makeRequest('inc/get_tr.php','t=pages&s=url&w='+url,alertContents_php);
		//db_retrieve('inc/get_tr.php','t=pages&s=url&w='+url)
		
		browse.state.val = 0;
		var result = searchArr(page.urls.arr,0,url[0]);
		if (result == '') {
			//load_page('404');
			//return;
			page.text.arr[8] = new text_page(8);
			win_title.update('404 Request Error');
		} else {
			pg_ttl = result[0][1];
		}
		var id = result[0][3];
		if (result[0][2]==0) {
			//alert('text page');
			if (!page.text.arr[id]) {
				loadScreen('content', result[0][1]);
				page.text.arr[id] = new text_page(id);
				//page.text.arr[id].init();
			} else {
				page.text.arr[id]._load();	
			}
		} else if (result[0][2]==1) {
			//alert('view page');
			browse.state.val = 2;
			if (browse.ready) {
				browse.view(id);
			} else browse.create('browse.view('+id+');');
		} else if (result[0][2]==2) {
			browse.state.val = 1;
			browse.url = url;
			if (!browse.ready) browse.create();
			else browse._load();
		} else if (result[0][2]==3) {
			if (! url[1] && !order.it) load_page(pre+'home');
			browse.state.val = 3;
			order._load(url[1]);
		}
	}
	//alert(url);
	win_title.update(pg_ttl);
}
function clear_page() {
	document.getElementById('content').innerHTML = '';
}
var win_title = new Object();
win_title.update = function(pagename) {
	var ttl = 'Elena Wright.com - ';
	if (recentHash <= '#') ttl += 'Custom Glass Art';
	else ttl += pagename;
	document.title = ttl;
}

// ========= PAGE ========== \\
var page = new Object();
page.create = function(url,id) {
	if (url == '') {
		ajaxRequest('inc/page.php','?id='+id, 'content');
	} else {
		ajaxRequest('inc/page.php','?url='+url, 'content');
		nav.update(url);
	}
}
page.urls = new Object();
page.urls.loadme = function(goto) {
	echo('loading URLS...');
	var r_str = '?s=*&t=pages';
	db_get(alertContents_php,r_str,'page.urls','page.urls.init();');
	page.urls.goto = goto;
	//alert(page.urls.goto);
}
page.urls.init = function() {
	echo('...URLS loading');
	page.urls.arr = str_to_arr(page.urls.php_out);
	//alert ('loaded: '+page.urls.arr);
	eval(page.urls.goto);
}

text_page = function(id) {
	this.id = id;
	this.php_out = 'php out';
	var r_str = '?s=*&t=pg_text&w=id+%3D+'+this.id;
	db_get(alertContents_php,r_str,'page.text.arr['+this.id+']','page.text.arr['+this.id+'].init();');
	this.init = function() {
		echo('initializing page '+this.id);//+'::: '+this.php_out);
		var result = str_to_arr(this.php_out);
		
		this.title = result[0][1];
		this.url = result[0][2];
		this.bkg = result[0][3];
		this.bodytxt = result[0][4];
		
		this.HTML = '<h1';
		if (this.bkg > '') this.HTML = this.HTML + ' class="alt" style="background-image: url(uploads/images/'+this.bkg+')"';
		this.HTML = this.HTML + '>'+this.title+'</h1>';
		this.HTML = this.HTML + '<div id="textbody">'+this.bodytxt+'</div>';
		document.getElementById('content').innerHTML = this.HTML;
		nav.update(this.url);
		//alert(this.HTML);
	}
	this._load = function() {
		//alert('reloading page '+this.arr[0][1]);
		if (this.HTML == 'undefined') {
			alert('undefined');
			page.text.arr[this.id] = new text_page(this.id);
		} else {
			document.getElementById('content').innerHTML = this.HTML;
			nav.update(this.url);
		}
	}
}

page.text = new Object();
page.text.arr = new Array();


// ========= BROWSE ========== \\

var browse = new Object();
browse.ready = false;
browse.php_out = '';
browse.limit = 10;
browse.page = 0;
browse.categories = new Object();
browse.state = new Object();
browse.state.val = 0;
browse.nav = new Object();
browse.nav.f = new Array('browse.nav.p()','browse.nav.u()','browse.nav.n()');
browse.nav.p = function() {
	echo('Browse previous');
	if (browse.state.val == 1) {
		window.location.hash=(pre+browse.ret_url(browse.state.pg-1));
	}
	if (browse.state.val == 2) {
		var newurl = browse.state.arr[browse.state.viewpos-1].url;
		//echo(browse.state.id+' @ '+browse.state.viewpos+' to '+pre+newurl,'ID');
		window.location.hash = pre+newurl;
	}
}
browse.nav.n = function() {
	echo('Browse next');
	if (browse.state.val == 1) {
		if (!browse.nav.isLastPage()) window.location.hash=(pre+browse.ret_url(browse.state.pg+1));
	}
	if (browse.state.val == 2) {
		var newurl = browse.state.arr[browse.state.viewpos+1].url;
		//echo(browse.state.id+' @ '+browse.state.viewpos+' to '+pre+newurl,'ID');
		window.location.hash = pre+newurl;
	}
}
browse.nav.u = function() {
	if (browse.state.val == 2) {
		var pg = Math.floor((browse.state.viewpos)/browse.limit);
		echo('Browse up '+browse.state.viewpos);
		window.location.hash=(pre+browse.ret_url(pg));
	} else if (browse.state.val == 3) {
		load_page(order.url);
	}
}
browse.nav.isLastPage = function() {
	return ((browse.state.pg+1)*browse.limit>browse.disp.length);
}
browse.pagenav = function() {
	if (!document.getElementById('pagenav')) return;
	var pagenav = document.getElementById('pagenav');
	echo('render pagenav: val='+browse.state.val);
	if (browse.state.val==0) {
		document.getElementById('pagenav').innerHTML = '';
		return;
	}
	if (!browse.nav.btn) browse.nav.btn = new nav_btn(browse.nav.f,0);
	browse.nav.btn.state.u = (browse.state.val==2)?1:0;
	document.getElementById('pagenav').innerHTML = '<li>'+browse.nav.btn.render()+'</li>';
	browse.nav.btn.state.h = 0;
	if (browse.state.val==1) browse.nav.btn.update();
	else if (browse.state.val==2) {
		var s = 0;
		if (browse.state.viewpos == 0) s = 2;
		if (browse.state.viewpos == browse.state.arr.length-1) s = 1;
		browse.nav.btn.update('s',s);
	}
	return true;
}
browse.create = function(goto,stage) {
	echo('Create Browse');
	if (stage==1) {
		if (!browse.nav.srt) browse.nav.srt = new Array(['Title','','browse.set(\'srt\',0);'],
														['Date','','browse.set(\'srt\',1);'],
														['Price','','browse.set(\'srt\',2);'],
														['Size','','browse.set(\'srt\',3);']);
		browse.state.srt = 0;
		browse.state.dir = 1;
		browse.categories.arr = str_to_arr(browse.categories.php_out);
		browse.categories.arr = sortList(browse.categories.arr,0);
		browse.nav.cats = new Array();
		for (i=0; i<browse.categories.arr.length; i++) {
			browse.nav.cats[i] = new Array();
			browse.nav.cats[i][0] = browse.categories.arr[i][1];
			browse.nav.cats[i][1] = 'browse/'+browse.categories.arr[i][2];
		}
		//alert(goto+', '+browse.ready);
		//clear_page();
		// load browse page contents-- php request
		if (browse.ready) {
			browse._load();
		} else {
			db_get(alertContents_php,'?s=*&t=glassart','browse',goto);
		}
		// display in page
	} else {
		loadScreen('content','Glass Art');
		goto=(!goto)?'browse.init()':goto;
		//alert('create browse');//: '+cat+', '+subcat+', '+s+', '+d+', '+p);
		db_get(alertContents_php,'?s=*&t=categories','browse.categories','browse.create(\''+goto+'\',1);');
	}
}
browse.getState = function(url) {
	var result = searchArr(browse.categories.arr,2,url[1]);
	if (result.length > 0) {
		browse.state.cat = 1*result[0][0];
		if (url[2]>'') {
			browse.state.pg = 1*url[2];
		} else browse.state.pg = 0;
	} else {
		browse.state.cat = -1;
		if (url[1]>'') {
			browse.state.pg = 1*url[1];
		} else browse.state.pg = 0;
	}
	return;
}
browse.init = function() {
	browse.setup();
	browse._load();
}
browse.setup = function() {
	//echo('Browse','Setup');
	browse.arr = str_to_arr(browse.php_out);
	browse.items = new Array();
	for (i=0; i<browse.arr.length; i++) {
		var a = browse.arr[i];
		var id = a[0]*1;
		browse.items[id] = new browse_item(a);
		var b = browse.items[id];
	}
	browse.items = sortList(browse.items,browse.nav.srt[browse.state.srt][0].toLowerCase(),browse.state.dir);
	browse.ready = true;
}
browse._load = function(pg) {
	nav.update('browse');
	if (pg==0) browse.state.pg = pg;
	
	browse.getState(browse.url);
	if (!browse.nav.dd_cat) browse.nav.dd_cat = new dd('bn_c',browse.nav.cats,browse.state.cat+1);
	browse.nav.dd_cat.val = browse.state.cat+1;
	if (!browse.nav.dd_srt) {
		browse.nav.dd_srt = new dd('bn_s',browse.nav.srt,browse.state.srt,'Sort By');
	}
	if (!browse.nav.btn) browse.nav.btn = new nav_btn('',0);
	if (!browse.nav.dir) browse.nav.dir = new button(1,'browse.set(\'dir\',\'\',-1);',(1-browse.state.dir)/2);
	
	browse.nav.HTML = '<li id="bn_c"></li><li id="bn_s"></li><li>'+browse.nav.dir.render()+'</li>';
	if (document.getElementById('browsenav').innerHTML == '') document.getElementById('browsenav').innerHTML = browse.nav.HTML;
	browse.nav.dd_cat.render();
	browse.nav.dd_srt.render();
	pg=(!pg)?browse.state.pg:pg;
	if (browse.state.cat>=0 && browse.state.cat < 4) {
		browse.disp = searchArr(browse.items,'category',browse.state.cat);
	} else if (browse.state.cat ==4) {
		browse.disp = searchArr(browse.items,'painted',1);
	} else {
		browse.disp = browse.items;
	}
	browse.disp = sortList(browse.disp,browse.nav.srt[browse.state.srt][0].toLowerCase(),browse.state.dir);
	
	if (window.scrollY > document.getElementById('content').offsetTop) window.scrollTo(0,0);
	browse.page = pg;
	if (browse.limit>=browse.disp.length) browse.nav.btn.update('s',-1);
	else if (pg==0) browse.nav.btn.update('s',2);
	//else if ((pg+1)*browse.limit>browse.disp.length) browse.nav.btn.update('s',1);
	else if (browse.nav.isLastPage()) browse.nav.btn.update('s',1);
	else browse.nav.btn.update('s',0);
	var pgnav = (browse.limit>=browse.disp.length)?'':'<div class="browse_innernav">'+((pg>0)?'<a href="'+pre+browse.ret_url(pg-1)+'" class="prev">Previous</a>':'')+(((pg+1)*browse.limit<browse.disp.length)?'<a href="'+pre+browse.ret_url(pg+1)+'" class="next">Next</a>':'')+'</div>';
	//onClick="JavaScript: browse._load('+(pg+1)+');"
	
	browse.HTML = '';
	for (i=pg*browse.limit; i<(pg+1)*browse.limit; i++) {
		if (browse.disp[i]) browse.HTML += browse.disp[i].HTML();
	}
	browse.HTML += pgnav;
	document.getElementById('content').innerHTML = browse.HTML;
}
browse.set = function(param,val,mult) {
	val = (val*val>'')?val:browse.state[param];
	val = (mult*mult>'')?mult*val:val;
	browse.state[param] = val;
	echo(param+', '+val+', '+val*mult,'Set browse state');
	var url = 'browse'+((browse.state.cat>=0)?'/'+return_cat(browse.state.cat,'url'):'');
	load_page(url);
}
browse.view = function(id) {
	echo(id,'View');
	if (!browse.ready) browse.setup();
	browse.state.id = id;
	var arr = (!browse.disp)?browse.items:browse.disp;
	var pos = searchArr(arr,'id',browse.state.id,'pos');
	if (pos == '') {
		arr = browse.items;
		browse.state.cat = -1;
		pos = searchArr(arr,'id',browse.state.id,'pos');
	}
	browse.state.arr = arr;
	browse.state.viewpos = pos[0];
	
	if (!browse.ready) browse.setup();
	browse.pagenav();
	var arr = (!browse.disp)?browse.items:browse.disp;
	var result = searchArr(arr,'id',id);
	if (result.length == 0) result = searchArr(browse.items,'id',id);
	document.getElementById('content').innerHTML = result[0].HTML(1);
}
browse.ret_url = function(page) {
	var out = 'browse';
	if (browse.state.cat >= 0) {
		//alert(browse.state.cat);
		out += '/'+ return_cat(browse.state.cat,'url');
		//alert(out);
	}
	out=(page>0)?out+'/'+page:out;
	return out;
}
browse_item = function(a) {
	this.id = a[0]*1;
	this.title = a[1];
	this.category = a[2];
	this.imgurl = a[3];
	this.date = a[4];
	this.url = a[5];
	this.forsale = a[6]*1;
	this.th_url = a[7];
	this.price = a[8]*1;
	this.desc = a[9];
	this.width = a[10]*1;
	this.height = a[11]*1;
	this.size = this.width * this.height;
	this.depth = a[12]*1;
	this.sh_cost = a[13]*1;
	this.painted = a[14]*1;
	this.HTML = function(full) {
		if (full) {
			var HTML = '<img src="uploads/images/'+this.imgurl+'" class="preview" /><h1><span>'+this.title+'</span></h1><div class="desc"><p>'+this.desc+'</p></div>';
			HTML += '<ul class="info"><li><span>Category</span>: '+return_cat(this.category,'HTML')+'</li><li><span>Year</span>: '+this.date.substr(0,4)+'</li>';
			HTML += '<li><span>Size</span>: '+to_fract(this.width)+'" x '+to_fract(this.height)+'"'+((this.depth>0)?' x '+to_fract(this.depth)+'"':'')+'</li><li><span>Price</span>: '+format_price(this.price)+'</li>';
			HTML += '<li><span>Shipping Cost</span>: '+format_price(this.sh_cost)+'</li>'+((this.forsale) ? '<li><span>For Sale:</span> <a href="'+pre+'order/'+this.url+'">Purchase</a></li>' : '<li>Not Available for Sale</li>') + '</ul><div style="clear: both;"></div>';
		} else {
			var HTML = '<div class="browseitem" id="b_'+this.id+'"><a href="'+pre+this.url+'"><img src="uploads/images/th/'+this.th_url+'" /><span class="title">'+this.title+'</span></a>';
			HTML += '<p class="info"><span>'+this.date.substr(0,4)+'</span><span>In '+return_cat(this.category,'HTML')+'</span><span>'+((this.forsale)?'For Sale':'Not Available')+'</span><span>Price: '+format_price(this.price)+'</span></p>';
			HTML += '<p>'+shortstr(this.desc,140)+'</p></div>';
		}
		return HTML;
	}
}


function format_price(n) {
	n=n+'';
	n='$'+((n.indexOf('.')<0)?n+'.00':(n.indexOf('.')>n.length-3)?n+'0':n);
	return n;
}
function shortstr(str,lim) {
	if (str.length < lim) return str;
	
	var old = str;
	str=(str.charAt(lim)!=' ')?str.substring(0,str.indexOf(' ',lim)):str.substr(0,lim);
	str=(str.charAt(str.length-1)=='.'||str.charAt(str.length-1)==',')?str.substr(0,str.length-1):str;
	if (str.length<old.length) str = str + '...';
	return str;
}
function return_cat(cat,type) {
	//alert(cat+', '+type);
	var result = searchArr(browse.categories.arr,0,cat+'');
	var out;
	switch (type) {
		case 'HTML':
		case 'html':
			out = '<a href="'+pre+'browse/'+result[0][2]+'">'+result[0][1]+'</a>';
			break;
		case 'URL':
		case 'url':
			out = result[0][2];
			break;
		default:
			out = result[0][1];
	}
	return out;
	//yay kitty has been returned :]
}
function to_fract(n) {
	var n_s = n + '';
	 if (n_s.indexOf('.') >= 0) {
		var n_a = n_s.split('.');
		var n_b = 1*n_a[0];
		var n_d = n - n_b;
		
		var num = 0;
		var den = 0;
		var dispstr = '';
		var is_int = false;
		var a = 0;
		var ret_dec = false;
		
		while (!is_int) {
			den++;
			num = den * n_d;
			num = num + '';
			if (num.length==1) is_int = true;
			if (den==10) {
				is_int = true;
				ret_dec = true;
			}
		}
		if (ret_dec) {
			return n;
		}
		//&frac12; &frac14; &frac34;
		var out;
		if (num==1&&den==2) out = n_b + '&frac12;';
		else if (num==1&&den==4) out = n_b + '&frac14;';
		else if (num==3&&den==4) out = n_b + '&frac34;';
		else out = n_b+' '+num+'/'+den;
		return out;
	}
	return n;
}


function str_to_arr(str) {
	var arr = new Array();
	if (str.charAt(0)=='~') {
		var i=0;
		var a=0;
		var b=0;
		var chunk = new Array();
		while (i<str.length) {
			chunk[a] = str.substring(i+1,str.indexOf('~',i+1));
			i = str.indexOf('~',i+1)+1;
			if (str.charAt(i)==',') {
				a++;
				i++;
			} else if (str.charAt(i)==';') {
				arr[b] = chunk;
				chunk = new Array();
				a = 0;
				b++;
				i++;
			}
		}
	} else {
		arr = str_to_arr_old(str);
	}
	return arr;
}
function str_to_arr_old(str) {
	var arr = new Array();
	var dispstr = '';
	if (str.indexOf(':') > 0) {
		arr = str.split(':');
		for (a=0; a<arr.length; a++) {
			arr[a] = arr[a].split(';');
			for (b=0; b<arr[a].length; b++) {
				arr[a][b] = arr[a][b].split(',');
				for (c=0; c<arr[a][b].length; c++) {
					dispstr += arr[a][b][c]+', ';
				}
			}
		}
	} else if (str.indexOf(';') > 0) {
		arr = str.split(';');
		for (a=0; a<arr.length; a++) {
			arr[a] = arr[a].split(',');
		}
	} else if (str.indexOf(',') > 0) {
		arr = str.split(',');
	} else {
		alert('String "'+str+'" is invalid.');
	}
	//alert(dispstr);
	return arr;
}
function sortArr(arr,col,dir) {
	var out = new Array();
	var results = new Array();
	for (a=0; a<arr.length; a++) {
		if (results.length==0) {
			results[i] = a;
		} else {
			var n = 0;
			while (arr[a][col] > arr[results[n]][col]) {
				n++;
			}
		}
		i++;
	}
	return out;
}
function sortList(arr,property,dir) {
	var out = new Array();
	var results = new Array();
	var p = property;
	var i = 0;
	var key = 0;
	var dispstr = '';
	var hival = '';
	for (n=0; n<arr.length; n++) {
		if (arr[n]) {
			hival = (arr[n][p] > hival) ? arr[n][p] : hival;
		}
	}
	var echostring = '';
	for (a=0; a<arr.length; a++) {
		if (arr[a]) {
			var val = hival;
			for (b=0; b<arr.length; b++) {
				if (arr[b] && arr[b][p] <= val && notChosen(results,b)) {
					val = arr[b][p];
					key = b;
				}
			}
			//echostring += a + ', ' + val + '; ';
			results[i] = key;
			i++;
		}
	}
	//echo(echostring);
	
	results.length = results.length-1;
	results[i-1] = key;
	if (dir<0) {
		var results2 = new Array();
		for (i=0; i<results.length; i++) {
			results2[i] = results[results.length-(i+1)];
		}
		results = results2;
	}
	for (n=0; n<results.length; n++) {
		out[n] = arr[results[n]];
	}
	return out;
}
function notChosen(arr,n) {
	for (i=0; i<arr.length; i++) {
		if (arr[i]==n) return false;
	}
	return true;
}
function searchArr(arr,col,term,comm) {
	var out = new Array();
	var nott = (comm=='not') ? true : false;
	var results = new Array();
	var i = 0;
	for (a=0; a<arr.length; a++) {
		if (col=='') {
			for (b=0; b<arr[a].length; b++) {
				if (arr[a][b] == term) {
					results[i] = a;
					i++;
				}
			}
		} else if (arr[a][col] == term) {
			results[i] = a;
			i++;
		}
	}
	//alert(results);
	if (nott) {
		var y = 0;
		i = 0;
		var results2 = new Array();
		for (x=0; x<arr.length; x++) {
			if (results[y]==x) {
				y++;
			} else {
				results2[i] = x;
				i++;
			}
		}
		results = results2;
	}
	if (comm=='pos') return results;
	for (n=0; n<results.length; n++) {
		out[n] = arr[results[n]];
	}
	return out;
}
function loadScreen(el_name, string) {
	if (explorer && iev < 9) return;
	var el = document.getElementById(el_name);
	var ls_HTML = '<div class="loadscreen" id="ls_' + el_name + '"/><span>Loading';
	if (string) ls_HTML = ls_HTML + ' ' + string;
	ls_HTML = ls_HTML + '</span></div>';
	el.innerHTML = el.innerHTML + ls_HTML;
	var ls = document.getElementById('ls_'+el_name);
	ls.style.left = el.offsetLeft + 'px';
	ls.style.top = el.offsetTop + 'px';
	ls.style.width = el.offsetWidth + 'px';
	ls.style.height = el.offsetHeight + 'px';
	ls.childNodes[0].style.top = ((window.scrollMaxY == 0) ? el.offsetTop + el.offsetHeight/2 - ls.childNodes[0].offsetHeight/2 : window.innerHeight/2) + 'px';
	var w = (window.innerWidth/2) - (ls.childNodes[0].offsetWidth/2);
	ls.childNodes[0].style.left = w + 'px';
}
function sleep(ms)
{
	var dt = new Date();
	dt.setTime(dt.getTime() + ms);
	while (new Date().getTime() < dt.getTime());
}

//====== ADMINISTRATOR CONTROL PANEL ==========\\

var acp = new Object();
acp.state = 1; // 0 = not logged in; 1 = logged in/view; 2 = edit; 3 = cms; 4 = upload
acp.toggle = function(id) {
	var current = document.getElementById('admin_cp').childNodes[acp.state-1].childNodes[0];
	var selected = document.getElementById('admin_cp').childNodes[id-1].childNodes[0];
	current.removeAttribute('class');
	selected.setAttribute('class', 'active');
	acp.setState(id);
}
acp.setState = function(n) {
	acp.state = n;
}

//======= NAV ========\\

var nav = new Object();
nav.arr = new Array();
nav.make = function() {
	nav.pval = 0;
	nav.sval = 0;
	nav.srtval = 0;
	var r_str = '?s=*&t=nav&g=parent&o=order%20ASC';
	db_get(alertContents_php,r_str,'nav','nav.init();');
	//nav.arr = str_to_arr(datastring);
}
nav.init = function() {
	nav.arr = str_to_arr(nav.php_out);
	echo('Init','Nav');
	
	var url = window.location.hash;
	url = url.substr(pre.length,url.length-pre.length);
	//alert(url);
	var result = nav.getState(url);
	//alert(result);
	nav.pval = result[0];
	nav.sval = result[1];
	
	var pval = nav.pval;
	var sval = nav.sval;
	var srtval = nav.srtval;
	
	var pnav = searchArr(nav.arr,2,-1);
	var snav = searchArr(nav.arr,2,-1,'not');
	
	nav.pnav = new Array();
	for (i=0; i<pnav.length; i++) {
		nav.pnav[i] = new Array();
		nav.pnav[i][0] = pnav[i][3];
		nav.pnav[i][1] = pnav[i][4];
	}
	
	nav.snav = new Array();
	for (i=0; i<pnav.length; i++) {
		var temp = searchArr(snav,2,pnav[i][0]);
		if (temp > '') {
			nav.snav[i] = new Array();
			for (n=0; n<temp.length; n++) {
				nav.snav[i][n] = new Array();
				nav.snav[i][n][0] = temp[n][3];
				nav.snav[i][n][1] = temp[n][4];
			}
		} else {
			nav.snav[i] = '';
		}
	}
	
	if (!pval) pval = 0;
	if (!sval) sval = 0;
	if (!srtval) srtval = 0;
	
	echo('creating dropdowns','Nav');
	nav.dd_p = new dd('primary_nav',nav.pnav,pval);
	nav.dd_s = new Array();
	nav.dd_s[pval] = (nav.snav[pval]>'') ? new dd('secondary_nav',nav.snav[pval],sval) : '';
	//alert('mmm '+nav.dd_s[nav.pval]);
	
	echo('setting HTML','Nav');
	var nav_HTML = '<ul><li id="primary_nav"></li><li id="secondary_nav"></li></ul><ul id="browsenav"></ul><ul id="pagenav"></ul>';
	document.getElementById('main_nav').innerHTML = nav_HTML;
	
	nav.dd_p.render();
	if (nav.dd_s[pval] > '') {
		nav.dd_s[pval].render();
	}
	
	init(2);
}
nav.update = function(url) {
	echo('Update','Nav');
	browse.pagenav();
	if (url[0] != 'browse') {
		if (browse.nav.dd_cat) browse.nav.dd_cat.on = false;
		if (browse.nav.dd_srt) browse.nav.dd_srt.on = false;
		document.getElementById('browsenav').innerHTML = '';
	}
	var state = nav.getState(url);
	//alert(state);
	var new_pval = state[0];
	var new_sval = state[1];
	if (nav.pval != new_pval) {
		//alert('pval changed from '+nav.pval+' to '+new_pval);
		var old_pval = nav.pval;
		nav.pval = new_pval;
		nav.dd_p.change(nav.pval);
		//alert(nav.snav[nav.pval]);
		if (nav.snav[nav.pval] > '') { // if there is a subnav for this pnav
			//alert('creating s_nav');
			nav.sval = new_sval;
			if (!nav.dd_s[nav.pval]) { // if there is no dropdown assigned for this snav
				echo('making new snav');
				nav.dd_s[nav.pval] = new dd('secondary_nav',nav.snav[nav.pval],nav.sval);
				nav.dd_s[nav.pval].render();
			} else {
				nav.dd_s[nav.pval].val=nav.sval;
				nav.dd_s[nav.pval].render();
			}
		} else { // if there is no subnav for this pnav
			document.getElementById('secondary_nav').innerHTML = '';
		}
		if (nav.snav[old_pval] > '') { // if there was a subnav for the previous pnav
			nav.dd_s[old_pval].on = false;
		}
	} else if (nav.sval != new_sval) {
		//alert(nav.dd_s[nav.pval]);
		//alert('sval changed from '+nav.sval+' to '+new_sval);
		nav.sval = new_sval;
		//document.getElementById('secondary_nav').innerHTML = dropdown.make(nav.snav[nav.pval],nav.sval);
		nav.dd_s[nav.pval].change(nav.sval);
	}
}
nav.getState = function(url) {
	echo(url,'Get Nav State For');
	if (url == '') url = 'home';
	url = url.split('/');
	if (url[0] == 'browse') {
		var out = [4,0];
		return out;
	}
	var q = searchArr(page.urls.arr,0,url[0])[0][2];
	if (q==1) {
		var out = [4,0];
	} else {
		var result = searchArr(nav.arr,4,url[0]);
		if (result=='') result = searchArr(nav.arr,4,'home');
		var out = new Array();
		if (result[0][2] < 0) {
			out[0] = result[0][1];
			out[1] = 0;
		} else  {
			out[1] = result[0][1];
			var result2 = searchArr(nav.arr,0,result[0][2]);
			out[0] = result2[0][1];
		}
	}
	return out;
}

//====== ORDER ======\\

var order = new Object();
order.HTML = function() {
	echo('retrieving HTML');
	echo(order.it.forsale,'For Sale');
	var HTML = '<h1>Order Glass Art</h1>';
	if (order.it.forsale==0) {
		HTML += '<p>The item '+order.it.title+' is not for sale.</p>';
	} else {
		if (!order.req) order.req = new button(0,'order.send();',false,'Request Order');
		HTML += '<form id="order" name="order"><ul><li class="item_info"><span class="tag">Place order for:</span> <a href="'+pre+order.it.url+'">'+order.it.title+'</a></li>';
		HTML += '<li><span class="tag">Estimated order total:</span> <span class="price">'+format_price(order.it.price)+'</span> + <span class="price">'+format_price(order.it.sh_cost)+'</span> <span class="sub">(shipping)</span> = <span class="price">'+format_price(order.it.price+order.it.sh_cost)+'</span></li>';
		HTML += '<li><span class="tag">Reply to:</span> <span class="sub">(Your Email Address)</sub> <input type="text" name="user_email" value="'+((order.emailFrom)?order.emailFrom:'')+'" /></li>';
		HTML += '<li><span class="tag">Your Name:</span> <input type="text" name="user_name" value="'+((order.name)?order.name:'')+'" /></li>';
		HTML += '<li><span class="tag">Location:</span> <input type="text" name="location" value="'+((order.location)?order.location:'')+'" /></li>';
		HTML += '<li><span class="tag">Message:</span> <textarea name="message">'+((order.m)?order.m:'I wish to purchase '+order.it.title+'.')+'</textarea></li>';
		HTML += '<li><p><span class="tag">Note:</span> The ordering process takes place via email with Elena Wright. A reply will be sent requesting payment/shipping details, if they are not specified in the initial message. If the order is from within New Hanover County in North Carolina, a sales tax of 8% must be charged.  From other locations within North Carolina, a sales tax of 5.75% must be charged.</p></li><li>'+order.req.render()+'</li></ul></form>';
	}
	return HTML;
}
order.states = [
	'Alabama',
	'Alaska',
	'Arizona',
	'Arkansas',
	'California',
	'Colorado',
	'Connecticut',
	'Delaware',
	'Florida',
	'Georgia',
	'Hawaii',
	'Idaho',
	'Illinois',
	'Indiana',
	'Iowa',
	'Kansas',
	'Kentucky',
	'Louisiana',
	'Maine',
	'Maryland',
	'Massachusetts',
	'Michigan',
	'Minnesota',
	'Mississippi',
	'Missouri',
	'Montana',
	'Nebraska',
	'Nevada',
	'New Hampshire',
	'New Jersey',
	'New Mexico',
	'New York',
	'North Carolina',
	'North Dakota',
	'Ohio',
	'Oklahoma',
	'Oregon',
	'Pennsylvania',
	'Rhode Island',
	'South Carolina',
	'South Dakota',
	'Tennessee',
	'Texas',
	'Utah',
	'Vermont',
	'Virginia',
	'Washington',
	'West Virginia',
	'Wisconsin',
	'Wyoming'
];
order._load = function(url) {
	if (url) {
		echo('Loading Order Page: '+url);
		order.url = url;
		if (!browse.ready) {
			echo('Browse not ready');
			window.location.hash = pre + order.url;
			return;
		}
		browse.nav.btn.state.u = 2;
		browse.nav.btn.update();
		var result = searchArr(browse.items,'url',order.url);
		echo(result,'Result');
		order.it = result[0];
	}
	window.scrollTo(0,document.getElementById('page').offsetTop);
	document.getElementById('content').innerHTML = order.HTML();
	$('#btn_'+order.req.id+' > a').click( order.send );
}
order.send = function() {
	echo('Make Request');
	order.form = document.forms['order'];
	order.m = order.form.elements['message'].value;
	order.emailFrom = order.form.elements['user_email'].value;
	if (!isValid('email',order.emailFrom)) {
		alert('Invalid Email');
		return;
	}
	order.emailTo = 'elenawright@ec.rr.com';
	order.name = order.form.elements['user_name'].value;
	if (!order.name) {
		alert('Invalid Name');
		return;
	}
	order.location = order.form.elements['location'].value;
	order.date = new Date();
	order.msg = 'Date: '+order.date+', \nFrom: '+order.name+' <'+order.emailFrom+'>, \nLocation: '+order.location+', \nItem: '+order.it.title+' <'+siteroot+pre+order.it.url+'>, \nEstimated Order Total: '+format_price(order.it.price)+' (Listed Price) with '+format_price(order.it.sh_cost)+' (Shipping) = '+format_price(order.it.price + order.it.sh_cost)+', \n\nMessage: '+order.m;
	order.subject = 'Request to order: '+order.it.title;
	order.h = 'From: '+order.emailFrom+'\r\ncc: '+order.emailFrom;
	order.params = '?s='+escape(order.subject)+'&to='+escape(order.emailTo)+'&h='+escape(order.h)+'&m='+escape(order.msg);
	
	echo(order.msg,'Message');
	makeRequest('inc/sendmail2.php',order.params,alertContents_php,'order','order.sent();');
}
order.sent = function() {
	echo('message sent: '+order.php_out);
	if (order.php_out == 'true') {
		document.getElementById('content').innerHTML = '<h1>Success</h1><p>The item '+order.it.title+' has successfully been ordered. A copy of the message has been sent to your e-mail address. <a href="'+pre+order.it.url+'">Return to view page.</a></p>';
	} else {
		document.getElementById('content').innerHTML = '<h1>Request Failed</h1><p>E-mail failed to send. The item '+order.it.title+' has not successfully been ordered. <a href="'+pre+'order/" onClick="Javascript: order._load()">Try Again.</a></p>';
	}	
}
function isValid (type,input) {
	switch(type) {
		case 'email':
			if (input.length > 0 && input.indexOf('@')>0 && input.lastIndexOf('.') > input.indexOf('@')+1 && input.length > input.lastIndexOf('.')+1) return true;
			else return false;
			break;
		default:
	}
	return true;
}

//====== BUTTONS ======\\

var btn_arr = new Array();

function button (type,func,toggled,text) {
	this.id = btn_arr.length;
	btn_arr[this.id]=this;
	this.type = type;
	this.func = (type==1)?'btn_arr['+this.id+'].toggle();  '+func:func;
	this.toggled = (!toggled)?false:toggled;
	this.t = text;
	this.text = function() {
		var out = (this.type==1)?((this.toggled)?'Sort: Asc':'Sort: Desc'):this.t;
		return out;
	}
	//echo(this.id+': '+this.pointer+', '+this.type+', '+this.func+', '+this.toggled+', '+this.text(),'Make Button');
	this.render = function() {
		echo('button '+this.id+', '+this.type,'Render');
		this.HTML = '<div class="btn'+((this.type==1)?' asc_desc':'')+'" id="btn_'+this.id+'"><a onClick="Javascript: '+this.func+';" '+((this.toggled)?'class="t"':'')+'>'+((this.text()>'')?this.text():'')+'</a></div>';
		return this.HTML;
	}
	this.toggle = function() {
		this.toggled = (this.toggled)?false:true;
		var a = document.getElementById('btn_'+this.id).childNodes[0];
		a.setAttribute('class',((this.toggled)?'':'t'));
		a.innerHTML = this.text();
		echo(this.pointer+' - '+this.toggled,'Toggled');
	}
	this.isbtn = function() { return true };
}

function nav_btn(function_arr,state) {
	this.func = function_arr;
	this.state = new Object();
	this.state.s = state; // -1 = blank; 0 = normal; 1 = prev only; 2 = next only
	this.state.h = 0;
	this.state.u = 1;
	this.bkg = 'url(assets/navbtn.png)';
	this.inner_HTML = function() {
		return (this.state.s<0)?'':'<a '+((this.state.s==2 || this.state.u==2)?'':'onClick="Javascript: '+this.func[0]+'" ')+'class="p'+((this.state.s==2 || this.state.u==2)?' inactive':'')+'">Prev</a><a '+((this.state.u==0)?'':'onClick="Javascript: '+this.func[1]+'" ')+'class="u'+((this.state.u==0)?' inactive':'')+'">Up</a><a '+((this.state.s==1 || this.state.u==2)?'':'onClick="Javascript: '+this.func[2]+'" ')+'class="n'+((this.state.s==1 || this.state.u==2)?' inactive':'')+'">Next</a>';
	}
	this.hover = function(h) {
		if (this.state.s<0) {
			document.getElementById('btn_'+this.id).style.backgroundImage = 'none';
			this.state.h = 0;
			return;
		} else document.getElementById('btn_'+this.id).style.backgroundImage = this.bkg;
		this.state.h = h;
		document.getElementById('btn_'+this.id).style.backgroundPosition = (this.state.s*-55)+'px '+(this.state.h*-35)+'px';
	}
	this.update = function(param,val) {
		if (param > '') {
			echo(this.pointer+'.state.'+param+' = '+val,'Update');
			this.state[param] = val;
		}
		this.hover(this.state.h);
		document.getElementById('btn_'+this.id).innerHTML = this.inner_HTML();
		this.setup();
	}
	this.render = function() {
		echo('button '+this.id+', '+this.type+', '+this.pointer,'Render');
		this.HTML = '<div class="btn navbtn" id="btn_'+this.id+'" '+((this.toggled)?'class="t"':'')+'>'+this.inner_HTML()+'</div>';
		return this.HTML;
	}
	this.setup = function() {
		echo('nav btn '+this.state.h,'Set up');
		var _this = this;
		$(".navbtn > a.p").hover( function() { _this.hover((_this.state.u==2)?0:1) },function(){});
		$(".navbtn > a.u").hover( function() { _this.hover(((_this.state.u>0)?2:0)) },function(){});
		$(".navbtn > a.n").hover( function() { _this.hover((_this.state.u==2)?0:3) },function(){});
		$(".navbtn").hover(function(){},function() { _this.hover(0) });
	}
}
nav_btn.prototype = new button(2,'',false);

function loc(p) {
	p=p.split('.');
	s='window['+p[0]+']';
	if (p.length>1) for (i=1;i<p.length;i++) { s=s+'.'+p[i]; }
	return s;
}
function echo(say,label,allow_HTML) {
	if (!echo_on) return;
	if (!alert_box) {
		alert_box = new echo_box();
		alert_box.echo('Alert Box','New');
	}
	alert_box.echo(say,label,allow_HTML);
}
function echo_box() {
	this.alerts = new Array();
	this.hdr = '<li>Alerts: <a onClick="Javascript: command.toggle()" style="float:right;cursor:pointer">CMND</a></li>';
	this.echo = function(say,label,allow_HTML) {
		if (typeof say == 'string' && !allow_HTML) say = normalize(say);
		this.alerts[this.alerts.length]=new Array(say,label);
		this._open();
		this.echo_list.innerHTML += '<li>'+((label>'')?'<span>'+label+':</span> ':'')+say+'</li>';
		this.echo_box.scrollTop = this.echo_box.scrollHeight - this.echo_box.style.height;
		return true;
	}
	this.echo_set = function(arr,s,f) {
		//echo(arr+'; '+s+'; '+f,'Echo Set');
		this._open();
		var HTML = '';
		for (i=s;i<f;i++) {
			var say = arr[i][0];
			var label = arr[i][1];
			HTML += '<li>'+((label>'')?'<span>'+label+':</span> ':'')+say+'</li>';
		}
		this.echo_list.innerHTML += HTML;
		this.echo_box.scrollTop = this.echo_box.scrollHeight - this.echo_box.style.height;
		return true;
	}
	this._open = function() {
		if (!document.getElementById('echo_box')) document.getElementById('world').innerHTML += '<div id="echo_box"><ul>'+this.hdr+'</ul></div>';
		this.echo_box = document.getElementById('echo_box');
		this.echo_list = this.echo_box.childNodes[0];
		return true;
	}
	this._close = function() {
		return true;
	}
	this.clear = function() {
		this.echo_box.innerHTML = '<ul>'+this.hdr+'</ul>';
		return true;
	}
	this.repopulate = function(count) {
		this.clear();
		var len = 1*this.alerts.length;
		var num = (!count)?len:count;
		this.echo_set(this.alerts,len-num,len);
		return true;
	}
	//this.echo(say,label);
}
function normalize(str) {
	var input = str;
	var chars = new Array(['<','&lt;'],['>','&gt;']);
	for (c=0;c<chars.length;c++) {
		var arr = str.split(chars[c][0]);
		str = arr[0];
		if (arr.length>1) for (i=1;i<arr.length;i++) {
			str += chars[c][1] + arr[i];
		}
	}
	//if (str != input) alert(input+' changed to '+str);
	return str;
}
function cmnd(on) {
	this.on = on || false;
	this.echo = true;
	echo('Command Panel','New');
	this.csub = new button(0,'command.execute();','','Execute Code');
	this.HTML = '<div id="command"'+((!this.on)?' style="display: none"':'')+'><form name="comm"><ul><li>Command:</li><li><textarea name="input" rows="5" cols="34"></textarea></li><li>'+this.csub.render()+'</li></ul></form></div>';
	
	document.getElementById('world').innerHTML += this.HTML;
	this.cform = document.forms['comm'];
	this.ctxt = this.cform.elements['input'];
	
	this.execute = function() {
		//alert(this.ctxt.value);
		if (this.echo) echo(this.ctxt.value,'Command text');
		eval(this.ctxt.value);
		return true;
	}
	this._close = function() {
		this.on = false;
		document.getElementById('command').style.display = 'none';
		return true;
	}
	this._open = function() {
		this.on = true;
		document.getElementById('command').style.display = 'block';
		this.ctxt.focus();
		return true;
	}
	this.toggle = function() {
		if (this.on) this._close();
		else this._open();
		return true;
	}
}

//====== DROPDOWN MENUS =======\\

var dropdown_list = new Array();
var my_dd;
function dd(element,input,value,label) {
	//echo(element+', [['+input+']], '+value+', '+label,'New DD');
	this.el = element;
	this.arr = input; // [text value, url, function]
	this.val = (value == '')?0:value;
	this.label = label;
	if (!dropdown_list) dropdown_list = new Array();
	this.id = dropdown_list.length;
	this.on = false;
	
	//echo('id: '+this.id+', el: '+this.el+', arr: [['+this.arr+']], val: '+this.val+', label: '+this.label,'New Dropdown');
	dropdown_list[this.id] = this;
	
	this.render = function() {
		//echo('render '+this.id);
		document.getElementById(this.el).innerHTML = this.HTML();
		this.setup();
	}
	this.HTML = function() {
		var HTML = '';
		if (this.label>'') HTML += '<div class="labeled_dd"><span class="label" id="ddsl'+this.id+'">'+this.label+'</span>';
		HTML += '<a class="dropdown_selector" id="dds'+this.id+'"><span>'+this.arr[this.val][0]+'</span></a><ul class="dropdown" id="dd'+this.id+'">';
		for (i=0; i<this.arr.length; i++) {
			HTML += '<li><a'+((this.arr[i][1]>'')?' href="'+pre+this.arr[i][1]+'"':'')+' id="ddo'+this.id+'_'+i+'"';
			if (i == this.val) HTML += ' class="selected"';
			HTML += ' onClick="Javascript: dropdown_list['+this.id+'].change('+i+');'+((this.arr[i][2]>'')?this.arr[i][2]:'')+'"><span>'+this.arr[i][0]+'</span></a></li>';
		}
		HTML += '</ul>'+((this.label>'')?'</div>':'');
		return HTML;
	}
	this.setup = function() {
		//echo('dropdown '+this.id,'Set up');
		var _this = this;
		$('#'+this.el).hover( function(){ if (_this.timeout) clearTimeout(_this.timeout) }, function() { if (_this.on) _this.timeout = setTimeout('dropdown_list['+_this.id+'].hide()',420); } );
		$('#dds'+this.id).click( function() { _this.toggle() } );
		this.align();
	}
	this.toggle = function() {
		//echo('Toggled '+this.on,'Dropdown');
		if (this.on) this.hide();
		else this.reveal();
	}
	this.change = function(val) {
		//echo('Changed to '+val);
		this.val = val;
		if (explorer)
		{
			var dds = document.getElementById('dds'+this.id);
			dds.innerHTML = '<span>'+this.arr[this.val][0]+'</span>';
			this.align();
		}
		else
		{
		  this.hide();
		  this.render();
		}
	}
	this.reveal = function() {
		//echo('Reveal '+this.id,'Dropdown');
		this.align();
		document.getElementById('dd'+this.id).style.visibility = 'visible';
		document.getElementById('dds'+this.id).setAttribute('class','dropdown_selector active');
		this.on = true;
		//this.setup();
	}
	this.hide = function() {
		//echo('Hide '+this.id,'Dropdown');
		document.getElementById('dd'+this.id).style.visibility = 'hidden';
		document.getElementById('dds'+this.id).setAttribute('class','dropdown_selector');
		this.on = false;
		//this.setup();
	}
	this.align = function() {
		  var dd = document.getElementById('dd'+this.id);
		  var dds = document.getElementById('dds'+this.id);
		  var ddsl = document.getElementById('ddsl'+this.id);
		  if (this.label>'') {
			  ddsl.style.width = dds.offsetWidth + 'px';
		  }
		  dd.style.width = (dds.offsetWidth - (2)) + 'px';
		  var offset = dds.offsetLeft;
		  dd.style.left = offset + 'px';
		  dd.style.top = dds.offsetTop + dds.offsetHeight + 'px'
		  //echo(this.id+'; dd-width: '+dd.style.width+'; dds-width: '+dds.offsetWidth+'; dd-left: '+dd.style.left+'; dds-left: '+dds.offsetLeft,'Aligned DD');
	}
}
	

//====== ETC ======\\
var recentHash = '!!!!!!!!!!!!!!!!!!!!!!';
function pollHash() {
	if (window.location.hash==recentHash) {
		return; // Nothing's changed since last polled.
	}
	//alert('hash changed from '+recentHash+' to '+window.location.hash);
	recentHash = window.location.hash;
	// URL has changed, update the UI accordingly.
	load_page(recentHash);
}
/*window.onload = function() {
	pollHash();
	setInterval(pollHash, 500);
}*/
function initialiseStateFromURL() {
	var initialTab = window.location.hash;
	openTab(initialTab);
}
function db_get(onReady,r_str,source,goto) {
	//var r_str = '?s=&t=&w=&g=&h=&o=&l=&f=';
	makeRequest('inc/db_get.php',r_str,onReady,source,goto);
}

//======== REQUESTSTSSS ==========\\
var http_request = false;
var temp_source;
var temp_goto = '';

function makeRequest(url, parameters, onReady, source, goto) {
	//echo('requested '+url+', '+parameters+', '+onReady+', '+source+', '+goto);
	http_request = false;
	if (window.XMLHttpRequest) { // Mozilla, Safari,...
		http_request = new XMLHttpRequest();
		if (http_request.overrideMimeType) {
			http_request.overrideMimeType('text/xml');
		}
	} else if (window.ActiveXObject) { // IE
		try {
			http_request = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e) {
			try {
				http_request = new ActiveXObject("Microsoft.XMLHTTP");
			} catch (e) {
				try {
					echo('new XDomainRequest()');
					http_request = new new XDomainRequest(); // IE 8
				} catch (e) {
					echo('There was a problem with the request');
				}
			}
		}
	}
	if (!http_request) {
		alert('Cannot create XMLHTTP instance');
		return false;
	}
	temp_source = source;
	if (!goto) {
		//alert('nay '+temp_source);//eval(pointer);
	} else {
		temp_goto = goto;
		//alert('yay '+temp_source+', '+temp_goto);
	}
	http_request.onreadystatechange = onReady;
	http_request.open('GET', url + parameters, true);
	http_request.send(null);
}
function ajaxRequest(url, parameters, elementid) {
	//var alertstring = url + parameters + '; ' + elementid;
	//alert(alertstring);
	var ajaxRequest;  // The variable that makes Ajax possible!
	
	try{
		// Opera 8.0+, Firefox, Safari
		ajaxRequest = new XMLHttpRequest();
	} catch (e){
		// Internet Explorer Browsers
		try{
			ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e) {
			try{
				ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");
			} catch (e){
				// Something went wrong
				alert("Your browser broke!");
				return false;
			}
		}
	}
	// Create a function that will receive data sent from the server
	ajaxRequest.onreadystatechange = function() {
		if(ajaxRequest.readyState == 4){
			var ajaxDisplay = document.getElementById(elementid);
			//alert(ajaxRequest.responseText);
			ajaxDisplay.innerHTML = ajaxRequest.responseText;
		}
	}
	ajaxRequest.open("GET", url + parameters, true);
	ajaxRequest.send(null);
}
function alertContents_xml() {
	if (http_request.readyState == 4) {
		if (http_request.status == 200) {
			//updateHTML('clr',page);
			var xmldoc = http_request.responseXML;// Create variable "xmldoc" which contains the XML from the http_request
			var pointer = temp_pointer;
			temp_pointer = '';
			parseXML(xmldoc, pointer);
			pointer.init();
		} else {
			//alert('There was a problem with the request.');
			var pointer = temp_pointer;
			temp_pointer = '';
			pointer.url='inc/404.php';
			makeRequest(pointer.url,'',alertContents_xml,pointer);
		}
	}
}
function alertContents_php() {
	if (http_request.readyState == 4) {
		if (http_request.status == 200) {
			//echo('Alert Contents PHP');
			//updateHTML('clr',page);
			var php_out = http_request.responseText;// Create variable "xmldoc" which contains the XML from the http_request
			eval(temp_source+'.php_out = php_out;');
			//alert(temp_source+'.php_out = php_out;');
			//alert('php_out: '+php_out);
			//alert('tg: '+temp_goto);
			if (temp_goto > '') {
				var temp = temp_goto;
				temp_goto = '';
				//alert('goto '+temp);
				eval(temp);
			} else {
				var temp = temp_source;
				temp_source = '';
				alert('source '+temp);
				eval(temp + '.init();');
			}
		} else {
			//alert('There was a problem with the request.');
			var pointer = temp_pointer;
			temp_pointer = '';
			alert('request error');
			//makeRequest(pointer.url,'',alertContents_xml,pointer);
		}
	}
}
