//var globalContextObject = new Array(); /* Any object will do */

function globalEval(text) {
  if (window && window.execScript) {
    window.execScript(text, 'Javascript');
  } else if (eval && eval.call)
    eval.call(window, text);
  else
    alert('Can\'t execute JS in correct context.');
}

function evalScripts(element) {
  var scriptNodeList = element.getElementsByTagName("SCRIPT");

  var n = 0;
  var script;
  var scriptLoads = [0];
  //alert(element.innerHTML);

  /* Load all script.src's first */
  for (n = 0; script = scriptNodeList.item(n); ++n) {
  /*
    if (script.src != "") {
      scriptLoads[0]++;
      loadUrl(script.src, function(request) {
        if (request.readyState == 4) {
	  try { // Mozilla is being funky..
            if (request.status == 200)
	      globalEval(request.responseText);
	  } catch(e) {
	  }
          scriptLoads[0]--;
	  */
	  /* If done loading all, then execute all. */
	  /*
	  if (scriptLoads[0] == 0) {
            var i;
	    for (i = 0; script = scriptNodeList.item(i); ++i)
	      globalEval(script.innerHTML);
	  }
	}
      });
    }
    */
  }

  /* If done loading all, then execute all. */
  if (scriptLoads[0] == 0) {
    var i;
    for (i = 0; script = scriptNodeList.item(i); ++i) {
      globalEval(script.innerHTML);
    }
  }
  
}

function loadUrlToElement(url, element) {
  var changeFunction = function(request) { requestChangeToElement(request, element); }
  loadUrl(url, changeFunction);
}

function loadUrlToElementAndDo(url, element, onLoad) {
  var changeFunction = function(request) {
  	requestChangeToElementAndDo(request, element, onLoad);
  };
  loadUrl(url, changeFunction);
}	

function submitUrl(url) {
	return loadUrl(url, function(){} );
}

function loadUrl(url, changeFunction) {
  var request;
  if (window.XMLHttpRequest) request = new XMLHttpRequest(); //Mozilla
  else if (window.ActiveXObject) request = new ActiveXObject("Microsoft.XMLHTTP"); //I.E.

  request.onreadystatechange = function () { changeFunction(request); }
  request.open("GET", url, true);

  if (window.XMLHttpRequest) request.send(null);
  else if (window.ActiveXObject) request.send();
}

function requestChangeToElement(request, element) {
  if (request.readyState == 4) {
    if (request.status == 200) {
      //var scripts = request.responseText.extractScripts();
      element.innerHTML = request.responseText;
      evalScripts(element);
      //for (var i = 0; i < scripts.length; ++i) {
        //alert(scripts[i]);
        //globalEval(scripts[i]);
      //}
    }
  }
}

function requestChangeToElementAndDo(request, element, onLoad) {
  if (request.readyState == 4) {
    if (request.status == 200) {
      //element.innerHTML = request.responseText;
      //evalScripts(element);
      //var scripts = request.responseText.extractScripts();
      element.innerHTML = request.responseText;
      evalScripts(element);
      //for (var i = 0; i < scripts.length; ++i) {
        //alert(scripts[i]);
        //globalEval(scripts[i]);
      //}
      onLoad();
    }
  }
}

function attributesFromForm(obj) {
  var getstr = "";
  for (i=0; i<obj.childNodes.length; i++) {
    //getstr += obj.childNodes[i].tagName + ', ';
    if (obj.childNodes[i].tagName == "INPUT") {
      if (obj.childNodes[i].type == "text") {
        getstr += obj.childNodes[i].name + "=" + obj.childNodes[i].value + "&";
      }
      if (obj.childNodes[i].type == "checkbox") {
        if (obj.childNodes[i].checked) {
          getstr += obj.childNodes[i].name + "=" + obj.childNodes[i].value + "&";
        } else {
          getstr += obj.childNodes[i].name + "=&";
        }
      }
      if (obj.childNodes[i].type == "radio") {
        if (obj.childNodes[i].checked) {
          getstr += obj.childNodes[i].name + "=" + obj.childNodes[i].value + "&";
        }
      }
    } else if (obj.childNodes[i].tagName == "SELECT") {
      var sel = obj.childNodes[i];
      getstr += sel.name + "=" + sel.options[sel.selectedIndex].value + "&";
    } else if (obj.childNodes[i].tagName == "DIV") getstr += attributesFromForm(obj.childNodes[i]);
  }
  return getstr;
}

function attributesFromForm2(obj, debug) {
  var result = obj.id + ':';
  for (i=0; i<obj.childNodes.length; i++) {
    //getstr += obj.childNodes[i].tagName + ', ';
    if (obj.childNodes[i].tagName == "INPUT") {
      if (obj.childNodes[i].type == "text") {
        getstr += obj.childNodes[i].name + "=" + obj.childNodes[i].value + "&";
      }
      if (obj.childNodes[i].type == "checkbox") {
        if (obj.childNodes[i].checked) {
          getstr += obj.childNodes[i].name + "=" + obj.childNodes[i].value + "&";
        } else {
          getstr += obj.childNodes[i].name + "=&";
        }
      }
      if (obj.childNodes[i].type == "radio") {
        if (obj.childNodes[i].checked) {
          getstr += obj.childNodes[i].name + "=" + obj.childNodes[i].value + "&";
        }
      }
    } else if (obj.childNodes[i].tagName == "SELECT") {
      var sel = obj.childNodes[i];
      getstr += sel.name + "=" + sel.options[sel.selectedIndex].value + "&";
    } else if (obj.childNodes[i].tagName == "DIV") result += attributesFromForm2(obj.childNodes[i], debug);
  }
  debug.innerHTML = debug.innerHTML + result;
}
