cellInFocus = "";
mouseOverCat = false;

winCompiler=null; winQuery=null; winNLR=null; winPlay=null; winKB=null; winHELP=null; winMessages=null; 
winReference=null; winSymbols=null; winMap=null;

function createAJAX() {
	var AJAX = null;
	if (window.XMLHttpRequest) {
		AJAX=new XMLHttpRequest();
	} else {
		AJAX=new ActiveXObject("Microsoft.XMLHTTP");
	}
	if (AJAX==null) { 
		alert("Your browser doesn't support AJAX.");                        
		return false
	}	
	return AJAX;
}



///
function callFocus(x)
{
	cellInFocus = x;
	mouseOverCat = false;
	obj = document.getElementById(x);
	a = x.split('_');
	catpanel = document.getElementById('cats_'+a[3]);
	catpanel.style.top = obj.offsetParent.offsetTop + obj.offsetParent.offsetParent.offsetTop + obj.offsetParent.clientHeight;
	obj.style.background="yellow";
}

function callBlur(x)
{
	cellInFocus = "";
	obj = document.getElementById(x);
	a = x.split('_');
	catpanel = document.getElementById('cats_'+a[3]);
	catpanel.style.top = -999;
	if (validValue(x)) { obj.style.background="white"; }
}


function alarmCell(x) 
{
	obj = document.getElementById(x);
	obj.focus();
	obj.style.background="red";
}
	

function saveCell(x) 
{
	obj = document.getElementById(x);
	a = x.split('_');
	data = "uid="+a[1]+"&aid="+a[2]+"&rub="+a[3]+"&val="+obj.value;
	url = "savedatacell.php?"+data;
	document.getElementById('cellsum_'+a[2]).innerHTML = "";
	obj = document.getElementById(x);
	obj.style.background="url('processingbar.gif')";
	var AJAX = createAJAX();
	AJAX.onreadystatechange = function() {
		if (AJAX.readyState==4 || AJAX.readyState=="complete") {
			saveCellCallback(AJAX.responseText, AJAX.status, x);
		}
	}
	// var url='navigations.json'; 
	AJAX.open("GET", url, true);   // Open the url this object was set-up with.
	AJAX.send(null);            // Send the request.
}


function saveCellCallback(serverData, serverStatus, x) 
{
	obj = document.getElementById(x);
	switch(serverStatus) {
		case 200:
			obj.style.background = "white";
			break;
		case 666:
		case 667:
		default:
			errorMessage('Status='+ serverStatus+ ' Data="' + serverData + '"');
			break;
	}
	setTimeout("loadData('getcompletion.php', 'completion');", 500);
	setTimeout("loadDataArray('getgridtotals.php?prefix=cellsum');", 700);
}


function validValue(x) 
{
	//document.getElementById('console').innerHTML = 'valid Value x='+ x + ' value="' + obj.value+ '"<br>\n';
	obj = document.getElementById(x);
	if (obj.value.length==0) return true;
	a = x.split('_');
	xmin = a[4]; xmax=a[5];
	if ((obj.value<0) || (obj.value>xmax)) return false;
	return true;
}
					

function validateCell(x)
{
	obj = document.getElementById(x);
	obj.value = obj.value.replace(/ /,'');
	if (validValue(x)) {
		/*if (obj.value.length>0)*/	setTimeout("saveCell('"+x+"');", 400);
	}
	else {
		obj.style.background="red";
		setTimeout("alarmCell('"+x+"');", 200);
	}
}

// validate, save and alarm for regular fields
function callEntryFocus(x, tipid, direction) // N, NE, E, SE, S ...
{
	obj = document.getElementById(x);
	if (tipid.length>0) {
		tippanel = document.getElementById(tipid);
		if(tippanel) {
			tip.panel.style.top = obj.offsetParent.offsetTop + obj.offsetParent.offsetParent.offsetTop + obj.offsetParent.clientHeight;
		}
	}
	obj.style.background="yellow";
}

function callEntryBlur(x, condition)
{
	obj = document.getElementById(x);
	a = x.split('_');
	if (tipid.length>0) {
		tippanel = document.getElementById(tipid);
		if (tippanel) {
			tippanel.style.top = -999;
		}
	}
	if (validEntryValue(x,condition)) { obj.style.background="white"; }
}


function alarmEntry(x) 
{
	obj = document.getElementById(x);
	obj.focus();
	obj.style.background="red";
}


function saveEntry(x) 
{
	obj = document.getElementById(x);
	data = "entry="+x+"&val="+encodeURI(obj.value);
	url = "savedataentry.php?"+data;
	obj.style.background="url('processingbar.gif')";
	var AJAX = createAJAX;
	AJAX.onreadystatechange = function() {
		if (AJAX.readyState==4 || AJAX.readyState=="complete") {
			saveEntryCallback(AJAX.responseText, AJAX.status, x);
		}
	}
	// var url='navigations.json'; 
	AJAX.open("GET", url, true);   // Open the url this object was set-up with.
	AJAX.send(null);            // Send the request.
}


