//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
var app_path = "";
var IE = document.all ? true : false;

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

function include(url) {	document.write("<script src='" + url + "'></script>"); }

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

include(app_path + "/js/lib/md5.js");
include(app_path + "/js/editor/editor.js");

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

function obj(id) { return typeof(id)=="string" ? document.getElementById(id) : id; }

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

function get_date() { return (new Date()).toLocaleString(); }

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

function uncheck(id) { obj(id).checked = false; }

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

function objF(id) { return obj(id).value; }

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

function objV(id, value) { obj(id).value = value; }

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

function key_exec(e, key, command) { e = IE ? event : e;   if (IE ? e.keyCode==key : e.which==key) if (!command()) { if(IE) { e.returnValue=false; } else { e.preventDefault()}} }

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////	

function on_key_return(command) { document.onkeypress = function(e) {key_exec(e, Event.KEY_RETURN, command); }}

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

function on_key(target, command, obj) { if (target==undefined || target==null) target = document;  Event.observe(target, "keypress", function(e) { key_exec(e, key, command); }, true); }

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

function encrypt(field) {
    obj(field).value = hex_md5(objF(field));
    return objF(field);
}

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

function encrypt2(field, key) {
    obj(field).value = hex_hmac_md5(objF(key), objF(field));
    return objF(field);
}

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

