$.ajaxSetup({
    scriptCharset: "UTF-8" ,
    contentType: "application/x-www-form-urlencoded; charset=UTF-8"
});
function ajaxJS(url, taskTitle, progressElementId, form, method) {
    ajaxRequest({
        "url":url,
        "evalResponseAsJS": true,
        "taskTitle": taskTitle,
        "taskElement": progressElementId,
        "form": form,
        "method": method
    });
}
function ajaxHTML(url, objectID, evalJS, taskTitle, progressElementId, form, method) {
    ajaxRequest({
        "url":url,
        "htmlObject": objectID,
        "execJS": evalJS,
        "taskTitle": taskTitle,
        "taskElement": progressElementId,
        "form": form,
        "method": method
    });
}
function ajaxJSON(url, jsonManager, jsonManagerParams, taskTitle, progressElement, form, method) {
    ajaxRequest({
        "url":url,
        "taskTitle": taskTitle,
        "taskElement": progressElement,
        "jsonManager": jsonManager,
        "jsonManagerParams": jsonManagerParams,
        "form": form,
        "method": method
    });
}
function ajaxRequest(params) {
    var url = params.url;
    var evalResponseAsJS = params.evalResponseAsJS;
    var htmlObject = params.htmlObject;
    var execJS = params.execJS;
    var taskTitle = params.taskTitle;
    var taskElement = params.taskElement;
    var jsonManager = params.jsonManager;
    var customHandler = params.customHandler;
    var jsonManagerParams = params.jsonManagerParams;
    var customHandlerParams = params.customHandlerParams;
    var form = params.form;
    var method = params.method;
    var async = params.async;
    if(typeof async == 'undefined') {
        async = true;
    }
    var taskId = taskElement;
    if(!taskId) taskId = "task_" + new Date().getTime() + "_" + Math.random();
    var req = null;
    var url_ = '';
    if (url.indexOf("?")>0) url_ = url + "&random=" + Math.random();
    else url_ = url + "?random=" + Math.random();
    url_ = encodeURL(url_);
    req = getHTTPObject();
    if(!req) {
        alert("No se puede generar la solicitud porque el navegador no proporciona esta funcionalidad");
        return;
    }
    req.onreadystatechange = function() {
        if (req.readyState == 4) {
            if (req.status == 200) {
                var jsError = null;
                if(req.getResponseHeader("SESSION_EXPIRED") == "true") {
                    taskFailed(taskId, "Su sesi\u00f3n ha expirado, por favor vuelva a iniciar sesi\u00f3n");
                    $('#_loginDialog').dialog('open');
                    $('#_loginUsername').focus().data('reqParams', params);
                    return;
                }
                var resp = req.responseText;
                if(evalResponseAsJS) {
                    try {
                        eval(resp);
                    } catch (error) {
                        jsError = "Error al evaluar los datos recibidos por el servidor";
                    }
                }
                else if(htmlObject && getObject(htmlObject)) {
                    var htmlObj = getObject(htmlObject);
                    htmlObj.innerHTML = resp;
                    var script = htmlObj.getElementsByTagName("script");
                    for(var s = 0; s<script.length; s++) {
                        try {
                            eval(script[s].innerHTML);
                        } catch (error) {
                            alert(error);
                        }
                    }
                }
                else if(typeof jsonManager == 'function') {
                    try {
                        jsonManager(eval('(' + resp+ ')'), jsonManagerParams);
                    } catch (error) {
                        alert(error);
                        jsError = "Error al intentar manejar la respuesta del servidor. " + error;
                    }
                }
                else if(typeof customHandler == 'function') {
                    try{
                        customHandler(req, customHandlerParams);
                    } catch(jsException) {
                        alert(jsException);
                        jsError = "Error al intentar manejar la respuesta del servidor";
                    }
                }
                if(execJS) {
                    try {
                        eval(execJS);
                    } catch (error) {
                        jsError = "Error al ejecutar las acciones posteriores a la recuperacion de datos. " + error;
                    }
                }
                if(jsError) {
                    taskFailed(taskId, jsError);
                }
                else {
                    if(req.getResponseHeader("RESPONSE_ERROR")) {
                        taskFailed(taskId, false, req.getResponseHeader("RESPONSE_ERROR"));
                    } else {
                        taskSuccess(taskId);
                    }
                }
            } else {
                var title = (req.getResponseHeader("RESPONSE_ERROR")?req.getResponseHeader("RESPONSE_ERROR"):null);
                if(title == null) {
                    switch(req.status) {
                        case 400:
                            title = "Solicitud no interpretada por el servidor";
                            break;
                        case 401:
                            title = "Se ha denegado el acceso al recurso";
                            break;
                        case 404:
                            title = "No se encuentra el recurso";
                            break;
                        case 500:
                            title = "Error en el servidor al procesar la solicitud";
                            break;
                    }
                }
                taskFailed(taskId, title);
            }
        }
    };
    if(true || method && method.toUpperCase() == "POST") {
        var _ = url_.indexOf("?");
        var __url = url_.substr(0, _);
        var _params = url_.substr(_+1);
        if(form && getObject(form)) {
            _params += "&" + constructQueryString(form);
        }
        req.open("POST", __url, async);
        req.setRequestHeader("Content-type", "application/x-www-form-urlencoded; charset=UTF-8");
        req.setRequestHeader("Content-length", _params.length);
        req.setRequestHeader("Connection", "close");
        req.send(_params);
    } else {
        if(form && getObject(form)) {
            url += "&" + constructQueryString(form);
        }
        req.open("GET", url_, async);
        req.send(null);
    }
    if(async && (evalResponseAsJS || htmlObject || jsonManager || customHandler)) {
        if(!taskTitle) taskTitle = 'Procesando';
        if(taskElement && getObject(taskElement)){
            showLoadingElement(taskElement, taskTitle);
        } else {
            addTask(taskId, taskTitle);
        }
    }
}
function encodeURL(url) {
    try {
        if(url.indexOf("jsessionid=")==-1 && jsessionid) {
            var sup = url.indexOf("?");
            if(sup == -1) {
                sup = url.length;
            }
            var l = url.substr(0, sup);
            var r = "";
            if(sup>-1) {
                r = url.substr(sup, url.length);
            }
            url = l + ";jsessionid="+jsessionid + r;
        }
    } catch (error){}
    return url;
}
function getHTTPObject() {
    var req = false;
    if(window.ActiveXObject) {
        try {
            req = new ActiveXObject("Msxml2.XMLHTTP");
        }catch (e) {
            try {
                req = new ActiveXObject("Microsoft.XMLHTTP"); 
            }catch (E) {
                req = false;
            }
        }
    } else if (XMLHttpRequest) {
        try {
            req = new XMLHttpRequest();
        }catch (e) {
            req = false;
        }
    }
    return req;
}
function constructQueryString(form) {
    var element, name, value, disabled;
    var queryString = "";
    form = getObject(form);
    for (var i=0; i<form.elements.length; i++){
        element = form.elements[i];
        disabled = element.disabled;
        name = element.name;
        value = element.value;
        if(!disabled && name) {
            switch(element.type) {
                case 'select-one':case 'select-multiple':
                    for(var j=0; j<element.options.length; j++){
                        if(element.options[j].selected){
                            if(window.ActiveXObject){
                                queryString += encodeURIComponent(name) + '=' + encodeURIComponent(element.options[j].attributes['value'].specified?element.options[j].value:element.options[j].text) + '&';
                            }else{
                                queryString += encodeURIComponent(name) + '=' + encodeURIComponent(element.options[j].hasAttribute('value')?element.options[j].value:element.options[j].text) + '&';
                            }
                        }
                    }
                    break;
                case 'radio':case 'checkbox':
                    if(element.checked){
                        queryString += encodeURIComponent(name) + '=' + encodeURIComponent(value) + '&';
                    }
                    break;
                case 'file':case undefined:case 'reset':case 'button':
                    break;
                default:
                    queryString += encodeURIComponent(name) + '=' + encodeURIComponent(value) + '&';
            }
        }
    }
    return queryString;
}
function switchLeftContentTab(index) {
    switch(index) {
        case 1:
            getObject("leftContentContext").style.display='';
            getObject("leftContentMenu").style.display='none';
            getObject("leftContentReports").style.display='none';
            getObject("lc_tab_left_1").className='active_left mainSprites';
            getObject("lc_tab_1").className='active bgSprites';
            getObject("lc_tab_right_1").className='active_right mainSprites';
            getObject("lc_tab_2").className='inactive  bgSprites';
            getObject("lc_tab_right_2").className='spacer mainSprites';
            getObject("lc_tab_3").className='inactive  bgSprites';
            getObject("lc_tab_right_3").className='end mainSprites';
            break;
        case 2:
            getObject("leftContentContext").style.display='none';
            getObject("leftContentMenu").style.display='';
            getObject("leftContentReports").style.display='none';
            getObject("lc_tab_left_1").className='spacer mainSprites';
            getObject("lc_tab_1").className='inactive bgSprites';
            getObject("lc_tab_right_1").className='active_left mainSprites';
            getObject("lc_tab_2").className='active bgSprites';
            getObject("lc_tab_right_2").className='active_right mainSprites';
            getObject("lc_tab_3").className='inactive bgSprites';
            getObject("lc_tab_right_3").className='end mainSprites';
            break;
        case 3:
            getObject("leftContentContext").style.display='none';
            getObject("leftContentMenu").style.display='none';
            getObject("leftContentReports").style.display='';
            getObject("lc_tab_left_1").className='spacer mainSprites';
            getObject("lc_tab_1").className='inactive bgSprites';
            getObject("lc_tab_right_1").className='spacer mainSprites';
            getObject("lc_tab_2").className='inactive bgSprites';
            getObject("lc_tab_right_2").className='active_left mainSprites';
            getObject("lc_tab_3").className='active bgSprites';
            getObject("lc_tab_right_3").className='active_right mainSprites';
    }
    ajaxRequest({
        url: '/crm/eu/new/leftContentTab.jsp?action=change&tab='+index
    });
}
function cleanErrors() {
    var divs = getObject("_quick_create_form").getElementsByTagName("div");
    for(var i = 0; i<divs.length; i++) {
        if(divs[i].className=="error") {
            divs[i].innerHTML = "";
        }
    }
}
function addTask(id, msj) {
    var processList = getObject("processList");
    if(processList && !getObject(id)) {
        var task = document.createElement("div");
        task.className="processElement process";
        task.id=id;
        task.innerHTML = msj;
        task.style.display = 'none';
        processList.appendChild(task);
        if(processList.style.display == 'none') {
            task.style.display = '';
            $(processList).fadeIn("fast");
        }
        else $(task).fadeIn("fast");
    }
}
function removeTask(id) {
    var task = getObject(id);
    if(task) {
        if(task.parentNode.id == "processList") {
            var processList = getObject("processList");
            if(processList.childNodes.length == 1) {
                $(processList).fadeOut("normal", function() {
                    processList.removeChild(task);
                });
            } else {
                $(task).slideUp("normal", function() {
                    task.parentNode.removeChild(task);
                    if(processList.childNodes.length == 0) {
                        $(processList).fadeOut("slow");
                    }
                });
            }
        } else {
            $(task).fadeOut("normal");
        }
    }
}
function taskFailed(id, title, newMsj) {
    var task = getObject(id);
    if(task) {
        if(task.className.indexOf(" process")!=-1) task.className = task.className.replace(" process", " processError");
        else task.className = "processError";
        var close = document.createElement("span");
        close.className = "closeButton";
        close.title = "Quitar este elemento";
        if(!title) {
            title = "Error al procesar la solicitud";
        }
        if(newMsj) {
            task.innerHTML = newMsj;
            if(!title) title = newMsj;
        }
        task.title = title;
        if(task.parentNode == getObject("processList")) {
            close.onclick = function() {
                removeTask(id);
            }
        } else {
            task.onclick = function() {
                $(this).fadeOut("normal");
            }
        }
        task.appendChild(close);
        var timeoutId = setTimeout(function(){
            removeTask(id);
        }, 6000);
        task.onmouseover = function() {
            clearTimeout(timeoutId);
            this.onmouseover = undefined;
        };
    }
}
function taskSuccess(id) {
    var task = getObject(id);
    if(task) {
        if(task.className.indexOf(" process")!=-1)
            task.className = task.className.replace(" process", " processComplete");
        else task.className = "processComplete";
        removeTask(id);
    }
}
function showLoadingElement(id, msj) {
    var task = getObject(id);
    if(task) {
        task.style.paddingLeft='20px';
        task.style.display='';
        task.className += " process";
        task.innerHTML = msj;
    }
}

