var lastlen = 0;
var order = {};
order.key = 0;
order.dir = 0;
// Variable para determinar si una clave de cuenta ha sido copiada al portapapeles
var passToClip = 0;
// Variable para el ajuste óptimo del contenido a la altura del documento
var windowAdjustSize = 350;
var strPassword;
var minPasswordLength = 8;
var baseScore = 0, score = 0;
var num = {};
num.Excess = 0;
num.Upper = 0;
num.Numbers = 0;
num.Symbols = 0;
var bonus = {};
bonus.Excess = 3;
bonus.Upper = 4;
bonus.Numbers = 5;
bonus.Symbols = 5;
bonus.Combo = 0;
bonus.FlatLower = 0;
bonus.FlatNumber = 0;
var powertipOptions = {placement: 'ne', smartPlacement: 'true', fadeOutTime: 500};
jQuery.extend(jQuery.fancybox.defaults, {
type: 'ajax',
autoWidth: 'true',
autoHeight: 'true',
minHeight: 50,
padding: 0,
helpers: {overlay: { css: { 'background': 'rgba(0, 0, 0, 0.1)'}}},
afterShow: function () {
"use strict";
$('#fancyContainer').find('input:visible:first').focus();
}
});
$(document).ready(function () {
"use strict";
$("[title]").powerTip(powertipOptions);
$('input, textarea').placeholder();
setContentSize();
setWindowAdjustSize();
}).ajaxComplete(function () {
"use strict";
$("[title]").powerTip(powertipOptions);
$('input, textarea').placeholder();
});
// Función para cargar el contenido de la acción del menú seleccionada
function doAction(action, lastAction, id) {
"use strict";
var data = {'action': action, 'lastAction': lastAction, 'id': id, isAjax: 1};
$('#content').fadeOut(function () {
$.fancybox.showLoading();
$.ajax({
type: 'POST',
dataType: 'html',
url: APP_ROOT + '/ajax/ajax_getContent.php',
data: data,
success: function (response) {
$('#content').fadeIn().html(response);
setContentSize();
},
error: function () {
$('#content').html(resMsg("nofancyerror"));
},
complete: function () {
$.fancybox.hideLoading();
}
});
});
}
// Función para establecer la altura del contenedor ajax
function setContentSize() {
"use strict";
// Calculate total height for full body resize
var totalHeight = $("#content").height() + 100;
//var totalWidth = $("#wrap").width();
$("#container").css("height", totalHeight);
}
// Función para establecer la variable de ajuste óptimo de altura
function setWindowAdjustSize() {
"use strict";
var browser = getBrowser();
if (browser === "MSIE") {
windowAdjustSize = 150;
}
//console.log(windowAdjustSize);
}
// Función para retornar el scroll a la posición inicial
function scrollUp() {
"use strict";
$('html, body').animate({ scrollTop: 0 }, 'slow');
}
// Función para limpiar un formulario
function clearSearch(clearStart) {
"use strict";
if (clearStart === 1) {
$('#frmSearch').find('input[name="start"]').val(0);
return;
}
document.frmSearch.search.value = "";
document.frmSearch.customer.selectedIndex = 0;
document.frmSearch.category.selectedIndex = 0;
$('#frmSearch').find('input[name="start"]').val(0);
$('#frmSearch').find('input[name="skey"]').val(0);
$('#frmSearch').find('input[name="sorder"]').val(0);
$(".select-box").val('').trigger("chosen:updated");
order.key = 0;
order.dir = 0;
}
// Funcion para crear un desplegable con opciones
function mkChosen(options) {
"use strict";
$('#' + options.id).chosen({
allow_single_deselect: true,
placeholder_text_single: options.placeholder,
disable_search_threshold: 10,
no_results_text: options.noresults
});
}
// Función para la búsqueda de cuentas mediante filtros
function accSearch(continous, event) {
"use strict";
var lenTxtSearch = $('#txtSearch').val().length;
if (typeof (event) !== 'undefined' && ((event.keyCode < 48 && event.keyCode !== 13) || (event.keyCode > 105 && event.keyCode < 123))) {
return;
}
if (lenTxtSearch < 3 && continous === 1 && lenTxtSearch > window.lastlen && event.keyCode != 13) {
return;
}
window.lastlen = lenTxtSearch;
doSearch();
}
// Función para la búsqueda de cuentas mediante ordenación
function searchSort(skey, start, nav) {
"use strict";
if (typeof(skey) === "undefined" || typeof(start) === "undefined") return false;
if (order.key > 0 && order.key != skey) {
order.key = skey;
order.dir = 0;
} else if (nav != 1) {
order.key = skey;
if (order.dir === 1) {
order.dir = 0;
} else {
order.dir = 1;
}
}
$('#frmSearch').find('input[name="skey"]').val(order.key);
$('#frmSearch').find('input[name="sorder"]').val(order.dir);
$('#frmSearch').find('input[name="start"]').val(start);
doSearch();
}
// Función para la búsqueda de cuentas
function doSearch() {
"use strict";
var frmData = $("#frmSearch").serialize();
$.fancybox.showLoading();
$.ajax({
type: 'POST',
dataType: 'html',
url: APP_ROOT + '/ajax/ajax_search.php',
data: frmData,
success: function (response) {
$('#resBuscar').html(response);
$('#resBuscar').css("max-height", $('html').height() - windowAdjustSize);
if (order.key) {
$('#search-sort-' + order.key).addClass('filterOn');
if (order.dir === 0) {
$('#search-sort-' + order.key).append('
');
} else {
$('#search-sort-' + order.key).append('
');
}
}
},
error: function () {
$('#resBuscar').html(resMsg("nofancyerror"));
},
complete: function () {
scrollUp();
$.fancybox.hideLoading();
}
});
}
// Función para navegar por el log de eventos
function navLog(start, current) {
"use strict";
if (typeof(start) === "undefined") return false;
$.fancybox.showLoading();
$.ajax({
type: 'POST',
dataType: 'html',
url: APP_ROOT + '/ajax/ajax_eventlog.php',
data: {'start': start, 'current': current},
success: function (response) {
$('#content').html(response);
},
error: function () {
$('#content').html(resMsg("nofancyerror"));
},
complete: function () {
$.fancybox.hideLoading();
scrollUp();
setContentSize();
}
});
}
// Función para ver la clave de una cuenta
function viewPass(id, full, history) {
"use strict";
// Comprobamos si la clave ha sido ya obtenida para copiar
if (passToClip === 1 && full === 0) {
return;
}
$.ajax({
type: 'POST',
url: APP_ROOT + '/ajax/ajax_viewpass.php',
async: false,
data: {'accountid': id, 'full': full, 'isHistory': history, 'isAjax': 1},
success: function (data) {
if (data === "-1") {
doLogout();
} else {
if (full === 0) {
// Copiamos la clave en el objeto que tiene acceso al portapapeles
$('#clip_pass_text').html(data);
passToClip = 1;
} else {
resMsg("none", data);
}
}
}
});
}
// Función para obtener las variables de la URL y parsearlas a un array.
function getUrlVars() {
"use strict";
var vars = [], hash;
var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
for (var i = 0; i < hashes.length; i++) {
hash = hashes[i].split('=');
vars.push(hash[0]);
vars[hash[0]] = hash[1];
}
return vars;
}
// Función para autentificar usuarios
function doLogin() {
"use strict";
$.fancybox.showLoading();
var data = $('#frmLogin').serialize();
$("#btnLogin").prop('disabled', true);
$.ajax({
type: "POST",
dataType: "json",
url: APP_ROOT + '/ajax/ajax_doLogin.php',
data: data,
success: function (json) {
var status = json.status;
var description = json.description;
if (status === 0 || status === 2) {
location.href = description;
} else if (status === 3 || status === 4) {
resMsg("error", description);
$("#mpass").prop('disabled', false);
$('#smpass').show();
} else if (status === 5) {
resMsg("warn", description, '', "location.href = 'index.php';");
} else {
$('#user').val('').focus();
$('#pass').val('');
resMsg("error", description);
}
},
complete: function () {
$('#btnLogin').prop('disabled', false);
$.fancybox.hideLoading();
},
statusCode: {
404: function () {
var txt = LANG[1] + '
' + LANG[13] + '
'; resMsg("error", txt); }} }); return false; } // Función para salir de la sesión function doLogout() { "use strict"; var url = window.location.search; if (url.length > 0) { location.href = 'index.php' + url + '&logout=1'; } else { location.href = 'index.php?logout=1'; } } // Función para comprobar si se ha salido de la sesión function checkLogout() { "use strict"; var session = getUrlVars()["session"]; if (session === 0) { resMsg("warn", LANG[2], '', "location.search = ''"); } } // Función para añadir/editar una cuenta function saveAccount(frm) { "use strict"; var data = $("#" + frm).serialize(); var id = $('input[name="accountid"]').val(); var savetyp = $('input[name="savetyp"]').val(); var action = $('input[name="next"]').val(); $('#btnGuardar').attr('disabled', true); $.fancybox.showLoading(); $.ajax({ type: 'POST', dataType: 'json', url: APP_ROOT + '/ajax/ajax_accountSave.php', data: data, success: function (json) { var status = json.status; var description = json.description; if (status === 0) { resMsg("ok", description); if (savetyp === 1) { $('#btnSave').hide(); } else { $('#btnSave').attr('disabled', true); } if (action && id) { doAction(action, 'accsearch', id); } } else if (status === 10) { doLogout(); } else { resMsg("error", description); $('#btnSave').removeAttr("disabled"); } }, error: function (jqXHR, textStatus, errorThrown) { var txt = LANG[1] + '' + errorThrown + textStatus + '
'; resMsg("error", txt); }, complete: function () { $.fancybox.hideLoading(); } }); } // Función para eliminar una cuenta function delAccount(id, action, sk) { "use strict"; var data = {accountid: id, savetyp: action, sk: sk}; var atext = '' + LANG[3] + '
' + LANG[15] + '
' + errorThrown + textStatus + '
'; resMsg("error", txt); }, complete: function () { $.fancybox.hideLoading(); } }); } // Función para mostrar el formulario para cambio de clave de usuario function usrUpdPass(id, usrlogin) { "use strict"; var data = {'usrid': id, 'usrlogin': usrlogin, 'isAjax': 1}; $.fancybox.showLoading(); $.ajax({ type: "GET", cache: false, url: APP_ROOT + '/ajax/ajax_usrpass.php', data: data, success: function (data) { if (data.length === 0) { doLogout(); } else { $.fancybox(data, {padding: 0}); } } }); } // Función para mostrar los datos de un registro function appMgmtData(id, type, sk, active, view) { "use strict"; var data = {'id': id, 'type': type, 'sk': sk, 'active': active, 'view': view, 'isAjax': 1}; var url = APP_ROOT + '/ajax/ajax_appMgmtData.php'; $.fancybox.showLoading(); $.ajax({ type: 'POST', dataType: 'html', url: url, data: data, success: function (response) { $.fancybox(response, {padding: [0, 10, 10, 10]}); }, error: function (jqXHR, textStatus, errorThrown) { var txt = LANG[1] + '' + errorThrown + textStatus + '
'; resMsg("error", txt); }, complete: function () { $.fancybox.hideLoading(); } }); } // Función para editar los datos de un registro function appMgmtSave(frmId, isDel, id, type, sk, nextaction) { "use strict"; var data; var url = '/ajax/ajax_appMgmtSave.php'; if (isDel === 1) { data = {'id': id, 'type': type, 'action': 4, 'sk': sk, 'activeTab': frmId, 'onCloseAction': nextaction }; var atext = '' + LANG[12] + '
' + LANG[20] + '
' + LANG[6] + '
' + password + '
'); } else { alertify.alert('' + LANG[6] + '
' + genPassword + '
'); } if (dstId) { checkPassLevel(genPassword); $('#' + dstId + ' input:password').val(genPassword); $('#' + dstId + ' #passLevel').show(500); } else { checkPassLevel(genPassword); $('input:password').val(genPassword); $('#passLevel').show(500); } //return password; } // Funciones para analizar al fortaleza de una clave // From http://net.tutsplus.com/tutorials/javascript-ajax/build-a-simple-password-strength-checker/ function checkPassLevel(password, dstId) { "use strict"; strPassword = password; num.Excess = 0; num.Upper = 0; num.Numbers = 0; num.Symbols = 0; bonus.Combo = 0; bonus.FlatLower = 0; bonus.FlatNumber = 0; baseScore = 0; score = 0; if (password.length >= minPasswordLength) { baseScore = 50; analyzeString(); calcComplexity(); } else { baseScore = 0; } if (dstId) { outputResult(dstId); } else { outputResult(dstId); } } function analyzeString() { "use strict"; var chars = strPassword.split(''); for (var i = 0; i < strPassword.length; i++) { if (chars[i].match(/[A-Z]/g)) { num.Upper++; } if (chars[i].match(/[0-9]/g)) { num.Numbers++; } if (chars[i].match(/(.*[!,@,#,$,%,&,*,?,%,_])/)) { num.Symbols++; } } num.Excess = strPassword.length - minPasswordLength; if (num.Upper && num.Numbers && num.Symbols) { bonus.Combo = 25; } else if ((num.Upper && num.Numbers) || (num.Upper && num.Symbols) || (num.Numbers && num.Symbols)) { bonus.Combo = 15; } if (strPassword.match(/^[\sa-z]+$/)) { bonus.FlatLower = -15; } if (strPassword.match(/^[\s0-9]+$/)) { bonus.FlatNumber = -35; } } function calcComplexity() { "use strict"; score = baseScore + (num.Excess * bonus.Excess) + (num.Upper * bonus.Upper) + (num.Numbers * bonus.Numbers) + (num.Symbols * bonus.Symbols) + bonus.Combo + bonus.FlatLower + bonus.FlatNumber; } function outputResult(dstId) { "use strict"; var complexity, selector = '.passLevel'; if (dstId) { selector = '#' + dstId + ' .passLevel'; } complexity = $(selector); complexity.removeClass("weak good strong strongest"); if (strPassword.length === 0) { complexity.attr('title', '').empty(); } else if (strPassword.length < minPasswordLength) { complexity.attr('title', LANG[11]).addClass("weak"); } else if (score < 50) { complexity.attr('title', LANG[9]).addClass("weak"); } else if (score >= 50 && score < 75) { complexity.attr('title', LANG[8]).addClass("good"); } else if (score >= 75 && score < 100) { complexity.attr('title', LANG[7]).addClass("strong"); } else if (score >= 100) { complexity.attr('title', LANG[10]).addClass("strongest"); } $('.passLevel').powerTip(powertipOptions); } // Función para mostrar mensaje con alertify function resMsg(type, txt, url, action) { "use strict"; if (typeof url !== "undefined") { $.ajax({ url: url, type: 'get', dataType: 'html', async: false, success: function (data) { txt = data; }}); } var html; txt = txt.replace(/(\\n|;;)/g, "Oops...
' + LANG[1] + '
' + txt + '