
// Show - hide the next sibling of element head
// useful for expanding/collapsing blocks
function showHide(head,changeElem) {
    content = head.nextSibling;
    while (content.nodeType != 1) {
        content = content.nextSibling;
    }
    if (content.style.display != "none") {
        content.style.display = "none";
        if (changeElem != null) { changeElem.className = "plus"; }
    } else {
        content.style.display = "block";
        if (changeElem != null) { changeElem.className = "minus"; }
    }
}

function show(element) {
    element.style.display = "block";
    element.scrollIntoView();
}

function setFormValue(form, field, value, prefix) 
{
	if (typeof prefix != 'string') { prefix = 'filter'; }
    if (document.forms[form] && document.forms[form].elements[prefix+"["+field+"]"]) {
        document.forms[form].elements[prefix+"["+field+"]"].value = value;
    }
}

function submitForm(form) {
    if (document.forms[form]) {
        document.forms[form].submit();
    }
}

function resetForm(form) {
    if (document.forms[form]) {
        document.forms[form].reset();
    }
}

var ajaxRequestRunning = false;
var ajaxFormName = false;
var ajaxTarget = false;
function submitAjaxForm(formName, target) {
    var obj, targetTag;
    if (!(obj = document.getElementById(formName))) { alert('Can\'t find formName'); return; }
    if (!(targetTag = document.getElementById(target))) { alert('Can\'t find target'); return; }

    // If request is not running, then init new request
    if (!ajaxRequestRunning) {
        ajaxRequestRunning = true;
        ajaxFormName = formName;
        ajaxTarget = target;
        setTimeout("submitAjaxForm(ajaxFormName, ajaxTarget);", 800);
        // TODO Omschrijven zodat als de timer is ingegaan er nog acties toegevoegd kunnen worden
        // aan de request. De request wordt uiteindelijk pas na 800 ms uitgevoerd
        return;
    } /*else {
        // If request is running, add action to queue
    }*/

    getstr="";
    for (i=0; i<obj.elements.length; i++) {

        if (obj.elements[i].tagName == "INPUT" || obj.elements[i].tagName == "TEXTAREA") {

            if (obj.elements[i].type == "checkbox") {
                if (obj.elements[i].checked) {
                    getstr += obj.elements[i].name + "=" + encodeURIComponent(obj.elements[i].value) + "&";
                } else {
                    getstr += obj.elements[i].name + "=&";
                }
            }
            else if (obj.elements[i].type == "radio") {
                if (obj.elements[i].checked) {
                      getstr += obj.elements[i].name + "=" + encodeURIComponent(obj.elements[i].value) + "&";
                }
            }
            else  {
                   getstr += obj.elements[i].name + "=" + encodeURIComponent(obj.elements[i].value).replace(/%u20AC/, '%80') + "&";
            }
         }
        if (obj.elements[i].tagName == "SELECT") {
            var sel = obj.elements[i];
            getstr += sel.name + "=" + encodeURIComponent(sel.options[sel.selectedIndex].value) + "&";
        }

    }
    var divs = targetTag.getElementsByTagName('div');
    for (i=divs.length-1; i>=0; i--) {
        if (divs[i].className == "shopMessage") {
            divs[i].parentNode.removeChild(divs[i]);
        }
    }

    var xmlObj = new XMLRequestObject(obj.action, getstr , updateControl);
    xmlObj.setTarget(target);
    xmlObj.setLoadMethod('replacekids');
    xmlhttpPost(xmlObj);
    ajaxRequestRunning = false;
}

function loadForm2(view, action, id, langId, target, session_name, session_id, extraParams ) {
    if (!(targetTag = document.getElementById(target))) { return; }
    if (targetTag.getAttribute("loaded") == "1") { return; }
    targetTag.setAttribute("loaded", "1");
    //targetTag.innerHTML = "Bezig met laden...";

    var xmlObj = new XMLRequestObject('/file_handler/modules/PSM/ShoppingManagement/language.php',
                        'shop[view]=' + view + '&shop[action]=' + action + "&shop[id]=" + id +
                        "&shop[langId]=" + langId +"&"+session_name+"="+session_id + extraParams,
                        updateControl);
    xmlObj.setTarget(target);
    xmlObj.setLoadMethod('replacekids');
    xmlhttpPost(xmlObj);
}
function loadForm(view, action, id, langId, target, session_name, session_id, extraParams ) {
    loadForm2(view, action, id, langId, target, session_name, session_id, '' );
}

