﻿// alert("FunctionExtentions.js loaded!");

var $ = document;

document.getElementsByClassName = function(cl) {
    var retnode = [];
    var myclass = new RegExp('\\b' + cl + '\\b');
    var elem = this.getElementsByTagName('*');
    for (var i = 0; i < elem.length; i++) {
        var classes = elem[i].className;
        if (myclass.test(classes)) retnode.push(elem[i]);
    }
    return retnode;
}
function getElementsByAttributeOld(property, value, parentElement) {
    var allElements = document.getElementsByTagName("*");
    alert(allElements.length);
    var items = [];
    for(var i=0,j=allElements.length; i<j; i++) {
        if(allElements[i].getAttribute(property) == value) { items.push(allElements[i]); }
    }
    return items;
}

function getElementsByAttribute(oElm, strTagName, strAttributeName, strAttributeValue) {
    if (oElm == "*") { oElm = document; }
    // alert("1: " + oElm.outerHTML);
    var arrElements = (strTagName == "*" && document.all) ? document.all : oElm.getElementsByTagName(strTagName);
    var arrReturnElements = [];
    var oAttributeValue = (typeof strAttributeValue != "undefined") ? new RegExp("(^|\\s)" + strAttributeValue + "(\\s|$)") : null;
    var oCurrent;
    var oAttribute;
    for (var i = 0; i < arrElements.length; i++) {
        oCurrent = arrElements[i];
        oAttribute = oCurrent.getAttribute(strAttributeName);
        if (typeof oAttribute == "string" && oAttribute.length > 0) {
            if (typeof strAttributeValue == "undefined" || (oAttributeValue && oAttributeValue.test(oAttribute))) {
                arrReturnElements.push(oCurrent);
            }
        }
    }
    for (xx = 0; xx < arrReturnElements.length; xx++) { /* alert("2: \n" + xx + "\n\n" + arrReturnElements[xx].outerHTML); */ }
    return arrReturnElements;
}

function fnMakeRequest(sURL, sMethod, bAsync, fHandler) {
    if (window.XMLHttpRequest) { // Mozilla, Safari,...
        http_request = new XMLHttpRequest();
    } else if (window.ActiveXObject) { // IE
        http_request = new ActiveXObject("Microsoft.XMLHTTP");
    }
    http_request.onreadystatechange = fHandler; // alertContents;
    http_request.open(sMethod, sURL, bAsync);
    http_request.send(null);
}

function GetWidth() {
    var x = 0;
    if (self.innerHeight) {
    x = self.innerWidth;
    } else if (document.documentElement && document.documentElement.clientHeight) {
        x = document.documentElement.clientWidth;
    } else if (document.body) {
        x = document.body.clientWidth;
    }
    return x;
}

function GetHeight() {
    var y = 0;
    if (self.innerHeight) {
        y = self.innerHeight;
    } else if (document.documentElement && document.documentElement.clientHeight) {
        y = document.documentElement.clientHeight;
    } else if (document.body) {
    y = document.body.clientHeight;
    }
    return y;
}

function AddClass(oElm, sClass) {
    RemoveClass(oElm, sClass); return oElm && (oElm.className += (oElm.className.length > 0 ? ' ' : '') + sClass);
}

function RemoveClass(oElm, sClass) {
    return oElm && (oElm.className = oElm.className.replace(new RegExp("^" + sClass + "\\b\\s*|\\s*\\b" + sClass + "\\b", 'g'), ''));
}

function ClassExists(oElm, sClass) {
    return (!oElm || !oElm.className) ? false : (new RegExp("\\b" + sClass + "\\b")).test(oElm.className);
}

function XHConn() {
    var cacheavoidance = Math.floor(Math.random() * 9999999999)
    
    var xmlhttp, bComplete = false;
    try { xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); }
    catch (e) {
        try { xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); }
        catch (e) {
            try { xmlhttp = new XMLHttpRequest(); }
            catch (e) { xmlhttp = false; } 
        } 
    }
    if (!xmlhttp) return null;
    this.connect = function(sURL, sMethod, sVars, fnDone) {
        sVars += "&cacheAvoidance=" + cacheAvoidance;
        
        if (!xmlhttp) return false;
        bComplete = false;
        sMethod = sMethod.toUpperCase();

        try {
            if (sMethod == "GET") {
                xmlhttp.open(sMethod, sURL + "?" + sVars, true);
                sVars = "";
            }
            else {
                xmlhttp.open(sMethod, sURL, true);
                xmlhttp.setRequestHeader("Method", "POST " + sURL + " HTTP/1.1");
                xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
            }
            xmlhttp.onreadystatechange = function() {
                if (xmlhttp.readyState == 4 && !bComplete) {
                    bComplete = true;
                    fnDone(xmlhttp);
                } 
            };
            xmlhttp.send(sVars);
        }
        catch (z) { return false; }
        return true;
    };
    return this;
}

function loadXMLDoc(fname, bAsync) {
    var xmlDoc;
    // code for IE
    if (window.ActiveXObject) {
        xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
    }
    // code for Mozilla, Firefox, Opera, etc.
    else if (document.implementation && document.implementation.createDocument) {
        xmlDoc = document.implementation.createDocument("", "", null);
    }
    else {
        alert('Your browser cannot handle this script');
    }
    xmlDoc.async = bAsync;
    xmlDoc.load(fname);
    return (xmlDoc);
}

function updateStylesheets() {
        var i,a,s;
        a=document.getElementsByTagName('link');
        for(i=0;i<a.length;i++) {
                s=a[i];
                if(s.rel.toLowerCase().indexOf('stylesheet')>=0&&s.href) {
                        var h=s.href.replace(/(&|\\?)forceReload=d /,'');
                        s.href=h+(h.indexOf('?')>=0?'&':'?')+'forceReload='+(new Date().valueOf());
                }
        }
}
