
var m_contentarea;		//the div holding the content
var m_htmlsave;			//used for back button on item edit
var m_amendedHTML;		//as changed during page_edit process
var m_title;
var m_currentpageid=-1;
var m_pagename="";
var m_noedit=false;
var m_page;				//downloaded page
var m_items;			//downloaded items for current page - for editing
var m_hist;
var m_nopush=false;		//do not push currid onto hist if called from back();
var m_current_page;		//current successfully rendered page in form  page|pagename  or script|scriptname|parms
var m_page_req;			//current req - set by fetchpage/fetchscript
						//only becomes current_page if no alert
var m_editing_page=0;	//name of page currently being edited

var m_popUpCal;

var m_events_filter="";		//current value of events filter in events pages

function index_init(){		//initialise index page
	
	var tab=document.getElementById("menutab");
	var list=tab.getElementsByTagName("td");
	

	var td,j,page,href,action;
	var class1;
	
	register_list(list);
	
	m_contentarea=document.getElementById("contentarea");
	m_ajax_post_container=m_contentarea;		//to use ajax_post_data

	m_title=document.getElementById("title");
	m_hist=new Array();
	m_current_page=-1;							//start off with no current page

	fetchpage("home");
	
}
function openfile(path){
	window.open(path);
}

function register_list(list){
	
	var elt,page,j,href,js,script,class0;
	
	for (j=0;j<list.length;j++){
		elt=list[j];
		
		elt.class0=elt.getAttribute("class0");		//because IE can't access getAttribut("class")
		if (elt.class0) {
			elt.className=elt.class0;
			elt.class1=elt.class0+"_on";
		}
		
		elt.page=elt.getAttribute("page");
		elt.script=elt.getAttribute('script'); 
		elt.wopen=elt.getAttribute('wopen'); 
		elt.href=elt.getAttribute('href'); 
		elt.js=elt.getAttribute('js'); 
		elt.parms=elt.getAttribute('parms');
		
		if (elt.page || elt.script || elt.wopen || elt.js || elt.href){
			elt.style.cursor="pointer";
			elt.onmouseover=function(){this.className=this.class1;}
			elt.onmouseout=function(){this.className=this.class0;}
			elt.onclick=menuclick;			
		}
	}
	
}


function menuclick(){

	if (this.page) {			
		fetchpage(this.page);
	}
	else if (this.href){
		window.open(this.href);
	}
	else if (this.wopen) {
		window.open(this.wopen);
	}
	else if (this.script) {			//get a script via ajax
							
		fetchscript(this.script,this.parms);
	}
	
	else if (this.js) {
		
		//alert(this.js);
		eval(this.js);
	}	

}

function show_folder(folder){
	ajax_req("show_folder.php","folder="+encodeURIComponent(folder),gotpage,server_error);
}


function read_cookies(){
	var s=document.cookie;
	var out=new Array();
	var a,b,j,key,val;

	if (s){
		a=s.split(";");
		for (j=0;j<a.length;j++){
			b=a[j].split("=");
			key=b[0];
			key=key.replace(/ /,"");			
			out[key]=b[1];			
		}
	}
	
	return out;
}

/////////////////////
//	login/logout (see login.php)
/////////////////////		

function login_req(){
	var user=document.getElementById("u").value;
	var pwd=document.getElementById("p").value;
	
	ajax_req("login.php","u="+user+"&p="+pwd+"&action=login",login_ret,server_error);
	
}	
		
function login_ret(s){

	
	if (s=="OK"){
		gotpage("<div style=text-align:center><p><p style=font-weight:bold;color:red>You are now logged in</p><p><br><span class0=button page=home>Continue</span></div>");
	
		var ma=document.getElementById("membersarea");	
		var td=document.getElementById("login");
		ma.style.display="";
		td.innerHTML="&nbsp;&nbsp;Logout";
		td.script=null;
		td.js="logout_req();";
		td.page=null;


	}			
				
	else{
		gotpage("<p><p>"+s+"<p><span class0=button script=login>Continue</span>");
	}
}

function logout_req(){

		ajax_req("login.php","action=logout",logout_ret,server_error);
	
}

function logout_ret(s){
	

	
	var ma=document.getElementById("membersarea");	
	var td=document.getElementById("login");
	var elt=document.getElementById("adminarea");
	ma.style.display="none";
	if (elt) elt.style.display="none";
	td.innerHTML="&nbsp;&nbsp;Login";
	td.script="login";
	td.js=null;

	gotpage("<div style=text-align:center><p><p style=font-weight:bold;color:red>You are now logged out</p><p><br><span class0=button page=home>Continue</span></div>");
	
	
}
/////////////////////////////////////////////



