function $_(el){
  if(document.getElementById(el))
    return document.getElementById(el);
  return false;
}

function __setRequest(url,div,add) { 
  add = false;
  var req = null;
  // Add time to URL
  url = url + "&time="+new Date().getTime();
  try{
      req = new XMLHttpRequest();
  } catch (ms){
      try{
          req = new ActiveXObject("Msxml2.XMLHTTP");
      } catch (nonms){
          try{
              req = new ActiveXObject("Microsoft.XMLHTTP");
          } catch (failed){
              req = null;
          }
      }
  }
  if (req == null) alert("Error creating request object!");
  req.open("GET", url, true);
    var loader = '<img src="/callback/loading.gif" id="requestCallbackLoadingImage" border="0">';
    var loadDiv = ($_(div)) ? div : $_('requestCallbackFormularDiv');
    loadDiv.innerHTML = loader;
    req.onreadystatechange = function(){  
      switch(req.readyState) {
          case 4:
              if(req.status!=200) {
              }else{
                  if(add == true){
                    $_(div).innerHTML = $_(div).innerHTML+req.responseText;
                  } else {
                    if($_(div)){
                      $_(div).innerHTML = req.responseText;
                    } else {
                      buildFormDiv(req.responseText);
                    }
                    
                  }
              }
            break;
          default: break;
      }
  };
  //req.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
  req.send(null); 
} 

Array.prototype.enthaelt = function(obj) {
  var i, listed = false;
  for (i=0; i<this.length; i++) {
    if (this[i] === obj) {
      listed = true;
      break;
    } 
   }
  return listed;
};


function buildRequest(form){
  var ret = "";
  var allowed = new Array("hidden","text","select-one","submit","reset","textarea");
  for(var i = 0, n = form.elements.length; i<n; i++){
    var type = form.elements[i].type; 
    if(allowed.enthaelt(type)){
      if(form.elements[i].name == 'CallerNumber'){
        form.elements[i].value = form.elements[i].value.replace(/^\+/,"3IPLUS");
      }
      ret = ret + "&"+form.elements[i].name+"="+escape(form.elements[i].value);
    }
  }
  ret = '/callback/callbackTarget.php?'+ret.substr(1);
  //alert(ret);
  __setRequest(ret);
}

var callbackOlDiv = "";
var callbackFormDiv = "";
var callbackLoading = "";
function requestCallback(url){
  // Overlay erzeugen
  var overlayDiv = document.createElement('div');
  overlayDiv.setAttribute("id","requestCallbackOverlayDiv");
  
  // Loading-Gif erzeugen  
  loading = new Image();
  loading.src = "/callback/loading.gif";
  loading.id = "requestCallbackLoadingImage";
  
  document.getElementsByTagName('body')[0].appendChild(overlayDiv);
  document.getElementsByTagName('body')[0].appendChild(loading);
  overlayDiv.onclick = callbackRequest_revert;
  
  callbackOlDiv   = overlayDiv;

  callbackLoading = loading;
  __setRequest(url,'requestCallbackFormularDiv');
}

function callbackRequest_revert() 
{
    if(callbackFormDiv != false){
      document.getElementsByTagName('body')[0].removeChild(callbackFormDiv);
      callbackFormDiv = false;
    }
    if(callbackOlDiv != false){
      document.getElementsByTagName('body')[0].removeChild(callbackOlDiv);
      callbackOlDiv = false;
    }
    if(callbackLoading != false){
      document.getElementsByTagName('body')[0].removeChild(callbackLoading);
      callbackLoading = false;
    }
}

function buildFormDiv(text){
  if(callbackOlDiv != false){
    if(callbackLoading != false){
      document.getElementsByTagName('body')[0].removeChild(callbackLoading)
      callbackLoading = false;
    }
    
    if(!callbackFormDiv){
      // Form-Wrapper erzeugen
      callbackFormDiv = document.createElement('div');
    }
    callbackFormDiv.setAttribute("id","requestCallbackFormularDiv");
    
    if(callbackFormDiv){
      document.getElementsByTagName('body')[0].appendChild(callbackFormDiv);
      callbackFormDiv.innerHTML = text;
    }
  }
}
