YAHOO.namespace('com.metrojobb');

YAHOO.com.metrojobb.Common = function() {
};

YAHOO.com.metrojobb.Common.prototype = {

    redirect : function(contextPath, returnPath) {
        var path = contextPath + '/';
        var homePath = 'recruiter/home.do';
        var editPath = 'recruiter/ad/edit.do';
        var publishPath = 'recruiter/ad/publish.do';
        var indexPath = 'index.do';
        if (returnPath === 'home') {
            path += homePath;
        } else if (returnPath === 'jobadedit') {
            path += editPath;
        } else if (returnPath.substring(0, 7) === 'publish') {
            var params = returnPath.substring(7, returnPath.length);
            path += publishPath + params;
        } else {
            path += indexPath;
        }
        parent.window.location = path;
    },

    checkPreviewPopup : function(path, showPreviewPopup, title) {
        if (showPreviewPopup === 'true') {
            YAHOO.com.metrojobb.common.popwin(path, title);
        }
        return false;
    },

    hideOpenPreviewWindow : function(element) {
        if (element.window.opener) {
            element.window.opener.YAHOO.util.Dom.setStyle('openPreviewWindow',
                    'display', 'none');
        }
        return false;
    },

    popwin : function(url, title) {
        var newwin = window
                .open(url, title,
                        'width=750,height=600,status=0,resizable=true,scrollbars=yes,location=no');
        if (newwin) {
            newwin.focus();
        }
    },

    changeDisplay : function(id) {
        if (YAHOO.util.Dom.getStyle(id, 'display') === 'none') {
            YAHOO.util.Dom.setStyle(id, 'display', 'block');
        } else {
            YAHOO.util.Dom.setStyle(id, 'display', 'none');
        }
    },

    toggleClass : function(id, className) {
        if (YAHOO.util.Dom.hasClass(id, className)) {
            YAHOO.util.Dom.removeClass(id, className);
        } else {
            YAHOO.util.Dom.addClass(id, className);
        }
    },

    showPublicationPrice : function(ctx) {
        var index = YAHOO.util.Dom.get('jobAdPublicationPricesId').value;

        var handleSuccess = function(o) {
            if (o.responseText !== undefined) {
                document.getElementById('jobAdPublicationPricesInfo').innerHTML = o.responseText;
            }
        };
        var handleFailure = function(o) {
        };
        var callback = {
            success : handleSuccess,
            failure : handleFailure
        };
        var url = ctx + '/ad/showPublicationPrice.do?index=' + index;
        YAHOO.util.Connect.asyncRequest('GET', url, callback);
    },

    addRemoveJobAd : function(ctx, id) {
        var cb = document.getElementById(id);

        var handleSuccess = function(o) {
            // not handled
        };
        var handleFailure = function(o) {
            // not handled
        };
        var callback = {
            success : handleSuccess,
            failure : handleFailure
        };

        var url = null;
        if (cb.checked) {
            url = ctx + '/jobads/add.do?id=' + id;
        } else {
            url = ctx + '/jobads/remove.do?id=' + id;
        }

        YAHOO.util.Connect.asyncRequest('GET', url, callback);
    },

    clearSelectedJobAds : function(ctx) {
        var handleSuccess = function(o) {
        };
        var handleFailure = function(o) {
        };
        var callback = {
            success : handleSuccess,
            failure : handleFailure
        };

        var url = ctx + '/jobads/reset.do';
        YAHOO.util.Connect.asyncRequest('GET', url, callback);
    },

    populateCountForNode : function(node, prefix, onlyIfChecked, checkBoxGroup) {
        if (onlyIfChecked) {
            var group = document.getElementsByName(checkBoxGroup);
            var checkedStr = YAHOO.com.metrojobb.common
                    .retrieveCheckboxValues(group);
            var check = checkedStr.split(",");
        }
        for (i = 0; i < node.length; i++) {
            var updateCurrent = true;
            // If we only are too update selected nodes.
            if (onlyIfChecked) {
                updateCurrent = false;
                if (node[i].facetId == checkBoxGroup) {
                    for (j = 0; j < check.length; j++) {
                        if (node[i].id == check[j]) {
                            updateCurrent = true;
                        }
                    }
                }
            }
            // is true for selected if not onlyIfChecked is false
            /*
             * Removed facet count for now if(updateCurrent) {
             * document.getElementById(prefix + node[i].facetId + '-' +
             * node[i].id).innerHTML = node[i].count; }
             */
        }
    },

    initFacetCount : function(json, type) {
        if (type.length > "all".length) {
            type = type.substr(type.indexOf("-") + 1, 1);
        }
        var searchResult;
        try {
            searchResult = json;
            var prefix = "cnt-";
            YAHOO.com.metrojobb.common.populateCountForNode(searchResult.c1,
                    prefix, true, "c1");
            YAHOO.com.metrojobb.common.populateCountForNode(searchResult.c2,
                    prefix, true, "c2");
            YAHOO.com.metrojobb.common.populateCountForNode(searchResult.r1,
                    prefix, true, "r1");
            YAHOO.com.metrojobb.common.populateCountForNode(searchResult.r2,
                    prefix, true, "r2");
            YAHOO.com.metrojobb.common.populateCountForNode(searchResult.r3,
                    prefix, true, "r3");
            YAHOO.com.metrojobb.common.populateCountForNode(searchResult.e1,
                    prefix, true, "e1");

            if (type == "all") {
                prefix = "tot-";
                YAHOO.com.metrojobb.common.populateCountForNode(
                        searchResult.c1, prefix, false, "c1");
                YAHOO.com.metrojobb.common.populateCountForNode(
                        searchResult.c2, prefix, false, "c2");
                YAHOO.com.metrojobb.common.populateCountForNode(
                        searchResult.r1, prefix, false, "r1");
                YAHOO.com.metrojobb.common.populateCountForNode(
                        searchResult.r2, prefix, false, "r2");
                YAHOO.com.metrojobb.common.populateCountForNode(
                        searchResult.r3, prefix, false, "r3");
                YAHOO.com.metrojobb.common.populateCountForNode(
                        searchResult.e1, prefix, false, "e1");
            }
            document.getElementById('total').innerHTML = searchResult.total;
            if (searchResult.total == 0) {
                document.getElementById('submit-box').style.display = "none";
                document.getElementById('agent-box').style.display = "block";
            } else {
                document.getElementById('submit-box').style.display = "block";
                document.getElementById('agent-box').style.display = "none";
            }
        } catch (x) {
            alert("Failed reading json result!" + x);
            return;
        }
    },
    getTotalCountValue : function() {
        var value = document.getElementById('total').innerHTML
        if (!isNaN(parseInt(value))) {
            return parseInt(value);
        } else {
            return undefined;
        }
    },

    retrieveCheckboxValues : function(checkBoxGroup) {
        var selectedValues = "";
        for (i = 0; i < checkBoxGroup.length; i++) {
            if (checkBoxGroup[i].checked) {
                selectedValues += checkBoxGroup[i].value + ",";
            }
        }
        if (selectedValues.length > 1) {
            return selectedValues.substring(0, selectedValues.length - 1);
        } else {
            return "";
        }
    },

    resetCountForNode : function(facetId, id) {
        // alert("facetId " + facetId + " id " + id);
        var prefix = "cnt-";
        document.getElementById(prefix + facetId + '-' + id).innerHTML = "";
    },

    checkParentFacets : function(type, level, id, chk) {
        if (level > 1) {
            var tmpId = "";
            tmpId = id.substr(0, id.lastIndexOf('-'));
            var parentId = tmpId.substr(0, tmpId.lastIndexOf('-'));
            var parentCheckbox = document.getElementById(parentId);
            if (chk && !parentCheckbox.checked) {
                parentCheckbox.checked = chk;
            } else if (!chk && parentCheckbox.checked) {
                var group = document.getElementsByName(type + level);
                var uncheckParent = true;
                for (i = 0; i < group.length; i++) {
                    var node = group[i].id;
                    if (node.indexOf(tmpId) >= 0 && group[i].checked) {
                        uncheckParent = false;
                    }
                }
                if (uncheckParent) {
                    parentCheckbox.checked = chk;
                    /*
                     * if(!chk) { // parentId == cb-c1-1
                     * YAHOO.com.metrojobb.common.resetCountForNode( type +
                     * (level-1),parentId.substr(parentId.lastIndexOf('-')+1,
                     * parentId.length)); }
                     */
                }
            }
            if (level > 2) {
                YAHOO.com.metrojobb.common.checkParentFacets(type, level - 1,
                        parentId, chk);
            }
        }
    },

    checkChildFacets : function(type, level, value, checked) {
        var childLevel = parseInt(level) + 1;
        var children = document.getElementsByName(type + childLevel);
        if (level != 1) {
            var ad = true;
            for (i = 0; i < children.length; i++) {
                if (ad) {
                    ad = false;
                }
                var nodeId = children[i].id;
                if (nodeId.indexOf("-" + type + level + "-" + value + "-"
                        + type + childLevel + "-") >= 0) {
                    children[i].checked = checked;
                    /*
                     * if(!checked) {
                     * YAHOO.com.metrojobb.common.resetCountForNode(type +
                     * childLevel, nodeId.substr(nodeId.lastIndexOf('-')+1,
                     * nodeId.length)); }
                     */
                }
            }
        } else {
            var childChildLevel = parseInt(childLevel) + 1;
            var childChildren = document.getElementsByName(type
                    + childChildLevel);
            for (i = 0; i < children.length; i++) {
                var nodeId = children[i].id;
                if (nodeId.indexOf("cb-" + type + level + "-" + value + "-"
                        + type + childLevel + "-") >= 0) {
                    children[i].checked = checked;
                    /*
                     * if(!checked) {
                     * YAHOO.com.metrojobb.common.resetCountForNode(type +
                     * childLevel, nodeId.substr(nodeId.lastIndexOf('-')+1,
                     * nodeId.length)); }
                     */
                }
            }
            for (i = 0; i < childChildren.length; i++) {
                var nodeId = childChildren[i].id;
                if (nodeId.indexOf("cb-" + type + level + "-" + value + "-"
                        + type + childLevel + "-") >= 0) {
                    childChildren[i].checked = checked;
                    /*
                     * if(!checked) {
                     * YAHOO.com.metrojobb.common.resetCountForNode(type +
                     * (parseInt(childLevel) +1),
                     * nodeId.substr(nodeId.lastIndexOf('-')+1, nodeId.length)); }
                     */
                }
            }
        }
    },

    checkAllFacets : function(type, checked) {
        if (type == "all") {
            YAHOO.com.metrojobb.common.checkAllFacets("e", checked);
            YAHOO.com.metrojobb.common.checkAllFacets("r", checked);
            YAHOO.com.metrojobb.common.checkAllFacets("c", checked);
        } else {
            depth = 1;
            if (type == "c") {
                depth = 2;
            }
            if (type == "r") {
                depth = 3;
            }
            for (i = depth; i > 0; i--) {
                var items = document.getElementsByName(type + i);
                for (j = 0; j < items.length; j++) {
                    items[j].checked = checked;
                    /*
                     * if(!checked) {
                     * YAHOO.com.metrojobb.common.resetCountForNode(type + i,
                     * items[j].id.substr(items[j].id.lastIndexOf('-')+1,
                     * items[j].id.length) ) }
                     */
                }
            }
        }
    },

    checkFacets : function(id) {
        var cb = document.getElementById(id);
        var type = id.substr(id.indexOf('-') + 1, 1);
        var level = id.substr(id.lastIndexOf('-') - 1, 1);
        if (type == "c") {
            if (level == 1) {
                YAHOO.com.metrojobb.common.checkChildFacets(type, level,
                        cb.value, cb.checked);
            } else {
                YAHOO.com.metrojobb.common.checkParentFacets(type, level, id,
                        cb.checked);
            }
        }
        if (type == "r") {
            if (level == 1) {
                YAHOO.com.metrojobb.common.checkChildFacets(type, level,
                        cb.value, cb.checked);
            } else if (level == 2) {
                YAHOO.com.metrojobb.common.checkParentFacets(type, level, id,
                        cb.checked);
                YAHOO.com.metrojobb.common.checkChildFacets(type, level,
                        cb.value, cb.checked);
            } else {
                YAHOO.com.metrojobb.common.checkParentFacets(type, level, id,
                        cb.checked);
            }
        }
        /*
         * if(!cb.checked) {
         * YAHOO.com.metrojobb.common.resetCountForNode(type+level,
         * id.substr(id.lastIndexOf('-') + 1, id.length)); }
         */
    },

    updateFacetCount : function(ctx, id) {
        // use to check
        YAHOO.com.metrojobb.common.checkFacets(id);
        var type = id.substr(id.indexOf('-') + 1, 1);

        var c1Group = document.getElementsByName('c1');
        var c2Group = document.getElementsByName('c2');
        var r1Group = document.getElementsByName('r1');
        var r2Group = document.getElementsByName('r2');
        var r3Group = document.getElementsByName('r3');
        var e1Group = document.getElementsByName('e1');

        var c1Checked = YAHOO.com.metrojobb.common
                .retrieveCheckboxValues(c1Group);
        var c2Checked = YAHOO.com.metrojobb.common
                .retrieveCheckboxValues(c2Group);
        var r1Checked = YAHOO.com.metrojobb.common
                .retrieveCheckboxValues(r1Group);
        var r2Checked = YAHOO.com.metrojobb.common
                .retrieveCheckboxValues(r2Group);
        var r3Checked = YAHOO.com.metrojobb.common
                .retrieveCheckboxValues(r3Group);
        var e1Checked = YAHOO.com.metrojobb.common
                .retrieveCheckboxValues(e1Group);

        var handleSuccess = function(o) {
            var searchResult;
            // Use the JSON Utility to parse the data returned from the server
            try {
                searchResult = YAHOO.lang.JSON.parse(o.responseText);
                YAHOO.com.metrojobb.common.initFacetCount(searchResult, id);
            } catch (x) {
                alert("JSON Parse failed!" + x);
                return;
            }
        };

        var handleFailure = function(o) {
            // no error handling
        };

        var callback = {
            success : handleSuccess,
            failure : handleFailure
        };

        var url = ctx + '/ad/search/advancedFacetSearch.do?' + 'c1='
                + c1Checked + '&c2=' + c2Checked + '&r1=' + r1Checked + '&r2='
                + r2Checked + '&r3=' + r3Checked + '&e1=' + e1Checked;
        YAHOO.util.Connect.asyncRequest('GET', url, callback);
    },

    initSimpleFacetCount : function(ctx, id, facetString) {
        var type = id.substr(id.indexOf('-') + 1, 1);
        var handleSuccess = function(o) {
            var searchResult;
            // Use the JSON Utility to parse the data returned from the server
            try {
                searchResult = YAHOO.lang.JSON.parse(o.responseText);
                YAHOO.com.metrojobb.common.initFacetCount(searchResult, id);
            } catch (x) {
                // do nothing
                // alert("JSON Parse failed!" + x);
                return;
            }
        };
        var handleFailure = function(o) {
            // no error handling
        };
        var callback = {
            success : handleSuccess,
            failure : handleFailure
        };
        var url = ctx + '/ad/search/advancedFacetSearch.do?' + facetString;
        YAHOO.util.Connect.asyncRequest('GET', url, callback);
    },

    updateSimpleFacetCount : function(ctx, id, facetString) {
        // use to check
        // YAHOO.com.metrojobb.common.checkFacets(id);
        var type = id.substr(id.indexOf('-') + 1, 1);

        var e1Group = document.getElementsByName('e1');
        var e1Checked = YAHOO.com.metrojobb.common
                .retrieveCheckboxValues(e1Group);

        var handleSuccess = function(o) {
            var searchResult;
            // Use the JSON Utility to parse the data returned from the server
            try {
                searchResult = YAHOO.lang.JSON.parse(o.responseText);
                YAHOO.com.metrojobb.common.initFacetCount(searchResult, id);
            } catch (x) {
                alert("JSON Parse failed!" + x);
                return;
            }
        };

        var handleFailure = function(o) {
            // no error handling
        };

        var callback = {
            success : handleSuccess,
            failure : handleFailure
        };

        var url = ctx + '/ad/search/advancedFacetSearch.do?' + facetString;
        if (facetString.length > 0) {
            url += '&';
        }
        url += 'e1=' + e1Checked;
        YAHOO.util.Connect.asyncRequest('GET', url, callback);
    },

    buildQueryPart : function(prefix, checkedString) {
        var url = "";
        var check = checkedString.split(",");
        var last = check.length - 1;
        for (i = 0; i < check.length; i++) {
            url += prefix + "=" + check[i];
            if (i != last) {
                url += "&";
            }
        }
        return url;
    },

    buildJobAgentString : function() {

        var c1Group = document.getElementsByName('c1');
        var c2Group = document.getElementsByName('c2');
        var r1Group = document.getElementsByName('r1');
        var r2Group = document.getElementsByName('r2');
        var r3Group = document.getElementsByName('r3');
        var e1Group = document.getElementsByName('e1');

        var c1Checked = YAHOO.com.metrojobb.common
                .retrieveCheckboxValues(c1Group);
        var c2Checked = YAHOO.com.metrojobb.common
                .retrieveCheckboxValues(c2Group);
        var r1Checked = YAHOO.com.metrojobb.common
                .retrieveCheckboxValues(r1Group);
        var r2Checked = YAHOO.com.metrojobb.common
                .retrieveCheckboxValues(r2Group);
        var r3Checked = YAHOO.com.metrojobb.common
                .retrieveCheckboxValues(r3Group);
        var e1Checked = YAHOO.com.metrojobb.common
                .retrieveCheckboxValues(e1Group);
        var url = YAHOO.com.metrojobb.common.buildQueryPart('c1', c1Checked)
                + '&'
                + YAHOO.com.metrojobb.common.buildQueryPart('c2', c2Checked)
                + '&'
                + YAHOO.com.metrojobb.common.buildQueryPart('r1', r1Checked)
                + '&'
                + YAHOO.com.metrojobb.common.buildQueryPart('r2', r2Checked)
                + '&'
                + YAHOO.com.metrojobb.common.buildQueryPart('r3', r3Checked)
                + '&'
                + YAHOO.com.metrojobb.common.buildQueryPart('e1', e1Checked);

        var form = document.getElementById('agentform');
        var jobAgentQuery = form.elements['query'];
        jobAgentQuery.value = url;
    },

    buildSimpleJobAgentString : function(jobAgentString) {
        var e1Group = document.getElementsByName('e1');
        var e1Checked = YAHOO.com.metrojobb.common
                .retrieveCheckboxValues(e1Group);
        var url = jobAgentString;
        if (url != null && url.length > 0) {
            url += '&';
        }
        url += YAHOO.com.metrojobb.common.buildQueryPart('e1', e1Checked);

        var form = document.getElementById('agentform');
        var jobAgentQuery = form.elements['query'];
        jobAgentQuery.value = url;
    },

    setMailAFriendId : function(id) {
        if (id != null) {
            var form = document.getElementById('mail_friend_form');
            var jobAgentQuery = form.elements['id'];
            jobAgentQuery.value = id;
        }
    },

    submitIndexSearchForm : function(url, countryId) {
        var form = document.getElementById('indexSearchForm');
        if (countryId.length > 0) {
            var field = document.createElement("input");
            field.setAttribute("type", "hidden");
            field.setAttribute("name", "countryId");
            field.setAttribute("value", countryId);
            form.appendChild(field);
        }
        if (url.indexOf("?") > 0) {
            var tmpStr = url.substr(url.indexOf("?") + 1, url.length)
            if (tmpStr.indexOf("&") > 0) {
                var tmp = tmpStr.split("&");
                for (i = 0; i < tmp.length; i++) {
                    var id = tmp[i].split("=");
                    if (id.length == 2) {
                        if (id[0] != "r1" || countryId.length <= 0) {
                            var field = document.createElement("input");
                            field.setAttribute("type", "hidden");
                            field.setAttribute("name", id[0]);
                            field.setAttribute("value", id[1]);
                            form.appendChild(field);
                        }
                    }
                }
            } else if (tmpStr.indexOf("=") > 0) {
                var id = tmpStr.split("=");
                if (id.length == 2) {
                    if (id[0] != "r1" || countryId.length <= 0) {
                        var field = document.createElement("input");
                        field.setAttribute("type", "hidden");
                        field.setAttribute("name", id[0]);
                        field.setAttribute("value", id[1]);
                        form.appendChild(field);
                    }
                }
            }
        }
        form.setAttribute('action', url);
        form.submit();
    }
};
YAHOO.com.metrojobb.common = new YAHOO.com.metrojobb.Common();

function externalizeLinks() {
    if (!document.getElementsByTagName) {
        return;
    }
    var anchors = document.getElementsByTagName("a");
    for ( var i = 0; i < anchors.length; i++) {
        var anchor = anchors[i];
        if (anchor.getAttribute("href")
                && anchor.getAttribute("rel") == "external") {
            anchor.target = "_blank";
        }
    }
}

function queryValidate(defaultValue) {
    if (document.getElementById("inputQuery").value == defaultValue) {
        document.getElementById("inputQuery").value = "";
    }
    return true;
}
