/*
 * DIRECTSCIENCE.INFO EDITING JAVASCRIPT
 *
 * COPYRIGHT BOYANG ZHAO
 *
 * Revision Date: November 21, 2006 5:08
 * Revision: 4
 */

/*global*/
var tree = new tree();

var sessionflimit = 5; //in minutes
var sessionlimit = 6; //in hours

sessionflimit = sessionflimit * 60 * 1000;
sessionlimit = sessionlimit * 60 * 60 * 1000 - sessionflimit;
var srremove = '';
var srback = '';

//if window is in edit mode
var surlpat = /^http:\/\/[^\/]*\/article\.php\?process=create/;
var surledit = surlpat.exec(window.location);
if(!surledit){
addEventHandler(window,'load',function(){setTimeout(sessiontr,sessionlimit)});
}

include_once('message');

//session control
function sessiontr(){
	sessionconfirm = new message();
	var sessionmessage='It has been 6 hours since you started editing this article. Press \'Renew\' to renew your session and continue editing, or \'Exit\' to exit without submitting your edits.<form id="cform" onsubmit="return false"><input type="button" name="crenew" id="crenew" value="renew" /><input type="button" name="cexit" id="cexit" value="exit" /></form>';
	sessionconfirm.create(sessionmessage);
	
	//document.getElementById('cform').onsubmit=return false;
	document.getElementById('crenew').onclick=function(){srremove=false;srsessionaction();};
	document.getElementById('cexit').onclick=function(){srremove=true;srsessionaction();};
			
	setTimeout(sessionftr,sessionflimit);
}

function srsessionaction(){
	var surlpat = /^http:\/\/[^\/]*\/([^\/]*)\/([^?]*)/;
	var surlarray = surlpat.exec(window.location);
	if(!srremove){
		var sessionarray = "sraction=refresh&srtitle="+surlarray[2]+"&srfield="+surlarray[1];
		sessionarray = sessionarray.split('&');
		var url="/dsmain/processes/usereditsession.php";
		ajax.getxmlhttp(url,null,'POST',sessionarray);
		sessionconfirm.remove();
		setTimeout(sessiontr,sessionlimit);
	} else if(srremove) {
		var sessionarray = "sraction=remove&srtitle="+surlarray[2]+"&srfield="+surlarray[1];
		sessionarray = sessionarray.split('&');
		var surl="/dsmain/processes/usereditsession.php";
		ajax.getxmlhttp(surl,null,'POST',sessionarray);
		window.location.href='/'+surlarray[1]+'/'+surlarray[2];
	}
	
	if(srback){
		var sessionarray = "sraction=remove&srtitle="+surlarray[2]+"&srfield="+surlarray[1];
		sessionarray = sessionarray.split('&');
		var surl="/dsmain/processes/usereditsession.php";
		ajax.getxmlhttp(surl,null,'POST',sessionarray);
		window.location.href='/'+surlarray[1]+'/'+surlarray[2];
	}
}

function sessionftr(){
	var confirmbox = document.getElementById('msgbox');
	confirmbox.firstChild.nodeValue="Your session has expired because you did not renew your session after 6 hours of editing on this article. Your edits are neither saved nor submitted. Sorry for any inconvenience. Press 'OK' to return to the main article page.";
	
	var confirmform = document.getElementById('cform');
	confirmform.innerHTML='';
			
	var inputca = createElement('input');
	inputca.setAttribute("type","button");
	inputca.setAttribute("name","cok");
	inputca.setAttribute("id","cok");
	inputca.setAttribute("value","OK");
			
	confirmform.appendChild(inputca);
	
	//remove form submits
	document.editform.onsubmit=function (){ return false; };
	
	document.getElementById('cok').onclick=function(){srback=true;srsessionaction();};
}

function remove(n){
	var refidentifya = n;
	var a = document.getElementById(refidentifya);
	a.parentNode.removeChild(a);
}

function appear(id,refold){
	tree.refold = refold;
	document.getElementById(id).firstChild.nodeValue = "> ";
	tree.fold(id+"c");
	if(tree.status == 'open' && id == 'redirects')
	document.getElementById('redirectquery').focus();
}

function keyckenter(e){
	var key = getkey(e);
		if(key == 13)
		return false;
	return true;
}

//getting form values
function gformvalues(){
	var editform = document.getElementById('editform');
	var formvalues = '';
	var formtypes = new Array('input','textarea');
	for(f=0;f<formtypes.length;f++){
		var formtype = editform.getElementsByTagName(formtypes[f]);
		for(i=0;i<formtype.length;i++){
			formvalues += formtype[i].name+'='+encodeURIComponent(formtype[i].value)+'&';
		}
	}
	var formtype = editform.getElementsByTagName('select');
	for(i=0;i<formtype.length;i++){
		if(formtype[i].multiple){
			for(j=0;j<formtype[i].options.length;j++){
				if(formtype[i].options[j].selected)
				formvalues += formtype[i].name+'='+encodeURIComponent(formtype[i].options[j].value)+'&';
			}
		} else {
		formvalues += formtype[i].name+'='+encodeURIComponent(formtype[i].value)+'&';
		}
	}
	//formvalues = encodeURIComponent(formvalues);
	
	return formvalues;
}