function eltval(eltid){
	return document.getElementById(eltid).value;
}

function fetchscript(script,msg,presubmit){
	var j=0;
	var a,b,formid,s,s1,regex;
	
	
	m_page_req="script|"+script+"|"+msg;
	if (msg) msg=msg.replace(/;/g,"&");
	
//	check if there are form variables
	if (msg){
		if (msg.match(/_form=/)){
			a=msg.split("&");
			for (j=0;j<a.length;j++){
				b=a[j].split("=");
				if (b[0]=="_form"){				//found _form=
					formid=b[1];				//form=name of form
					s=ajax_form_msg(formid,null);
					if (!s) return 0;
					s1="_form="+formid;
					regex=new RegExp(s1,"g");
					msg=msg.replace(regex,s);					
				}
			}
		}
	}
			
	if (presubmit){
		if (!presubmit()) return;
	}
		
			
	ajax_req(script+".php",msg,gotpage,alertError);		//normally branches to error routine (output without "9362"
}

function fetchscriptForm(script,formid,msg,presubmit){
	

	var msg1=ajax_form_msg(formid,msg);
	if (!msg1) return 0;
	fetchscript(script,msg1,presubmit);
}


function fetchpage(pagename){
	m_page_req="page|"+pagename;
			
	ajax_req("fetchpage.php","page="+pagename,gotpage,alertError);
	
}

function alertError(s){  //no 9362 handled by ajax.js

	if (!s.match("\<"))	alert(s);	//it's not html
	else gotpage(s);
}

function gotpage(s){
	
	var i=0,j=0;

	document.getElementById("editarea").style.display="none";
	
	if (!m_nopush) m_hist.push(m_current_page);
	m_current_page=m_page_req;
	m_nopush=false;
	
		
//	scripts should return html for display - return from fetchscript

	
	m_contentarea.style.display="none";
	
	s=substitute_tags(s);

	if(m_current_page=="page|home") m_contentarea.innerHTML=s;
	else m_contentarea.innerHTML=s + "<p>&nbsp;</p><p style=text-align:center><span class0=link js=\"back();\">Back</a></p>"
	
	
//	register TD and SPAN elements

	var list=m_contentarea.getElementsByTagName("TD");		//get all td elements
	register_list(list);
	
	var list=m_contentarea.getElementsByTagName("SPAN");	//all spans
	register_list(list);	
	
	document.getElementById("menutab").style.width=100;
		
	var list=m_contentarea.getElementsByTagName("INPUT");
	
	for (j=0;j<list.length;j++){
		if (list[j].className=="calendarSelectDate"){
			popUpCal.init();
			break;
		}
	}

//	process any script elements

	i=s.indexOf("<script>");
	
	if (i !=-1){		//there is a script element
		j=s.indexOf("</script>");
		var script=s.substring(i+8,j);			
		var scriptElt=document.createElement("SCRIPT");
		scriptElt.text=script;		
		m_contentarea.appendChild(scriptElt);	
	}

	m_contentarea.style.display="";
	
}
////////////////////////
//	substitute_tags
////////////////////////

function substitute_tags(sInput){

//	convert all [[]] tags to html
//	[[img:name]] -> <img src='public/name'>
//	[[doc:name:label]] -> <a href='public/name'>label</a>
//	[[link:pagename:label]] -> <a href=javascript:fetchpage('pagename')label</a>

//var regex=new RegExp("\[\[img:([\w\.]+)\]\]","ig");
	

	var s=sInput.replace(/\[\[img:([\w\.]+)\]\]/ig,"<img src='public/$1'>");
	s=s.replace(/\[\[img:width=(\d+):([\w\.]+)\]\]/ig,"<img width=$1 src='public/$2'>");
	s=s.replace(/\[\[imgimage:([\w\.]+)\]\]/ig,"<img src='images/$1'>");	
	s=s.replace(/\[\[imgimage:width=(\d+):([\w\.]+)\]\]/ig,"<img width=$1 src='images/$2'>");
	s=s.replace(/\[\[img:([\w\.]+):href=(http:\/\/.+)\]\]/ig,"<a href='$2' target='about:blank'><img src='public/$1'></a>");
	
	s=s.replace(/\[\[doc:(.+):(.+)\]\]/ig,"<span class0=link href='public/$1'>$2</span>");
	
	s=s.replace(/\[\[page:([\w\d_]+):(.+)\]\]/ig,"<span class0=link js=fetchpage('$1')>$2</span>");
	s=s.replace(/\[\[script:([\w\d_]+):(.+)\]\]/ig,"<span class0=link js=fetchscript('$1')>$2</span>");

	//s=s.replace(/\[\[link:(http:\/\/[\w\d-_\.\/]+):(.+)\]\]/ig,"<a href='$1' target='_blank'>$2</a>");
	s=s.replace(/\[\[link:(http:\/\/.+):(.+)\]\]/ig,"<span class0=link href='$1'>$2</span>");
	
	s=s.replace(/<p> <\/p>/g,"<p></p>");
	
	return s;
	
	
}



