function holderHeight() {
    tmp = (document.getElementById("holder").offsetHeight - 55) + "px";

    b = document.getElementById("bottom");
    b.style.top = tmp;
}

function vis() {
    if(document.getElementById('cont_pos')) {
        document.getElementById('cont_pos').style.visibility = 'visible';
    }
}

function multilevel(data) {
    for (var i = 0; i < data.length; i++) {
        var spaces = '';
        var level = 0;

        if (data[i].shift > 0) {
            level = data[i].shift;
        } else if (data[i].level > 0) {
            level = data[i].level;
        }
        if (level > 1) {
            for (var j = 1; j < level; j++) {
                spaces += '......';
            }
        }
        data[i].name = spaces + data[i].name;
    }
}

function searchfunc(){
    document.getElementById('div-login').style.display = "none";
    document.getElementById('div-search').style.display = "block";
    document.getElementById('div-browse').style.display = "none";
    document.getElementById('srch').style.background = "url(/_img/bg-tabs-srch-act.gif) top right no-repeat";
    document.getElementById('lgn').style.background = "url(/_img/bg-tabs.jpg) top right no-repeat";
    if (document.getElementById('brws')){
        document.getElementById('brws').style.background = "url(/_img/bg-tabs.jpg) top right no-repeat";
        document.getElementById('brws').style.color = "#88460F";
    }
    document.getElementById('srch').style.color = "#D56E19";
    document.getElementById('lgn').style.color = "#88460F";
}
function loginfunc(){
    document.getElementById('div-login').style.display = "block";
    document.getElementById('div-search').style.display = "none";
    document.getElementById('div-browse').style.display = "none";
    document.getElementById('lgn').style.background = "url(/_img/bg-tabs-act.gif) top right no-repeat";
    if (document.getElementById('srch')){
        document.getElementById('srch').style.background = "url(/_img/bg-tabs.jpg) top right no-repeat";
        document.getElementById('srch').style.color = "#88460F";
    }
    if (document.getElementById('brws')) {
        document.getElementById('brws').style.background = "url(/_img/bg-tabs.jpg) top right no-repeat";
        document.getElementById('brws').style.color = "#88460F";
    }
    document.getElementById('lgn').style.color = "#D56E19";
}
function browsefunc(){
    document.getElementById('div-login').style.display = "none";
    document.getElementById('div-search').style.display = "none";
    document.getElementById('div-browse').style.display = "block";
    document.getElementById('brws').style.background = "url(/_img/bg-tabs-act.gif) top right no-repeat";
    document.getElementById('brws').style.color = "#D56E19";
    if (document.getElementById('srch')){
        document.getElementById('srch').style.background = "url(/_img/bg-tabs.jpg) top right no-repeat";
        document.getElementById('srch').style.color = "#88460F";
    }
    document.getElementById('lgn').style.background = "url(/_img/bg-tabs.jpg) top right no-repeat";
    document.getElementById('lgn').style.color = "#88460F";
}

// LIMIT MULTIPLE SELECTED OPTIONS
var selectedOptions = [];
function checkCountSelected(select, maxNumber) {

    for (var i = 0; i < select.options.length; i++) {

        if (select.options[i].selected && select.options[i].value == '-1') {
            for (var j = 0; j < select.options.length; j++) {
                if (j != i) {
                    select.options[j].selected = false;
                }
            }
        }

        if (select.options[i].selected && !new RegExp(i, 'g').test(selectedOptions.toString())) {
            selectedOptions.push(i);
        }

        if (!select.options[i].selected && new RegExp(i, 'g').test(selectedOptions.toString())) {
            selectedOptions = selectedOptions.sort(function(a, b) {
                return a - b;
            });
            for (var j = 0; j < selectedOptions.length; j++) {
                if (selectedOptions[j] == i) {
                    selectedOptions.splice(j, 1);
                }
            }
        }

        if (selectedOptions.length > maxNumber) {
            select.options[i].selected = false;
            selectedOptions.pop();
        }
    }

}

function confirmDialog(message, url) {
    if (confirm(message)) {
        location.href = url;
    }
}

function checkUserPermissions(paidItemType) {
    var result = true;
    JsonHelper.checkUserPermissions(paidItemType, false, function updateFieldValue(data){result = data;});
    return result;
}

function disableAllLinks(){
    objLinks = document.links;
    for(i=0;i<objLinks.length;i++){
        objLinks[i].disabled = true;
        //link with onclick
        if(objLinks[i].onclick){
            objLinks[i].onclick = new Function('return false;' + objLinks[i].onclick.toString().getFuncBody());
        }
        //link without onclick
        else{
          objLinks[i].onclick = function(){return false;}
        }
    }
}

