// JavaScript Document
var nextfield = "";
Array.prototype.swap=function(a, b)
{
	var tmp=this[a];
	this[a]=this[b];
	this[b]=tmp;
}

function LEFT(ancho)
{
	return (window.screen.width/2) - (ancho/2);
}

function TOP(alto)
{
	return (window.screen.height/2) - (alto/2);
}

function NAV()
{
	if (window.navigator.appName.indexOf("Explorer") != -1)
		return "IE";
	else
		return "FF";
}

function copyToClipboard(texto)
{
	if (window.clipboardData)
		window.clipboardData.setData("Text", texto);
	else
	{
		var flashcopier = 'flashcopier';
		if(!document.getElementById(flashcopier)) 
		{
			var divholder = document.createElement('div');
			divholder.id = flashcopier;
			document.body.appendChild(divholder);
		}
		document.getElementById(flashcopier).innerHTML = '';
		var divinfo = '<embed src="include/_clipboard.swf" FlashVars="clipboard='+encodeURIComponent(texto)+'" width="0" height="0" type="application/x-shockwave-flash"></embed>';
		document.getElementById(flashcopier).innerHTML = divinfo;
	}
	return true;
} 

function getClipboard()
{
	if (window.clipboardData)
		return window.clipboardData.getData("Text");
	else
	{
		netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
		
		var clip = Components.classes['@mozilla.org/widget/clipboard;1'].createInstance(Components.interfaces.nsIClipboard);
		if (!clip) return;
		
		var trans = Components.classes['@mozilla.org/widget/transferable;1'].createInstance(Components.interfaces.nsITransferable);
		if (!trans) return;
		
		trans.addDataFlavor('text/unicode');
		
		var str = new Object();
		var len = new Object();
		
		var str = Components.classes["@mozilla.org/supports-string;1"].createInstance(Components.interfaces.nsISupportsString);
		
		var strlength;
		
		trans.getTransferData("text/unicode", str, strlength);
		
		var clipid = Components.interfaces.nsIClipboard;
		
		if (!clip) return false;
		
		return clip.getData(trans, clipid.kGlobalClipboard);
	}
}

function solo_nros(e, objid)
{
var er, char;
	er = new RegExp(/\d/);
	obj = document.getElementById(objid);
	if (NAV() == "IE")
	{
		char = String.fromCharCode(e.keyCode);
		if (er.test(char) == false)
			return false;
		else
		{
			er = new RegExp(/^\d*$/);
			if (obj.title == obj.value)
			{
				obj.title = '';
				return char;
			}
			else
			{
				if (er.test(obj.value + char) == false)
					return false;
				else
					return char;
			}
		}
	}
	else// Netscape/Firefox/Opera
	{
		if ((String(e.ctrlKey) == "true") && ((e.charCode == 118) || (e.charCode == 86)))
			return true
		
		if (e.keyCode == 0)
			char = String.fromCharCode(e.which);
		else if (e.keyCode == 13)
				char = "";
			else
				char = String.fromCharCode(e.keyCode);
		if ((er.test(char) == false) && (e.keyCode != 8) && (e.keyCode != 9) && (e.keyCode != 46) && (e.keyCode != 13) && (e.keyCode != 116))
			return false;
		else if ((e.keyCode == 8) || (e.keyCode == 9) || (e.keyCode == 46) || (e.keyCode == 116) || (e.keyCode == 37) || (e.keyCode == 39))
				return e.keyCode;
			else if (e.keyCode == 13)
				{
					if (obj.onkeyup == "")
						Proximo_Focus(objid);
					//return true;
				}
				else
				{
					if (er.test(obj.value + char) == false)
						return false;
					else
						return char;
				}
	}
}

