var ajax = {};
ajax.debug = false;
ajax.activeCall = false;
ajax.doRequest = function(url,loadingAni) {
  if (loadingAni) {
    ajax.setLoadingAni(true);
  }
  var now = new Date();

  var data = '';
  if (url.indexOf('?') != -1) {
    data = url.split('?')[1];
    url = url.split('?')[0];
  }

  var req = crossBrowser.getXMLHttpRequest();
  if (!req) {
    alert('Unfortunatelly you browser doesn\'t support this feature.');
    return false;
  }
  ajax.activeCall = true;

  req.onreadystatechange = function() {
    if (req.readyState == 4) {
      if (req.status == 200) {
        if (ajax.debug) {
          alert(req.responseText);
        }
        if (req.getResponseHeader('Content-Type').indexOf('text/xml') != -1) {
          try {
            ajax.processResponseXML(req.responseXML.documentElement);
          } catch (ex) {
            alert('Sorry: XML-Error...');
          }
        } else {
          if (req.getResponseHeader('Content-Type').indexOf('text/javascript') != -1) {
            try {
              eval(req.responseText);
            } catch (ex) {
              alert("Invalid javascript:\n"+ex.number+"\n"+ex.message+"\n"+req.responseText);
            }
          }
        }
      } else {
        alert(req.status);
      }
      ajax.setLoadingAni(false);
      ajax.activeCall = false;
    }
  };

  req.open('POST', url, true);
  req.setRequestHeader('Method', 'POST '+url+' HTTP/1.1');
  req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
  req.setRequestHeader('101010_2_42', now.getTime());
  req.send(data);
};
ajax.setLoadingAni = function(state) {
  if (!$('ajaxLoadingMsg')) {
    domHelpers.addElement(window.document.body,'div',{'id':'ajaxLoadingMsg','style':"width:105px; height:150px; position:absolute; top:0px; left:0px; z-index:10000; display:none; background-color:#D8D9E5; border:2px solid #46415C;"},{'img':{'attributes':{'src':'/toonagent/misc/pics/general/loading.gif','alt':'loading'},childs:{}}});
  }
  var p = $('ajaxLoadingMsg');
  if (state) {
    p.style.display = '';
    var lt = objHelpers.getCenterObj(p);
    p.style.left = lt.l+'px';
    p.style.top = lt.t+'px';
  } else {
    p.style.display = 'none';
  }
};
ajax.getFormData = function(id) {
  var p = $(id);
  if (!p) {
    return '';
  }

  var params = '';
  for (var anzE = p.elements.length, i = 0; i < anzE; i++) {
    if (((p.elements[i].type == 'checkbox' || p.elements[i].type == 'radio') && p.elements[i].checked === false) || !p.elements[i].name) {
      continue;
    }

    if (p.elements[i].multiple === true) {
      for (var anzO = p.elements[i].options.length, j = 0; j < anzO; j++) {
        if (p.elements[i].options[j].selected === true) {
          params += '&'+p.elements[i].name+'='+encodeURIComponent(p.elements[i].options[j].value);
        }
      }
      continue;
    }

    params += '&'+p.elements[i].name+'='+encodeURIComponent(p.elements[i].value);
  }
  return params;
};
ajax.getArrayData = function(array,arrayName) {
  var params = '';
  for (var i in array) {
    if (typeof array[i] == 'object') {
      params += ajax.getArrayData(array[i],arrayName+'['+i+']');
    } else {
      params += '&'+arrayName+'['+i+']='+encodeURIComponent(array[i]);
    }
  }
  return params;
};
ajax.processResponseXML = function(xmlR) {
  try {
    for (var anzN = xmlR.childNodes.length, i = 0; i < anzN; i++) {
      if (xmlR.childNodes[i].nodeName == 'sourcetext') {
        return false;
      }
      if (xmlR.childNodes[i].nodeName == 'response') {
        var INode = xmlR.childNodes[i];

        switch (INode.getAttribute('type')) {
        case 'javascript':
          for (var anzC = INode.childNodes.length, j = 0; j < anzC; j++) {
            if (INode.childNodes[j].nodeName == 'object') {
              try {
                eval(INode.childNodes[j].firstChild.nodeValue);
              } catch(exx) {
                alert("Invalid javascript:\n"+exx.number+"\n"+exx.message+"\n"+INode.childNodes[j].firstChild.nodeValue);
              }
            }
          }
          break;

        case 'html':
          for (var anzC = INode.childNodes.length, j = 0; j < anzC; j++) {
            if (INode.childNodes[j].nodeName == 'object') {
              try {
                var disposition = INode.childNodes[j].getAttribute('disposition');
                $(disposition).innerHTML = INode.childNodes[j].firstChild.nodeValue;
              } catch(exx) {
                alert("Invalid content:\n"+e.message+"\n"+INode.childNodes[j].firstChild.nodeValue);
              }
            }
          }
          break;

        default:
          alert("Unknown:"+INode.getAttribute('type'));
          break;
        }
      }
    }
  } catch(ex) {
    return false;
  }
  return true;
};

var ajaxnavi = {};
ajaxnavi.timer = null;
ajaxnavi.actualHash = '';
ajaxnavi.init = function() {
  ajaxnavi.load();
};
ajaxnavi.load = function() {
  if (crossBrowser.is_ie) {
    var newHash = decodeURIComponent(window.frames['ajaxIeNavi'].window.location.search.substring(1));
    if (window.location.hash.replace('#','') != newHash) {
      window.location.hash = newHash;
    }
  } else {
    var newHash = window.location.hash;
  }
  if (newHash == ajaxnavi.actualHash) {
    ajaxnavi.timer = window.setTimeout(ajaxnavi.load,500);
    return;
  }
  ajaxnavi.actualHash = newHash;
  newHash = newHash.replace('#','');
  if (newHash != '' && newHash != 'top') {
    ajax.doRequest('/toonagent/calls/indexAjax?'+newHash,true);
  }

  if (!crossBrowser.is_ie) {
    ajaxnavi.timer = window.setTimeout(ajaxnavi.load,500);
  }
};
ajaxnavi.setHash = function(hash) {
  clearTimeout(ajaxnavi.timer);
  if (crossBrowser.is_ie) {
    ajaxnavi.actualHash = hash.replace('#','');
    window.frames['ajaxIeNavi'].window.location.search = '?'+encodeURIComponent(ajaxnavi.actualHash);
    window.location.hash = ajaxnavi.actualHash;
  } else {
    ajaxnavi.actualHash = hash;
    if (!crossBrowser.is_safari) {
      window.location.hash = hash;
    } else {
      window.location.hash = hash.replace('#','');
    }
    ajaxnavi.timer = window.setTimeout(ajaxnavi.load,500);
  }
};