/*related articles*/
function handlerelated(response) {
if(response == 'initial'){
	document.getElementById("addrelatedresponse").innerHTML='(Only input the title of article)';
	document.getElementById("addrelatedresponseb").disabled=true;
} else if(response == 'null'){
	/*
	var typedtitle = document.getElementById("addrelatedquery").value;
	typedtitle += '[ ]';
	document.getElementById("addrelatedresponse").innerHTML='This article cannot be found in the database!<br /><input class="floatr" type="button" value="Add Anyways" onclick="addrelated(\''+typedtitle+'\')" />';
	*/
	document.getElementById("addrelatedresponse").innerHTML='This article cannot be found in the database!<br />';
	document.getElementById("addrelatedresponseb").disabled=true;
} else if(response == 'Error'){
	document.getElementById("addrelatedresponse").innerHTML='An error occurred while handling your request.';
	document.getElementById("addrelatedresponseb").disabled=true;
} else {
	document.getElementById("addrelatedresponse").innerHTML='This article is found in the database!<br /><span style="color:#669966">'+response+'</span><br />';
	document.getElementById("faddrelatedresponse").value=response;
	document.getElementById("addrelatedresponseb").disabled=false;
	
}
}

function addrelated(){
	var n = document.getElementById("faddrelatedresponse").value;
	var a = createElement('span');
	var i = document.getElementById("relatedchecknum").value;
	a.setAttribute("id","relateds"+i);
	var anchora = createElement("a");
	anchora.setAttribute("id","del");
	anchora.setAttribute("href","javascript:remove('relateds"+i+"')");
	anchora.appendChild(document.createTextNode("Remove"));
	var inputa =createElement("input");
	inputa.setAttribute("id","related"+i+"");
	inputa.setAttribute("class","display");
	inputa.setAttribute("name","related[]");
	inputa.setAttribute("type","text");
	inputa.setAttribute("value",n);
	inputa.setAttribute("size","40");
	inputa.setAttribute("readOnly",true);
	a.appendChild(anchora);
	a.appendChild(inputa);
	a.appendChild(createElement("br"));
	document.getElementById("additionalrelated").appendChild(a);
	i++;
	document.getElementById("relatedchecknum").value = i;
	document.getElementById("addrelatedresponse").innerHTML='(Only input the title of article)';
	document.getElementById("addrelatedresponseb").disabled=true;
	document.getElementById("addrelatedquery").value="";
}


/*references*/
function modref(n){
	var refidentifyb = 'ref'+n;
	document.getElementById(refidentifyb).readOnly = false;
}

function getref(rtype){
if(rtype == "-select reference type-"){
	document.getElementById("addrefresponse").innerHTML="";
	document.getElementById("addrefbutton").disabled = true;
} else {
	getrefarray = new Array('access=allow','rtype='+rtype);
	url="/dsmain/processes/ref.php";
	ajax.getxmlhttp(url,handleref,'POST',getrefarray);
}
} 

function handleref(response) {
document.getElementById("addrefresponse").innerHTML = response;
document.getElementById("addrefbutton").disabled = false;
}