/*

function gotpage2(serdata){			//serialized data



	var a=unserialize(serdata);
	
	if (!m_nopush) m_hist.push(m_current_page);
	m_current_page=m_page_req;
	m_nopush=false;
	
	var s=a['contentarea'];
	var htmledit=a['htmledit'];
	
	
	m_contentarea.style.display="none";
	
	
	s=substitute_tags(s);
	
	if(m_current_page=="page|home") m_contentarea.innerHTML=s;
	else m_contentarea.innerHTML=s + "<p>&nbsp;</p><p style=text-align:center><span class0=link js=\"back();\">Back</a></p>"

	
	
//	register TD and SPAN elements

	var list=m_contentarea.getElementsByTagName("TD");		//get all td elements

	register_list(list);
	
	var list=m_contentarea.getElementsByTagName("SPAN");	//all spans
	
	register_list(list);	
	
		
	document.getElementById("menutab").style.width=100;
	m_contentarea.style.width=625;
		
	m_contentarea.style.display="";
	
	var list=m_contentarea.getElementsByTagName("INPUT");
	
	for (j=0;j<list.length;j++){
		if (list[j].className=="calendarSelectDate"){
			popUpCal.init();
			break;
		}
	}
	

	
}



*/





///////////////////////////////
//			back
///////////////////////////////

function back(){
	
	if (m_hist.length<2) return;	
	
	var req=m_hist.pop();
	
	m_nopush=true;
		
	var a=req.split("|");
	
	if (a[0]=="page") fetchpage(a[1]);
	else if (a[0]=="script") fetchscript(a[1],a[2]);	
	
}

	

function show_html(html){
	m_contentarea.innerHTML=html;
}
function open_doc(docid,access,thetype){
	
	if (thetype=="youtube"){
		
		fetchscript("youtube","docid="+docid,null);
		
	}

	else window.open("open_doc.php?docid="+docid);
	
}

function showitem(item){
	var html="";
	m_htmlsave=m_contentarea.innerHTML;		//save to restore later
	
	var thumb=item['item_thumb'];
	var pic=item['item_pic'];
	html +="<h1 style=text-align:center>";
	html +=item['item_title'] + "</h1>";
	if (thumb) {	
		if (pic) {
			html +="<a href=javascript:display_pic('"+pic+"')>";	
			html += "<img width=200 src='images/thumbs/"+pic+"'></a><p>";		
		}
	}
	html +="<p style=font-weight:bold>"+item['item_abstract'].replace(/\n/g,"<br>");
	html +="<p>";
	
	var body=item['item_body'];
	
	body=body.replace(/\n/g,"<br>");
	body=body.replace(/script>/g,"");
	
	html +=body+"<p style=text-align:center><button onclick='m_contentarea.innerHTML=m_htmlsave;'>Back</button>";
	
	
	m_contentarea.innerHTML=html;
	
}	



function fetchitem(j){
	item=m_items[j];
	showitem(item);

	
}


function display_item(itemid){		//called from "Latest" news items
	ajax_req("fetchitem.php","itemid="+itemid,display_item_ret,server_error);
}

function display_item_ret(s){
	var item=unserialize(s);
	showitem(item);
}
	
	
function show_events(){				//called from events.php catselect.onchange
	var sel=document.getElementById("catselect");
	if (!sel) return;
	m_events_filter=sel.value;
	fetchscript("events","action=showlist&filter="+sel.value);
}
	


	

/////////////////////////////////////////////////////////
//					Item editing
////////////////////////////////////////////////////////	


function edititems(){
	
	
	
	ajax_req("fetchitems.php","pageid="+m_currentpageid,gotitems,server_error);
	
}
function gotitems(s){
	
	
	
	var data=unserialize(s);
	var title;
	var id;
	

	
	
	var html="<h1 style=text-align:center>Items for this page</h1>";
	
	
	html +="<table border=1 align=center style=border-collapse:collapse>";
	html += "<tr><td style=width:40>ID</td><td style=width:300>Title</td><td>Edit</td><td>Del</td></tr>";

	
	if (data) {  //load data rows
		for (var j=0;j<data.length;j++){
			if (data[j]['item_visible']==0) continue;
			title=data[j]['item_title'];
			id=data[j]['item_id'];
			html += "<tr><td>"+id+"</td><td>"+title+"</td>";
			html +="<td><a href=javascript:edit_item("+j+")><img src='images/edit.gif'></td>";
			html +="<td><a href=javascript:delete_item("+j+")><img src='images/delete.gif'></td>";			
			html+="</tr>";
						
		}
			
	}
	html += "</table>";
	html += "<p style=text-align:center>&nbsp; \
			<button onclick='fetchpage("+m_currentpageid+");'>Cancel</button> \
			<button onclick='edit_item(-1);'>New item</button></p>";
	
	
	m_contentarea.innerHTML=html;
	
	
}

