function browser_detection()
{
	var agt=navigator.userAgent.toLowerCase();

	if (agt.indexOf("opera") != -1) return 'Opera';
	if (agt.indexOf("staroffice") != -1) return 'Star Office';
	if (agt.indexOf("webtv") != -1) return 'WebTV';
	if (agt.indexOf("beonex") != -1) return 'Beonex';
	if (agt.indexOf("chimera") != -1) return 'Chimera';
	if (agt.indexOf("netpositive") != -1) return 'NetPositive';
	if (agt.indexOf("phoenix") != -1) return 'Phoenix';
	if (agt.indexOf("firefox") != -1) return 'firefox';
	if (agt.indexOf("safari") != -1) return 'Safari';
	if (agt.indexOf("skipstone") != -1) return 'SkipStone';
	if (agt.indexOf("msie") != -1) return 'ie';
	if (agt.indexOf("netscape") != -1) return 'Netscape';
	if (agt.indexOf("mozilla/5.0") != -1) return 'Mozilla';
	if (agt.indexOf('\/') != -1)
	{
		if (agt.substr(0,agt.indexOf('\/')) != 'mozilla')
			return navigator.userAgent.substr(0,agt.indexOf('\/'));
		else
			return 'Netscape';
	}
	else if (agt.indexOf(' ') != -1)
		return navigator.userAgent.substr(0,agt.indexOf(' '));
	else
		return navigator.userAgent;
}

BROWSER = browser_detection();

function js_popup(url, ancho, alto, top, left){
	if(screen.height < (top + alto + 60))
		top = screen.height - alto - 60;

	if(screen.width < (left + ancho + 10))
		left = screen.width - ancho - 10;

	return window.open(url,'','toolbar=0,location=0,directories=0,menuBar=0,scrollbars=1,resizable=1,status=1,left=' + left + ',top=' + top + ',width=' + ancho + ',height=' + alto);
}

function js_popup_custom(url, name, ancho, alto, top, left, toolbar, location, directories, menubar, scrollbars, resizable, statusbar)
{
	if(screen.height < (top + alto + 60))
		top = screen.height - alto - 60;

	if(screen.width < (left + ancho + 10))
		left = screen.width - ancho - 10;

	toolbar = (!toolbar) ? 0 : toolbar;
	location = (!location) ? 0 : location;
	directories = (!directories) ? 0 : directories;
	menubar = (!menubar) ? 0 : menubar;
	scrollbars = (!scrollbars) ? 0 : scrollbars;
	resizable = (!resizable) ? 0 : resizable;
	statusbar = (!toolbar) ? 0 : statusbar;

	return window.open(url, name, 'toolbar=' + toolbar + ', location=' + location + ', directories=' + directories + ', menuBar=' + menubar + ', scrollbars=' + scrollbars + ', resizable=' + resizable + ', status=' + statusbar + ', left=' + left + ', top=' + top + ', width=' + ancho + ', height=' + alto);
}