function addreference(){
	var rtype = document.getElementById("rtype").value;
	var i = document.getElementById("refchecknum").value;
	var rauthor = document.getElementById("rauthor").value;
	var rtitle = document.getElementById("rtitle").value;
	var ryear = document.getElementById("ryear").value;
	var ruid = document.getElementById("ruid").value;
	switch(rtype){
		case "journal":
		var rjournal = document.getElementById("rjournal").value;
		var rvolumenumber = document.getElementById("rvolumenumber").value;
		var rpage = document.getElementById("rpage").value;
		var n = 'ref[rtype:journal][uid:'+ruid+'][author:'+rauthor+'][title:'+rtitle+'][year:'+ryear+'][journal:'+rjournal+'][volumenumber:'+rvolumenumber+'][page:'+rpage+']';
		break;
		
		case "book":
		var rpublisher = document.getElementById("rpublisher").value;
		var rcity = document.getElementById("rcity").value;
		var rstate = document.getElementById("rstate").value;
		var rpage = document.getElementById("rpage").value;
		var n = 'ref[rtype:book][uid:'+ruid+'][author:'+rauthor+'][title:'+rtitle+'][year:'+ryear+'][publisher:'+rpublisher+'][city:'+rcity+'][state:'+rstate+'][page:'+rpage+']';
		break;
		

		case "world wide web":
		var rurl = document.getElementById("rurl").value;
		var raccessdate = document.getElementById("raccessdate").value;
		var rcyear = document.getElementById("rcyear").value;
		var n = 'ref[rtype:world wide web][uid:'+ruid+'][author:'+rauthor+'][title:'+rtitle+'][year:'+ryear+'][cyear:'+rcyear+'][url:'+rurl+'][accessdate:'+raccessdate+']';
		break;
	}
	var a = createElement('span');
	a.setAttribute("id","refs"+i);
	var anchora = createElement("a");
	anchora.setAttribute("id","del");
	anchora.setAttribute("href","javascript:remove('refs"+i+"')");
	anchora.appendChild(document.createTextNode("Remove"));
	var anchorb = createElement("a");
	anchorb.setAttribute("id","mod");
	anchorb.setAttribute("href","javascript:modref("+i+")");
	anchorb.appendChild(document.createTextNode("Modify"));
	var inputa = createElement("input");
	inputa.setAttribute("id","ref"+i+"");
	inputa.setAttribute("class","display2");
	inputa.setAttribute("name","ref[]");
	inputa.setAttribute("type","text");
	inputa.setAttribute("value",n);
	inputa.setAttribute("size","81");
	inputa.setAttribute("readOnly",true);
	a.appendChild(anchora);
	a.appendChild(anchorb);
	a.appendChild(inputa);
	a.appendChild(createElement("br"));
	document.getElementById("additionalref").appendChild(a);
	document.getElementById("ref"+i).onkeypress=keyckenter;
	i++;
	document.getElementById("refchecknum").value = i;
	document.getElementById("refselection").firstChild.selected=true;
	document.getElementById("addrefresponse").innerHTML="";
	document.getElementById("addrefbutton").disabled = true;
}

/*more options*/
function catremove(type,num){
	var n = document.getElementById(type+"cat");
	if(num == 'all'){
		for(i=0;i<n.options.length;i++){
			n.options[i].selected = true;
		}
	}
	var j = n.options.length;
	var i = 0;
	while(i<j){
		try{
			if(n.options[i].selected){
				var a = document.getElementById("catadds"+type); // add select
				var addoption = createElement("option");
				addoption.setAttribute("value",n.options[i].value);
				addoption.appendChild(document.createTextNode(n.options[i].value));
				a.appendChild(addoption);
				n.removeChild(n.options[i]);
				i--;
			}
			i++;
		} catch (e){
			return;
		}
	}
}

function catadd(type){
	var n = document.getElementById("catadds"+type); //add select
	var a = document.getElementById(type+"cat"); //multiple selection
	var addoption = createElement("option");
	addoption.setAttribute("value",n.value);
	addoption.appendChild(document.createTextNode(n.value));
	a.appendChild(addoption);
	for(i=0;i<n.options.length;i++){
		if(n.options[i].value == n.value)
		n.removeChild(n.options[i]);
	}
	n.value = "-select "+type+" categories-";
	document.getElementById("catadd"+type).disabled = true;
}

function catchange(finder,type){
	if(finder.value != "-select "+type+" categories-")
	document.getElementById("catadd"+type).disabled = false;
	else
	document.getElementById("catadd"+type).disabled = true;
}

/*edit submit,preview,cancel*/
function processbsubmit(){
	//processes
	var a = new Array();
	a[0] = document.getElementById("referencecat");
	a[1] = document.getElementById("topiccat");
	for(i=0;i<a.length;i++){
		for(j=0;j<a[i].options.length;j++){
			a[i].options[j].selected = true;
		}
	}
}

function submitvalidation(){
if(!document.getElementById("edittypem").checked && !document.getElementById("edittypeM").checked){
	alert('Please select the type of edit before sumbitting');
	return false;
}
return true;
}

function preview(){
	processbsubmit();
	var fvalues = gformvalues();
	var fvaluesarray = fvalues.split("&");
	var purl='/dsmain/processes/preview.php';
	ajax.getxmlhttp(purl,previewr,'POST',fvaluesarray);
}

function previewr(response){
	var previewcontent=response;
	previewbox = new message();
	previewbox.width=720;
	previewbox.height=480;
	previewbox.create(previewcontent);
}

function cancel(url){
	window.location=url;
}

