include('js/main-config.js');

/*VARIABLES GLOBALES DEL PROYECTO*/
//var clavesUsadas='';
var _SESSION=null;
var sessionUpdated=null; 
var pageTracker=null; //Google Analitycs
var instanciaData=null;//optimiza setInstanciaData
var diccionario='{"pr":"Puerto Rico Superior","pi":"Puerto Rico Intermedia","us":"Estados Unidos","es":"Espaï¿½a","cr":"Costa Rica","co":"Colombia","pe":"Perï¿½","cl":"Chile","ar":"Argentina","in":"Internacional","am":"American Master"}';
var diccionarioXSeccion=null;
var timerFunction="";
var timerFunctionLogged="";
var url_actual='';
var mainFocus=true;
var originalTitle='';
var seccion_actual=null;
var no_load=false; //para content_loader

if(typeof(JSON)!='object') include('js/util/json2.js');

/*if(jQuery.browser.msie && parseInt(jQuery.browser.version) == 7){
	include('css/_ie7/main.css');
}else{
	if(jQuery.browser.msie && parseInt(jQuery.browser.version) < 7){
		include('css/_ie6/main.css');
	}else{*/
		include('css/main.css');	
/*	}
}*/


include('js/main/main-com.js');
include('js/main/main-ui.js');
include('js/main-project/main-project-com.js');
include('js/main-project/main-project-ui.js');

$(document).ready(
	function() {
		try{
			
			$('#site_map').remove();
			//INCLUDES DE JSP
			includeJSP('includes/nav.jsp',$('#nav'),function(){});
			includeJSP('includes/header.jsp',$('#main_header'),function(){});
			includeJSP('includes/footer.jsp',$('#footer'),function(){});

			//anula Google analitycs en IE9
			//if(!(jQuery.browser.msie && parseInt(jQuery.browser.version) > 8)){
				initGA();//inicia Google Analityc Tracker
			//}
			url_actual=window.location.href;

			if(gup('instanciaId')=='17'){
				instanciaIdDefault=17;
				document.title = 'Operação Exito';				
			}
			
			if(urlBase.indexOf('operation')>-1){
				instanciaIdDefault=7;
				document.title = 'Operation Success';
			}
			//manejo de foco en la pagina, variable global para funciones varias
			originalTitle = document.title;

			$([window, document]).blur(function(){
				mainFocus = false;
			}).focus(function(){
				mainFocus = true;
				document.title = originalTitle;
			});

			//Inicia el tracer
			traceInit(show_trace);
			trace('main');
			
			$.ajaxSetup({
				url: "/xmlhttp/",
				type: 'POST',
				dataType: 'html',
				//timeout: 5000,
			    async:true,
			    global:false,
				beforeSend: function() {aBeforeSend(this);},
				error: function(e, xhr, settings, exception) {aError(e, xhr, settings, exception);},
				complete: function() {aComplete(this);},
				success: function() {aSuccess(this);}
			 });
			
			mainTimer(120000);
			loadSession();

			//ALERTA POR VERSION DEL NAVEGADOR
			if(getSession('instanciaId')==null && $.browser.msie && parseInt($.browser.version) < 8){
				msg('alert','OE - Operación Éxito','Para una correcta y óptima visualización de la página, debes tener actualizado tu Internet Explorer a la versión 8 .00 o superior.<br><br><a class="link-browser" href="http://www.microsoft.com/spain/windows/internet-explorer/worldwide-sites.aspx">Click para instalar IE8</a>',null,null);
			}


			//instancia por defecto
			if(gup('instanciaId')!=''){
				setInstanciaData(null,gup('instanciaId'),false);
			}else{
				if(getSession('instanciaId')==null){
					setInstanciaData(null,instanciaIdDefault,false);
				}else{
					setInstanciaData(null,getSession('instanciaId'),false);
				}			
			}		
			dumpSession();
			//en el caso q se refresque el browser resetea la config del instancia
			//if(getSession('instanciaId')!=null) setInstanciaData(null,getSession('instanciaId'),false);
			
			//Setea version de flash necesaria
			if (swfobject.hasFlashPlayerVersion("10.2.0")){
				// has Flash
			}else {
				if(jQuery.browser.msie){
					msg('confirm','Flash Player',i18n('flash_version_required'),function(e){if(e==true){window.open('http://get.adobe.com/es/flashplayer/?promoid=DJDZP','');}},null);
				}else{
					msg('confirm','Flash Player',i18n('flash_version_required'),function(e){if(e==true){window.open('http://get.adobe.com/es/flashplayer/?promoid=DJDZP','');}},null);
				}
			} 
			
		}catch(err){
			errorMsg(err,arguments);
			return null;
		}		
	}
);

function aBeforeSend(e){
	$('body').css('cursor', 'progress');  
	$('#preload').show();

}
function aError(e, xhr, settings, exception){
	//alert(xhr+'error in: ' + settings + ' \\n'+'error:\\n' + exception);
	$('body').css('cursor', 'default');
	$('#preload').hide();
}
function aComplete(e){
	$('body').css('cursor', 'default');
	$('#preload').hide();
}
function aSuccess(e){
	$('body').css('cursor', 'default');
	$('#preload').hide();
}