function updateFloatingHeaders() {
    $("div.floatingHeaderTable").each(function() {
        offset = $(this).offset();
        scrollTop = $(window).scrollTop();
        if ((scrollTop > offset.top) && (scrollTop < offset.top + $(this).height())) {
            $(".floatingHeader", this).css("visibility", "visible");
            $(".floatingHeader", this).css("top", Math.min(scrollTop - offset.top, $(this).height() - $(".floatingHeader", this).height()) + "px");
        }
        else {
            $(".floatingHeader", this).css("visibility", "hidden");
            $(".floatingHeader", this).css("top", "0px");
        }
    })
}

function isObject(o) {
    return(o && (typeof o==="object"||isFunction(o)))||false;
}
function isNumber(n) {
    return (typeof n==="number" && isFinite(n));
}
function isFunction(f) {
    return (typeof f ==="function");
}
function isArray(a) {
    if(a){
        return (isNumber(a.length)&&isFunction(a.splice));
    }
    return false;
}
function getObject(o) {
    if(isObject(o)) {
        return o;
    } else {
        if(typeof o == "string")return document.getElementById(o);
    }
    return null;
}
function clearSelect(s) {
    var select = getObject(s);
    if(select && (select.type == "select-one"  || select.type == "select-multi")) {
        while(select.options.length>0) {
            select.remove(0);
        }
        return true;
    }
    return false;
}
/**
 *Llena un select con los datos pasados
 *
 **/
