/*
 * araschnia ajax manage functions
 */

var nocache=1;
var loadedobjects="";
var rootdomain="http://"+window.location.hostname;
var bustcacheparameter="";

function ajaxclose(id) {
 // close ajax box
 if(id == '' || id == null) id = 'sboxcontent';
 fade_from_to(id,100,0,300,0,1);
}

function pageopenerror()
{
 alert('ERROR: Could not open a HTTP request.\nIf you use the internet explorer browser you have to activate \'activex controls\' and \'activex plugins\' in your browser settings\n(or set your browser security level to \'middle\').\n Otherwise you cannot use araschnia.com website.'); 
}

// display a wait icon while loading ajax
var waitcnt=0;
function ajaxshowwait() { 
 waitcnt++; 
 var w=document.getElementById('ajaxwait');
 w.style.left=x_pos-60+'px';
 w.style.top=y_pos+15+'px'; 
 w.style.display='block';
}
function ajaxhidewait() { 
 waitcnt--; 
 if(waitcnt <= 0) { waitcnt=0; document.getElementById('ajaxwait').style.display='none'; }
}


// loads url content to container, get request
function ajaxload(url, containerid, vleft, vtop) {

 var pageget = false;
 var pageopenerr = false;
 
 if (window.XMLHttpRequest) { pageget = new XMLHttpRequest() }
 else if (window.ActiveXObject) { 
  try { pageget = new ActiveXObject("Msxml2.XMLHTTP"); } 
  catch (e) { 
   try { pageget = new ActiveXObject("Microsoft.XMLHTTP"); }
   catch (e) { }
  }
 }
 else 
 {
    alert('ERROR: XMLHTTP (GET)');
    return false
 }

 ajaxshowwait();
 pageget.onreadystatechange=function() { loadpage(pageget, containerid, vleft, vtop); }
 if (nocache) bustcacheparameter=(url.indexOf("?")!=-1)? "&"+new Date().getTime() : "?"+new Date().getTime()
 try  { pageget.open('GET', url+bustcacheparameter, true); }
 catch (e) { 
   pageopenerr=true;
   pageopenerror();
 }
 if(!pageopenerr) pageget.send(null);
}


var vleft_last=0;
var vtop_last=0;

// function to print a page request to the container
function loadpage(pageget, containerid, vleft, vtop)
{

 if(!vleft || vleft == 'undefined') vleft=vleft_last;
 if(!vtop || vtop == 'undefined') vtop=vtop_last;
 vleft_last=vleft;
 vtop_last=vtop;
 
 if (pageget.readyState == 4) {
  setTimeout('ajaxhidewait();',200);
  if(pageget.status==200 || window.location.href.indexOf("http")==-1)
  {   
   document.getElementById(containerid).style.top=vtop+'px';
   document.getElementById(containerid).style.left=vleft+'px';
   try { 
     document.getElementById(''+containerid).innerHTML=pageget.responseText; 
     runJavascript(pageget.responseText);
     fade_from_to(''+containerid,0,100,500,0,1);
   }
   catch(e) { alert('Sorry, the current version of your internet browser is too old or has bugs. Please upgrade the version of your browser to a newer one.'); }
  }
  else alert('Sorry, cannot loading the content from araschnia.com. Seems to be a connection problem. Please try again later or check your connection.');
 }
}

// loads extern js or cs files in ajax content
function loadobjs(){
 if (!document.getElementById) return;
 for (i=0; i<arguments.length; i++) {
  var file=arguments[i]
  var fref=""
  if (loadedobjects.indexOf(file)==-1){ // loaded before ?
   if (file.indexOf(".js")!=-1){ // js file ?
    fref=document.createElement('script');
    fref.setAttribute("type","text/javascript");
    fref.setAttribute("src", file);
   }
   else if (file.indexOf(".css")!=-1){ // css file ?
    fref=document.createElement("link")
    fref.setAttribute("rel", "stylesheet");
    fref.setAttribute("type", "text/css");
    fref.setAttribute("href", file);
   }
  }
  if (fref!=""){
   document.getElementsByTagName("head").item(0).appendChild(fref);
   loadedobjects+=file+" "; // object loaded, remember
  }
 }
}

var pagepost = false;
var http_post_request_containerid = '';

// loads url content to container, post request
function makePOSTRequest(url, parameters, containerid, vleft, vtop) {
 http_post_request_containerid = containerid;
 pagepost = false;
 var pageopenerr = false;
 
 if (window.XMLHttpRequest) { // mozilla,safari,..
  pagepost = new XMLHttpRequest();
  if (pagepost.overrideMimeType) { pagepost.overrideMimeType('text/html'); }
 } else if (window.ActiveXObject) { // ie
  try { pagepost = new ActiveXObject("Msxml2.XMLHTTP"); } 
  catch (e) { try {pagepost = new ActiveXObject("Microsoft.XMLHTTP");} 
  catch (e) {}
  }
 }
 if (!pagepost) {
  alert('ERROR: XMLHTTP (POST)');
  return false;
 }
      
 ajaxshowwait();
 pagepost.onreadystatechange=function() { loadpage(pagepost, containerid, vleft, vtop); }
 try  { pagepost.open('POST', url, true); }
 catch (e) { 
   pageopenerr=true;
   pageopenerror();
 }
 if(!pageopenerr) { 
  pagepost.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
  pagepost.setRequestHeader("Content-length", parameters.length);
  pagepost.setRequestHeader("Connection", "close");
  pagepost.send(parameters);
 }
}

// prefunction for post request  
function getPOSTRequest(URL,fieldsArray,containerid, vleft, vtop) 
{
 var poststr = "";
 for (var i=0; i < fieldsArray.length; ++i) {
  poststr = poststr+"&"+fieldsArray[i]+"="+escape(encodeURI(document.getElementById(fieldsArray[i]).value));
 }
 poststr = poststr.substr(1);
 makePOSTRequest(URL, poststr, containerid, vleft, vtop);
}

// runs javascript in ajax content
function runJavascript(htmlPart) {
 var jsPart;
 while(jsPart = htmlPart.match(/(<script[^>]+javascript[^>]+>\s*(<!--)?)/i)) 
 { 
  htmlPart = htmlPart.substr(htmlPart.indexOf(RegExp.$1) + RegExp.$1.length); 
  if (!(endscript = htmlPart.match(/((\/\/-->)?\s*<\/script>)/))) break; 
  block = htmlPart.substr(0, htmlPart.indexOf(RegExp.$1)); 
  htmlPart = htmlPart.substring(block.length + RegExp.$1.length); 
  var oScript = document.createElement('script'); 
  oScript.text = block; 
  document.getElementsByTagName("head").item(0).appendChild(oScript); 
 } 
}
