//  V3.1
///////////////////////////////////////////////////////////////////////////////////
// Author Ben Clayton
// Do not copy or use this code in anyway without permission.
// I cannot be held responsible for any damage or loss caused by use of this code.
// contact code@bcinternet.info
//////////////////////////////////////////////////////////////////////////////////
//  These functions have been modified for use with calendar editor.
//  the line break has been made upper case <BR> to make it less likely
// to occur in typed in text by 

//VARIABLES
var script_url = '/cgi-bin/infxcalendar/cal.pl';
var testmode = 0;
var rawdata = "";
var idx = -1;
var chg = 0;

function translate2entity(s){
	var reg1 = /&/g;         																		// change & into &#38;
	s=s.replace(reg1,"&#38;");
	reg1 = /\"/g;             																		// change " into &#32;
	s=s.replace(reg1,"&#32;");
	reg1 = /\'/g;              																		// change ' into &#39;
	s=s.replace(reg1,"&#39;");
	reg1 = /</g;              																		// change < into &lt;
	s=s.replace(reg1,"&lt;");
	reg1 = />/g;              																		// change > into &gt;
	s=s.replace(reg1,"&gt;");

	// when you press return in a text area you seem to get two character \r and \n, 
	// we only want one break so translate one to a <br> and delete the other.
	reg1 = /[\r]/g;            																		// change newline into <br>
	s=s.replace(reg1,"");
	reg1 = /[\n\f\r]/g;            																	// change newline into <br>
	s=s.replace(reg1,"<BR>");
	//alert(s);
	return s;
}

function translateFromentity(s){
// !!don't use this for text areas, why not ??
// Just use when putting into a input textbox.
	reg1 = /&#32;/g;         																		// change &#32; into " 
	s=s.replace(reg1,"\"");
	reg1 = /&#39;/g;         																		// change &#39; into '
	s=s.replace(reg1,"\'");
	
	reg1 = /&lt;/g;          																		// change < into &lt;
	s=s.replace(reg1,"<");
	reg1 = /&gt;/g;          																		// change > into &gt;
	s=s.replace(reg1,">");
	reg1 = /<BR>/g;          																		// change <br> into newline
	s=s.replace(reg1,"\n");
	
	var reg1 = /&#38;/g;     																		// change &#38 into &
	s=s.replace(reg1,"&");
	return s;
}

function BC_locateEmails(s){
	var reg_email = /[\.\w_-]+@\w[\w\._-]+\w/g; 													// match an email address
	var reg_space = / /g;
	var marr = s.match(reg_email);
	if (marr){
		for (var i=0;i<marr.length;i++){
			reg = marr[i];
			em = marr[i].replace(reg_space,'');
			s = s.replace(reg," <a href=\"mailto:"+em+"\">" + em + "</a> ");
			for (var j=0;j<marr.length;j++){
				if ((reg == marr[j])&&(i != j)) return s
			}
		}
	}
	return s;
}

function BC_locateUrls(s){
	var reg_url = /[htp:/]*www\.\w[\w/\._-]+/ig; 													// match an url
	var reg_space = / /g;
	var em,em2;
	var reg_http = /http:\/\//i;
	var reg;
	var marr = s.match(reg_url);

	if (marr){
		for (var i=0;i<marr.length;i++){
			reg = marr[i];
			em = marr[i].replace(reg_space,'');
			em2 = em;
			if (em2.search(reg_http)!=0) em2 = "http://" + em2;
			s = s.replace(reg," <a href=\""+em2+"\">" + em + "</a> ");
			for (var j=0;j<marr.length;j++){
				if ((reg == marr[j])&&(i != j)) return s
			}
		}
	}
	return s;
}

function BC_datestr(y,m,d){
		return d + "/" + (Number(m)+1) + "/" + (Number(y)+1900);
}

function BC_datestrrange(y,m,s){
	if ((s[0]==s[3])&&(s[1]==s[4])&&(s[2]==s[5])){
		return s[2] + th[s[2]-1];
	}else{
		if (s[1]!=s[4]){
			return BC_datestr(s[0],s[1],s[2]) + " - " + BC_datestr(s[3],s[4],s[5]);
		}else{
			return s[2] + th[s[2]-1] + " - " + s[5] + th[s[5]-1];
		}
	}	
}

