// v 3.0
var expectedHash = "";
var id_history = "_body";
var defaultBody = 'home.php';

function goAnchor(id_elem){
  document.getElementById(id_elem).scrollIntoView(true);
}

function launchJavascript(responseText){
  // RegExp from prototype.sonio.net
  var ScriptFragment = '(?:<script.*?>)((\n|.)*?)(?:</script>)';
           
  var match    = new RegExp(ScriptFragment, 'img');
  var scripts  = responseText.match(match);

  if(scripts){
    var js = '';
    for(var s = 0; s < scripts.length; s++){
      var match = new RegExp(ScriptFragment, 'im');
      js += scripts[s].match(match)[1];
    }

    eval(js);
  }
}

function getIFrameDocument(){
  var historyFrame = document.getElementById('a_iframe');
  var doc = historyFrame.contentDocument;
  if(doc == undefined) // Internet Explorer sucks!
    doc = historyFrame.contentWindow.document;

  return doc;
}

function getHistory(){
  handleHistory(id_history);
  window.setInterval("handleHistory(id_history)", 1500);
  return true;
}

function detectBrowser(){
  var browser = navigator.appName;
  if(browser == "Netscape")
    return 'FF';
  if(browser == "Microsoft Internet Explorer")
    return 'IE';
}

// Converts the hash to a valid URL adding the right file extensions
function convertHash(){
  if(expectedHash != ""){
    if(expectedHash.indexOf('?') != -1){
      return expectedHash.replace('?', '.php?');
    }else{
      return expectedHash + '.php';
    }
  }else{
    return defaultBody;
  }
}

function handleHistory(){

  // Manage the browser history changes, or URL changes for IE and FF (look at all the IE crap I had to do!)
  if(detectBrowser() == 'IE'){
    var iframedHash = getIFrameDocument();

    iframedHash = iframedHash.body.innerHTML.replace('&amp;', '&');

    if(iframedHash != expectedHash){
	  window.location.hash = iframedHash;
      expectedHash = iframedHash;
      loadURL = convertHash();
      a_load(loadURL, id_history);
    }else if(window.location.href.match(/\#.*$/)[0].substring(1) != expectedHash){
      createHistory(window.location.href.match(/\#.*$/)[0].substring(1));
      expectedHash = window.location.href.match(/\#.*$/)[0].substring(1);
      loadURL = convertHash();
      a_load(loadURL, id_history);
    }
  }else{
    if(window.location.hash.substring(1) != expectedHash){
      expectedHash = window.location.hash.substring(1);
      loadURL = convertHash();
      a_load(loadURL, id_history);
	}
  }
  
}

function createHistory(newHash){
  newHash = newHash.replace('.php', '');

  // Creates the right history input for the IE crap (iframe hack)
  if(detectBrowser() == 'IE'){
    var doc = getIFrameDocument();   
    doc.open();
    doc.write(newHash);
    doc.close();
  }

  window.location.hash = newHash;

  if(detectBrowser() == 'IE')
    expectedHash = window.location.href.match(/\#.*$/)[0].substring(1);
  else
    expectedHash = window.location.hash.substring(1);
}

function a_load(url, id_div, makeHistory){
  var _ajax=newAJAX();

  if((makeHistory == true) && (url != "")){
    createHistory(url);
  }

  _url=url;
  _ajax.open("GET",_url,true);
  _ajax.onreadystatechange=function(){
  if(_ajax.readyState==4){
    document.getElementById(id_div).innerHTML=_ajax.responseText;
    launchJavascript(_ajax.responseText);
    document.getElementById("loading").style.visibility="hidden";
  }else{
    document.getElementById("loading").style.visibility="visible";
  }
  }
  _ajax.send(null);
}

function a_post(url, id_div, form_id, makeHistory){
  _parameters=getFormValues(form_id);
  var _ajax=newAJAX();

  if(makeHistory==true){
    createHistory(url);
  }

  _url=url;

  _ajax.open("POST",_url,true);
  _ajax.onreadystatechange=function(){
  if(_ajax.readyState==4){
    document.getElementById(id_div).innerHTML=_ajax.responseText;
    document.getElementById("loading").style.visibility="hidden";
  }else{
    document.getElementById("loading").style.visibility="visible";
  }
  }
  _ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
  _ajax.send(_parameters)
}

function getFormValues(form_id){
  fobj=document.getElementById(form_id);
  var str = "";
  var valueArr = null;
  var val = "";
  var cmd = "";
  for(var i = 0;i < fobj.elements.length;i++){
    switch(fobj.elements[i].type){
      case "textarea":
        str += fobj.elements[i].name + "=" + escape(fobj.elements[i].value) + "&";
        break;

      case "text":
        str += fobj.elements[i].name + "=" + escape(fobj.elements[i].value) + "&";
        break;

      case "hidden":
        str += fobj.elements[i].name + "=" + escape(fobj.elements[i].value) + "&";
        break;
		
      case "password":
        str += fobj.elements[i].name + "=" + escape(fobj.elements[i].value) + "&";
        break;

      case "checkbox":
        if(fobj.elements[i].checked)
          str += fobj.elements[i].name + "=" + escape(fobj.elements[i].value) + "&";
        break;

      case "radio":
        if(fobj.elements[i].checked)
          str += fobj.elements[i].name + "=" + escape(fobj.elements[i].value) + "&";
        break;

      case "select-one":
        str += fobj.elements[i].name + "=" + fobj.elements[i].options[fobj.elements[i].selectedIndex].value + "&";
        break;
    }
  }
  str = str.substr(0,(str.length - 1));
  return str;
}

function newAJAX(){
  var xmlhttp=false;
  try{
    // Creacion del objeto AJAX para navegadores no IE
    xmlhttp=new ActiveXObject("Msxml2.XMLHTTP");
  }
  catch(e){
    try{
      //Creacion del objet AJAX para IE
      xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    } 
    catch(E) { xmlhttp=false; }
  }
  if (!xmlhttp && typeof XMLHttpRequest!='undefined') { xmlhttp=new XMLHttpRequest(); }

  return xmlhttp;
}
