var CompanyBox = {

    /**
     * if (document.getElementsByClassName) { } function call goes here...
     * @param {Object} className
     * @param {Object} tag
     * @param {Object} elm
     */
    dgEBCN: function(className, tag, elm) {
        elm = elm || document;
        var elements = elm.getElementsByClassName(className),
                nodeName = (tag) ? new RegExp("\\b" + tag + "\\b", "i") : null,
                returnElements = [],
                current;
        for (var i = 0, il = elements.length; i < il; i += 1) {
            current = elements[i];
            if (!nodeName || nodeName.test(current.nodeName)) {
                returnElements.push(current);
            }
        }
        return returnElements;
    },

    /**
     * if (document.evaluate) { } function call goes here...
     * @param {Object} className
     * @param {Object} tag
     * @param {Object} elm
     */
    dE: function(className, tag, elm) {
        tag = tag || "*";
        elm = elm || document;
        var classes = className.split(" "),
                classesToCheck = "",
                xhtmlNamespace = "http://www.w3.org/1999/xhtml",
                namespaceResolver = (document.documentElement.namespaceURI === xhtmlNamespace) ? xhtmlNamespace : null,
                returnElements = [],
                elements,
                node;
        for (var j = 0, jl = classes.length; j < jl; j += 1) {
            classesToCheck += "[contains(concat(' ', @class, ' '), ' " + classes[j] + " ')]";
        }
        try {
            elements = document.evaluate(".//" + tag + classesToCheck, elm, namespaceResolver, 0, null);
        }
        catch (e) {
            elements = document.evaluate(".//" + tag + classesToCheck, elm, null, 0, null);
        }
        while ((node = elements.iterateNext())) {
            returnElements.push(node);
        }
        return returnElements;
    },

    /**
     * if (document.evaluate) { } function call goes here...
     * @param {Object} className
     * @param {Object} tag
     * @param {Object} elm
     */
    dF: function(className, tag, elm) {
        tag = tag || "*";
        elm = elm || document;
        var classes = className.split(" "),
                classesToCheck = [],
                elements = (tag === "*" && elm.all) ? elm.all : elm.getElementsByTagName(tag),
                current,
                returnElements = [],
                match;
        for (var k = 0, kl = classes.length; k < kl; k += 1) {
            classesToCheck.push(new RegExp("(^|\\s)" + classes[k] + "(\\s|$)"));
        }
        for (var l = 0, ll = elements.length; l < ll; l += 1) {
            current = elements[l];
            match = false;
            for (var m = 0, ml = classesToCheck.length; m < ml; m += 1) {
                match = classesToCheck[m].test(current.className);
                if (!match) {
                    break;
                }
            }
            if (match) {
                returnElements.push(current);
            }
        }
        return returnElements;
    },

    /**
     * Overrides/Implements the getElementsByClassName
     * @param {Object} className
     * @param {Object} tag
     * @param {Object} elm
     */
    getElementsByClassName: function(className, tag, elm) {
        if (document.getElementsByClassName) {
            // function dgEBCN
            return CompanyBox.dgEBCN(className, tag, elm);
        }
        else if (document.evaluate) {
            // function dE
            return CompanyBox.dE(className, tag, elm);
        }
        else {
            // function dF
            return CompanyBox.dF(className, tag, elm);
        }
    },


    /**
     * Links to an iframe
     */
    linksToIframe: function() {

        var companyBox = CompanyBox.getElementsByClassName('e-companybox'),
                links,
                companyBoxLength = companyBox.length,
                i,
                url,
                title,
                data,
                siteName,
                ratingTargetId,
                style = 1;

        for (i = 0; i < companyBoxLength; i += 1) {
            companyBox[i].id = 'e-companybox' + i;
            data = companyBox[i].className.split(' ')[1].split('-');
            links = CompanyBox.getElementsByClassName('e-link', 'a', document.getElementById('e-companybox' + i));
            if (data.length === 3 && links.length === 2) {
                siteName = data[0];
                switch (siteName){
                    case "rejta":
                        url = "http://www.rejta.se/inbaddad/";
                        title = "Rejta.se - l\u00e4s och skriv omd\u00f6men om f\u00f6retag";
                        break;
                    case "dethitter":
                        url = "http://www.dethitter.dk/i_frame/";
                        title = "detHitter.dk - l\u00e6s og skriv brugeranmeldelser om danske firmaer";
                        break;
                    case "anbefalt":
                        url = "http://www.anbefalt.no/i_frame/";
                        title = "Anbefalt.no - lese og skrive brukeranmeldelser av norske bedrifter";
                        break;
                    default:
                        url = "";
                }
                if (url.length > 0){
                    ratingTargetId = data[1];
                    style = data[2];
                    companyBox[i].innerHTML = '<iframe frameborder="0" scrolling="no" src="' + url + ratingTargetId + '/' + style + '" allowtransparency="true" height="125px" width="200px" title="' + title + '"></iframe>';
                }
            }
        }
    },

    /**
     * Initialize CompanyBox Object
     */
    initialize: function() {
        // Call the method..
        CompanyBox.linksToIframe();
    }
};
CompanyBox.initialize();