function saveEntryCallback(serverData, serverStatus, x) 
{
	obj = document.getElementById(x);
	switch(serverStatus) {
		case 200:
			obj.style.background = "white";
			break;
		case 666:
		case 667:
		default:
			errorMessage('Status='+ serverStatus+ ' Data="' + serverData + '"');
			break;
	}
}


function validEntryValue(x, condition) 
{
	obj = document.getElementById(x);
	if (obj.value.length==0) return true;
	if (condition.length>0) {
		switch(condition) {
			case email:
			case notempty:
				if (obj.value.length>0) {return true;}
				else {return false;}
				default:
		}
	}
	return true;
}


function validateEntry(x, condition)
{
	obj = document.getElementById(x);
	obj.value = obj.value.replace(/ /,'');
	if (validValue(x, condition)) {
		setTimeout("saveEntry('"+x+"');", 400);
	}
	else {
		obj.style.background="red";
		setTimeout("alarmEntry('"+x+"');", 200);
	}
}


function clickCat(val) {
	//	document.getElementById('console').innerHTML += 'cellInFocus=' + cellInFocus + ' value='+val; + '<br>';
	//	obj = document.getElementById(cellInFocus);
	//	if (obj) obj.value = val;
	
}

function setMouseOverCat(v) 
{
	//	document.getElementById('console').innerHTML += 'mouseOverCat='+v; + '<br>\n';
	mouseOverCat = v; 
}

function showHelp() 
{
	document.getElementById('helpbox').style.left=50;
}

function hideHelp() 
{
	document.getElementById('helpbox').style.left=-999;
}

function showComments(filt)
{
	if(filt.length>0) {
		loadData('comments.php?filter='+filt, 'commentstable');
	}
	else {
		loadData('comments.php?all', 'commentstable');
	}
}

function postComment(textarea, topicselection)
{
	sel = document.getElementById(topicselection);
	tex = document.getElementById(textarea);
	topic = encodeURI(sel.value);
	if(topic.length>0) {
		text = encodeURI(tex.value);
		var poststr = "aid=" + topic + "&msg=" + text;
		//document.getElementById('console').innerHTML = poststr;
		postData('comments.php?insert', poststr, 'commentstable');
	}
	else {
		window.status = 'Selection of topic needed.';
		sel.style.background = "red";
		tex.focus();
	}
}

function deleteComment(mid) 
{
	loadData('comments.php?delete&mid='+mid, 'commentstable');
}

function postDataText(url, postdata, target)
{
	var AJAX = createAJAX();
	if (target.length>0) AJAX.onreadystatechange = function() {
		if (AJAX.readyState==4 || AJAX.readyState=="complete") {
			postDataCallback(AJAX.responseText, AJAX.status, url, target);
		}
	}
	AJAX.open('POST', url, true);
	AJAX.setRequestHeader("Content-type", "text/plain");
	AJAX.setRequestHeader("Content-length", postdata.length);
	AJAX.setRequestHeader("Connection", "close");
	AJAX.send(postdata);
}


function postData(url, postdata, target)
{
	var AJAX = createAJAX();
	if (target.length>0) AJAX.onreadystatechange = function() {
		if (AJAX.readyState==4 || AJAX.readyState=="complete") {
			postDataCallback(AJAX.responseText, AJAX.status, url, target);
		}
	}
	AJAX.open('POST', url, true);
	AJAX.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	AJAX.setRequestHeader("Content-length", postdata.length);
	AJAX.setRequestHeader("Connection", "close");
	AJAX.send(postdata);
}

function postDataCallback(text, status, url, target) {
	loadDataCallback(text, status, url, target);
}

function loadData(url, target, chainfunction) 
{
	var AJAX = createAJAX();
	AJAX.onreadystatechange = function() {
		if (AJAX.readyState==4 || AJAX.readyState=="complete") {
			loadDataCallback(AJAX.responseText, AJAX.status, url, target, chainfunction);
		}
	}
	AJAX.open("GET", url, true);   // Open the url this object was set-up with.
	AJAX.send(null);            // Send the request.
}


function loadDataCallback(serverData, serverStatus, url, target, chainfunction) 
{
  obj = document.getElementById(target);
  switch(serverStatus) {
  case 200:
  	document.getElementById(target).innerHTML = serverData;
    /*var newdiv = document.createElement("div"); // see http://domscripting.com/blog/display/99
    newdiv.innerHTML = serverData;
    obj.removeChild(obj.firstChild);
    obj.appendChild(newdiv);
    break;*/
  case 666:
  case 667:
  default:
    errorMessage('URL="'+ url + '" Target="' + target + '" Status='+ serverStatus+ ' Data="' + serverData + '"');
		  break;
  }
  if (chainfunction!=null) setTimeout(chainfunction, 1);
}