function solo_decimal(e, objid)
{
var er, char, obj;
	er = new RegExp(/^[0-9]|\./);
	if (NAV() == "IE")
	{
		char = String.fromCharCode(e.keyCode);
		if (er.test(char) == false)
			return false;
		else
		{
			er = new RegExp(/^[0-9]+\.?[0-9]*$/);
			obj = document.getElementById(objid);
			if (obj.title == obj.value)
			{
				if (er.test(char) == false)
					return false;
				else
				{
					obj.title = '';
					return char;
				}
			}
			else
			{
				if (er.test(obj.value + char) == false)
					return false;
				else
					return char;
			}
		}
	}
	else// Netscape/Firefox/Opera
	{
		if ((String(e.ctrlKey) == "true") && ((e.charCode == 118) || (e.charCode == 86)))
			return true;
			
		if (e.keyCode == 0)
			char = String.fromCharCode(e.which);
		else if (e.keyCode == 13)
				char = "";
			else
				char = String.fromCharCode(e.keyCode);
		if ((er.test(char) == false) && (e.keyCode != 8) && (e.keyCode != 9) && (e.keyCode != 46) && (e.keyCode != 13) && (e.keyCode != 116))
			return false;
		else if ((e.keyCode == 8) || (e.keyCode == 9) || (e.keyCode == 46) || (e.keyCode == 116))
				return e.keyCode;
			else if (e.keyCode == 13)
				{
					Proximo_Focus(objid);
					return;
				}
				else
				{
					er = new RegExp(/^[0-9]+\.?[0-9]{0,2}$/);
					obj = document.getElementById(objid);
					if (obj.value == obj.title)
					{
						if (er.test(char) == false)
							return false;
						else
						{
							obj.title = '';
							return char;
						}
					}
					else
					{
						if (er.test(obj.value + char) == false)
							return false;
						else
							return char;
					}
				}
	}
}

function valor_solo_nros(obj)
{
	var valor = obj.value;
	var er = new RegExp(/\d/);
	var result = "";
	for (var i = 0; i < valor.length; i++)
	{
		if (er.test(valor.charAt(i)))
			result += valor.charAt(i);
	}
	obj.value = result;
}

function solo_letras(e, objid)
{
var er, char;
	er = new RegExp(/[A-Za-z\á\é\í\ó\ú\Á\É\Í\Ó\Ú\ñ\Ñ\ ]/);
	if (NAV() == "IE")
	{
		char = String.fromCharCode(e.keyCode);
		if (er.test(char) == false)
			return false;
		else
			return char;
	}
	else// Netscape/Firefox/Opera
	{
		if ((String(e.ctrlKey) == "true") && ((e.charCode == 118) || (e.charCode == 86)))
			return true;
			
		if (e.keyCode == 0)
			char = String.fromCharCode(e.which);
		else if (e.keyCode == 13)
				char = "";
			else
				char = String.fromCharCode(e.keyCode);
		if ((er.test(char) == false) && (e.keyCode != 8) && (e.keyCode != 9) && (e.keyCode != 46) && (e.keyCode != 13) && (e.keyCode != 116))
			return false;
		else if ((e.keyCode == 8) || (e.keyCode == 9) || (e.keyCode == 46) || (e.keyCode == 116))
				return e.keyCode;
			else if (e.keyCode == 13)
				{
					if (Def(objid))
						Proximo_Focus(objid);
					//return true;
				}
				else
					return char;
	}
}

function Nombre_Campos(e)
{
var er, char;
	er = new RegExp(/[A-Za-z\_0-9]/);
	if (NAV() == "IE")
	{
		char = String.fromCharCode(e.keyCode);
		if (er.test(char) == false)
			return false;
		else
			return char;
	}
	else// Netscape/Firefox/Opera
	{
		if ((String(e.ctrlKey) == "true") && ((e.charCode == 118) || (e.charCode == 86)))
			return true;
			
		if (e.keyCode == 0)
			char = String.fromCharCode(e.which);
		else if (e.keyCode == 13)
				char = "";
			else
				char = String.fromCharCode(e.keyCode);
		if ((er.test(char) == false) && (e.keyCode != 8) && (e.keyCode != 9) && (e.keyCode != 46) && (e.keyCode != 13) && (e.keyCode != 116))
			return false;
		else if ((e.keyCode == 8) || (e.keyCode == 9) || (e.keyCode == 46) || (e.keyCode == 116))
				return e.keyCode;
			else if (e.keyCode == 13)
				{
					Proximo_Focus(objid);
					return;
				}
				else
					return char;
	}
}