function populateSelect(select, list, valueField, textField, selected) {
    var objSelect = getObject(select);
    if(objSelect) {
        for(var i = 0; i<list.length; i++) {
            objSelect.options.add(new Option(list[i][textField], list[i][valueField], selected==list[i][valueField], selected==list[i][valueField]));
        }
        return true;
    } else {
        return false;
    }
}
function ctrlClick(e, actions) {
    e||(e=window.event);
    if(e.ctrlKey) {
        if(actions.withCtrl) {
            actions.withCtrl(e);
        }
    } else {
        if(actions.noCtrl) {
            actions.noCtrl(e);
        }
    }
}

function newRow() {
    var row = document.createElement("div");
    row.className = "tableRow";
    return row;
}
function newCell(size, blue, last) {
    var row = document.createElement("div");
    row.className = size + " " + (blue?"blueCell":last?"lastCell":"cell");
    return row;
}
function insertCell(row, cell) {
    row.appendChild(cell);
    return row;
}
function insertRow(parent, row) {
    getObject(parent).appendChild(row);
}

$(document).ready(function() {
    $("div.floatingHeaderTable").each(function() {
        $("div.tableHeaderTwo:first", this).before($("div.tableHeaderTwo:first", this).clone());
        var chr = $("div:first", this)
        chr.addClass("floatingHeader");
        chr.css("position", "absolute");
        chr.css("top", "0px");
        chr.css("left", "0px");
        chr.css("visibility", "hidden");
        chr.css("opacity", ".9");
        chr.css("z-index", "1000");
    });
    updateFloatingHeaders();
    $(window).scroll(updateFloatingHeaders);
    
    $('#_replyIssueComment').dialog({
        width: 300,
        height: 200,
        autoOpen: false,
        modal: true,
        buttons: {
            Responder: function() {
                //mostrar algo en el dialogo que dice que está publicando su comentario
                ajaxRequest({
                    url: '/crm/eu/issueTracker/json/sendMessage.jsp',
                    form: '_replyIssueCommentForm',
                    jsonManager: function(json) {
                        $('#_aviso_respuesta').removeClass('ui-state-error ui-state-active ui-state-active-fix');
                        if(json.error){
                            $('#_aviso_respuesta').addClass('ui-corner-all ui-state-error').show().html('<br><p>' + json.error + '</p>').delay(5000).fadeOut();
                        } else {
                            if($('#supportContext').val()){
                                addComment(json);
                            }
                            $('#_aviso_respuesta').addClass('ui-corner-all ui-state-active').show()
                            .html('<br><p>Se ha enviado el mensaje con &eacute;xito.</p>').delay(5000).fadeOut();
                        }
                        $('#_replyIssueComment').dialog("close");
                    }
                });
            },
            Cerrar: function() {
                $(this).dialog("close");
            }
        }
    });
    $('#_loginDialog').dialog({
        width: 300,
        height: 230,
        autoOpen: false,
        resizable: false,
        modal: true,
        buttons: {
            Ingresar: function() {
                //mostrar algo en el dialogo que dice que está publicando su comentario
                ajaxRequest({
                    url: '/crm/login.jsp?xmlhttp=true',
                    form: '_loginForm',
                    jsonManager: function(json) {
                        if(json.error){
                            alert(json.error);
                            return;
                        }
                        $('#_loginDialog').dialog("close");
                        var params = $('#_loginUsername').data('reqParams');
                        if(params) {
                            ajaxRequest(params);
                        }
                    }
                });
            }
        }
    });
});