function BC_inDayRange(s,y,m,d){
	var sdate = (((s[0] * 12)+ s[1]) * 32) + s[2];
	var fdate = (((s[3] * 12)+ s[4]) * 32) + s[5];
	var adate = (((y * 12) + m) * 32) + d;
	if ((sdate <= adate)&&(adate <= fdate)){return 1;}
	return 0;
}

function BC_getevents(y,m,d,monthflag){
	// if monthflag=1 show all events, otherwise find events match day
	var ss="";
	var s,n,i;	
	for (n=0;n<ev.length;n++){
		s = ev[n].split(',');
		//alert(s[9]);
		for (i=0;i<6;i++) {s[i] = Number(s[i]);}
		if (monthflag ||(BC_inDayRange(s,y,m,d)==1)){
			if (editflag=="1"){ss += "<span style='cursor:pointer;' ondblclick=\"BC_editevent(" + s[6] +",0);\">";}
			
			ss += "<div class='event'>\n";
			if (unescape(s[9]) != ""){
				ss += "\t<a href='" + unescape(s[9]) + "' ><img src='/x_icons/silk/information.png' alt='more' class='event-icon'><\/a>\n";
			}
			ss += "\t<span class='event-date'>" + BC_datestrrange(y,m,s) + ": <\/span><span class='event-title'>" + unescape(s[7]) + "<\/span><br/>\n";
			ss += "\t<i>" + unescape(s[8]) + "<\/i>\n";
			ss += "<\/div>\n";
		
			if (editflag=="1"){ss += "<\/span>";}
		}
	}
	return ss;
}

function BC_showMonthEvents(sh){
	var html = "";
	if (sh>0){
		html = BC_getevents(Number(year),Number(month),0,1);
	}else{
		html = "";
	}
	document.getElementById('event_text').innerHTML = html;
}

var with_events = /with-events/;

function BC_mouseevent(obj,type){
	if(type == 'click'){
		obj.className += with_events.test(obj.className)?' locked':'';
	}else if(type == 'over'){
		obj.className += ' highlight';
	}else{
		obj.className = obj.className.replace(/ highlight/,'');
	}
	//var debug_div = $('debug');
	//debug_div.innerHTML += "inital: "+obj.initalClass+" last: "+obj.lastClass+" current: "+obj.className+"<br/>";
}

var cl=-1;
function BC_showevents(obj,dt,sh){
	document.getElementById('event_text').innerHTML = BC_getevents(Number(year),Number(month),dt,0);

	if (cl>-1){ 
		var obj = $('day'+cl);																		// clear last selection locked class (might be letting them open lots??)
		obj.className = obj.className.replace(/ locked/,'');
		if (cl==dt){
			cl=-1;
			return; // you have clicked the same date twice
		}else{
			cl=-1;
		}
	}
	
	BC_mouseevent($('day'+dt),'click');
	cl=dt; // store latest selection
}

function save(){
// translate all odd characters in strings into %xx
	var s;
	var d;
	d = $("TBstart").value.split('/');
	s = (Number(d[2])-1900) + "," +(Number(d[1])-1) + "," + Number(d[0]);
	d = $("TBfinish").value.split('/');
	s += "," + (Number(d[2])-1900) + "," +(Number(d[1])-1) + "," + Number(d[0]);
    s += "," + idx;
	s +=  "," + escape(translate2entity($("TBtitle").value));
	s +=  "," + escape(translate2entity($("TAbody").value));
	s +=  "," + escape(translate2entity($("TBprogramme").value));
	rawdata=s;
	$("dblock").value=s;
	if (testmode==1) { alert(s)}
}