function solo_alfanumerico(e, objid)
{
var er, char;
	er = new RegExp(/[a-zA-Z0-9]/);
	if (NAV() == "IE")
	{
		char = String.fromCharCode(e.keyCode);
		if (er.test(char) == false)
			return false;
		else
		{
			er = new RegExp(/^[a-zA-Z0-9]*$/);
			obj = document.getElementById(objid);
			if (obj.title == obj.value)
			{
				obj.title = '';
				return char;
			}
			else
			{
				if (er.test(obj.value + char) == false)
					return false;
				else
					return char;
			}
		}
	}
	else// Netscape/Firefox/Opera
	{
		if ((String(e.ctrlKey) == "true") && ((e.charCode == 118) || (e.charCode == 86)))
			return true;
			
		if (e.keyCode == 0)
			char = String.fromCharCode(e.which);
		else if (e.keyCode == 13)
				char = "";
			else
				char = String.fromCharCode(e.keyCode);
		if ((er.test(char) == false) && (e.keyCode != 8) && (e.keyCode != 9) && (e.keyCode != 46) && (e.keyCode != 13) && (e.keyCode != 116))
			return false;
		else if ((e.keyCode == 8) || (e.keyCode == 9) || (e.keyCode == 46) || (e.keyCode == 116))
				return e.keyCode;
			else if (e.keyCode == 13)
				{
					Proximo_Focus(objid);
					return;
				}
				else
					return char;
	}
}

function sin_nros(e, objid)
{
var er, char;
	er = new RegExp(/\D/);
	if (NAV() == "IE")
	{
		char = String.fromCharCode(e.keyCode);
		if (er.test(char) == false)
			return false;
		else
			return char;
	}
	else// Netscape/Firefox/Opera
	{
		if ((String(e.ctrlKey) == "true") && ((e.charCode == 118) || (e.charCode == 86)))
			return true;
			
		if (e.keyCode == 0)
			char = String.fromCharCode(e.which);
		else if (e.keyCode == 13)
				char = "";
			else
				char = String.fromCharCode(e.keyCode);
		if ((er.test(char) == false) && (e.keyCode != 8) && (e.keyCode != 9) && (e.keyCode != 46) && (e.keyCode != 13) && (e.keyCode != 116))
			return false;
		else if ((e.keyCode == 8) || (e.keyCode == 9) || (e.keyCode == 46) || (e.keyCode == 116))
				return e.keyCode;
			else if (e.keyCode == 13)
				{
					Proximo_Focus(objid);
					return;
				}
				else
					return char;
	}
}

function solo_fechas(e)
{
var er, char;
	er = new RegExp(/[0-9\/]/);
	if (NAV() == "IE")
	{
		char = String.fromCharCode(e.keyCode);
		if (er.test(char) == false)
			return false;
		else
			return char;
	}
	else // Netscape/Firefox/Opera
	{
		if ((String(e.ctrlKey) == "true") && ((e.charCode == 118) || (e.charCode == 86)))
			return true;
			
		if (e.keyCode == 0)
			char = String.fromCharCode(e.which);
		else if (e.keyCode == 13)
				char = "";
			else
				char = String.fromCharCode(e.keyCode);
		if ((er.test(char) == false) && (e.keyCode != 8) && (e.keyCode != 9) && (e.keyCode != 46) && (e.keyCode != 13) && (e.keyCode != 116))
			return false;
		else if ((e.keyCode == 8) || (e.keyCode == 9) || (e.keyCode == 46) || (e.keyCode == 116))
				return e.keyCode;
			else if (e.keyCode == 13)
				{
					Proximo_Focus(objid);
					return;
				}
				else
					return char;
	}
}

