
function trim(s)
{
	return s.replace(/(^\s*)|(\s*$)/g, "");
}

Array.prototype.indexOf = function(value)
{
	var i;
	// el ciclo empieza en 1 para que no coja el nombre descriptivo
	for(i=1; i<this.length; i++)
		if (this[i] == value)
			return i;
			
	return -1;
}

function InicializarCampos(elem)
{
	if (elem)
		ValidarCampos( 1, elem);
	else
		ValidarCampos( 1)
}

function GetLeftCellText(obj)
{
	// subir hasta encontrar la celda
	while (obj != null && obj.tagName.toUpperCase() != 'TD')
		obj = obj.parentElement;
	if (obj == null) return '';
	var cell = obj;
	var row = cell.parentElement;
	//buscar la celda de la izquierda
	var rightcell = null;
	for(var i=0; i<row.cells.length; i++)
		if (row.cells[i] == cell)
			if (i == 0)
				return '';
			else
			{
				rightcell = row.cells[i-1];
				break;
			}
	if (rightcell == null)	return '';
	return rightcell.innerText;
}

function isFloat(s)
{
	return s != '' && isFinite(s);
}

function PadStr( s, padchar, length)
{
	for(var i=s.length; i<length; i++)
		s = padchar + s;
	return s;
}

function SetValidar(elem, sValidar)
{
	var LastValue = elem.X_InitialValue;
	ClearValidarEvents( elem)
	elem.validar = sValidar;
	//limpiar los eventos que pueda tener
	if (document.all('X_AST_' + elem.name))
		document.all('X_AST_' + elem.name).style.display = 'none';
	InicializarCampos( elem);
	if (LastValue) elem.X_InitialValue = LastValue;
}

function ClearValidarEvents( object)
{
	ClearValidarEvent( object, 'onkeypress', onkeypressNumerico)
	ClearValidarEvent( object, 'onkeypress', onkeypressEntero)
	ClearValidarEvent( object, 'onblur', onblurPad)
	ClearValidarEvent( object, 'onblur', onblurImporte)
	ClearValidarEvent( object, 'onblur', onblurPad)
}

function ClearValidarEvent( object, EventName, EventFunction)
{
	eval('if (object.'+EventName+' == EventFunction){ if (object.X_'+EventName+') {object.'+EventName+'= object.X_'+EventName+';object.X_'+EventName+'=null}; else object.'+EventName+'= null}');
}

function setEvent( object, EventName, EventFunction)
{
	eval('if (object.'+EventName+') object.X_'+EventName+' = object.'+EventName);
	eval('object.'+EventName+' = EventFunction;')
}
function CallOldEvent()
{ 
	eval('if (event.srcElement.X_on'+event.type+ ') event.srcElement.X_on'+event.type+'()')
}
function onkeypressEntero()
{
	if (event.keyCode<48 || event.keyCode>57) event.returnValue = false
	else CallOldEvent();
}

function onkeypressNumerico()
{
	if ((event.keyCode<48 || event.keyCode>57) && event.keyCode != 0x2E) event.returnValue=false
	else CallOldEvent();
}

