/*
 * Copyright 2007 Jeffrey Palm
 */

// --------------------------------------------------
// main
// --------------------------------------------------

var buffer = 0;
var newResults = 0;

function note(s) {
  document.getElementById("note").innerHTML = s;
}

function lookup() {

  // get the command
  cmd = document.getElementById("cmd").value;

	var url = '/gcalc/eval.php';
	var params = 'b=' + buffer + '&q=' + urlencode(cmd);
	var callback = function(res) {
		if (!res) return;
		var txt = res.responseText
    if (txt == "NO") {

    } else {
      arr = txt.split(":");
      a = arr[0];
      b = arr[1];
      buffer = b;
      document.getElementById("buffer").innerHTML = a + " -> " + b;
      document.getElementById("cmd").value = "";
      document.getElementById("cmd") = b;
    }

	}
    note("Evaluating " + cmd);
	new Ajax.Request (url,
										{   method: 'get', 
												parameters: params, 
												onSuccess: callback
												});		

}

// --------------------------------------------------
// misc
// --------------------------------------------------

function $n(tag,on) {
	var e = document.createElement(tag);
	if (on) on.appendChild(e);
	return e;
}

function $t(text,on) {
	var e = document.createTextNode(text);
	if (on) on.appendChild(e);
	return e;
}

function insertBefore(newNode,target) {
	// http://lists.xml.org/archives/xml-dev/200201/msg00873.html
  var parent   = target.parentNode;
	var refChild = target; //target.nextSibling;	
	if(refChild) parent.insertBefore(newNode, refChild);
	else parent.appendChild(newNode);	
}

function insertAfter(parent, node, referenceNode) {
  // http://javascript.internet.com/snippets/insertafter.html
  parent.insertBefore(node, referenceNode.nextSibling);
}

// ====================================================================
//       URLEncode and URLDecode functions
//
// Copyright Albion Research Ltd. 2002
// http://www.albionresearch.com/
//
// You may copy these functions providing that 
// (a) you leave this copyright notice intact, and 
// (b) if you use these functions on a publicly accessible
//     web site you include a credit somewhere on the web site 
//     with a link back to http://www.albionresarch.com/
//
// If you find or fix any bugs, please let us know at albionresearch.com
//
// SpecialThanks to Neelesh Thakur for being the first to
// report a bug in URLDecode() - now fixed 2003-02-19.
// ====================================================================
function urlencode( plaintext )
{
	// The Javascript escape and unescape functions do not correspond
	// with what browsers actually do...
	var SAFECHARS = "0123456789" +					// Numeric
					"ABCDEFGHIJKLMNOPQRSTUVWXYZ" +	// Alphabetic
					"abcdefghijklmnopqrstuvwxyz" +
					"-_.!~*'()";					// RFC2396 Mark characters
	var HEX = "0123456789ABCDEF";

	var encoded = "";
	for (var i = 0; i < plaintext.length; i++ ) {
		var ch = plaintext.charAt(i);
	    if (ch == " ") {
		    encoded += "+";				// x-www-urlencoded, rather than %20
		} else if (SAFECHARS.indexOf(ch) != -1) {
		    encoded += ch;
		} else {
		    var charCode = ch.charCodeAt(0);
			if (charCode > 255) {
			    alert( "Unicode Character '" 
                        + ch 
                        + "' cannot be encoded using standard URL encoding.\n" +
				          "(URL encoding only supports 8-bit characters.)\n" +
						  "A space (+) will be substituted." );
				encoded += "+";
			} else {
				encoded += "%";
				encoded += HEX.charAt((charCode >> 4) & 0xF);
				encoded += HEX.charAt(charCode & 0xF);
			}
		}
	} // for

	return encoded;
};