function UpdateControl() {
    this.executeUpdate = function(xmlObj) {
        var target = document.getElementById(xmlObj.getTarget);
        var doc, div, node;
        div = document.createElement('div');
        div.innerHTML = xmlObj.getData();

        //Check voor het filteren van xml definitie in mozilla
        if (!( doc = div.childNodes[0]).tagName) doc = div.childNodes[1];
        if (doc.getAttribute('type') == "error") { alert("Er is een fout opgetreden!\nFoutmelding: " + doc.innerHTML); return;}

        //target element
        var tar = document.getElementById(xmlObj.getTarget());

        //teller voor childnodes
        var i =0;

        switch(xmlObj.getLoadMethod())
        {
            case "replacekids":
                tar.innerHTML = doc.innerHTML;
                break;
            case "firstkid":
                for (i=doc.childNodes.length-1;i>=0;i--) {
                    node = tar.insertBefore(doc.childNodes[i].cloneNode(true), doc.childNodes[0]);
                }
                break;
            case "lastkid":
                for (i=0;i<doc.childNodes.length;i++) {
                    node = tar.appendChild(doc.childNodes[i].cloneNode(true));
                }
                break;
            case "before":
                node = tar.parentNode.insertBefore(doc, tar);
                break;
            default: break;
        }

        // Evaluate the scripts in the result data
        var y = div.getElementsByTagName('script');
        for ( var i=0; i < y.length; i++ ) {
            eval( y[i].text );
        }
    }
}

function XMLRequestObject(strUrl, strSubmit, updateObj) {
    this.url = strUrl;
    this.submitData = strSubmit;
    this.updateObj = updateObj;
    this.data = "";
    this.target = "";
    this.loadMethod = "";

    this.getUrl = function() { return (this.url); };
    this.getSubmitData = function() { return (this.submitData); };
    this.getUpdateObj = function() { return (this.updateObj); };
    this.setData = function(data) { this.data = data; };
    this.getData = function() { return (this.data); };
    this.setTarget = function(target) { return (this.target = target); }
    this.getTarget = function() { return (this.target); }
    this.setLoadMethod = function(method) { this.loadMethod = method; }
    this.getLoadMethod = function () { return (this.loadMethod) ; }
}

function xmlhttpPost(xmlObj) {

    var xmlHttpReq = false;

    // Voor Mozilla, Opera en Safari gebruiken we XMLHttpRequest.
    if (window.XMLHttpRequest) {
      xmlHttpReq = new XMLHttpRequest();
    }
    // Internet Explorer gebruikt een ActiveX Object
    else if (window.ActiveXObject) {
      xmlHttpReq = new ActiveXObject("Microsoft.XMLHTTP");
    }

    // We gebruiken de POST methode om gegevens te versturen.
    // T.o.v. de GET methode is het voordeel hierbij dat je de data
    // niet aan de url hoeft te plakken.
    xmlHttpReq.open('POST', xmlObj.getUrl(), true);
    xmlHttpReq.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');

    // Callback functie die aangeroepen wordt wanneer de status van het HttpRequest object veranderd is.
    xmlHttpReq.onreadystatechange = function() {
        // readyState 4 betekent dat de request compleet is
        if (xmlHttpReq.readyState == 4) {
            if (xmlHttpReq.status == 200) {		// status 200 betekent dat de pagina goed ontvangen is
                xmlObj.setData(xmlHttpReq.responseText);
                xmlObj.getUpdateObj().executeUpdate(xmlObj);
            }
            else {
                // Pagina is niet goed ontvangen, response afhandelen;
            }
        }
    }
    xmlHttpReq.send(xmlObj.getSubmitData());
}


var updateControl = new UpdateControl();