function gotoHref(href){
	//funcion para ir a una ubicacion interna determinada
	//ejemplo gotoHref(init_section)
	if(href.indexOf('ttp')!=-1){
		window.open('h'+href);
	}else{
		if(typeof $.history != 'undefined') $.history.load(href);
	}
}

/*chequea existencia de un archivo en una url relativa URI es sï¿½ncrono*/
function fileExists(uri){	
	var result='';
	$.ajax({
		url: uri,
		async:false,
		global:false,
		cache:false,
		type:'HEAD',
		success: function(html,state) {
			result=state;
		}
	});
	
	if(result=='success'){
		return true;
	}else{
		return false;
	} 
}

function afileExists(uri,success){
	$.ajax({
		url: uri,
		cache:false,
		type:'HEAD',
		error: function() {
			success(false);		
		},
		success: function() {
			success(true);
		}
	});
}

function initHistoryTracker(callback){
    $.history.init(callback);
    /*$('#main-content').find("*[rel='history']").click(function(){
        $.history.load(this.href.replace(/^.*#/, ''));
        return false;
    });*/
}

function parsearJSON(str){
	try{
		//alert('parsearJSON:'+str);
		//if(debug) alert('parsearJSON:'+str);
		if(str==null || str=='') return null;
		return eval('('+str+')');
	}catch(err){
		errorMsg(err,arguments);
		return null;
	}
}

function JSONtoString(json){
	try{
		//if(debug) alert('parsearJSON:'+str);
		return JSON.stringify(json);
	}catch(err){
		errorMsg(err,arguments);
		return null;
	}
}



function preEscribir(e,str){
	try{
		$(e).prepend(str);
		i18n($(e));
	}catch(err){
		errorMsg(err,arguments);
	}		
}

function postEscribir(e,str){
	try{
		$(e).append(str);
		i18n($(e));
	}catch(err){
		errorMsg(err,arguments);
	}		
}

function escribir(e,str){
	try{
		$(e).html(str);
		i18n($(e));
	}catch(err){
		errorMsg(err,arguments);
	}		
}

function msg(tipo,titulo,mensaje,callback,valor){
	try{
		titulo=i18n(titulo);
		mensaje=i18n(mensaje);
		if(tipo=='alert'){
			jAlert( mensaje, titulo, callback );
		}
		if(tipo=='confirm'){
			jConfirm( mensaje, titulo, callback );
		}
		if(tipo=='prompt'){
			jPrompt( mensaje, valor, titulo, callback );
			//ejemplo de uso: jPrompt( 'pregunta?','texto propuesto','titulo',function(e){alert(e);} );
		}
	}catch(err){
		errorMsg(err,arguments);		
	}
}

function errorMsg(err,arg){
	try{
		if(debug){
			name=arg.callee.toString().substring(arg.callee.toString().indexOf('function')+9,arg.callee.toString().indexOf('('));
			alert('ERROR en funcion "'+name+'"\n\n'+err.name + ': ' + err.message);
		}
	}catch(err){
		if(debug){ alert('ERROR en funcion "errorMsg"\n\n'+err.name + ': ' + err.message);}		
	}		
}

