/*
* detaHttpRequest.js
* Copyright (c) 2006 Detacom Business Applications BV
* Written by André E. Veltstra
* Last Modified: 2006-11-16
*/

function isArray(obj) {
return(obj.join);
}

function detaHttpRequestErrorCallback() { return false; }

function detaHttpRequest(PageID, arrExtraQuery, strReceivingElementName) {
if ((PageID)&&(strReceivingElementName)) {
var strRequest = new String('/smartsite.dws?'+'id='+PageID);
if ((arrExtraQuery)&&(isArray(arrExtraQuery))) {
strRequest = strRequest + '&' + String(arrExtraQuery.join('&'));
} else if ((arrExtraQuery)&&(arrExtraQuery.length)&&(arrExtraQuery.length>0)) {
strRequest = strRequest + '&' + String(arrExtraQuery);
}
if (strRequest) {
try { 
executeHTTPRequest(strRequest, strReceivingElementName, 10000, false, detaHttpRequestErrorCallback, undefined);
} catch(e) { 
return false; 
}
}
}
}

/*
* httpRequest.js
* Copyright (c) 2005 Smartsite Software BV
* Written by Marc van Neerven
* Last Modified: 27 july 2005
*/

function HTTPRequest() {}
HTTPRequest.create = function (safe) {

try {
if (!safe && window.XMLHttpRequest) {
var req = new XMLHttpRequest();
if (req.readyState == null) { // Implement readyState+onreadystate (older versions of Moz)
req.readyState = 1;
req.addEventListener("load", function () {
req.readyState = 4;
if (typeof req.onreadystatechange == "function") req.onreadystatechange();
}, false);
}
return req;
}
if (!safe && window.ActiveXObject) return new ActiveXObject(getXmlHttpPrefix() + ".XmlHttp");
}
catch (ex) {}

// fallback
var x = this;


this.open = function(method, url, async){x.url = url};

this.send = function(form){
var _url;
if(form){_url = x.url; x.url = "/res/blank.html";};

var f = document.createElement("span");
var name = escape(x.url + "_" + new Date().getMilliseconds().toString());
f.done = function(s){
x.readyState=4;
if(s==null){
x.status=501;x.statusText="Cross domain calls not allowed in safe mode";
}
else{ 
x.status=200;x.statusText="Ok";
}
x.responseText=s;x.onreadystatechange();document.body.removeChild(f)
if(form){
form.action=form.oAction;
form.target=form.oTarget;
}
};
x.readyState=1;
f.innerHTML = '<iframe name="'+ name +'" onload="try{var s = window.frames[\'' + 
name + '\'].document.body.innerHTML}catch(ex){s=null}; var p=this.parentNode;p.done(s);" src="'+ x.url +'"></iframe>';

f.style.display="none";

document.body.appendChild(f);

if(form){
form.oMethod=form.method;form.oAction=form.action;form.oTarget=form.target;
form.method="POST"; form.action = _url; form.target=name;
form.submit();
}
}
return this;
}

// create xmlhttp object and start loading
function executeHTTPRequest(url, el, timeout, safe, errcallback, form) { 
if(typeof(el)=="string"){
var t=document.getElementById(el);
if(t)el=t;else el = new Function(t);
}
var startTime=new Date();
var isf = (typeof(el)=="function");
if(el){
if(!isf){if(el.loading)return;
el.loading = true};
}
var _method = "GET", _data=null;
if(form){
_method = "POST"
if(typeof(form)=="string"){
safe=false; // force activex/xmlhttp
}
else{
safe=true; // post form in iframe
}
_data = form;
}

var xmlHttp = HTTPRequest.create(safe), _tmr;

if(typeof(errcallback)!="function"){
if(errcallback==undefined){
errcallback = function(c,m){throw new Error(c, m)}
}
else if(errcallback==null){
errcallback = function(c,m){}
}
}

var _ex = function(c, m){
try{
xmlHttp.onreadystatechange = function(){};xmlHttp = null;
}
catch(ex){};
errcallback(c, m);
}


try{
xmlHttp.open(_method, url, true); // async
}
catch(ex){
errcallback(ex.number, "Error opening '" + url + "':\n" + ex.description);
return;
}


xmlHttp.onreadystatechange = function () {
if (xmlHttp.readyState == 4){
if(_tmr) clearTimeout(_tmr);

if(xmlHttp.status==200){
if(isf){
el(xmlHttp.responseText);
}
else if(el){
el.loaded=true; el.loading=false;

if(el.value!=null) {
try{
el.value=xmlHttp.responseText;
}
catch(ex){_ex(3452, "Error setting element value after HTTP Request to '" + url + "':\n" + ex.description)}
}
else{
try{
el.innerHTML=xmlHttp.responseText;
}
catch(ex){_ex(3453, "Error setting element innerHTML after HTTP Request to '" + url + "':\n" + ex.description)}
}
}
else{
try{
eval(xmlHttp.responseText);
}
catch(ex){_ex(3454, "Error executing return value of HTTP Request to '" + url + "':\n" + ex.description)}
}
}else{_ex(3455, "Error executing HTTP Request to '" + url + "':\nResponse status is '" + xmlHttp.status + " " + xmlHttp.statusText + "'")};
}
}

if(timeout) {
var _err = function(){_ex(3450, "Timeout expired for HTTP Request to '" + url + "'")};
_tmr = setTimeout(_err, timeout);
}
window.setTimeout(function () {xmlHttp.send(_data)}, 1);
}

function getXmlHttpPrefix() {
if (getXmlHttpPrefix.prefix) return getXmlHttpPrefix.prefix;
var o, prefixes = ["MSXML2", "Microsoft", "MSXML", "MSXML3"];
for (var i = 0; i < prefixes.length; i++) {
try {
o = new ActiveXObject(prefixes[i] + ".XmlHttp");
return getXmlHttpPrefix.prefix = prefixes[i];
}
catch (ex) {};
}
throw new Error("Could not find an installed XML parser");
}