var m_noupload;
var m_delete_item;

/////////////////////////////////
//		delete_item
///////////////////////////////

function delete_item(itemid){
	var item=m_items[itemid];
	if (!item) return;
	
	var id=item['item_id'];
	
	if (!confirm("Are you sure you want to delete this item?")) return;
	
	m_delete_item=itemid;
	
	ajax_req("delete_item.php","id="+id,item_deleted,server_error);	
	
}

function item_deleted(s){
	
	alert("Deleted");
	ajax_req("fetchitems.php","pageid="+m_currentpageid,gotitems,server_error);
	
	
	
	
}





/////////////////////////////////////////////
//			contact_submit
/////////////////////////////////////////////
function contact_submit(){
	var msg="name="+encodeURIComponent(document.getElementById("contact_name").value);
	msg +="&email="+encodeURIComponent(document.getElementById("contact_email").value);
	msg +="&msg="+encodeURIComponent(document.getElementById("contact_msg").value);
	msg +="&code="+encodeURIComponent(document.getElementById("contact_code").value);
	
	ajax_req("contact.php",msg,0,server_error);
	
}

function contact_refresh_image(){
		
	document.getElementById("contact_image").src="pic.php?" + (new Date()).getTime();	
	document.getElementById("contact_imgcode").value="";

}



///////////////////////////////////////////
//		AJAX error return handler
//////////////////////////////////////////
function server_error(msg){
	if (msg.substr(0,8).match(/</)){
		m_contentarea.innerHTML=msg;
	}
	else alert(msg);
}



function delete_confirm(){
	if (confirm("Are you sure you want to delete this?")) return true;
	else return false;
}

////////////////////////////////////
//		utf8_encode
/////////////////////////////////////

function utf8_encode ( str_data ) {
    // http://kevin.vanzonneveld.net
    // +   original by: Webtoolkit.info (http://www.webtoolkit.info/)
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)        
    // *     example 1: utf8_encode('Kevin van Zonneveld');
    // *     returns 1: 'Kevin van Zonneveld'
 
    str_data = str_data.replace(/\r\n/g,"\n");
    var tmp_arr = [], ac = 0;
 
    for (var n = 0; n < str_data.length; n++) {
        var c = str_data.charCodeAt(n);
        if (c < 128) {
            tmp_arr[ac++] = String.fromCharCode(c);
        } else if((c > 127) && (c < 2048)) {
            tmp_arr[ac++] = String.fromCharCode((c >> 6) | 192);
            tmp_arr[ac++] = String.fromCharCode((c & 63) | 128);
        } else {
            tmp_arr[ac++] = String.fromCharCode((c >> 12) | 224);
            tmp_arr[ac++] = String.fromCharCode(((c >> 6) & 63) | 128);
            tmp_arr[ac++] = String.fromCharCode((c & 63) | 128);
        }
    }
    
    return tmp_arr.join('');
}

///////////////////////////////////////
//	utf8_decode
///////////////////////////////////////

function utf8_decode ( str_data ) {
    // http://kevin.vanzonneveld.net
    // +   original by: Webtoolkit.info (http://www.webtoolkit.info/)
    // +      input by: Aman Gupta
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // *     example 1: utf8_decode('Kevin van Zonneveld');
    // *     returns 1: 'Kevin van Zonneveld'
 
    var tmp_arr = [], i = ac = c = c1 = c2 = 0;
 
    while ( i < str_data.length ) {
        c = str_data.charCodeAt(i);
        if (c < 128) {
            tmp_arr[ac++] = String.fromCharCode(c); 
            i++;
        } else if ((c > 191) && (c < 224)) {
            c2 = str_data.charCodeAt(i+1);
            tmp_arr[ac++] = String.fromCharCode(((c & 31) << 6) | (c2 & 63));
            i += 2;
        } else {
            c2 = str_data.charCodeAt(i+1);
            c3 = str_data.charCodeAt(i+2);
            tmp_arr[ac++] = String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
            i += 3;
        }
    }
    
    return tmp_arr.join('');
}