function getFlash(objeto, src, idFlash, ancho, alto, parametros){
	try{
	/*var so = new SWFObject("includes/"+src, idFlash, ancho, alto, "9", "#FF6600"); 
	so.addParam("allowScriptAccess", "always");
	so.addParam("wmode", "transparent");
	
    // parametros debe ser un arreglo
	for(var i=0; i<parametros.length; i++){
		so.addVariable("var_"+i, parametros[i]);
	}
	so.write(objeto);
	return null;*/
	objeto=objeto.replace(/#/g,'');
	escribir($('#'+objeto), '<div id="flashObjectConteiner"></div>');
	var vars = {};
    // parametros debe ser un arreglo
	for(var i=0; i < parametros.length; i++){
		//swfobject.addVariable("var_"+i, parametros[i]);
		vars["var_"+i] = parametros[i];
	}

	var params = {
		//scale: "noScale",
		allowScriptAccess: "always",
		//allowFullSCreen: "true",
		quality:'high',
		wmode:'transparent'
	};

	var attributes = {
		id: 'flash____'+idFlash,
		name: 'flash____'+idFlash
	};

	var callback=null;
	$('#'+objeto).addClass('flash');
	
	var url="includes/"+src;
	if(src.indexOf('http')==0) url=src;

	swfobject.embedSWF(url, "flashObjectConteiner", ancho, alto, "9.0.24", null, vars, params, attributes, callback);

	return null;
	}catch(err){
		errorMsg(err,arguments);
		return null; 
	}
}

function initFlowplayer(autoPlay,autoBuffering){
	//FLOWPLAYER INIT
	try{
		if(!autoPlay) autoPlay=false;
		if(!autoPlay) autoBuffering=false;
		$(document).find('script').each(
			function(i,it){
				if($(it).attr('src')!=null){
					if($(it).attr('src').indexOf('flowplayer-3.2.0')>-1){
						$(it).remove();
						$(it).unload();
					}
				}
			}
		);
	
		$.include('js/util/flowplayer-3.2.0.min.js', function(){
			flowplayer("a.flowplayer", "./includes/flowplayer.swf", {
				// this is the player configuration. You'll learn on upcoming demos.
				plugins:  {
					controls:  {
						//volume: false,
						play: true,
						mute: false,
						time:false
					}
				},
				
				clip:  {
					autoPlay: autoPlay,
					autoBuffering: autoBuffering
				}
			});
		});
	
	}catch(err){
		errorMsg(err,arguments);
		return null; 
	}
}

function resetScripts(){
	$(document).find('script').each(
		function(i,it){
			if($(it).attr('src')!=null){
				if($(it).attr('src').indexOf('#')>-1){
					$(it).remove();
					$(it).unload();
				}
			}
		}
	);
	$(document).find('link').each(
		function(){
			if($(this).attr('href')!=null){
				if($(this).attr('href').indexOf('#')>-1){
					$(this).unload();
					$(this).remove();
				}
			}
		}
	);
}

/*   
 *     EVENTS TRACER
 */    
function traceInit(show){
	try{
		if(typeof v_trace=="undefined"){
			v_trace='- tracer initiated -\n';
			var html='';
			html+='<span id="system_trace" style="z-index:100000;text-align:center; width:100px; position:absolute; font-weight:1000; cursor:pointer; background: #ddd" onClick="alert(getTrace());">Show Trace</span>';
			html+='<span id="system_trace_reset" style="z-index:100000;left:102px; text-align:center; width:25px; position:absolute; font-weight:1000; cursor:pointer; background: #ddd" onClick="v_trace=\'- tracer reseted -\\n\';">R</span>';
			html+='<span id="system_trace_session" style="z-index:100000;left:129px; text-align:center; width:25px; position:absolute; font-weight:1000; cursor:pointer; background: #ddd" onClick="alert(unescape(JSONtoString(_SESSION)));">S</span>';
			$('body').prepend(html);
		}
		if(show){ 
			$('#system_trace').show();
			$('#system_trace_reset').show();
			$('#system_trace_session').show();
		}else{
			$('#system_trace').hide();
			$('#system_trace_reset').hide();
			$('#system_trace_session').hide();
		}

	}catch(err){
		errorMsg(err,arguments);
	}
}

function trace(str){
	try{
		if($('#system_trace').css('display')=='none') return null;
		v_trace+=str+'\n';
	}catch(err){
		//corrije si no se inicio el tracer para q no de error
		traceInit(true);
		v_trace+=str+'\n';
	}
}

function getTrace(){
	try{
		return v_trace;
	}catch(err){
		errorMsg(err,arguments);
		return null;
	}
}

/*   
 *     SESSION FUNCTIONS
 */

function setSession(param,value){
	//no guarda session si tiene el mismo valor
	if(getSession(param)==value) return;
	
	if(value==null) value='';
	if(_SESSION==null) loadSession();
	
	//guarda la variable de session local	
	_SESSION[param] = escape(value);
	if(value=='') delete _SESSION[param];
	//sessionUpdated=true; 
  
	//guarda session en controlador
	var valores='accion=setSession';
	valores+='&param='+escape($.base64Encode(param));
	valores+='&value='+escape($.base64Encode(value));
	
	url='Util_Servlet';

	$.ajax({
	    url: url,
	    data: valores,
	    success: function(response){
	    }
	});	
}

function dumpSession(){
	return;
	/*if(_SESSION==null) return;
	var duration=60000;
	//solo hace el dumping si hay cambios
	if(sessionUpdated==null) sessionUpdated=true;
	if(!sessionUpdated){
		setTimeout( function()
		{ dumpSession(duration);
		}, duration);
		return;
	}
	trace('dumpSession');
	//guardo session en el servidor java
	var valores='accion=dumpSession';
	valores+='&value='+$.base64Encode(JSONtoString(_SESSION));

	url='Util_Servlet';

	$.ajax({
	    url: url,
	    data: valores,
	    success: function(response){
			sessionUpdated=false;
			setTimeout( function()
			{ dumpSession(duration);
			}, duration);
	    }
	});*/
}

function getSession(param){
	if(_SESSION==null) loadSession();
	if(_SESSION[param]==null || _SESSION[param]==''){
		return null;
	}else{
		return unescape(_SESSION[param]);
	}
}

function loadSession(){
	try{
		trace('loadSession');
		var valores='accion=getSession';
		
		url='Util_Servlet';
	
		$.ajax({
		    url: url,
		    data: valores,
		    async:false,
		    global:false,
			success: function(response){
				_SESSION=parsearJSON($.base64Decode(response)); 
			}
		});
	}catch(err){
		errorMsg(err,arguments);
		return null;
	}
}

function delSessionAttr(param){
	//delete _SESSION[param];
	setSession(param,'');
	//sessionUpdated=true;
}

/*   
 *     i18n FUNCTIONS
 */

function i18n(e){
	try{
		if(e=='[object Object]'){
			$(e).find(".i18n-set").each(function(i){
				$(this).remove();
			});

			/*if(jQuery.browser.msie && parseInt(jQuery.browser.version) < 8){
				//si es IE7
				$(e).find(".i18n").each(function(i,element){
					if($(this).attr('tagName')=='OBJECT'){
						$('<span class="i18n">'+$(this).html()+'</span>').insertAfter($(this));
						$(this).remove();
					}
				});
			}*/
			
			$(e).find(".i18n").each(function(i,element){
				$(this).show();
				if(getDicValor($(this).html())!=null){
					//if(clavesUsadas.indexOf($(this).html())==-1) clavesUsadas+=$(this).html()+'\n';
					if(jQuery.browser.msie){					
						$('<span class="i18n-set">'+getDicValor($(this).html())+'</span>').hide().insertAfter($(this)).show();
					}else{
						$('<object class="i18n-set">'+getDicValor($(this).html())+'</object>').hide().insertAfter($(this)).show();
					}
					$(this).hide();
				}
			});
		}else{	
			if(getDicValor(e)!=null){
				//if(clavesUsadas.indexOf(e)==-1) clavesUsadas+=e+'\n';
				e=getDicValor(e);
			}
		}
		return e;
		//i18n($('body')).html(); ejecutar esto cuando hace click en el selector de PAIS
	}catch(err){
		//error con enter en la clave
		if(getDic().toString().indexOf('\n')>-1){
			alert('Error en clave i18n: '+getDic().substring(
					getDic().toString().lastIndexOf('","',getDic().toString().indexOf('\n'))+2,
					getDic().toString().indexOf('","',getDic().toString().indexOf('\n'))+1 
				)
			);
		}
		
		errorMsg(err,arguments);
		return null;
	}		
}

function getDicValor(clave){
	clave=clave.replace(new RegExp('\n','g'),'');
	clave=clave.replace(new RegExp('\r','g'),'');	
	var Ji18n=null;
	if(getDic()!=''){ 
		Ji18n=parsearJSON(getDic());
		return Ji18n[clave];
	}else{
		return null;
	}
}

function getDic(){
	var mainDic=diccionario.replace(/{/g,'').replace(/}/g,'');
	if(diccionarioXSeccion=='{}') diccionarioXSeccion=null;
	var seccionDic=((diccionarioXSeccion)?(','+diccionarioXSeccion.replace(/{/g,'').replace(/}/g,'')):'');
	var out='{'+mainDic+seccionDic+'}';
	if(out=='{,}') out = '{}';
	return out;
}

function setDic(json){
	diccionario='{';
	for(var i=0 ; i < json.filas.length ; i++){
		diccionario+=((i==0)?'':',')+'"'+json.filas[i].clave+'":"'+json.filas[i].valor+'"';
	}
	diccionario+='}';
}

function formatDic(json){
	var dic='{';
	for(var i=0 ; i < json.filas.length ; i++){
		dic+=((i==0)?'':',')+'"'+json.filas[i].clave+'":"'+json.filas[i].valor+'"';
	}
	dic+='}';
	return dic;
}

function isNumberKey ( evt )
{
    var charCode = ( evt.which ) ? evt.which : event.keyCode;
    if ( charCode != 44 && charCode != 45 && charCode != 46
        && (charCode > 31 && (charCode < 48 || charCode > 57) )
        && !(evt.ctrlKey && (charCode=99 || charCode==118)) )
    {
        return false;
    }

    return true;
}

function valCuit(e){
    var cuit = e.value.toString().replace(/[-_]/g, "");
    cuit = cuit.replace(/^\s*|\s*$/g,"");
    
    if (cuit == ''){
        return true; //No estamos validando si el campo esta vacio, eso queda para el "required"
    }
    if (cuit.length != 11){
        setFocus(e);
        alert('CUIT/CUIL incompleto');
        return false;
    } else {
        var mult = [5, 4, 3, 2, 7, 6, 5, 4, 3, 2];
        var total = 0;
        for (var i = 0; i < mult.length; i++) {
            total += parseInt(cuit[i]) * mult[i];
        }
        var mod = total % 11;
        var digito = mod == 0 ? 0 : mod == 1 ? 9 : 11 - mod;
    }
    if(!(digito == parseInt(cuit[10]))){
        setFocus(e);
        alert('CUIT/CUIL invï¿½lido');
        return false;
    }
    return true;
}
function picture(e,evt,masc)
{	//implementacion al campo input agregar el atributo onkeypress="return picture(this,event,'AA/ZZ/9999');"
	//A=alfabetico , Z=alfanumerico, 9=numerico
	masc=masc.toUpperCase();
	
    var pos=getSelectionStart(e);
    var posEnd=getSelectionEnd(e);
    var setPos=pos;
	var mascPos=masc.substring(pos,pos+1);    
    var charCode = ( evt.which ) ? evt.which : evt.keyCode;

    //Ctrl+C, V, X
    if(evt.ctrlKey && (charCode==88 || charCode==86 || charCode==67)){
        setSelectionRange(e, 0, 13);return true;
    }
    
    if((charCode >=16 && charCode <=18) || 
		charCode ==27 || 
		(charCode >=37 && charCode <=40) || 
		charCode ==9 || 
		(charCode >=112 && charCode <=123) || 
		charCode ==8 || 
		charCode ==46 || 
		(charCode >=33 && charCode <=36)) //inicio fin repag avpag 
    		return true; //flechas o tab o funciotn keys
    if(pos==masc.length) return false; //limite de longitud de caracteres
	if(pos < masc.length){
   		if(mascPos!='X' && mascPos!='Z' && mascPos!='9' && mascPos!='A'){
            e.value=e.value.substring(0,pos)+mascPos+e.value.substring(posEnd+1,255);
            
            //pos++;
            setPos=pos+1;
        }
    	if(mascPos=='Z'){//alfanumerico libre
    		//deja todos los caracteres    		
    	}else{

    		if(mascPos=='9'){ //numerico
	            if(
	            	!(charCode >= 48 && charCode <= 57 && !evt.shiftKey && !evt.ctrlKey && !evt.altKey) &&//numerico  
	            	!(charCode >= 96 && charCode <= 105 && !evt.shiftKey && !evt.ctrlKey && !evt.altKey)//numerico num bloq
	            ){
	            	return false;
	            }
	    	}else{
	    		if(mascPos=='A'){ //alfabetico
	    			if(
    					!(charCode >= 65 && charCode <= 90 && !evt.ctrlKey && !evt.altKey)//alfabetico	    					
   					){
		            	return false;
		            }
		    	}else{
		    		if(mascPos=='X'){ //alfanumerico estricto con punto y guiones
		                if(  
	                    	//numerico
	                    	!(charCode >= 48 && charCode <= 57 && !evt.shiftKey && !evt.ctrlKey && !evt.altKey) &&
	                    	//numerico num bloq
	    	            	!(charCode >= 96 && charCode <= 105 && !evt.shiftKey && !evt.ctrlKey && !evt.altKey) &&
	                    	//alfabetico
	                    	!(charCode >= 65 && charCode <= 90 && !evt.ctrlKey && !evt.altKey) &&
	                    	//caracteres especiales
	                    	!(charCode == 190 && !evt.shiftKey) && //(.)
	                    	!(charCode == 109) && //(-_) 
	                    	!(charCode == 189) && //(-_) --IE7 y IE6
	                    	!(charCode == 192) //(ñ)
	                    ){
	                    	return false;
	                    }
		    		}
		    	}
	    	}
    	}
        e.value=e.value.substring(0,pos)+e.value.substring(posEnd+1,255);
        //setPos=pos+1;
	}
    var value=e.value;
    //elimina los caracteres separadores
    for(var i=0 ; i < masc.length ; i++){
    	var masci=masc.substring(i,i+1);  
    	if(masci!='X' && masci!='Z' && masci!='9' && masci!='A'){
    		value=value.replace(new RegExp(masci,'g'),'');
    	}
    }
    //agrega espacios para completar la longitud de la mascara
    if(masc.replace(/[X]|[A]|[Z]|[9]/g,'')!=''){
    	for(var i=value.length ; i<masc.length ; i++) value+=' ';
    }
    //inserta los separadores donde corresponde
    for(var i=0 ; i < masc.length ; i++){
    	var masci=masc.substring(i,i+1);
    	if(masci!='X' && masci!='Z' && masci!='9' && masci!='A'){
	    	if(i>pos){
	    		value=value.substring(0,i-1)+masci+value.substring(i-1,masc.length);
	    	}else{
	    		value=value.substring(0,i)+masci+value.substring(i,masc.length);
	    	}
    	}
    }
    value=value.substring(0,masc.length);
    e.value=value;
    
    setSelectionRange(e, setPos, setPos);

    return true;
}

function valPassword(e,evt)
{	
	//implementacion al campo input agregar el atributo onkeypress="return picture(this,event,'AA/ZZ/9999');"
	//A=alfabetico , Z=alfanumerico, 9=numerico
	
    var charCode = ( evt.which ) ? evt.which : evt.keyCode;

    //Ctrl+C, V, X
    if(evt.ctrlKey && (charCode==88 || charCode==86 || charCode==67)){
        setSelectionRange(e, 0, 13);return true;
    }
    
    if((charCode >=16 && charCode <=18) || 
		charCode ==27 || 
		(charCode >=37 && charCode <=40) || 
		charCode ==9 || 
		(charCode >=112 && charCode <=123) || 
		charCode ==8 || 
		charCode ==46 || 
		(charCode >=33 && charCode <=36)) //inicio fin repag avpag 
    		return true; //flechas o tab o funciotn keys
    
    if( //numerico
    	!(charCode >= 48 && charCode <= 57 && !evt.shiftKey && !evt.ctrlKey && !evt.altKey) &&
    	//especiales
    	!(charCode >= 51 && charCode <= 57 ) && !(charCode == 49 ) && 
    	//numerico num bloq
    	!(charCode >= 96 && charCode <= 105 && !evt.shiftKey && !evt.ctrlKey && !evt.altKey) &&
    	//alfabetico
    	!(charCode >= 65 && charCode <= 90 && !evt.ctrlKey && !evt.altKey) &&
    	//caracteres especiales
    	!(charCode == 190 && !evt.shiftKey) && //(.)
    	!(charCode == 109) && //(-_) 
    	!(charCode == 189) && //(-_) --IE7 y IE6
    	!(charCode == 192) //(ñ)
    ){
    	return false;
    }
    return true;
}
/*   
 *     CURSOR FUNCTIONS
 */

//usar esta funcion para el set focus porq en firefox no funciona en e.focus()
function setFocus(input)
{
  focusField=input;
  setTimeout("focusField.focus()", 50);
}

function getSelectionStart(o) {
	if (o.createTextRange) {
		var r = document.selection.createRange().duplicate();
		r.moveEnd('character', o.value.length);
		if (r.text == '') return o.value.length;
		return o.value.lastIndexOf(r.text);
	} else return o.selectionStart;
}

function getSelectionEnd(o) {
	if (o.createTextRange) {
		var r = document.selection.createRange().duplicate();
		r.moveStart('character', -o.value.length);
		return r.text.length;
	} else return o.selectionEnd;
}


function setSelectionRange(e, selectionStart, selectionEnd) {
  if (e.createTextRange) {
      var range = e.createTextRange();
      range.collapse(true);
      range.moveEnd('character', selectionEnd);
      range.moveStart('character', selectionStart);
      range.select();
  }
  else if (e.setSelectionRange) {
      setFocus(e);
      e.setSelectionRange(selectionStart, selectionEnd);
  }
}

function selFieldText(e){
	var e= document.getElementById(e);
	setSelectionRange(e, 0, getSelectionEnd(e));
}

function padL(str,chr,len){
	for(i=0;i<len;i++) str=chr+str;	
	str=str.substring(str.length-len,str.length);
	return str;
}

function padR(str,chr,len){
	for(i=0;i<len;i++) str=str+chr;	
	str=str.substring(0,len);
	return str;
}

function formatText(tipo,str){
	if(tipo=='ti'){
		str=str.toLowerCase( );
		return str.replace(/^(.)|\s(.)|[.](.)/g, function($1){ return $1.toUpperCase( ); });		
	}
	if(tipo=='or'){
		str=str.toLowerCase( );
		return str.replace(/^(.)|[.]\s(.)|[.](.)|[\n\r](.)/g, function($1){ return $1.toUpperCase( ); });  
	}
	if(tipo=='ma'){
		return str.toUpperCase( );
	}
	if(tipo=='mi'){
		return str.toLowerCase( );
	}
}

/* MAIN TIMER */ 
function mainTimer(duration){
	try{
		setTimeout( function()
		{
			//alert('timer');
			trace('ejecucion-mainTimer');
			eval(timerFunction);
			if(getSession('userData')!=null) eval(timerFunctionLogged);
			mainTimer(duration);
		}, duration);
		return null;
	}catch(err){
		errorMsg(err,arguments);
		return null;
	}
}

/* PAGINADOR CON LISTAS UL/LI */
function newPager(offset,total,xPage,xPageGroup,pagerContainer,list,Class,actClass){
	/*
	 * Funciï¿½n utilizada para crear paginador a partir de listas ul/li
	 * 
	 * parametros:
	 * -offset: pagina la lista a partir del <offset> elemento
	 * -total: cantidad de elementos
	 * -xPage: cuantos elementos de la lista muestra por pagina
	 * -xPageGroup: cantidad de paginas a mostrar por agrupadas en las flechas
	 * -pagerContainer: id del contenedor de la paginas 
	 * -list: id del objecto ul que contiene los li
	 * -Class: nombre de la clase css para la pagina INACTIVA
	 * -actClass: nombre de la clase css para la pagina activa
	 * 
	 * ejemplo de uso: home-ui.js / pintarNoticias()
	 */
	var group=1;
	var paginas='<ul id="page_groups" class="paginador-groups" style="margin:0px; padding:0px; display:inline; list-style:none; float:right;" >\n';
	paginas += '<li>\n';
	paginas += '<span class="'+Class+'-prev " onClick="listGotoPage(this,\'-1\','+Math.ceil((total-offset)/xPage)+',\''+list+'\',\''+actClass+'\');"> PREV </span>\n';
	paginas += '</li>\n';
	for(var i = 1 ; i <= Math.ceil((total-offset)/xPage) ; i++){
		if(i%xPageGroup==1){
			if(i==1){
				paginas += '<li style="display:block;" id="page_group_'+group+'" >';
			}else{
				paginas += '</li>';
				paginas += '<li style="display:none;" id="page_group_'+group+'" >'; 
			}
			group++;
		}
		//paginas += (i > 1 && i%xPageGroup!=1)?'-':'';
		paginas += '<span class="'+Class+' '+((i == 1)?''+actClass+'':'') +'" onClick="listGotoPage(this,'+i+','+Math.ceil((total-offset)/xPage)+',\''+list+'\',\''+actClass+'\');">'+i+'</span>';
	}
	paginas+='<li>\n';
	paginas+='<span class="'+Class+'-next " onClick="listGotoPage(this,\'+1\','+Math.ceil((total-offset)/xPage)+',\''+list+'\',\''+actClass+'\');"> NEXT </span>\n';
	paginas+='</li>\n';	
	paginas+='</ul>\n';
	
	escribir($(pagerContainer),paginas);

	if(Math.ceil((total-offset)/xPage) < 2){
		$(pagerContainer).hide();
	}else{
		$(pagerContainer).show();
	}
}


function listGotoPage(caller,page,totalPages,list,activeClassName){
	/*
	 * Funciï¿½n utilizada para mostrar galerias hechas con ul/li
	 * 
	 * parametros:
	 * -caller: es el objecto html que tiene el onClick
	 * -page: pï¿½gina que muestra
	 * -totalPages: cantidad de paginas 
	 * -list: id del objecto ul que contiene los li
	 * -activeClassName: nombre de la clase css para la pagina activa
	 * 
	 * ejemplo de uso: home-ui.js / pintarNoticias()
	 */
	var paginador=$(caller).parent().parent();
	//valida click en la misma pagina
	if(page==$(paginador).find('.'+activeClassName).html()) return;
	if( page.toString().indexOf('+')==0 || page.toString().indexOf('-')==0 ){
		$(paginador).children('li').each(
			function(i,it){
				$(this).children().each(
					function(j,it1){
						if($(this).attr('class').indexOf(activeClassName)>-1){
							page = parseInt($(this).html())+parseInt(page);
							if(page==0) page=1;
							if(page>totalPages) page=totalPages;
						}
					}
				);
			}
		);
	}
	
	if($(paginador) != null && activeClassName != null){
		$(paginador).children('li').each(
			function(i,it){
				if($(this).attr('id')!='') $(this).css('display','none');
				$(this).children().each(
					function(j,it1){
						$(this).removeClass(activeClassName);
						if(parseInt($(this).html())==page){
							$(this).addClass(activeClassName);
							$(it).css('display','block');
						}
					}
				);
			}
		);
	}

	$(list).children('li').each(
		function(i,it){
			$(this).hide();
			if(i==(page-1)){
				if($.browser.safari)
					$(this).show();
				else
					$(this).fadeIn(1000);
				
			}
		}
	);
}

function initCarousel(e,cant){
	$(e).jcarousel({
        wrap: 'last',
        scroll: cant
    });
}	

function initUploader(e,multi,label,onComplete,onAllComplete){ 
	$(e).uploadify({
	    'uploader': 'includes/uploadify.swf',
	    'script': 'MisAlumnos_Uploader',
	    'buttonText': label,
	    'buttonImg': 'css/images/btn_upload.jpg',
		'height' : 35,
		'width' : 35,
	    'cancelImg': 'css/images/ico_cerrar.gif',
	    'onComplete': onComplete,
	    'onAllComplete': onAllComplete,
	    'multi': multi
	});
	$('#uploadifyUploader').addClass('uploader');
}

function initGA(){
	try {
		if(ga_code_tracker=='') return null;
		_uacct = ga_code_tracker;
		urchinTracker();
		pageTracker=_gat._getTracker(ga_code_tracker);
		//pageTracker._trackPageview();
	} catch (err) {
		alert('Google Analitycs:'+err);
	}
}

function getViewerType(mime){
	
   if (mime == "ppt" || mime == "pptx" ||mime == "doc" ||mime == "docx" ||mime == "pdf" ){
	 return "gviewer";
   }
   else{
	return mime;   
   }
}

function dateStringFormat(fecha){
	var hora = fecha.substring(11, 16);
	var dia = fecha.substring(8, 10);
	var mes = fecha.substring(5, 7);
	var ano = fecha.substring(0, 4);
	return (dia + '-' + mes + '-' + ano + ' ' + hora +' hs');
}

function getInstanciaById(instanciaId){
	//devuelve json
	var json=null;
	if(instanciaData.instancias!=null){
		$.each(instanciaData.instancias, function(i,it){
			if(it.instanciaId==instanciaId){
				json=it	;	
			}
		});
	}
	return json;
}

function includeJSP(url,container){
	$.ajax({
	    url: url,
	    async:false,
	    global:false,	    
	    success: function(response){
			$(container).html(response);
			i18n($(container));
	    }
	});	
}

function reloadPage(){
	location.reload(true);
}

function urlFromUri(uri){
	return cdsServer +'/cds/'+uri;
}

/*if(filtro == 'producto'){
	productosJson.filas.sort(sort_by(filtro, (reversa=='true')? true : false, function(a){return a.toUpperCase();}));
}else{
	productosJson.filas.sort(sort_by(filtro, (reversa=='true')? true : false, parseInt));
}*/


function sortBy(field, reverse, tipo){
	//tipo valor i o s
	var primer=null;
	if(tipo=='i'){
		primer=parseInt;
	}else{
		primer=function(a){return $.browser.msie? a : a.toUpperCase();};
	}

	reverse = (reverse) ? -1 : 1;
	return function(a,b){
		a = a[field];
		b = b[field];
		
		if (typeof(primer) != 'undefined'){
			a = primer(a);
			b = primer(b);
		}

		if (a<b) return reverse * -1;
		if (a>b) return reverse * 1;
		return 0;	
	};
}

function roundNumber(rnum, rlength) { 
	// Arguments: number to round, number of decimal places
	var newnumber = Math.round(rnum*Math.pow(10,rlength))/Math.pow(10,rlength);
	return parseFloat(newnumber); // Output the result to the form field (change for your purposes)
}

/*OE ALL*/



//var urlBase= 'http://190.11.205.86:8125/OEv6/';
//var urlBase= 'http://localhost:8080/OEv6/';
var urlBase=getBaseURL();

//include('js/'+getNameJSP()+'/'+getNameJSP()+'.js#');
//include('css/'+getNameJSP()+'/'+getNameJSP()+'.css#');

function include(file){
	if(file.indexOf('.css')>-1){
		document.write('<link href="'+file+'" rel="stylesheet" type="text/css" />');
	}else{
		document.write('<script type="text/javascript" src="'+file+'"></script>');
	}
}
/*function gotoHref(name){
	alert(name);
}*/
function getNameJSP() {
	var url = window.location.href;
	name=url.substring(url.lastIndexOf('/')+1,(url.lastIndexOf('.jsp')>-1)?url.lastIndexOf('.jsp'):10000);
	if(name=='index' || name=='')
		return init_section; 
	else
		return name;
}

function getBaseURL() {
	var url = window.location.href;
	baseURL=url.substring(0,url.lastIndexOf('/')+1);
	return baseURL;
}

function gup( name )
{
	name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
	var regexS = "[\\?&]"+name+"=([^&#]*)";
	var regex = new RegExp( regexS );
	var results = regex.exec( unescape(url_actual) ); 
	if( results == null )
	return "";
	else
	return results[1];
}

function inspect(obj, maxLevels, level)
{
  var str = '', type, msg;

    // Start Input Validations
    // Don't touch, we start iterating at level zero
    if(level == null)  level = 0;

    // At least you want to show the first level
    if(maxLevels == null) maxLevels = 1;
    if(maxLevels < 1)     
        return '<font color="red">Error: Levels number must be > 0</font>';

    // We start with a non null object
    if(obj == null)
    return '<font color="red">Error: Object <b>NULL</b></font>';
    // End Input Validations

    // Each Iteration must be indented
    str += '<ul>';

    // Start iterations for all objects in obj
    for(property in obj)
    {
      try
      {
          // Show "property" and "type property"
          type =  typeof(obj[property]);
		  if(obj[property]!=null){
          str += '<br><li><span style="color:#00e">(' + type + ') ' + property + 
                 ( (obj[property]==null)?(': <b>null</b>'):('')) + '</span> = '+obj[property]+'</li>';
		  }
          // We keep iterating if this property is an Object, non null
          // and we are inside the required number of levels
          if((type == 'object') && (obj[property] != null) && (level+1 < maxLevels))
          str += inspect(obj[property], maxLevels, level+1);
      }
      catch(err)
      {
        // Is there some properties in obj we can't access? Print it red.
        if(typeof(err) == 'string') msg = err;
        else if(err.message)        msg = err.message;
        else if(err.description)    msg = err.description;
        else                        msg = 'Unknown';

        str += '<li><font color="red">(Error) ' + property + ': ' + msg +'</font></li>';
      }
    }

    // Close indent
    str += '</ul>';
      
	if($('#dialog_modal_inspect').html()==null)
		$('body').append('<div id="dialog_modal_inspect"></div>');
	
	var ok=false;
	$("#dialog_modal_inspect").html(str);
	  
	$("#dialog_modal_inspect").dialog({
		draggable: false,
		resizable: false,
		width: 500,
		modal: true,
		title: 'Inspect',
		close: null,
		buttons: { "CERRAR": function() { ok=false; $(this).dialog("close"); } } 
	});

    return str;
}

function enviarMail(to,cc,bcc,name,subject,body,success){
	try{
		var valores="'accion':'enviarMail',";
		valores+="'to':'"+to+"',";	
		valores+="'cc':'"+cc+"',";
		valores+="'bcc':'"+bcc+"',";
		valores+="'name':'"+escape(name)+"',";
		valores+="'subject':'"+escape(subject)+"',";
		valores+="'body':'"+escape(body)+"'";

		valores='parametrosJSON='+$.base64Encode('{'+valores+'}');
		
		url='Util_Servlet';
		
		$.ajax({
		    url: url,
		    data: valores,
		    success: function(response){
				success(parsearJSON($.base64Decode(response)));
			}
		});
	}catch(err){
		errorMsg(err,arguments);
		return null;
	}	
}