function solo_decimal_mil(e, objid)
{
var er, char, obj;
	er = new RegExp(/^[0-9]|\./);
	if (NAV() == "IE")
	{
		char = String.fromCharCode(e.keyCode);
		if (er.test(char) == false)
			return false;
		else
		{
			er = new RegExp(/^[0-9]+\.?[0-9]{0,3}$/);
			obj = document.getElementById(objid);
			if (obj.title == obj.value)
			{
				if (er.test(char) == false)
					return false;
				else
				{
					obj.title = '';
					return char;
				}
			}
			else
			{
				if (er.test(obj.value + char) == false)
					return false;
				else
					return char;
			}
		}
	}
	else // Netscape/Firefox/Opera
	{
		if ((String(e.ctrlKey) == "true") && ((e.charCode == 118) || (e.charCode == 86)))
			return true;
			
		if (e.keyCode == 0)
			char = String.fromCharCode(e.which);
		else if (e.keyCode == 13)
				char = "";
			else
				char = String.fromCharCode(e.keyCode);
		if ((er.test(char) == false) && (e.keyCode != 8) && (e.keyCode != 9) && (e.keyCode != 46) && (e.keyCode != 13) && (e.keyCode != 116))
			return false;
		else if ((e.keyCode == 8) || (e.keyCode == 9) || (e.keyCode == 46) || (e.keyCode == 116))
				return e.keyCode;
			else if (e.keyCode == 13)
				{
					Proximo_Focus(objid);
					return;
				}
				else
				{
					er = new RegExp(/^[0-9]+\.?[0-9]{0,3}$/);
					obj = document.getElementById(objid);
					if (obj.title == obj.value)
					{
						if (er.test(char) == false)
							return false;
						else
						{
							obj.title = '';
							return char;
						}
					}
					else
					{
						if (er.test(obj.value + char) == false)
							return false;
						else
							return char;
					}
				}
	}
}

function solo_decimal_y_negativos(e, objid)
{
var er, char, obj;
	er = new RegExp(/^\-|[0-9]|\./);
	if (NAV() == "IE")
	{
		char = String.fromCharCode(e.keyCode);
		if (er.test(char) == false)
			return false;
		else
		{
			obj = document.getElementById(objid);
			if (obj.title == obj.value)
			{
				er = new RegExp(/^(\-|[0-9])$/);
				if (er.test(char) == false)
					return false;
				else
				{
					obj.title = '';
					return char;
				}
			}
			else
			{
				er = new RegExp(/^\-?[0-9]+\.?[0-9]{0,2}$/);
				if (er.test(obj.value + char) == false)
					return false;
				else
					return char;
			}
		}
	}
	else // Netscape/Firefox/Opera
	{
		if ((String(e.ctrlKey) == "true") && ((e.charCode == 118) || (e.charCode == 86)))
			return true;
			
		if (parseInt(e.keyCode) == 0)
			char = String.fromCharCode(e.which);
		else if (e.keyCode == 13)
				char = "";
			else
				char = String.fromCharCode(e.keyCode);
		if ((er.test(char) == false) && (e.keyCode != 8) && (e.keyCode != 9) && (e.keyCode != 46) && (e.keyCode != 13) && (e.keyCode != 116))
				return false;
		else if ((e.keyCode == 8) || (e.keyCode == 9) || (e.keyCode == 46) || (e.keyCode == 116))
				return e.keyCode;
			else if (e.keyCode == 13)
				{
					Proximo_Focus(objid);
					return;
				}
				else
				{
					obj = document.getElementById(objid);
					if (obj.value == obj.title)
					{
						er = new RegExp(/^(\-|[0-9])$/);
						if (er.test(char) == false)
							return false;
						else
						{
							obj.title = '';
							return char;
						}
					}
					else
					{
						er = new RegExp(/^\-?[0-9]+\.?[0-9]{0,2}$/);
						if (er.test(obj.value + char) == false)
							return false;
						else
							return char;
					}
				}
	}
}

function Proximo_Focus(objid)
{
var pos = 0;
	/*if (document.getElementById(objid).form)
	{
		var form = document.getElementById(objid).form;
		for (var i = 0; i < form.elements.length; i++)
		{
			if (form.elements[i].id == objid)
			{
				for (var j = (i + 1); j < form.elements.length; j++)
				{
					if ((form.elements[i].type != "hidden") && (!form.elements[i].disabled)
						&& (form.elements[i].style.display != "none") && (form.elements[i].style.visibility != "hidden"))
					{
						pos = j;
						break;
					}
				}
			}
			if (pos > 0)
				break;
		}
		
		if ((pos > 0) && (Def(form.elements[pos])))
			form.elements[pos].focus();
	}*/
}