function changeTab(prefix, index, max) {
    if(typeof max == 'undefined') {
        max = 0;
        while(getObject(prefix + (max + 1))) {
            max++;
        }
    }
    var display = "";
    for(var i = 0; i<=max; i++) {
        getObject(prefix + "Left" + i).className = "spacer mainSprites";
        getObject(prefix + i).className = "inactive bgSprites";
        if(i == index) {
            display = "";
        } else {
            display = "none";
        }
        getObject("tabContent" + i).style.display = display;
    }
    try {
        getObject(prefix + index).className = "active bgSprites";
        getObject(prefix + "Left" + index).className = "active_left mainSprites";
    } catch (error) {
        alert('Error al cambiar al tab ' + index + error)
    }
    if(index == max) {
        getObject(prefix + "PreEnd").className = "active_right mainSprites";
        getObject(prefix + "PreEnd").style.display = "";
    } else {
        getObject(prefix + "PreEnd").style.display = "none";
        getObject(prefix + "Left" + (index + 1)).className = "active_right mainSprites";
    }
}
function StringBuffer(str) {
    var string = str ? str : '';
    this.append = function(str) {
        string += (str ? str : '');
    }
    this.toString = function() {
        return string;
    }
    this.clear = function() {
        string = '';
    }
    this.length = function() {
        return string.length;
    }
    this.substr = function(start, length) {
        return string.substr(start, length);
    }
}
function printPagination(prop) {
    var topText = "";
    var bottomText = "";
    var data = prop.data;
    if(!data.hor) {
        data.hor = 10;
    }
    if(data.max>data.vert) {
        if(!data.totalPages) {
            data.totalPages = Math.ceil(data.max/data.vert);
        }
        topText += "<span class=\"highlight\">" + data.max + "</span> resultados encontrados, desplegados en <span class=\"highlight\">" + data.totalPages + "</span> p&aacute;ginas ";
        topText += "(<span class=\"highlight\">" + data.vert + "</span> resultados por p&aacute;gina)";
        topText += "<br>P&aacute;gina <span class=\"highlight\">" + (data.depth + 1) + "</span>";

        bottomText += "Resultados <span class=\"highlight\">" + ((data.depth)*data.vert + 1) + "</span> al <span class=\"highlight\">" + ((data.depth + 1)*data.vert) + "</span><br>";
        if(data.depth>0) {
            bottomText += "&nbsp;<a class=\"prevlink\" href=\"" + prop.actionLeft + (data.depth - 1) + prop.actionRight + "\"><span>Anterior</span></a>&nbsp;|&nbsp;";
        }
        var mid = Math.floor(data.hor/ 2);
        var offset_page_start = data.depth - mid + 1;
        if (offset_page_start > data.totalPages + mid) {
            offset_page_start = data.depth + 1;
        }
        if (offset_page_start <= 0) {
            offset_page_start = 1;
        }
        var offset_page_end = offset_page_start + data.hor - 1;
        if (offset_page_end > data.totalPages) {
            offset_page_end = data.totalPages;
        }
        if (offset_page_end >= data.totalPages) {
            offset_page_end = data.totalPages;
        }
        var page = offset_page_start - 1;
        for (; page < offset_page_end; page++) {
            if(page == data.depth) {
                bottomText += "<span class=\"selected\">&nbsp;" + (page+1) + "&nbsp;</span>";
            } else {
                bottomText += "&nbsp;<a href=\"" + prop.actionLeft + page + prop.actionRight + "\">" + (page+1) + "</a>&nbsp;";
            }
        }
        if(data.depth<(data.totalPages-1)) {
            bottomText += "&nbsp;|&nbsp;<a class=\"nextlink\" href=\"" + prop.actionLeft + (data.depth + 1) + prop.actionRight + "\"><span>Siguiente</span></a>&nbsp;";
        }
        
    }
    if(prop.maxResultsXPage && prop.stepResultsXPage) {
        var options = "";
        for(var i = prop.stepResultsXPage; i<=prop.maxResultsXPage && i<data.max+prop.stepResultsXPage; i+=prop.stepResultsXPage) {
            var option = "<option";
            if(i == data.vert){
                option += " selected"
            }
            option += " value='" + i + "'";
            option += ">" + i + "</option>"
            options += option;
        }
        bottomText += "<br>Mostrar hasta <select name=\"vert\" onchange=\"" + prop.onChangeResults + "\">" + options +"</select> resultados por p\u00e1gina<br>"
    }
    $('#' + prop.top).html(topText);
    $('#' + prop.bottom).html(bottomText);
}
function currencyFormatted(amount){
    var i = parseFloat(amount);
    if(isNaN(i)){
        i=0.00;
    }
    var minus = '';
    if(i < 0){
        minus = '-';
    }
    i = Math.abs(i);
    i = parseInt((i + .005) * 100);
    i = i / 100;
    var s = new String(i);
    if(s.indexOf('.') < 0){
        s += '.00';
    }
    if(s.indexOf('.') == (s.length - 2)){
        s += '0';
    }
    s = minus + s;
    return s;
}
function thousandSeparated(decimalDigits,Value){
    var separatorLength = 3;
    var OriginalValue=Value;
    var TempValue = "" + OriginalValue;
    var NewValue = "";
    var pStr;
    var dStr;
    if (TempValue.indexOf(".")==-1){
        TempValue+="."
    }
    dStr=TempValue.substr(0,TempValue.indexOf("."));
    pStr=TempValue.substr(TempValue.indexOf("."))
    while (pStr.length-1< decimalDigits){
        pStr+="0"
    }
    if(pStr =='.')pStr ='';
    if(dStr.length > separatorLength){
        while( dStr.length > separatorLength){
            NewValue = "," + dStr.substr(dStr.length - separatorLength) + NewValue;
            dStr = dStr.substr(0,dStr.length - separatorLength);
        }
        NewValue = dStr + NewValue;
    } else {
        NewValue = dStr;
    }
    NewValue = NewValue + pStr;
    return (NewValue);
}
function rightStr(s,c){
    var l = s.lastIndexOf(c);
    l=l+1;
    return s.slice(l);
}
window.sf = {
    Calendar: {
        setup:function(opts) {
            var config = {
                dateFormat: 'dd/mm/yy',
                dayNamesMin: ['Do', 'Lu', 'Ma', 'Mi', 'Ju', 'Vi', 'Sa'],
                monthNames: ['Enero', 'Febrero', 'Marzo', 'Abril', 'Mayo', 'Junio', 'Julio', 'Agosto', 'Septiembre', 'Octubre', 'Noviembre', 'Diciembre'],
                showWeek: true,
                weekHeader: 'Sem',
                changeYear: false
            };
            if(opts.button && $("#" + opts.button).is('img')) {
                config.showOn = 'button';
                config.buttonImage = $('#'+opts.button).attr('src');
                config.buttonImageOnly = true;
                $("#" + opts.button).hide();
            }
            $("#" + opts.inputField).attr('size', '10').datepicker(config);
        }
    },
    Autocomplete: {
        create: function(config) {
            $("#" + config.searchElement).zIndex(10000).autocomplete({
                delay: 1000,
                source: config.source,
                ajaxOptions: {
                    type: 'post'
                },
                minLength: (config.minLength ? config.minLength : 1),
                select: function(event, ui) {
                    if(ui.item) {
                        $(this).val(ui.item.label);
                        $("#" + config.idElement).val(ui.item.value);
                        if(isFunction(config.callback)) {
                            config.callback(config.callbackParams);
                        }
                        return false;
                    }
                    return true;
                },
                focus: function(event, ui) {
                    $(this).val(ui.item.label);
                    return false;
                }
            });
        }
    }, 
    util: {
        elementXYPosition: function(obj){
            var cleft = 0,ctop=0;
            while (obj.offsetParent) {
                cleft += obj.offsetLeft;
                ctop += obj.offsetTop;
                obj = obj.offsetParent;
            }
            return {
                x:cleft,
                y:ctop
            };
        }, 
        checkPassword: function(password) {
            var special_chars = "~!@#$%&*.:";
            var pw = new Password(password, special_chars);

            var verdict = pw.getStrength();
            var hint = '';
            if (pw.ucase_count == 0) hint += "Agregar algunas letras may\u00fasculas.\n";
            if (pw.num_count == 0) hint += "Agregar algunos n\u00fameros. \n";
            if (pw.schar_count == 0) hint += "Agregar uno o m\u00e1s de los siguientes caracteres: "+ special_chars + ".\n";
            if (pw.run_score <= 1) hint += "Evite caracteres repetidos y/o seguidos (ej. 'aaaa', 'efghi', '1234'). \n";
            return {
                'hint': hint,
                'veredict': verdict
            };
        }
    }
};
window.s = {
    f: window.sf
};