function js_check_email(EMAIL)
{
	Exp = new RegExp(/^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@+([_a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]{2,200}\.[a-zA-Z]{2,6}$/);
	result = EMAIL.match(Exp);
	return result;
}

//Monitorea todo lo que se escribe
function js_keymonitor(e)
{
	key = window.event ? e.keyCode : e.which;

	if(key == 34)
		return false;

	if(key == 39)
		return false;

	return true;
}

//Previene que se presione enter en un campo
function js_noenter(e)
{
	key = window.event ? e.keyCode : e.which;

	if(key == 13)
	{
//		event.keyCode = 0;
		return false;
	}

	return true;
}

//Realiza una acción si se presiona enter en un campo
function check_enter(e, action)
{
	key = window.event ? e.keyCode : e.which;

	if(key == 13)
	{
		eval(action);
		return false;
	}
	return true;
}

function js_check_numeric(e)
{
	NUM = e.value + String.fromCharCode(event.keyCode);

	var REG1 = new RegExp("^[0-9]*(\\.[0-9]?[0-9]?)?$");

	if(REG1.test(NUM))
		return true;

	event.keyCode = 0;
	return true;
}

function js_check_exp(e, EXP)
{
	SPECIAL_KEYS = /[\x00\x08\x0D\x25\x27]/;

	if(BROWSER == "ie")
		NUM = e.keyCode;
	else
		NUM = e.which;

	if(NUM == 39)
		return false;

	CHR = String.fromCharCode(NUM);

	var REG1 = new RegExp("^" + EXP + "$");

	if(REG1.test(CHR) || SPECIAL_KEYS.test(CHR))
		return true;

	return false;
}

function js_check_float(evento, objeto, decimales, negativos)
{
	key = window.event ? evento.keyCode : evento.which;

	if(key == 0 || key == 8 || key == 13)
		return true;

	var SELECTION = js_selection_length(objeto);
	var NUM = objeto.value.substring(0 , SELECTION[0]) + String.fromCharCode(key) + objeto.value.substring(SELECTION[0] + SELECTION[1], objeto.value.length);
	if(typeof(negativos) == 'undefined')
		var REG1 = new RegExp("^[0-9]*?(\\.[0-9]{0," + decimales + "}?)?$");
	else
		var REG1 = new RegExp("^\-?[0-9]*?(\\.[0-9]{0," + decimales + "}?)?$");


	if(REG1.test(NUM))
		return true;

  return false;
}

function js_check_integer(event, element, negativos)
{
	key = window.event ? event.keyCode : event.which;
	if(key == 0 || key == 8 || key == 13)
		return true;

	if(BROWSER == "ie")
		NUM = element.value + String.fromCharCode(event.keyCode);
	else
		NUM = element.value + String.fromCharCode(event.which);;

	if(typeof(negativos) == 'undefined')
		var REG1 = new RegExp("^[0-9]*$");
	else
		var REG1 = new RegExp("^\-?[0-9]*$");

	if(REG1.test(NUM))
		return true;
	else
		return false;
}

function js_string_to_float(TEXT)
{
	NUMBER = parseFloat(TEXT);

	if(isNaN(NUMBER))
		NUMBER = 0;

	return NUMBER;
}

//Convierte lo tecleado en mayusculas
function js_uppercase()
{
	if(event.keyCode >= 97 && event.keyCode <= 122)
		event.keyCode = event.keyCode - 32;

	return true;
}

function js_change_checks(FORMA, CONTROL, PREFIJO)
{
	for (var CONT=0; CONT < FORMA.elements.length; CONT++)
	{
		var E = FORMA.elements[CONT];
		if (E.name != CONTROL.name && E.type == 'checkbox' && E.name.indexOf(PREFIJO) == 0)
		{
			E.checked = CONTROL.checked;
		}
	}
}

function js_number_format(VALOR, PUNTODECIMAL, SEPARADOR_MILES)
{
  if(arguments.length == 2)
    SEPARADOR_MILES = ",";

	if(arguments.length == 1)
	{
		SEPARADOR_MILES = ",";
    PUNTODECIMAL = ".";
  }

  VALOR = VALOR.toString();

	VALORES = VALOR.split(PUNTODECIMAL);
  ENTEROS = VALORES[0]; // parte entera
  DECIMAS = VALORES[1]; //parte decimal
  z = "";

  if(typeof(ENTEROS) != 'undefined')
  {
    for(i = ENTEROS.length-1; i >= 0; i--)
      z += ENTEROS.charAt(i);

   	z = z.replace(/(\d{3})/g, "$1" + SEPARADOR_MILES);
    if(z.slice(-SEPARADOR_MILES.length) == SEPARADOR_MILES)
      z = z.slice(0, - SEPARADOR_MILES.length);

    RESULTADO = "";
    for(i = z.length-1; i>=0; i--)
      RESULTADO += z.charAt(i);

    if (typeof(DECIMAS) != 'undefined' && DECIMAS.length > 0)
      RESULTADO += PUNTODECIMAL + DECIMAS;
  }
  return RESULTADO;
}


function str_replace(ENCONTRAR, REEMPLAZAR, TEXTO)
{
	var STRING_INDEX = TEXTO.indexOf(ENCONTRAR);

	while(STRING_INDEX != -1)
	{
		TEXTO = TEXTO.replace(ENCONTRAR, REEMPLAZAR);

		STRING_INDEX = TEXTO.indexOf(ENCONTRAR);
	}

	return TEXTO;
}

function js_setValueObject(FORMA, TYPE, PREFIJO, VALUE)
{
	var REG1 = new RegExp(PREFIJO);

	for(CONT = 0; CONT < FORMA.elements.length; CONT++)
	{
		if(FORMA.elements[CONT].type == TYPE && REG1.test(FORMA.elements[CONT].name) && !FORMA.elements[CONT].disabled)
		{
			switch (FORMA.elements[CONT].type)
			{
				case "select-one":
				case "select-multiple":
					if(VALUE)
						FORMA.elements[CONT].selectedIndex = VALUE;
					else
						FORMA.elements[CONT].selectedIndex = 0;
				break;

				case "text":
				case "hidden":
				case "textarea":
					if(VALUE)
						FORMA.elements[CONT].value = VALUE;
					else
						FORMA.elements[CONT].value = '';
				break;

				case "radio":
				case "checkbox":
					if(VALUE)
						FORMA.elements[CONT].checked = 1;
					else if(VALUE === '')
						FORMA.elements[CONT].checked = (FORMA.elements[CONT].checked ? 0 : 1);
					else
						FORMA.elements[CONT].checked = 0;
				break;
			}
		}
	}
}

function js_setValueObject_bytag(TAG, PREFIJO, VALUE)
{
	var EXPRESION = new RegExp("^" + PREFIJO);
	var ELEMENTOS = document.getElementsByTagName(TAG);

	for(i=0; i<ELEMENTOS.length; i++)
	{
		if(EXPRESION.test(ELEMENTOS[i].name))
		{
			switch (ELEMENTOS[i].type)
			{
				case "select-one":
				case "select-multiple":
					if(VALUE)
					{
						ELEMENTOS[i].selectedIndex = VALUE;
					}
					else
					{
						ELEMENTOS[i].selectedIndex = 0;
					}
				break;

				case "text":
				case "hidden":
				case "textarea":
					if(VALUE)
					{
						ELEMENTOS[i].value = VALUE;
					}
					else
					{
						ELEMENTOS[i].value = 0;
					}
				break;

				case "radio":
				case "checkbox":
					if(VALUE)
					{
						ELEMENTOS[i].checked = 1;
					}
					else
					{
						ELEMENTOS[i].checked = 0;
					}
				break;
			}
		}
	}
}

function js_change_check(OBJETO)
{
	if(OBJETO.checked)
		OBJETO.checked = false;
	else
		OBJETO.checked = true;
}

//Funcion que cambia de color un TR
function js_change_class(ELEMENTS, CLASS_NAME)
{
	ELEMENTS_ARRAY = new Array();

	ELEMENTS_ARRAY = ELEMENTS.split(":")
	for(i = 0; i < ELEMENTS_ARRAY.length; i++)
	{
		if(ELEMENTS_ARRAY[i] != "")
			document.getElementById(ELEMENTS_ARRAY[i]).className = CLASS_NAME;
	}
}

function rand_number()
{
	var num;
	now = new Date();
	num = (now.getSeconds());
	num = num + 1;
	return num;
}

function isset(EXPRESSION)
{
	try
	{
		if(eval(EXPRESSION)){}
	}
	catch(e)
	{
		return false;
	}

	return true;
}

function js_percentaje(PORCENTAJE, COSTO)
{
	eval(RESULT = Math.round((COSTO * (PORCENTAJE/100 + 1)) * 100) / 100);

	return RESULT;
}

function js_form_to_post(FORMA, PREFIJO)
{
	PREFIJO = PREFIJO.replace(/\[/g, '\\\[');
	PREFIJO = PREFIJO.replace(/\]/g, '\\\]');

	var REG1 = new RegExp("^" + PREFIJO);
	var POST_STRING = "";
	for(CONT = 0; CONT < FORMA.elements.length; CONT++)
	{
		var E = FORMA.elements[CONT];
		if(E.name && REG1.test(E.name))
		{
			if(E.type == 'select-multiple')
			{
				for(a = 1;  a < FORMA.elements[E.name].length; a++)
				{
					if(E.options[a].selected == true)
						POST_STRING = POST_STRING + E.name + "=" + escape(E.options[a].text).replace(/\+/g, '%2B') + "&";
				}
			}
			else if(E.type != "checkbox")
				POST_STRING = POST_STRING + E.name + "=" + escape(E.value).replace(/\+/g, '%2B') + "&";
			else if(E.checked)
				POST_STRING = POST_STRING + E.name + "=" + escape(E.value).replace(/\+/g, '%2B') + "&";
		}
	}
	return POST_STRING;
}

function js_getParams(URL, DELIMETER)
{
	var REPLACE="/+/gi";
	var URL=(URL ? URL : window.location.href);
	var DELIMETER=(DELIMETER ? DELIMETER : "&");

	URL=unescape(URL);
	URL=URL.replace(REPLACE, " ");
	URL=URL.toUpperCase();
	var s_PARAMS=URL.substring(URL.indexOf("?")+1, URL.length);
	var PARAMS=new Object();

	if (s_PARAMS.indexOf('#')!=-1)
	{
		ANCHOR=s_PARAMS.substring(s_PARAMS.indexOf("#")+1, s_PARAMS.length);
		s_PARAMS=s_PARAMS.slice(0, s_PARAMS.indexOf('#'));
		PARAMS["ANCHOR"]=ANCHOR;
	}

	var a_PARAMS=s_PARAMS.split(DELIMETER);

	for (var i=0; i<a_PARAMS.length; i++)
	{
		v_NAME=a_PARAMS[i].substring(0, a_PARAMS[i].indexOf("="));
		v_VALUE=a_PARAMS[i].substring(a_PARAMS[i].indexOf("=")+1, a_PARAMS[i].length);
		PARAMS[v_NAME]=v_VALUE;
	}
	return PARAMS
}

function js_print_r(ELEMENT, TABULAR)
{
    var TAB=(typeof(TABULAR)=='string') ? TABULAR + '\t' : '\t';
    var PARENT_TAB=(typeof(TABULAR)=='string') ? TABULAR : '';

    if(typeof(ELEMENT) == 'string')
	{
        var OUTPUT = "'" + ELEMENT + "'\n"
    }
	else if(typeof(ELEMENT) == 'boolean')
	{
        var OUTPUT=(ELEMENT ? 'true' : 'false') +"\n"
    }
	else if(typeof(ELEMENT) == 'object')
	{
        var OUTPUT=((ELEMENT.reverse)?'Array':'Object') + "\n"
        OUTPUT += PARENT_TAB + "(\n";
        for(var i in ELEMENT)
		{
            OUTPUT += TAB + "[" + i + "] => " + js_print_r(ELEMENT[i], TAB)
        }
        OUTPUT += PARENT_TAB + ")\n"
    }

    return OUTPUT
}

function popup_print_r(OBJETO)
{
	DEBUG = window.open('','Debugger');
	DEBUG.document.write("Debugger...<BR><PRE>");
	DEBUG.document.write(js_print_r(OBJETO));
	DEBUG.document.write("</PRE>");
}

function js_void()
{
}

function js_getElementsByPrefix(FORMA, PREFIJO)
{
	PREFIJO = PREFIJO.replace(/\[/g, '\\\[');
	PREFIJO = PREFIJO.replace(/\]/g, '\\\]');

	var REG1 = new RegExp("^" + PREFIJO);
	var ELEMENTOS = new Array();
	for(CONT = 0; CONT < FORMA.elements.length; CONT++)
	{
		var E = FORMA.elements[CONT];
		if(E.name && REG1.test(E.name))
			ELEMENTOS.push(E);
	}

	return ELEMENTOS;
}

function js_set_focus(ID)
{
  setTimeout ("check_element('" + ID + "')", 150);
}

function check_element(ID)
{
  var element = document.getElementById(ID);

  if( element.type != "hidden" && element.style.display != "none"  && !element.disabled && element.style.visibility != "hidden" )
  {
    try
    {
    	document.getElementById(ID).focus();
    }
    catch(e)
    {
     	alert(e);
    }
  }
  return;
}

function js_setFocusDelay(ID)
{
	setTimeout ("document.getElementById('" + ID + "').focus();", 100);
}

function js_selection_length(tb)
{
	var cursor = -1;
	var selection = 0;

	// IE
	if (document.selection && (document.selection != 'undefined'))
	{
		var _range = document.selection.createRange();
		selection = _range.text.length;
		var contador = 0;

		while (_range.move('character', -1))
			contador++;

		cursor = contador;
	}
	// FF
	else if (tb.selectionStart >= 0)
	{
		cursor = tb.selectionStart;
		selection = tb.selectionEnd - tb.selectionStart;
	}
	result = new Array(cursor, selection);

	return result;
}