function Completa_Decimal(objid, cant_decimal)
{
var valor;
	var obj = document.getElementById(objid);
	if (obj.value == undefined)
		valor = obj.innerHTML;
	else
		valor = obj.value;
		
	if (valor != '')
	{
		/*if ((valor.search(/\./) != -1) && (valor.search(/[0-9]\./) == -1))
			valor = '';
		else if (valor.search(/\./) == -1)
				valor += '.00';
			else if (valor.search(/\.[0-9]/) == -1)
					valor += '00';
				else if (valor.search(/\.[0-9][0-9]/) == -1)
						valor += '0';
					else	
					{*/
						if (isNaN(cant_decimal))
							cant_decimal = 2;
						valor = Redondea(valor, cant_decimal);	
					//}
	}
	else
		valor = "0.00";
	
	if (obj.value == undefined)
		obj.innerHTML = valor;
	else
		obj.value = valor;
}

function Redondea(valor, cant_decimales)
{
	if (valor.indexOf(".", 0) != -1)
	{
		if (cant_decimales == 0)
			return String(Math.round(valor)) + ".00";
		else
		{
			var decimales = valor.substr(valor.indexOf(".", 0) + 1);
			var aux = decimales.substr(cant_decimales, 1);
			var decimales_fin = valor.substr(valor.indexOf(".", 0) + 1, cant_decimales);
			var cero = 0;
			while ((decimales_fin.substr(cero, 1) == "0") && (cero < (cant_decimales - 1)))
				cero++;
			var maximo = "1";
			for (var i = 0; i < cant_decimales; i++)
				maximo += "0";
			
			if (!isNaN(aux))
			{
				if (aux >= 5)
					decimales_fin++;
				if (decimales_fin == maximo)
				{
					var entero = parseInt(valor.substr(0, valor.indexOf(".", 0)));
					if (entero < 0)
						entero--;
					else
						entero++;
					return String(entero) + "." + maximo.replace("1", "");
				}
				else if (String(decimales_fin).length > cant_decimales)
						decimales_fin = parseInt(String(decimales_fin).substr(0, cant_decimales));
					else if (cero > 0)
						{
							var i = 0;
							while ((String(decimales_fin).length < cant_decimales) && (i < cero))
							{
								decimales_fin = "0" + String(decimales_fin);
								i++;
							}
						}
			}
			
			for (var i = decimales_fin.length; i < cant_decimales; i++)
				decimales_fin = String(decimales_fin) + "0";
		
			return String(valor.substr(0, valor.indexOf(".", 0))) + "." + decimales_fin;
		}
	}
	else	
	{
		if (valor == "")
			valor = "0";
		valor += ".";
		for (var i = 0; i < cant_decimales; i++)
			valor += "0";
		return String(valor);
	}
}

function nros_y_letras(e)
{
var er, char;
	er = new RegExp(/[A-Za-z\á\é\í\ó\ú\Á\É\Í\Ó\Ú\ñ\Ñ0-9\ ]/);
	if (window.event) //IE
	{
		char = String.fromCharCode(e.keyCode);
		if (er.test(char) == false)
			return false;
		else
			return char;
	}
	else if(e.which) // Netscape/Firefox/Opera
		{
			char = String.fromCharCode(e.which);
			if (er.test(char) == false)
				return false;
			else
				return char;
		}
}

function ctrl_long(obj, long)
{
var valor = obj.value;
	
	if (valor.length >= long)
	{
		window.event.keyCode = 0;
		alert("Ha llegado a la longitud máxima");
	}
}

function ctrl_paste(obj, long)
{
var pegado = window.clipboardData.getData("Text");
var text = obj.value + pegado;

	if (text.length >= long)
	{
		window.event.returnValue = false;
		alert("Ha llegado a la longitud máxima");
	}
}

function FocoText(objid)
{
	if (Def(objid))
	{
		var obj = document.getElementById(objid);
		obj.style.backgroundColor = "#FFFFCC";
		obj.style.border = "1px groove #FFFFFF";
		obj.style.borderTop = "1px solid #A5ACB2";
		obj.style.borderLeft = "1px solid #A5ACB2";
		obj.select();
	}
}