function load(){
	var s;
	s = rawdata.split(',');
	$("TBstart").value = Number(s[2])+"/"+(Number(s[1])+1)+"/"+(Number(s[0])+1900);
	$("TBfinish").value = Number(s[5])+"/"+(Number(s[4])+1)+"/"+(Number(s[3])+1900);
	idx = s[6];
	$("BTdelete").disabled=(idx==-1);
	$("TBtitle").value = translateFromentity(unescape(s[7]));
	$("TAbody").value = translateFromentity(unescape(s[8]));
	$("TBprogramme").value = translateFromentity(unescape(s[9]));
}

function setchg(){
	chg=1;
}

function But_Func(fn,chksav){
	var params = {}
	params.save = (fn == 'save')?chg:0 
	save(); // copy values to rawdata, but may not actually save at server
	if ((chksav)&&(chg)){
		var agree = confirm("Save Change to event first?");
		if (agree) params.save = 1;
	}
	chg=0;
	params.subac = fn;
	if (testmode == 1) { alert(params.subac); }
	if (testmode == 0){
		var inputs = document.getElementsByTagName('input');
		var textareas = document.getElementsByTagName('textarea');
		for(var x=0;x<inputs.length;x++){
			var element = inputs[x];
			params[element.id] = element.value;
		}
		for(var x=0;x<textareas.length;x++){
			var element = textareas[x];
			params[element.id] = element.value;
		}
		calender_control(script_url,params);
	}
}

function OpenWindowModal(action,def) {
	var wf = "";
	wf = wf + "";
	wf = wf + "dialogWidth:" + action[3] + "px";
	wf = wf + ";dialogHeight:" + action[4] + "px";
	wf = wf + ";resizable:" + (action[5] ? "yes" : "no");
	wf = wf + ";scroll:" + (action[6] ? "yes" : "no");
	wf = wf + ";menubar:" + (action[7] ? "yes" : "no");
	wf = wf + ";toolbar:" + (action[8] ? "yes" : "no");
	wf = wf + ";directories:" + (action[9] ? "yes" : "no");
	wf = wf + ";location:" + (action[10] ? "yes" : "no");
	wf = wf + ";status:" + (action[11] ? "yes" : "no");
	// make path different each time to stop browser cache giving old page
	var pg = action[1];
	var dt = new Date();
	if (pg.indexOf('?')==-1){
		pg += "?xyz="+escape(dt.getTime());
	}else{
		pg += "&xyz="+escape(dt.getTime());
	}
	//alert(pg);
	return showModalDialog(pg,def,wf);
}

function getfile(){
	var path = "/cgi-bin/infxhotdirectory/hotdirectory.pl?folder=pages|_mainads|_news";
	var oli=OpenWindowModal(new Array(0,path,'hotlinks',450,500,0,1,0,0,0,0,0));
	//alert(oli);
	if (!oli) return;
	var fields = oli.split("\t");
	$("TBprogramme").value = fields[5];
	setchg();
}

function calender_control(scripturl,params){
	ajax_post_request(scripturl,params,"calender_callback(http_request.responseText);");
}

function calender_callback(jsonstr){
	var json;
	eval("json = "+jsonstr+";");
	var target = $('infxcalendar');
	if(target){
		if(json.refresh == 1){
			location. href = '/cgi-bin/infxcalendar/cal.pl?ac='+json.ac;
			return;
		}
		
		target.innerHTML = json.content;
		
		//LOAD EDIT DATA =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=
		if(json.raw_data){
			rawdata = json.raw_data;
			if (rawdata.indexOf('%%')>-1){
				rawdata = "102,3,4,102,3,5,-1,Title,Body";
				testmode = 1;
			}
			load();
		}
		if (json.update == 1) 	calender_control(script_url,{'ac':'selectdate','json':1})
		if (json.message) 		alert(json.message);
		//=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
		
		//VIEW MODE  =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=
		if (json.month)	month = json.month;
		if (json.year)	year = json.year;
		
		if(json.event_array){
			//alert(ev.length);
			json.event_array = json.event_array.replace(/^"/,"");
			json.event_array = json.event_array.replace(/"$/,"");
			
			ev = json.event_array.split('","');

			if(json.list_type == 1){ BC_showMonthEvents(1); }
		}
		//=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
		
	}else{
		alert("Could not find the calender target div!");
	}
}