String.prototype.getFuncBody = function(){
    var str=this.toString();
    str=str.replace(/[^{]+{/,"");
    str=str.substring(0,str.length-1);
    str = str.replace(/\n/gi,"");
    if(!str.match(/\(.*\)/gi))str += ";";
    return str;
}

function turnCurrentPageOff(active, options) {   //options can be left blank if not needed
    var options = options || {};
    var zindex = options.zindex || 50;
    var opacity = options.opacity || 70;
    var opaque = (opacity / 100);
    var bgcolor = options.bgcolor || '#000000';
    var dark = document.getElementById('currentActivePageBody');
    if (!dark) {
        var tbody = document.getElementsByTagName("body")[0];
        var tnode = document.createElement('div');
	    tnode.style.position = 'absolute';
	    tnode.style.top = '0px';
	    tnode.style.left = '0px';
	    tnode.style.overflow = 'hidden';
	    tnode.style.display = 'none';
	    tnode.id = 'currentActivePageBody';

	    var spinner = document.createElement('img');
	    spinner.setAttribute('src', '/imglib/default/busy.gif');
	    spinner.setAttribute('width', '120px');
	    spinner.setAttribute('height', '10px');
        spinner.style.marginLeft = '40%';
        spinner.style.marginTop = '40%';
        spinner.style.verticalAlign = 'middle';
        spinner.align = 'middle';

	    tnode.appendChild(spinner);
        tbody.appendChild(tnode);
        dark = document.getElementById('currentActivePageBody');
    }
    if (active) {
        if (document.body && ( document.body.scrollWidth || document.body.scrollHeight ))
        {
            var pageWidth = document.body.scrollWidth + 'px';
            var pageHeight = document.body.scrollHeight + 'px';
        }
        else if (document.body.offsetWidth)
        {
            var pageWidth = document.body.offsetWidth + 'px';
            var pageHeight = document.body.offsetHeight + 'px';
        }
        else {
            var pageWidth = '100%';
            var pageHeight = '100%';
        }
        dark.style.opacity = opaque;
        dark.style.MozOpacity = opaque;
        dark.style.filter = 'alpha(opacity=' + opacity + ')';
        dark.style.zIndex = zindex;
        dark.style.backgroundColor = bgcolor;
        dark.style.width = pageWidth;
        dark.style.height = pageHeight;
        dark.style.display = 'block';
    }
    else {
        dark.style.display = 'none';
    }
}

function doAjaxSubmit(eventId, formId, options) {
    if (typeof(tools) != "undefined" && tools.list.length > 0) {
        tools.list.each(function(el){
            el.submitHandler();
        });
    }
    if (window.tinyMCE) { tinyMCE.triggerSave(false, false); }

    var clientParams = {};
    clientParams.formId = formId;

    if (!options) { options = {}; }

    if (options.enableUpload) {
        clientParams.enableUpload = options.enableUpload;
    } else {
        clientParams.enableUpload = true;
    }

    if (!options.disableSpinner) {
        $(formId).set("spinner", {message : "Please wait ...", onHide : function() {this.destroy();}});
        clientParams.startHandler = function () {
            $(formId).spin();
            (function(fel) {
                if ($defined(fel) && $defined(fel.get("spinner"))) {
                    var msg = fel.get("spinner").content.getElement("p.spinner-msg");
                    msg.set("html", "Still waiting? ");
                    msg.getElements("").each(function(el) {
                        el.dispose();
                    });
                    new Element("a", {"html": "Click to try again", "href": "javascript: void(0);"}).addEvent("click", (function() {
                        this.unspin();
                    }).bind(fel)).inject(msg);
                }
            }).delay(60000, this, [$(formId)]);
        };

        clientParams.completeHandler = function () {
            $(formId).unspin();
        };
    }
    clientParams.errorHandler = function () {
        $(formId).unspin();
    };

    if (options.onSuccess) {
        clientParams.successHandler = options.onSuccess;
    }

    XT.doAjaxSubmit(eventId, $(formId), null, clientParams);
}

function doAjaxSubmitCustomTarget(eventId, formId, target) {
    $("_target").set("name", target);
    doAjaxSubmit(eventId, formId);
}

function doAjaxRequest(url, params, method, update, onComplete, sync) {
    var request = new Request.HTML({ url: url, method: method, update: update, async: !sync, onComplete: onComplete, headers:{'SpecialAjaxRequest':'true'}});
    request.send(params);
}

function addErrorViewSupport(){
    $$('.errmsg').addEvent('mouseover', function(ev){
        var div = this.getElement('div');
        if (div) {
            var txt = div.get('html');
            $('newAlert').set('html', txt);
            var mouseX = ev.page.x;
            var mouseY = ev.page.y;
            $('newAlert').setStyle('display','block');
            $('newAlert').setStyles({'left':mouseX,'top':mouseY});
        }
    });
    $$('.errmsg').addEvent('mouseleave', function(){
        $('newAlert').setStyle('display','none');
    });
}

function appendToSessionList(listName, value) {
    JsonHelper.appendToSessionList(listName, value, true);
}

function removeFromSessionList(listName, value) {
    JsonHelper.removeFromSessionList(listName, value, true);
}

function clearSessionList(listName) {
    JsonHelper.clearSessionList(listName, true);
}

function submitFormOnEnter(event, submitAction) {
    var srcElement = navigator.appName.indexOf('Microsoft') != -1? event.srcElement : event.target;
    if (event.keyCode == '13' && srcElement.type != 'textarea') submitAction();
}

function toggleBlock(elId) {
    var el = document.getElementById(elId);
    if (el.style.display == 'block') {
        el.style.display = 'none';
    } else {
        el.style.display = 'block';
    }
}

function attachErrorMessages() {
    $$('.errmsg').addEvent('mouseover', function(ev) {
        var div = this.getElement('div');
        if (div) {
            var txt = div.get('html');
            $('newAlert').set('html', txt);
            var mouseX = ev.page.x;
            var mouseY = ev.page.y;
            $('newAlert').setStyle('display', 'block');
            $('newAlert').setStyles({'left':mouseX,'top':mouseY});
        }
    });
    $$('.errmsg').addEvent('mouseleave', function() {
        $('newAlert').setStyle('display', 'none');
    });
    $$('.errmsg-pass').addEvent('mouseover', function(ev) {
        var div = this.getElement('div');
        if (div) {
            var txt = div.get('html');
            $('newAlert').set('html', txt);
            var mouseX = ev.page.x;
            var mouseY = ev.page.y;
            $('newAlert').setStyle('display', 'block');
            $('newAlert').setStyles({'left':mouseX,'top':mouseY});
        }
    });
    $$('.errmsg-pass').addEvent('mouseleave', function() {
        $('newAlert').setStyle('display', 'none');
    });
}

function prepareRequestParameters(formId) {
    var reqParams = "";

    ($(formId).getElements('input')
            .combine($(formId).getElements('textarea'))
            .combine($(formId).getElements('select')))
            .each(function(arg, index) {
        if (index != 0) reqParams = reqParams + '&';
        reqParams = reqParams + arg.name + '=' + encodeURIComponent(arg.value);
    });

    return reqParams;
}

function disableEnterKey(e){
    var k;
    if(window.event) k = window.event.keyCode;
    else k = e.which;
    return k != 13;
}

function makeTabs (tab, tabContent) {
    $$(tab).each(function(el, i) {
        $$(tabContent).setStyle('display','none');
        $$(tabContent)[0].setStyle('display','block');
        if (i == 0) {
            el.setStyle('background','#EAEDF1');
        }
        el.addEvent('click', function(){
            $$(tabContent).setStyle('display','none');
            $$(tabContent)[i].setStyle('display','block');
            $$(tab).setStyle('background','#B8B8B8');
            this.setStyle('background','#EAEDF1');
        });
    });
}
var SelectUtils = SelectUtils || {};
SelectUtils.removeSelectOptions = function (selectId){
    $(selectId).empty();
};
SelectUtils.removeSelection = function(selectId){
    $(selectId).getElements('option').each(function(opt) {
        opt.erase('selected');
    });
};
SelectUtils.addSelectOptions = function(elementId, data, valueName, htmlName, optGroup){
    data.each(function(o) {
        if (o[optGroup]) {
            new Element('optgroup', {
                label:o[htmlName]
            }).inject($(elementId));
        } else {
            new Element('option', {
                value:o[valueName]!=null&&o[valueName]!=0?o[valueName]:'',
                html:o[htmlName]
            }).inject($(elementId));
        }
    });
};
SelectUtils.setSelectValue = function(selectId, selectedValue){
    if(!selectedValue)return;
    $(selectId).getElements('option').each(function(opt) {
        if(selectedValue instanceof Array){
            if(selectedValue.some(function(item){return item==opt.value;})){
                opt.set('selected','selected');
            }
        } else {
            if(opt.value==selectedValue){
                opt.set('selected','selected');
            }
        }
    });
};
SelectUtils.getSelectedValues = function(selectId){
    selectId = ($type(selectId) == "string") ? $(selectId) : selectId;
    var selectedIds = [];
    selectId.getSelected().each(function(opt){
        if(opt.value && opt.value != 0){
            selectedIds.push(opt.value);
        }
    });
    return selectedIds;
};
SelectUtils.getSelectValue = function (selectId){
    var selectedValues = this.getSelectedValues(selectId);
    if(selectedValues.length==1){
        return selectedValues[0];
    } else {
        return null;
    }
};
function parentSelected(fieldId, childId, checked, prefix) {
    var ownerIds = SelectUtils.getSelectedValues(prefix+'field' + fieldId);
    var elChildFieldId = prefix+'field' + childId;
    if (document.getElementById(elChildFieldId) != null) {
        JsonHelper.getDictionaryItemsByOwnerIds(childId, ownerIds, false, function updateChildField(data) {
            SelectUtils.removeSelectOptions(elChildFieldId);
            multilevel(data);
            SelectUtils.addSelectOptions(elChildFieldId, data, 'id', 'name', 'optgroup');
            SelectUtils.setSelectValue(elChildFieldId, checked);
        });
    }
}
function searchParentSelected(criterionId, childCriterionId, checked, prefix) {
    var ownerIds = SelectUtils.getSelectedValues(prefix + 'criterion' + criterionId);
    var elChildCriterionId = prefix + 'criterion' + childCriterionId;
    if (document.getElementById(elChildCriterionId) != null) {
        JsonHelper.getSearchDictionaryItemsByOwnerIds(childCriterionId, ownerIds, false, function updateChildCriterion(data) {
            SelectUtils.removeSelectOptions(elChildCriterionId);
            multilevel(data);
            SelectUtils.addSelectOptions(elChildCriterionId, data, 'id', 'name', 'optgroup');
            SelectUtils.setSelectValue(elChildCriterionId, checked);
        });
    }
}
function generateShortname(value, delimiter){
    if(!delimiter){
        delimiter='-';
    }
    var trans;
    JsonHelper.transliterate(value, function (data){
        trans = data.toLowerCase().
                replace(new RegExp("&", "g"), delimiter+"and"+delimiter).
                replace(new RegExp("[^"+delimiter+"a-zA-Z0-9]", "g")," ").
                replace(new RegExp("\\s+", "g"), delimiter).
                replace(new RegExp("["+delimiter+"]+", "g"), delimiter).
                replace(new RegExp("^"+delimiter+"|"+delimiter+"$", "g"), "");
    });
    return trans;
}

function facebookOnLogin(apply) {
    var requestUri = '/candidate/private?facebook_login';
    if (apply) {
        JsonHelper.getSessionAttribute('requestUri', function(data) {
            if (data) requestUri = data;
        });
    }
    JsonHelper.facebookCheckUserExists(FB.Connect.get_loggedInUser(), function(data) {
        if (data.success) {
            if (data.newCandidate) {
                document.location.href = '/candidate/facebook_registration';
            } else {
                JsonHelper.removeSessionAttribute('requestUri');
                document.location.href = requestUri;
            }
        } else {
            alert("Can't create candidate account");
        }
    });
}

function keepSessionAlive () {
    new Request({method: 'get', url: '/main/json/keepAlive'}).send();
}

function formStoreDefaultValues(form) {
    form.getElements("input[type!=hidden]").combine(form.getElements('textarea')).combine(form.getElements('select')).each(function(el) {
        var type = el.type;
        switch (type) {
            case "text":
            case "password":
            case "textarea":
            case "hidden":
                el.store("default", el.get("value"));
                break;
            case "radio":
            case "checkbox":
                el.store("default", el.get("checked"));
                break;
            case "select-one":
            case "select-multiple":
                el.store("default", SelectUtils.getSelectedValues(el));
                break;
            default:
                break;
        };
    });
}

function formRetrieveDefaultValues(form) {
    form.getElements("input[type!=hidden]").combine(form.getElements('textarea')).combine(form.getElements('select')).each(function(el) {
        var type = el.type;
        switch (type) {
            case "text":
            case "password":
            case "textarea":
            case "hidden": {
                el.set("value", el.retrieve("default"));
                break;
            }
            case "radio":
            case "checkbox": {
                el.set("checked", el.retrieve("default"));
                break;
            }
            case "select-one":
            case "select-multiple": {
                SelectUtils.removeSelection(el);
                SelectUtils.setSelectValue(el, el.retrieve("default"));
                break;
            }
            default:
                break;
        };
    });
}
