/*  
 *  Ajax functions in javascript to call php programs to output to a div or span
 *      
 *      makeGETRequest(span, url, parameters) -> uses GET to transfer parameters
 *          (parameters must start with a '?')
 *      makePOSTRequest(span, url, parameters) -> uses POST to transfer parameters
 *          span -> id value for a div or span to recieve the output data
 *          url ->  the address of the php(or whatever) to output information
 *          parameters -> the string parameters for the url to use 
 *
 *      get(span, url,form) -> uses GET to transfer the form values to the url
 *      post(span, url,form) -> uses POST to transfer the form values to the url
 * 
 * Lextor Design - 2009   lextor@lextordesign.com */
var http_request = false;
var http_span = "";
var spanarray = [0,0];
var junktags = "";

function makeRequest(span, url, parameters) {
    http_request = false;
    http_span = "";
    if (window.XMLHttpRequest) { // Mozilla, Safari,...
         http_request = new XMLHttpRequest();
         if (http_request.overrideMimeType) {
                // set type accordingly to anticipated content type
                //http_request.overrideMimeType('text/xml');
                http_request.overrideMimeType('text/html');
         }
    } else if (window.ActiveXObject) { // IE
         try {
                http_request = new ActiveXObject("Msxml2.XMLHTTP");
         } catch (e) {
                try {
                   http_request = new ActiveXObject("Microsoft.XMLHTTP");
                } catch (e) {}
         }
    }
    if (!http_request) {
         alert('Cannot create XMLHTTP instance');
         return false;
    }
    http_request.span = document.getElementById(span);
    http_request.span.innerHTML = "";
    return true
}

function makeGETRequest(span, url, parameters,lastfunc) {
    if(makeRequest(span, url, parameters) == false) return false;
    http_request.open('GET', url + parameters, true);
    http_request.send(null);
    for(i=0;i<spanarray.length;i++)
        if(spanarray[i] == '' || spanarray[i] == 0 || spanarray[i] == 'undefined') break;
    spanarray[i] = new Addaspan(span,http_request,i,lastfunc);
    http_request.num = i;
    http_request.onreadystatechange = spanarray[i].alertContents;
    return true
}

function makePOSTRequest(span, url, parameters,lastfunc) {
    if(makeRequest(span, url, parameters) == false) return false;
    http_request.open('POST', url, true);
    http_request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    http_request.setRequestHeader("Content-length", parameters.length);
    http_request.setRequestHeader("Connection", "close");
    http_request.send(parameters.replace("+","%25"));
    for(i=0;i<spanarray.length;i++)
        if(spanarray[i] == '' || spanarray[i] == 0 || spanarray[i] == 'undefined') break;
    spanarray[i] = new Addaspan(span,http_request,i,lastfunc);
    http_request.num = i;
    http_request.onreadystatechange = spanarray[i].alertContents;
    return true
}

function Addaspan(span,req,num,lastfunc){
    this.span = span;
    this.request = req;
    this.num = num;
    this.lastfunc = lastfunc;
}

Addaspan.prototype.alertContents=function alertContentsFunction() {
    if (this.readyState == 4) {
        if (this.status == 200) {
            var result = this.responseText;
            this.span.innerHTML = result;
            parseScript(result)
            if(spanarray[this.num].lastfunc){
                eval(spanarray[this.num].lastfunc)
            }
        } else {
            alert('There was a problem with the request.');
        }
        spanarray[this.num] = 0;
    }
}

function parseScript(_source) {
    var source = _source;
    var scripts = new Array();
    while(source.indexOf("<script") > -1 || source.indexOf("</script") > -1) {
        var s = source.indexOf("<script");
        var s_e = source.indexOf(">", s);
        var e = source.indexOf("</script", s);
        var e_e = source.indexOf(">", e);

        scripts.push(source.substring(s_e+1, e));
        source = source.substring(0, s) + source.substring(e_e+1);
    }
    for(var i=0; i<scripts.length; i++) {
       try {
            eval(scripts[i]);
        }
        catch(ex) {
            alert("Script failure\n"+scripts[i]);
         }
    }
    return source;
}

function form2param(obj) {
    var tagtype ="";
    var getstr="";
    var i;
    for (i=0; i<obj.elements.length; i++) {
         junktags += obj.elements[i].tagName + " = " + obj.elements[i].type + " " +  obj.elements[i].name + "\n";
      if(obj.elements[i].tagName==undefined) continue;
      if(obj.elements[i].length > 1 && obj.elements[i].tagName != "SELECT"){
         getstr += form2param(obj.elements[i])
      }else {
//         junktags += obj.elements[i].tagName + " = " + obj.elements[i].type + "\n";
         switch(obj.elements[i].tagName) {
            case "INPUT":
               tagtype ="";
               tagtype = obj.elements[i].type;
               if (tagtype == "text" || tagtype == "hidden" || tagtype == "submit") {
//                 alert(obj.elements[i].tagName + "\n" + tagtype + "\n" + obj.elements[i].name);
                 getstr += obj.elements[i].name + "=" + escape(obj.elements[i].value) + "&";
               } else if (tagtype == "checkbox") {
                 if (obj.elements[i].checked) {
                         getstr += obj.elements[i].name + "=" + escape(obj.elements[i].value) + "&";
                 } else {
                     getstr += obj.elements[i].name + "=&";
                 }
               } else if (tagtype == "radio") {
                 if (obj.elements[i].checked) {
                   getstr += obj.elements[i].name + "=" + escape(obj.elements[i].value) + "&";
                 }
               } //else alert(obj.elements[i].tagName + "\n" + tagtype);
               break;
            case "TEXTAREA":
//                alert(obj.elements[i].name + "=" + escape(obj.elements[i].value))
               getstr += obj.elements[i].name + "=" + escape(obj.elements[i].value) + "&";
               break;
            case "SELECT":
                var sel = obj.elements[i];
                if(sel.multiple)
                    for (ii=0; ii<sel.options.length; ii++) {
                        if (sel.options[ii].selected){
//                            alert(sel.name + "=" + escape(sel.options[sel.selectedIndex].value))
                            getstr += sel.name + "[]=" + escape(sel.options[ii].value) + "&";
                        }
                    }
                else
//                    alert(sel.name + "=" + escape(sel.options[sel.selectedIndex].value))
                    getstr += sel.name + "=" + escape(sel.options[sel.selectedIndex].value) + "&";
                break;
            default:
//                alert(obj.elements[i].tagName + "\n" + tagtype + "\n" + obj.elements[i].name)
                break;
        }
      }
    }
    return getstr;
}

function get(span, ajax,obj) {
    makeGETRequest(span, ajax, "?" + form2param(obj));
}

function post(span, ajax,obj,lastfunc) {
    var unk =  form2param(obj)
    makePOSTRequest(span, ajax,unk,lastfunc);
}