function ValidarCampos( iAccion, elem)
{
	var i,j,ret;
	if (elem)
	{
			if (elem.validar)
			{	
				var arrVal;
				arrVal = elem.validar.split(';')
				
				if (iAccion == 1) //inicializar
				{
					for(j=0; j<arrVal.length; j++)
					{
						if (arrVal[j] == 'numerico')
						{
							elem.style.textAlign = 'right';
							setEvent( elem, 'onkeypress', onkeypressNumerico)
						}
						else if (arrVal[j] == 'entero')
						{
							elem.style.textAlign = 'right';
							setEvent( elem, 'onkeypress', onkeypressEntero)
						}
						else if (arrVal[j] == 'enteroL')
						{
							elem.style.textAlign = 'left';
							setEvent( elem, 'onkeypress', onkeypressEntero)
						}
						else if (arrVal[j] == 'novacio' && (elem.tagName.toUpperCase() != 'INPUT' ||	elem.type.toUpperCase() != 'HIDDEN'))
						{
							var display;
							if (elem.disabled == false) display = 'inline';
							else display = 'none';
							if (document.all('X_AST_' + elem.name))
								document.all('X_AST_' + elem.name).style.display = display;
							//else
							//	elem.insertAdjacentHTML('afterEnd','<span id=X_AST_' + elem.name + ' style="display='+display+'" title="Obligatorio">*</span>')
						}
					}
				}
				else 
				{// efectuar la validacion
					if (elem.disabled || !IsElementVisible( elem))
						return true;
					sFieldName = trim(arrVal[0]);
					if (sFieldName == '')	sFieldName = GetLeftCellText(elem);
					if (arrVal.indexOf('novacio') != -1 && trim(elem.value) == '')
						alert('"' + sFieldName + '" no puede estar vacio');
					else if (arrVal.indexOf('IsDate') != -1 && !(IsDate(elem.value)))
						alert('"' + sFieldName + '" incorrecta');
					else if ((arrVal.indexOf('numerico') != -1 || arrVal.indexOf('importe') != -1) && isNaN(elem.value))
						alert('"' + sFieldName + '" debe tener un valor numérico');
					else
						return true;
					if (elem.tagName.toUpperCase() != 'INPUT' ||
							elem.type.toUpperCase() != 'HIDDEN')
						elem.focus();
					return false;
				}
			}
			return true;
	}
	else
		for(i=0; i<document.all.length; i++)
			if (ValidarCampos( iAccion, document.all(i)) == false) 
				return false;
	
	return true;
}

function SetInnerHTML(elem, sInnerHTML)
{
	elem.options.length = 0;
	var s = elem.outerHTML.substring(0,elem.outerHTML.length-9);
	elem.outerHTML = s + sInnerHTML + '</select>';
}

function IsCollection2(elem)
{
	return (elem.children && elem.tagName != 'SELECT' && elem.tagName != '!')
}

function IsCollection(elem)
{
	return ((elem.length || elem.children.length > 0) && elem.tagName != 'SELECT' && elem.tagName != '!')
}

function IsElementVisible(elem)
{
	var elem = elem;
	while (elem != null)
	{
		if (elem.style.visibility.toUpperCase() == 'HIDDEN' ||
				elem.style.display.toUpperCase() == 'NONE') 
			return false;
		elem = elem.parentElement;
	}
	return true;
}

function IsDate(dateStr)
{
	if (dateStr != '')
	{
		var datePat = /^(\d{1,2})(\/|-)(\d{1,2})\2(\d{2,4})$/;

		var matchArray = dateStr.match(datePat)
		if (matchArray == null)	return false

		day = matchArray[1]
		month = matchArray[3]
		year = matchArray[4]
		if (month < 1 || month > 12 )return false

		if (day < 1 || day > 31 ) return false

		if ((month==4 || month==6 || month==9 || month==11) && day==31)
			return false

		if (month == 2)
		{
			var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0))
			if (day>29 || (day==29 && !isleap))
				return false;
		}	
	}
	return true;
}

function IsValidTime(timeStr) {
	var timePat = /^(\d{1,2}):(\d{2})(:(\d{2}))?(\s?(AM|am|PM|pm))?$/;
	var matchArray = timeStr.match(timePat);
	if (matchArray == null) {
		return false;
	}
	hour = matchArray[1];
	minute = matchArray[2];
	second = matchArray[4];
	ampm = matchArray[6];
	if (second=="") { second = null; }
	if (ampm=="") { ampm = null }
	if (hour < 0  || hour > 23) {
		return false;
	}
	if (minute<0 || minute > 59) {
		return false;
	}
return true;
}


function GetInputValues(elem)
{
	var s = '';
	for(i=0; i<elem.all.length; i++)
		if (elem.all[i].tagName.toUpperCase() == 'INPUT' 
		  || elem.all[i].tagName.toUpperCase() == 'SELECT')
			s += elem.all[i].value + '\xff';
	return s;
}


