    var dataDiv = "";
    var serverCall = null;
    var servercalldone = false;

    function getdataMutex() {
        if (servercalldone) {
            getdata(serverurl, target, contenttype, calltype);
        }
    }

    function getdata(serverurl, target, contenttype, calltype) { //contenttype = 'text/xml' or 'text/html' calltype='GET' or 'POST'
        
        servercalldone = false;
        dataDiv = target;

        try {
            serverCall = window.XMLHttpRequest ? new XMLHttpRequest() :
  		new ActiveXObject("Microsoft.XMLHTTP");
        }
        catch (e)
        {
            if (target !== "")
            {
                if (notNull(dataDiv)) {
                    document.getElementById(dataDiv).innerHTML = "Your Browser is not compatible with this application. Please use an alternative browser and try again. Sorry for any inconvenience this may cause.";
                }
            } 
        }

        if (serverCall.overrideMimeType) {
            if (contenttype) {
                serverCall.overrideMimeType(contenttype);
            } else {
                serverCall.overrideMimeType('text/xml');
            }
        }

        if (serverurl !== "") {
            var nd = new Date();
            var ndSet = nd.getTime();
            
            if ( (serverurl.indexOf('.htm') > -1) || ( serverurl.indexOf('.html') > -1) ) {
                
                serverurl = serverurl;

            } else {

            if  (serverurl.indexOf('?') > -1) {
                    serverurl = serverurl + "&sessionCall=" + ndSet;
                } else {
                    serverurl = serverurl + "?sessionCall=" + ndSet;
                }
            }
        }

        serverCall.onreadystatechange = datafound; // when request finished, call the function to put result to destination DIV

        if (calltype == "POST") {
            serverCall.open("POST", serverurl, true);
            serverCall.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
            serverCall.send(body);

        } else {
            serverCall.open("GET", serverurl, true);
        }

        serverCall.send(null);
        servercalldone = true;
        return false;
    }

    function notNull(t) {
        if (document.getElementById(t) != null) {
            return true;
        } else {
            return false;
        }
    }

    function datafound()
    { // put data returned by requested URL to selected page DIV and handle errors
        if (serverCall.readyState == 4)
        {

            if (serverCall.status == 200)
            {

                if (serverCall.responseText !== "") {
                    if (contenttype == "text/html") {
                        if (notNull(dataDiv)) {
                            document.getElementById(dataDiv).innerHTML = serverCall.responseText;
                        }
                    } else {
                       
                        try {

                            eval(serverCall.responseText);

                        }
                        catch (e) {
                            statusText = "JSON Error/STB Online";
                            if (contenttype == "text/html") {
                                if (notNull(dataDiv)) {
                                    document.getElementById(dataDiv).innerHTML = statusText;
                                }
                            }
                        }
                    }
                }

                servercalldone = true;

            } else if (serverCall.status == 404) {
                statusText = "File Not Found";
                if (contenttype == "text/html") {
                    if (notNull(dataDiv)) {
                        document.getElementById(dataDiv).innerHTML = statusText;
                    }
                }
                serverCall.abort();
                serverCall = null;
                servercalldone = true;

            } else if (serverCall.status == 500) {
                statusText = "SQL Data Error";
                if (contenttype == "text/html") {
                    if (notNull(dataDiv)) {
                        document.getElementById(dataDiv).innerHTML = statusText;
                    }
                }
                serverCall.abort();
                serverCall = null;
                servercalldone = true;

            } else {

                statusText = "IIS Connection Fail/Aborted, Retrying Connection in 8 seconds";
                if (contenttype == "text/html") {
                    if (notNull(dataDiv)) {
                        document.getElementById(dataDiv).innerHTML = statusText;
                    }
                }
                serverCall.abort();
                serverCall = null;
                servercalldone = true;

                setTimeout(getdataMutex, 8000);

            }

        }
    }