//on type of edit change
function edittypeselect(type,authoruser,usertype){
	if(type.value == 'minor'){
		if(authoruser == 'notoriginal' && usertype != 'administrator'){
			document.getElementById("legalnterms").innerHTML='By submitting your edits, you confirm that your submitted changes is written by yourself and do not violate any copyright, and you agree that your suggested edits will be reviewed by either the original author(s) of this article or the administrator(s). Once upon approval, the edit will be licensed under the <a rel="nofollow" href="http://creativecommons.org/licenses/by-nc-sa/2.5/">Creative Commons Attribution-NonCommerical-ShareAlike 2.5 License</a>';
			document.getElementById("editsubmit").value='Suggest Edit';
		} else if(authoruser == 'original' || usertype == 'administrator'){
			document.getElementById("legalnterms").innerHTML='By submitting your edits, you confirm that your submitted changes is written by yourself and do not violate any copyright, and you agree to license your changes under the <a rel="nofollow" href="http://creativecommons.org/licenses/by-nc-sa/2.5/">Creative Commons Attribution-NonCommerical-ShareAlike 2.5 License</a>';
			document.getElementById("editsubmit").value='Submit Edit';
		}
	} else if(type.value == 'major'){
		document.getElementById("legalnterms").innerHTML='By submitting your edits, you confirm that your submitted changes is written by yourself and do not violate any copyright, and you agree to license your changes under the <a rel="nofollow" href="http://creativecommons.org/licenses/by-nc-sa/2.5/">Creative Commons Attribution-NonCommerical-ShareAlike 2.5 License</a>';
		document.getElementById("editsubmit").value='Submit Edit';
	}
}

//redirect
function handleredirect(response) {
if(response == 'initial'){
	document.getElementById("redirectresponse").innerHTML='(Only input the title of article)<input class="floatr" align="right" type="submit" name="editsubmit" value="Redirect" disabled />';
} else if(response == 'null'){
	var typedtitle = document.getElementById("redirectquery").value;
	document.getElementById("redirectresponse").innerHTML='This article cannot be found in the database!<input class="floatr" align="right" type="submit" name="editsubmit" value="Redirect" disabled />';
} else {
	document.getElementById("redirectresponse").innerHTML='This article is found in the database!<br /><span style="color:#669966">'+response+'</span><input type="hidden" name="redirect" value="'+response+'" /><input class="floatr" align="right" type="submit" name="editsubmit" value="Redirect" />';
}
}

//expansions
function expand(id){
	expandtxt = document.getElementById(id).value;
	expandbox = new message();
	var width = windowWidth*0.9;
	var height = windowHeight*0.9;
	expandbox.width = width;
	expandbox.height = height;
	expandcontent = '<table width="'+width+'px" height="'+height+'px"><tr><td align="right"><input type="button" value="Return" onclick="expandreturn()" /></td></tr><tr><td align="left" valign="top"><b>Text:</b><br /><textarea id="expandtext" style="width:'+(width*0.9)+'px;height:'+(height*0.9)+'px">'+expandtxt+'</textarea></td></tr></table>';
	expandbox.create(expandcontent);
}

function expandreturn(){
	document.getElementById('text').value = document.getElementById('expandtext').value;
	expandbox.remove();
}

//edit upload files
function editupload(){
	var uploadarray = new Array('upload=false');
	var url='/dsmain/processes/upload.php';
	ajax.getxmlhttp(url,edituploadr,'POST',uploadarray);
}

function edituploadr(response){
	uploadbox = new message();
	uploadbox.width = 700;
	uploadbox.height = 450;
	uploadbox.create(response);
}

function edituploadrf(file){
	uploadbox.remove();
	var uploadra = createElement('span');
	uploadra.innerHTML='<img align="top" src="/images/icons/sections.gif" /> <i>'+file+'</i> uploaded<br />';
	document.getElementById('uploadr').appendChild(uploadra);
}

//create new article onchange reference -> change topics and references
function cfieldctopic(){
	ctopicvalue = getSelectValue('cfieldtopicselect');
	cfieldoarray = new Array('field='+ctopicvalue);
	url = '/dsmain/processes/gettopics.php';
	cfieldoptiontype = 'topics';
	ajax.getxmlhttp(url,cfieldcoptions,'POST',cfieldoarray,'xml');
}

function cfieldcoptions(response){
	if(cfieldoptiontype == 'references'){
		selectid = 'cataddsreference';
		selecttype = 'reference';
	} else if (cfieldoptiontype == 'topics'){
		selectid = 'cataddstopic';
		selecttype = 'topic';
	}
	
	document.getElementById(selectid).innerHTML = '';
	document.getElementById(selectid).options[0]= new Option('-select '+selecttype+' categories-','');
	optionsr = response.getElementsByTagName('option');
	for(i=0;i<optionsr.length;i++){
		var optionr = optionsr[i].firstChild.nodeValue;
		document.getElementById(selectid).options[i+1] = new Option(optionr,optionr);
	}
	
	//now change the reference options
	if(cfieldoptiontype == 'topics'){
		cfieldoarray = new Array('field='+ctopicvalue);
		url = '/dsmain/processes/getreferences.php';
		cfieldoptiontype = 'references';
		ajax.getxmlhttp(url,cfieldcoptions,'POST',cfieldoarray,'xml');
	}
}