function loadProgram(url, target) {
	var AJAX = createAJAX();
	AJAX.onreadystatechange = function() {
		if (AJAX.readyState==4 || AJAX.readyState=="complete") {
			loadProgramCallback(AJAX.responseText, AJAX.status, url, target);
		}
	}
	AJAX.open("GET", url, true);   // Open the url this object was set-up with.
	AJAX.send(null);            // Send the request.
}	


function loadProgramCallback(serverData, serverStatus, url, target) {
	editAreaLoader.init({
                        id: target // id of the textarea to transform
                        ,start_highlight: true  // if start with highlight
                        ,allow_resize: "both"
                        ,allow_toggle: false
                        ,language: "en"
						,font_size: 12
                        ,syntax: "python"
						});
	editAreaLoader.setValue(target, serverData)
	//document.getElementById(target).innerHTML = serverData;
	
	
	
/*	editAreaLoader.openFile(target, 
							{
							id: "prologsource",
							text: serverData,
							title: url
							}); */
}


function loadDataArray(url) 
{
	var AJAX = createAJAX();
	AJAX.onreadystatechange = function() {
		if (AJAX.readyState==4 || AJAX.readyState=="complete") {
			loadDataArrayCallback(AJAX.responseText, AJAX.status, url);
		}
	}
	AJAX.open("GET", url, true);   // Open the url this object was set-up with.
	AJAX.send(null);            // Send the request.
}


function loadDataArrayCallback(serverData, serverStatus, url) 
{
	switch(serverStatus) {
		case 200:
			a = JSON.parse(serverData);
			for(i=0; i<a.length; i++) {
				document.getElementById(a[i].id).innerHTML = a[i].html; 
			}
			break;
		case 666:
		case 667:
		default:
			errorMessage('URL="'+ url+ '" Status='+ serverStatus+ ' Data="' + serverData + '"');
			break;
	}
}


function saveEdit(textarea) {
	//	tex = document.getElementById(textarea);
	//	text = encodeURIComponent(tex.value);
	text = encodeURIComponent(editAreaLoader.getValue(textarea));
	postdata = "action=save&label="+textarea+"text=" + text;
	//document.getElementById('console').innerHTML = poststr;
	url = 'article.php'; //, poststr, 'commentstable');
	
	var AJAX = createAJAX();
	if (textarea.length>0) AJAX.onreadystatechange = function() {
		if (AJAX.readyState==4 || AJAX.readyState=="complete") {
			saveEditCallback(AJAX.responseText, AJAX.status, url, textarea);
		}
	}
		AJAX.open('POST', url, true);
	AJAX.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	AJAX.setRequestHeader("Content-length", postdata.length);
	AJAX.setRequestHeader("Connection", "close");
	AJAX.send(postdata);
}

function saveEditCallback(text, status, url, textarea) {
	document.getElementById(textarea+'_change_indicator').innerHTML='Saved.';
}

function sendQueryOnEnter(cgiurl, target, e) {
	var keycode;
	if (window.event) keycode = window.event.keyCode;
	else if (e) keycode = e.which;
	else return true;
	
	if (keycode == 13)
	{
		sendQuery(cgiurl, target);
		return false;
	}
	else
		return true;
	
}

function sendQuery(cgiurl, target) {
	var old = document.getElementById(target+'_response');
	if(old) old.id = 'history';
	var querystr = encodeURIComponent(document.getElementById(target+'_query').value);
	//	uri = cgiurl+'?q='+querystr;
	var uri = cgiurl+querystr;
	var console = document.getElementById(target);
	console.innerHTML += "<div class 'responsetext' id='"+target+"_response'>Processing: "+uri+" ...</div>";
	loadData(uri, target+'_response');
}

function postQuery(cgiurl, target) {
	old = document.getElementById(target+'_response');
	if(old) old.id = '';
	querystr = document.getElementById(target+'_query').value;
	uri = cgiurl+'?read='+encodeURI(querystr);
	//uri = cgiurl+querystr;
	console = document.getElementById(target);
	console.innerHTML += //"<span class='querytext' >"+querystr +"</span><br />"
	"<div class 'responsetext' id='"+target+"_response'>Processing: "+uri+" ...</div>";
	postDataText(uri, querystr, target+'_response');
}


function errorMessage(msg)
{
	console = document.getElementById('console');
	if (console) console.innerHTML = msg;
	data = "msg="+ encodeURI(msg);
	//postData('errormessage.php', data, '');
}


function getElementsByName_iefix(tag, name) {
	
	var elem = document.getElementsByTagName(tag);
	var arr = new Array();
	for(i = 0,iarr = 0; i < elem.length; i++) {
		att = elem[i].getAttribute("name");
		if(att == name) {
			arr[iarr] = elem[i];
			iarr++;
		}
	}
	return arr;
}