function updateUnreadNotifications() {
    $.ajax({
        url: '/crm/eu/avisos/json/check.jsp',
        dataType: 'json',
        type: 'post',
        success: function(resp) {
            if(resp.unread == 0) {
                $('.unreadIndicator').hide();
                return;
            }
            $('.unreadIndicator').show().html(resp.unread);
        }
    });
}

function cargar (obj){
    obj.disabled = true;
    var option = new Option("Cargando...","Cargando...");
    option.selected = "true";
    obj.options.add(option);
}

function limpiar (obj, desde){
    while (obj.options.length>desde){
        obj.remove(desde);
    }
}

function setOptions(o){
    limpiar(o.obj, o.desde);
    for(var j = 0; j < o.data.length; j++ ){
        var item = o.data[j];
        var option = new Option (item.name, item.rid, item.selected ? true : false, item.selected ? true : false);
        if(item.rid == -1 || item.lightblue ){option.style.backgroundColor = 'lightblue';}
        o.obj.options.add(option);
    }
    o.obj.disabled = false;
}
function replyToIssueComment(issueId, title) {
    $('#_replyIssueId').val(issueId);
    if(title){
        $('#_replyIssueComment').dialog('option', 'title', title);
        $('#_replyIssueComment').dialog('open');
    } else {
        $('#_replyIssueComment').dialog('open');
    }
    $('textarea[name=REPLYTOISSUE]').focus();
}

function posXY(obj) {
    var cleft = 0, ctop = 0;
    while (obj.offsetParent) {
        cleft += obj.offsetLeft;
        ctop += obj.offsetTop;
        obj = obj.offsetParent;
    }
    return {x: cleft, y: ctop};
}

function popUp(strURL){
    strOptions="width=700,height=570,location=yes,status=yes,scrollbars=yes,resizable=yes"
    newWin = window.open(strURL,'newWin', strOptions);
    newWin.focus();
}

function popupform(myform, windowname){
    if (! window.focus)return true;
    window.open('', windowname, "width=700,height=570,location=yes,status=yes,scrollbars=yes,resizable=yes");
    myform.target=windowname;
    return true;
}