function encrypt3(field1, field2) { 
    if(obj(field1)&&objF(field1)) { 
	obj(field2).value = hex_md5(objF(field1));
	return objF(field2);
    }  
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

function highlight(object) { 
    object.style.content	 = object.style.backgroundColor; 
    object.style.backgroundColor = "#efece7";
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

function restore(object, color) { 
    object.style.backgroundColor = color ? color : object.style.content; 
}

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

var context_menu_selected = null;
function toggle_context_menu(obj){
    obj.firstChild.childNodes[3].style.display = obj.firstChild.childNodes[3].style.display == "none" ? "block" : "none"; 
    if (context_menu_selected && context_menu_selected != obj){  context_menu_selected.firstChild.childNodes[3].style.display = "none";}
    context_menu_selected = obj;
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

function trim(str) { return str.replace(/^\s*|\s*$/g,""); }

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

function hide(id) { obj(id).style.display = 'none'; }

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

function update_date(id, useDay) {
    obj(id).value = "";
    if(obj(id+"-month").value != '' && obj(id+"-year").value != ''){
        obj(id).value = obj(id+"-year").value + "-" + obj(id+"-month").value;
        if (obj(id+"-day")){
            if(useDay && obj(id+"-day").value == '' ){ obj(id+"-day").value = '01'; }
            obj(id).value = obj(id).value + "-" + obj(id+"-day").value;
        }
	obj(id).value = (useDay) ? obj(id).value : obj(id).value + "-1";
    } 
}

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

function update_mmddyyy_date(id, useDay) {
    obj(id).value = (useDay) && (obj(id+"-day") != undefined) ? obj(id+"-month").value + "/" + obj(id+"-day").value + "/" + obj(id+"-year").value : obj(id+"-month").value + "/" + obj(id+"-year").value;   
}

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

function make_reference(node_code, node_value) {
    obj(node_code).readOnly = "readOnly";
    obj(node_value).onchange = function(){obj(node_code).value = obj(node_value).value;}
    obj(node_code).value = obj(node_value).value;
}

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

function write_date() {
    var today = new Date();
    today = today.toLocaleString();
    today = today.substr(0, today.lastIndexOf(" "));
    if (document.all) today = today.substr(0, today.lastIndexOf(" "));
    document.write(today);	
}

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

var element_selected = null;

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function open_menu(option) {
    if (option && option.parentNode && option.parentNode.tagName) {
	if (option.parentNode.tagName.toUpperCase() == "DIV") option.parentNode.style.display = "block";
	open_menu(option.parentNode);
    }
}

function select_item(option) {
    if (option) {
	if (option.id == selected_item) {
	    option.className += " current ";
	    open_menu(option);
	} else {
	    select_item(option.nextSibling);
	    select_item(option.firstChild);
	}
    }
}

function close_menu(item) { 
    if (item && item.id!="menu") {
	var element = item.nextSibling ? (IE ? item.nextSibling : item.nextSibling.nextSibling)  : null;
	if (element && element.tagName && element.tagName.toUpperCase() == "DIV") {
	    element.style.display = "none";
	    close_menu(item.parentNode);
	}
    }
}

function toggle_menu(item) {
    var element = IE ? item.nextSibling : item.nextSibling.nextSibling;
    if (element && element.tagName && element.tagName.toUpperCase() == "DIV") {
	element.style.display = (element.style.display!="block") ? "block" : "none";
    }
    if (element_selected) {
	element_selected.className = element_selected.className.substr(0, element_selected.className.lastIndexOf(" ")-(IE ? 1 : 0));
    }
    item.className += " selected";
    element_selected = item;    
}

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Effect = {
    after: null,
    element: null,
    height: 0,
    timestamp: 0,
    blocked: false,
    velocity: 5,
    start: function (func) { setTimeout(function() { eval("Effect." + func + "();"); }, 1); },
    sinoidal: function(pos) {  return (-Math.cos(pos*Math.PI)/2) + 0.5; },
    process: function(id, func) {
	if (!this.blocked && func) {
	    this.blocked = true;
	    this.element = obj(id);
	    if (this.element) {
		this.timestamp = 0;				
		
		this.element.style.position = "relative";	
		
		var left = this.element.left;
		var display = this.element.style.display;
		left = left==undefined ? "0px" : left;
		display = display==undefined ? "" : display;
		
		if (func=="_blindDown") { this.element.style.left = "4000px"; } 
		this.element.style.display = "block";				
		this.element.style.overflow = "";
		
		this.height = this.element.style.height;
		this.height = (this.height == null || this.height == "")  ? this.element.offsetHeight : this.height.split("px")[0];
		this.height = Number(this.height);
		if (this.element.height==undefined || this.element.height=="" )  this.element.height = this.height;
		
		this.element.style.display = display;				
		this.element.style.left = left;
		this.element.style.overflow = "hidden";
		
		if (func=="_blindDown") {
		    this.height = 1;
		    this.element.style.height = "1px"; 
		}		
		
		this.start(func);
	    } else {
		this.blocked = false;
	    }
	}
    },
    toggle: function(id, after) {
	this.after = after;
	var element = obj(id);
	var func = (element.style.display == "none") ? "_blindDown" : "_blindUp";
	this.process(id, func);
    },
    blindUp: function(id, after) {
	this.after = after;	
	this.process(id, "_blindUp");
    },
    blindDown: function(id, after) {		
	this.after = after;
	this.process(id, "_blindDown");
    },	
    _blindUp: function() {
	if (this.height>1) {
	    var h = (this.element.height/this.velocity)*this.sinoidal(this.timestamp++/100);
	    this.height -= h;
	    if (this.height<1) this.height = 1;
	    this.element.style.height = this.height + "px";
	    this.start("_blindUp");	
	} else {
	    this.element.style.overflow = "hidden";
	    this.element.style.display = "none";
	    this.blocked = false;
	    if (this.after) this.after();
	}
    },
    _blindDown: function() {
	this.element.style.display = "";
	if (this.height<this.element.height) {
	    var h = (this.element.height/this.velocity)*this.sinoidal(this.timestamp++/100);
	    this.height += h;
	    this.element.style.height = this.height + "px";
	    this.start("_blindDown");		    
	} else {
	    this.element.style.height = this.element.height + "px";
	    //this.element.style.height = "";
	    this.element.style.display = "";
	    this.element.style.overflow = "";
	    this.blocked = false;
	    if (this.after) this.after();
	}
    }
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
var Event = {
    KEY_BACKSPACE: 8,
    KEY_TAB:       9,
    KEY_RETURN:   13,
    KEY_ESC:      27,
    KEY_LEFT:     37,
    KEY_UP:       38,
    KEY_RIGHT:    39,
    KEY_DOWN:     40,
    KEY_DELETE:   46,
    
    element: function(event) { 
	return event.target || event.srcElement; 
    },	
    
    isLeftClick: function(event) { 
	return (((event.which) && (event.which == 1)) || ((event.button) && (event.button == 1))); 
    },	
    
    pointerX: function(event) {	
	return event.pageX || (event.clientX + (document.documentElement.scrollLeft || document.body.scrollLeft)); 
    },	
    
    pointerY: function(event) { 
	return event.pageY || (event.clientY + (document.documentElement.scrollTop || document.body.scrollTop)); 
    },
    
    stop: function(event) {
	if (event.preventDefault) { 
	    event.preventDefault(); 
	    event.stopPropagation(); 
	} else {
	    event.returnValue = false;
	}
    },
    
    findElement: function(event, tagName) {
	var element = Event.element(event);
	while (element.parentNode && (!element.tagName || (element.tagName.toUpperCase() != tagName.toUpperCase())))
	    element = element.parentNode;
	return element;
    },
    
    observers: false,
    
    _observeAndCache: function(element, name, observer, useCapture) {
	if (!this.observers) this.observers = [];
	if (element.addEventListener) {
	    this.observers.push([element, name, observer, useCapture]);
	    element.addEventListener(name, observer, useCapture);
	} else if (element.attachEvent) {
	    this.observers.push([element, name, observer, useCapture]);
	    element.attachEvent('on' + name, observer);
	}
    },
    
    unloadCache: function() {
	if (!Event.observers) return;
	for (var i = 0; i < Event.observers.length; i++) {
	    Event.stopObserving.apply(this, Event.observers[i]);
	    Event.observers[i][0] = null;
	}
	Event.observers = false;
    },
    
    observe: function(element, name, observer, useCapture) {
	var element = obj(element);
	useCapture = useCapture || false;	
	if (name == 'keypress' && ((navigator.appVersion.indexOf('AppleWebKit') > 0) || element.attachEvent)) name = 'keydown';	
	this._observeAndCache(element, name, observer, useCapture);
    },
    
    stopObserving: function(element, name, observer, useCapture) {
	var element = obj(element);
	useCapture = useCapture || false;
	if (name == 'keypress' && ((navigator.appVersion.indexOf('AppleWebKit') > 0) || element.detachEvent)) name = 'keydown';
	if (element.removeEventListener) {
	    element.removeEventListener(name, observer, useCapture);
	} else if (element.detachEvent) {
	    element.detachEvent('on' + name, observer);
	}
    }
};

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

function dropdown_open_menu(menu_id, item) {
    item = obj(item);    
    if (item && item.id!=menu_id) {	
	var classname = item.className.substr(0, item.className.indexOf(" "));
	classname = classname == "" ? item.className : classname;			
	item.className = classname + " dropdown-selected";	
	if (item.parentNode.id!=menu_id+"_menu") {
	    item.parentNode.style.display = "block";
	    var parent = item.parentNode.id.substr(0, item.parentNode.id.length-2);
	    dropdown_open_menu(menu_id, parent);
	}
    }
}

function dropdown_close_menu(menu_id, item) {
    item = obj(item);
    if (item && item.id!=menu_id) {	
	var classname = item.className.substr(0, item.className.indexOf(" "));
	classname = classname == "" ? item.className : classname;			
	item.className = classname;	
	if (item.parentNode.id!=menu_id+"_menu") {
	    item.parentNode.style.display = "none";
	    var parent = item.parentNode.id.substr(0, item.parentNode.id.length-2);
	    dropdown_close_menu(menu_id, parent);			
	}
    }
}

function dropdown_toggle_menu(menu_id, item) {   
    item = obj(item);
    if (item) {
	dropdown_collapse_all(menu_id);
	var element_selected = obj(menu_id).value ? obj(obj(menu_id).value) : null;
	if (element_selected) dropdown_close_menu(menu_id, element_selected);
	dropdown_open_menu(menu_id, item);
	var submenu = obj(item.id+"|s");
	if (submenu) submenu.style.display = "block";
	obj(menu_id+"_label").value = item.innerHTML; 
	obj(menu_id).value = item.id; 		
    }	   	
}

function dropdown_collapse_all(menu_id) {
    var row = obj(menu_id+"_row");
    for(var i=IE?1:2; i<row.childNodes.length; i++) {
	var td = row.childNodes[i];
	for(var j in td.childNodes) {
	    var child = td.childNodes[j];
	    if (child.style) child.style.display = "none";			
	}
    }
}

function dropdown_reset(menu_id) {
    dropdown_collapse_all(menu_id);
    var element_selected = obj(menu_id).value ? obj(obj(menu_id).value) : null;        
    if (element_selected) dropdown_close_menu(menu_id, element_selected);
    obj(menu_id + "_label").value = ""; 
    obj(menu_id).value =obj(menu_id + "_default_root").value;     
}

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

function toggle(item) { item = obj(item); if(item) item.style.display = item.style.display!= "block" ? "block" : "none"; }

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

function toggle_comments(object){ var comment = object.nextSibling; comment.style.display = comment.style.display == "none" ? "" : "none"; }

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

function errorSystemGoto(folder, page_id, params){
    params  = params != "" ? '&' + params : "";
    folder  = folder != "" ? folder : "/";
    page_id = page_id != "" ? page_id : "home";
    document.location = folder + '?' + 'pid' + '=' + page_id +  params;
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function registry_encrypt() { 
    encrypt3("user_security_answer", "user_security_answer");
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function LoginUserValidation(element) {
    if (element && element.value!="" ) {
	encrypt(element);
	encrypt2(element, "key");
    }
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function encryptChangePassword(element1, element2) {
    var result = false;
    element1 = obj(element1);
    element2 = obj(element2);
    if (element1!=null && trim(objF(element1))!="" && element2!=null && trim(objF(element2))!="" ) {
	encrypt(element1);
	encrypt(element2);
	result = (objF(element1) == objF(element2)) ? true : false;
	if (!result) {
	    element1.value = "";
	    element2.value = "";
	    element1.focus();
	}
    }    
    return result;
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function encryptSecurityQuestion() {
    encrypt("user_security_answer");
    encrypt("user_security_answer_confirm");
    
    result = (objF("user_security_answer") == objF("user_security_answer_confirm")) ? true : false;
    if (!result) { alert("La respuesta de seguridad es diferente a la confirmación de la respuesta"); }
    
    if (!result) { 
	obj("user_security_answer").value = "";
	obj("user_security_answer_confirm").value = "";
    }
    return result;
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function SecurityAnswerValidation(element) {
    result = false;
    element = obj(element);
    if (trim(objF(element))!="") {
	encrypt(element);
	encrypt2(element, "key");
	result = true;
    } else { 
	obj(element).value = ""; 
    }
    return result;
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function sendform(id) {
    var form = obj(id);
    
    if (form) {
	var onsubmit = null;
	try { onsubmit = eval("validate" + form.name); } catch (e) { onsubmit = null; }
	if (onsubmit!=null) {
	    if (onsubmit(form)) form.submit();
	} else {
	    form.submit();
	}
    }
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function processForm() {
    sendform('data');
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//-----------------------------------------------------------------------------------------------------------------------------------
// FUNCIONES PARA RESTRICCIONES DEL KEY PRESS
//-----------------------------------------------------------------------------------------------------------------------------------
var STRING  = "|65|66|67|68|69|70|71|72|73|74|75|76|77|78|79|80|81|82|83|84|85|86|87|88|89|90|192|>";
var NUMERIC = "|-|49|50|51|52|53|54|55|56|57|48|96|97|98|99|100|101|102|103|104|105|>";
var SPACE   = "|32|>";
var SYMBOL  = "|+|49|50|51|52|53|54|55|56|57|48|96|97|98|99|100|101|102|103|104|105|>|186|187|222|191|189|190|188|226|111|106|109|107|110|219|221|>";
var NUMERIC_SEPARATORS = "|190|188|110|";

var ALPHANUMERIC = STRING + NUMERIC;
var SENTENCE     = STRING + NUMERIC + SPACE;
var EMAIL        = ALPHANUMERIC + SYMBOL;
var CURRENCY     = NUMERIC + NUMERIC_SEPARATORS;

function check_key(e, p) {
    var IE = document.all ? true : false;
    if (!e) var e = window.event;
    var c;
    if (e.keyCode) c = e.keyCode;
    else if (e.which) c = e.which;
    var range = p.split(">");
    var valid = false;
    for(var i=0; i<range.length; i++) {
        var t = range[i];
        var shifted = true; //NO IMPORTA SI ESTA O NO EL SHIFT PRESIONADO
        shifted = (t.indexOf("|+|") != -1) ?  (e.shiftKey ? true : false) : shifted; // SI IMPORTA QUE EL SHIFT ESTE PRESIONADO
        shifted = (t.indexOf("|-|") != -1) ? (!e.shiftKey ? true : false) : shifted; // SI IMPORTA QUE EL SHIFT NO ESTE PRESIONADO
        valid  |= (t.indexOf( "|" + c + "|") > -1) && shifted;         
    }
    if (!valid && !e.ctrlKey && !((c >= 33 && c <= 40) || (c==9) || (c==222) || (c==46) || (c==8))) {
        if (IE) {
	    event.cancelBubble = true;
	    event.returnValue = false;
	} else{
	    e.preventDefault();
	    e.stopPropagation();
	}
	return;
    }    
}
function listen(p) {
    return function(e) { check_key(e, p); };
}

//-----------------------------------------------------------------------------------------------------------------------------------
//ej: obj('nombre').onkeydown = listen(ALPHANUMERIC);
//-----------------------------------------------------------------------------------------------------------------------------------

function apply(func) { return function(e) { var t = document.all ? event.srcElement : e.target; func(t); } }
function upper(object) { object.value =  object.value.toUpperCase(); }
function lower(object) { object.value =  object.value.toLowerCase(); }
function capitalize(object) { 
    var value = object.value.toLowerCase(); 
    var tokens = value.split(" ");
    for(var i=0; i<tokens.length; i++) {
        tokens[i] = tokens[i].substr(0, 1).toUpperCase() + tokens[i].substr(1, tokens[i].length-1);
    }
    object.value = tokens.join(" ");
}

//---------------------------------------------------------------------------------------------------------------
function select_menu(id) {
   selected_item = id;
   select_item(obj("menu"));
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//----------- Aplica a varios formularios de client y prospect en /Intranet/ y /Banking/ --------------------------------------------------------

/** Verifica el RIF de un cliente jurídico que contenga solo 1 letra al comienzo. */
function valid_client_reference_id(client_reference_id){
    var str = client_reference_id.substring(0, 1);
    if (str != 'J' && str != 'j' && str != 'P' && str != 'p' && str != 'V' && str != 'v' && str != 'E' && str != 'e' && str != 'G' && str != 'g') return false;
    return true;
}
/** Eliminar ceros a la izquierda. */
function trimNumber(s) {
    while (s.substr(0,1) == '0' && s.length>1) { s = s.substr(1,9999); }
    return s;
}

/** Inicia el iframe para validar un id (CI/RIF) en la base de datos. */
function check_duplicate_reference(reference_id){
    //alert("enter function check_duplicate_reference()");
    var iframe_obj = obj("check_reference");
    iframe_obj.src = "/ssi/check_duplicate_reference.jsp?id=" + reference_id;
}

/** Comprueba en el iframe, si el documento de identificación  (CI/RIF) ha sido encontrado en el sistema */
function find_assert(){
    //alert("enter function find_assert()");
    var assert = confirm("El documento de identificación existe registrado en el sistema, ¿Desea asociar los dos perfiles?");
    if (assert){ assertion = true; } else { assertion = false; }
}
//---------------------------------------------------------------------------------------------------------------
function validate_number_format(value) {
    var amount = new String(value);
    amount = amount.replace(".","");
    amount = amount.replace(",",".");
    amount = Number(amount);
    return amount;
}

function format_currency(num) {
    //num = validate_number_format(num);
    num = num.toString().replace(/\$|\,/g,'');
    if(isNaN(num)) num = "0";
    sign = (num == (num = Math.abs(num)));
    num = Math.floor(num*100+0.50000000001);
    cents = num%100;
    num = Math.floor(num/100).toString();
    if(cents<10) cents = "0" + cents;
    for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++)
            num = num.substring(0,num.length-(4*i+3))+'.'+
            num.substring(num.length-(4*i+3));
    return (((sign)?'':'-') + num + ',' + cents);
}
