
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;

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.href=elt.getAttribute('href'); 
		elt.js=elt.getAttribute('js'); 
		elt.parms=elt.getAttribute('parms');
		
		if (elt.page || elt.script || elt.href || elt.js){
			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.script) {			//get a script via ajax
							
		fetchscript(this.script,this.parms);
	}
	
	else if (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;
}

			
		
		
function show_admin_buttons(){
	//	depending on user level - show buttons
	
	var cookies=read_cookies();
	
	var userlevel=cookies['userlevel'];

	
	var buttons=new Array();
	

	var aa=document.getElementById("adminarea");
	
	var td=document.getElementById("login");
	var j=0;
	

	aa.style.display="none"; 
	
		

		
	if (userlevel>1) aa.style.display="";
	
	
	if (userlevel>0){
		td.innerHTML="&nbsp;&nbsp;Logout";
		td.script="login";
		td.parms="action=logout";
		td.page=null;
	}
	else{
		td.innerHTML="&nbsp;&nbsp;Login";
		td.script="login";
		td.parms="";
		td.js=null;
		td.page=null;
	}
		

	

}


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,gotpage);		//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,gotpage);
	
}


function gotpage(s){
//	check if this is serialized data



	if (s.match(/a:\d+:{/)) {		//it's a serialized array - so it can't be an error
		gotpage2(s);
		return;
	}

	
	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

	exitedit();			//show contentarea, hide edit area
	
	m_contentarea.style.display="none";
	

	s=substitute_tags(s);

	
	if(m_current_page=="page|home"){
		
		s +="<p style=text-align:center;font-size:8pt>Whitlingham Boathouses Foundation - Registered Charity Number 1133063";
		s +="<br>Site by Maiasoft Software www.maiasoft.com</p>";
		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);	
	
	
	show_admin_buttons();
	

	
	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;
		}
	}
	

	m_contentarea.style.display="";
	
}

//////////////////////
//	gotpage2
//	serialized input
//////////////////////




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'];
	

	exitedit();			//show contentarea, hide edit area
	
	m_contentarea.style.display="none";
	
	s=substitute_tags(s);
	
	if(m_current_page=="page|home") s +="<p style=text-align:center;font-style:italic;font-size:10pt;color:#606060>powered by Maiasoft CMS</p>";
	
	
	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);	
	
	show_admin_buttons();
	
	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;
		}
	}
	
//	display htmledit

	
	tinyMCE.get("htmledit").setContent(htmledit);
	document.getElementById("editarea").style.display="";
	
	
}


function htmledit_submit(){		//must put html into textarea before submitting data
	var msg=tinyMCE.get("htmledit").getContent();
	document.getElementById("htmledit").value=msg.replace(/<p> <\/p>/g,"<p></p>");
	return true;
}


function substitute_tags(sInput){

	//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(/\[\[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:\/\/[\w\d-_\.\/]+):(.+)\]\]/ig,"<span class0=link href='$1'>$2</span>");
	
	s=s.replace(/<p> <\/p>/g,"<p></p>");
	
	return s;
	
	
	
	
	
	
	
}





///////////////////////////////
//			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;
	fetchscript("events","action=showlist&filter="+sel.value);
}
	


	
/////////////////////////////////////////////////////////
//					Page  editing  SEE pages.php
////////////////////////////////////////////////////////	
function page_edit(){
	var page=document.getElementById("page_name").value;	//page name drop down selector
	m_editing_page=page;
	
	ajax_req("fetchpage.php","edit=true&page="+page,page_edit_setup,server_error);
}

function page_edit_setup(s){

//	set up buttons for edit	
	var html="<p style=text-align:center><span class0=button js=\"page_save();\">Save</span> \
	&nbsp;<span class0=button js=\"page_edit_exit();\">Cancel</span></p>";
	
	
	tinyMCE.get("htmledit").setContent(s);
	m_contentarea.innerHTML=html;
	
	var list=m_contentarea.getElementsByTagName("SPAN");	//all spans	
	register_list(list);	

	document.getElementById("editarea").style.display="";
	

}
function page_edit_exit(){
	exitedit();
	fetchscript("admin_menu","");
}

function exitedit(){
	m_contentarea.style.display="";
	document.getElementById("editarea").style.display="none";	
	tinyMCE.get('htmledit').setContent("");
}
	


function page_save(){
	
	if (!confirm("Are you sure you want to amend this page?")) return;
	
	
	
	var html=tinyMCE.get('htmledit').getContent();	
	html=html.replace(/<p> <\/p>/g,"<p>&nbsp;</p>");
	
	var msg="pagename="+encodeURIComponent(m_editing_page);
		
	
	msg += "&html="+encodeURIComponent(html);
	
	msg +="&action=update";
	
	
	ajax_req("pages.php",msg,gotpage,server_error);	
	
}

function create_new_page(){
	
	
	var page=document.getElementById("newpagename").value;
	if (!page) {alert("No page name"); return;}
	
	var access=document.getElementById("newpageaccess").checked;
	
	
	
	var title=document.getElementById("newpagetitle").value;
	if (!title) {alert("No title"); return;}
	
	if (page.match(/[^0-9a-zA-Z_]/)) {alert("Invalid name - numbers, letters and underscore only - no spaces"); return;}
	var msg="page="+encodeURIComponent(page);
	if (access) msg += "&access="+access;
	msg += "&title="+encodeURIComponent(title);
	
	ajax_req("create_page.php",msg,server_error,server_error);
}


function upload_validate(){
	
	
	
	if (document.getElementById("doctitle").value.length==0){
		alert("You must enter a title");
		return false;
	}
	document.theform.submit();
	
	
}
	
function upload_news(){
	if (document.getElementById("news_title").value.length==0) {alert("No title specified"); return;}
	if (document.getElementById("news_abstract").value.length==0) {alert("No abstract specified"); return;}
	
		
	var s=tinyMCE.get('htmledit').getContent();
	
	var htmledit=s.replace(/<p> <\/p>/g,"<p>&nbsp;</p>");
	
	var msg=ajax_form_msg("contentarea","htmledit="+encodeURIComponent(htmledit));
	
	msg=msg+"&action=update";
	
	m_page_req="script|news|"+msg;
			
	ajax_req("news.php",msg,gotpage,gotpage);		
	
}
/////////////////////////////////////////////////////////
//					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_code").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('');
}

