function getElementsByClass(searchClass,node,tag) {
    var classElements = new Array();
    if ( node == null )
        node = document;
    if ( tag == null )
        tag = '*';
    var els = node.getElementsByTagName(tag);
    var elsLen = els.length;
    var pattern = new RegExp('(^|\\s)'+searchClass+'(\\s|$)');
    for (i = 0, j = 0; i < elsLen; i++) {
        if ( pattern.test(els[i].className) ) {
            classElements[j] = els[i];
            j++;
        }
    }
    return classElements;
}

function sameHeight(className){				
    var classElements = new Array();
    var maxHeight=0;
    classElements = getElementsByClass(className);
    maxHeight=0;
    for(var i=0; i<classElements.length; i++){
        if(maxHeight < classElements[i].offsetHeight){
            maxHeight = classElements[i].offsetHeight;
        }
        else if(maxHeight < classElements[i].pixelHeight){
            maxHeight = classElements[i].pixelHeight;
        }
    }
    for(var i=0; i<classElements.length; i++){
        classElements[i].style.height = maxHeight + 'px';
    }
}

function fontOutline(className){
    var classElements = new Array();
    var htmlContent = '';
    var newHtml = '';


    classElements = getElementsByClass(className);

    for(i=0; i<classElements.length; i++){
        htmlContent = classElements[i].innerHTML;
        newHtml='';
        for (j=0; j<8; j++){
            if (j==0)
                newHtml = newHtml + "<span style='position:absolute; top:2px; left:0px'>" + htmlContent + "</span>";
            else if (j==1)
                newHtml = newHtml + "<span style='position:absolute; top:1px; left:1px'>" + htmlContent + "</span>";
            else if (j==2)
                newHtml = newHtml + "<span style='position:absolute; top:0px; left:2px'>" + htmlContent + "</span>";
            else if (j==3)
                newHtml = newHtml + "<span style='position:absolute; top:-1px; left:1px'>" + htmlContent + "</span>";
            else if (j==4)
                newHtml = newHtml + "<span style='position:absolute; top:-2px; left:0px'>" + htmlContent + "</span>";
            else if (j==5)
                newHtml = newHtml + "<span style='position:absolute; top:-1px; left:-1px'>" + htmlContent + "</span>";
            else if (j==6)
                newHtml = newHtml + "<span style='position:absolute; top:0px; left:-2px'>" + htmlContent + "</span>";
            else if (j==7)
                newHtml = newHtml + "<span style='position:absolute; top:1px; left:-1px'>" + htmlContent + "</span>"
        }
        classElements[i].innerHTML = newHtml;
    }
}


/**
 * Define bind function if not exists
 */
Function.prototype.bind = Function.prototype.bind || function(scope) {
    var _function = this;

    return function() {
        return _function.apply(scope, arguments);
    }
}

function hasClass(ele,cls) {
    return ele.className.match(new RegExp('(\\s|^)'+cls+'(\\s|$)'));
}

function addClass(ele,cls) {
    if (!this.hasClass(ele,cls)) ele.className += " "+cls;
}

function removeClass(ele,cls) {
    if (hasClass(ele,cls)) {
        var reg = new RegExp('(\\s|^)'+cls+'(\\s|$)');
        ele.className=ele.className.replace(reg,' ');
    }
}



/**
 * Unobstrusive windows onload - adds new function, preserves the old ones
 */
function addLoadEvent(func) {
    var oldOnLoad = window.onload;
    if (typeof window.onload != 'function') {
        window.onload = func;
    } else {
        window.onload = function() {
            if (oldOnLoad) {
                oldOnLoad();
            }
            func();
        }
    }
}

function isInteger(n) {
    return !isNaN(parseInt(n)) && isFinite(n);
}

function isPositiveInteger(n, strict) {
    strict = strict || true;
    return isInteger(n) && ((strict && n > 0) || (!strict && n >= 0));
}


var parser;
var parserX;
if (window.ActiveXObject) {
    parserX=new ActiveXObject("Microsoft.XMLDOM");
} else {
    parser=new DOMParser();
}
function getXmlDoc(text, isUrl) {
    if (window.ActiveXObject) {
        var doc=parserX;
        doc.async="false";
        if (isUrl) {
            doc.load(text);
        } else {
            doc.loadXML(text);
        }
    } else {
        try {
            if (isUrl) {
                doc=document.implementation.createDocument("","",null);
                doc.load(text);
            } else {
                var doc=parser.parseFromString(text,"text/xml");
            }
        } catch(e) {
        //alert("text : " + text + "\ne : " + e);
        }
    }
    return doc;
}

function getNodeValue(Node) {
    return navProp.isIe?Node.text:Node.firstChild.nodeValue;
}

function inArray(needle, haystack) {
    var length = haystack.length;
    for(var i = 0; i < length; i++) {
        if(haystack[i] == needle) return true;
    }
    return false;
}


function getUrlVars() {
    var vars = {};
    var parts = window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi, function(m,key,value) {
        vars[key] = value;
    });
    return vars;
}