function SinFocoText(objid)
{
	if (Def(objid))
	{
		var obj = document.getElementById(objid);
		obj.style.backgroundColor = "";
		obj.style.border = "1px solid #A5ACB2";
		obj.style.height = "14px";
	}
}

function SinFocoText18(objid)
{
var obj = document.getElementById(objid);
	obj.style.backgroundColor = "";
	obj.style.border = "1px solid #A5ACB2";
	obj.style.height = "18px";
}

function FocoTextArea(objid)
{
var obj = document.getElementById(objid);
	obj.style.backgroundColor = "#FFFFCC";
	obj.style.border = "1px groove #FFFFFF";
	obj.style.borderTop = "1px solid #A5ACB2";
	obj.style.borderLeft = "1px solid #A5ACB2";
	obj.select();
}

function SinFocoTextArea(objid)
{
var obj = document.getElementById(objid);
	obj.style.backgroundColor = "";
	obj.style.border = "1px solid #A5ACB2";
}

function FocoCombo(objid)
{
	if (Def(objid))
	{
		var obj = document.getElementById(objid);
		obj.style.backgroundColor = "#FFFFCC";
		obj.style.border = "1px solid #A5ACB2";
	}
}

function SinFocoCombo(objid)
{
	if (Def(objid))
	{
		var obj = document.getElementById(objid);
		obj.style.backgroundColor = "";
		obj.style.border = "1px solid #A5ACB2";
	}
}

function ComboSelectValue(obj, valor)
{
	if (valor != "")
	{
		for (var i = 0; i < obj.length; i++)
		{
			if (obj[i].value == valor)
				obj.selectedIndex = i;
		}
	}
}

function trim(sString) 
{
	while (sString.substring(0,1) == ' ')
	{
		sString = sString.substring(1, sString.length);
	}
	while (sString.substring(sString.length-1, sString.length) == ' ')
	{
		sString = sString.substring(0,sString.length-1);
	}
	return sString;
}

function Undef(o)
{
	return typeof(o)=='undefined'||o===''||o==null;
}

function Def(o)
{
	return!Undef(o);
}

function Array_Swap_Parallel(array1, array2, a, b)
{
	var tmp = array1[a];
	array1[a] = array1[b];
	array1[b] = tmp;
	var tmp = array2[a];
	array2[a] = array2[b];
	array2[b] = tmp;
}

function Partition_Parallel(array1, array2, begin, end, pivot)
{
	var piv=array1[pivot];
	Array_Swap_Parallel(array1, array2, pivot, end-1);
	var store=begin;
	var ix;
	for(ix=begin; ix<end-1; ++ix) {
		if(array1[ix]<=piv) {
			Array_Swap_Parallel(array1, array2, store, ix);
			++store;
		}
	}
	Array_Swap_Parallel(array1, array2, end-1, store);

	return store;
}

function QSort_Parallel(array1, array2, begin, end)
{
	if(end-1>begin) {
		var pivot=begin+Math.floor(Math.random()*(end-begin));

		pivot=Partition_Parallel(array1, array2, begin, end, pivot);

		QSort_Parallel(array1, array2, begin, pivot);
		QSort_Parallel(array1, array2, pivot+1, end);
	}
}

function Quick_Sort_Parallel(array1, array2)
{
	QSort_Parallel(array1, array2, 0, array1.length);
}

function Partition(array, begin, end, pivot)
{
	var piv=array[pivot];
	array.swap(pivot, end-1);
	var store=begin;
	var ix;
	for(ix=begin; ix<end-1; ++ix) {
		if(array[ix]<=piv) {
			array.swap(store, ix);
			++store;
		}
	}
	array.swap(end-1, store);

	return store;
}

function QSort(array, begin, end)
{
	if(end-1>begin) {
		var pivot=begin+Math.floor(Math.random()*(end-begin));

		pivot=Partition(array, begin, end, pivot);

		QSort(array, begin, pivot);
		QSort(array, pivot+1, end);
	}
}

function Quick_Sort(array)
{
	QSort(array, 0, array.length);
}