// v2.1.4

$(document).ready(function(){
	try
	{
		//////////////////////////////////////////////////////////////////
		// Login: Foco en el usuario o password segun corresponda.
		//////////////////////////////////////////////////////////////////

		if($('#usuario, #password').length == 2)
		{
			if ($('#usuario').val() != '' )
				$('#password').focus();
			else
				$('#usuario').focus();
		}

		//////////////////////////////////////////////////////////////////
		// Destacar un cuadro de texto cuando tiene el foco
		//////////////////////////////////////////////////////////////////

		highlightTextBoxes();

		//////////////////////////////////////////////////////////////////
		// Calse SelectContent: Selecciona el contenido del
		// elemento INPUT de tipo TEXT al obtener el foco.
		//////////////////////////////////////////////////////////////////

		$('input[type=text].SelectContent').focus(function(){
				try
				{
					this.select();
				}
				catch(oError)
				{
				}
			});

		//////////////////////////////////////////////////////////////////
		// Clase trim: Eliminar espacios al principio y al final en el
		// evento blur.
		//////////////////////////////////////////////////////////////////

		$('input[type=text].trim').blur(function(){
				this.value = trim(this.value);
			});

		//////////////////////////////////////////////////////////////////
		// Clase noSpaces: No permite espacios en el valor del
		// elemento INPUT de tipo TEXT.
		//////////////////////////////////////////////////////////////////
		var oInputnoSpaces = $('input[type=text].noSpaces');

		oInputnoSpaces.keydown(function(event)
			{
				if (event.keyCode == 32)
					return false;
			});

		oInputnoSpaces.blur(function()
			{
				this.value = this.value.replace(/\s/g,"");
			});

		//////////////////////////////////////////////////////////////////
		// Clase noSpaces: No permite caracteres que no sean números
		// o puntos, en el valor del elemento INPUT de tipo TEXT.
		// Las comas son reeplazadas por puntos
		//////////////////////////////////////////////////////////////////
		var oInputFloat = $('input[type=text].FloatNumberOnlyDot');

		function InputFloat(event){
				try {
					ikeyCode = event.charCode ? event.charCode : event.keyCode;

//					showMessage($('#frmResumeCharacteristics .message'), 'Key: ' + ikeyCode, false, false, true);

					if(
						ikeyCode ==  8 ||	// Backspace
						ikeyCode ==  9 ||	// Tab
						ikeyCode == 13 || 	// Enter
						ikeyCode == 16 ||	// Shift
						ikeyCode == 17 ||	// Control
						ikeyCode == 18 ||	// Alt
						ikeyCode == 20 ||	// Block mayus
						ikeyCode == 26 ||	// Tab
						ikeyCode == 27 ||	// Escape
						ikeyCode == 33 ||	// Re Pag
						ikeyCode == 34 ||	// Av Pag
						ikeyCode == 35 ||	// End
						ikeyCode == 36 ||	// Home
						ikeyCode == 37 ||	// Left Arrow
						ikeyCode == 38 ||	// Top Arrow
						ikeyCode == 39 ||	// Right Arrow
						ikeyCode == 40 ||	// Bottom Arrow
						ikeyCode == 45 ||	// Insert
						ikeyCode == 46 || 	// Delete
						(ikeyCode >= 112 &&  ikeyCode <= 123) 	// F1 to F12
					  )
					  	return true;

					if (!(
							(( ikeyCode >= 48 && ikeyCode <= 57  ) || ikeyCode == 110) ||
							(( ikeyCode >= 96 && ikeyCode <= 105 ) || ikeyCode == 190) ||
							ikeyCode == 188
						))
					{
						return false;
					}
					else if ((ikeyCode == 190 || ikeyCode == 110 || ikeyCode == 188) && this.value.indexOf('.', 0) != -1)
					{
						return false;
					}
				}
				catch(e){
//					showMessage($('#frmResumeCharacteristics .message'), $('#frmResumeCharacteristics .message').html() + e.message, false, false, true);
				}
			}

		oInputFloat.keydown(InputFloat);
		oInputFloat.keyup(function(event){
				ikeyCode = event.charCode ? event.charCode : event.keyCode;

				if (ikeyCode == 188) this.value = this.value.replace(",",".");
			});

		oInputFloat.blur(function(){
				this.value = this.value.replace(",",".");
				if (isNaN(parseFloat(this.value)))
				{
					this.value = this.value.replace(/[^\d^.]/g,"");
					if (isNaN(parseFloat(this.value))) this.value = '';
				}
				else
					this.value = String(parseFloat(this.value));
			});

		//////////////////////////////////////////////////////////////////
		// Clase NumbersOnly: No permite caracteres que no sean números
		// en el valor del elemento INPUT de tipo TEXT.
		//////////////////////////////////////////////////////////////////
		var oInputInt = $('input[type=text].NumbersOnly');

		oInputInt.keydown(function(event) {
				try {
					 ikeyCode = event.charCode ? event.charCode : event.keyCode;

					if(
						ikeyCode ==  8 ||	// Backspace
						ikeyCode ==  9 ||	// Tab
						ikeyCode == 16 ||	// Shift
						ikeyCode == 17 ||	// Control
						ikeyCode == 18 ||	// Alt
						ikeyCode == 20 ||	// Block mayus
						ikeyCode == 26 ||	// Tab
						ikeyCode == 27 ||	// Escape
						ikeyCode == 35 ||	// End
						ikeyCode == 36 ||	// Home
						ikeyCode == 37 ||	// Left Arrow
						ikeyCode == 39 ||	// Right Arrow
						ikeyCode == 45 ||	// Insert
						ikeyCode == 46 	// Delete
					  )
					  	return;

					if (!(
							(( ikeyCode >= 48 && ikeyCode <= 57  ) || ikeyCode == 110) ||
							(( ikeyCode >= 96 && ikeyCode <= 105 ) || ikeyCode == 190)
						))
					{
						return false;
					}
				}
				catch(e){}
			});

		oInputInt.blur(function() {
				if (isNaN(parseInt(this.value)))
					this.value = this.value.replace(/[^\d]/g,"");
				else
					this.value = String(parseInt(this.value));
			});

		//////////////////////////////////////////////////////////////////
		// Clase ucase: En el evento "keyup" pone como mayúscula el
		// texto ingresado, útil para aquellos campos que deben estar
		// en mayúsculas al ser enviados o que tienen text-transform.
		//////////////////////////////////////////////////////////////////

		$('input[type=text].ucase').keyup(function(event)
			{
				if (!(
				      (event.keyCode >= 48 && event.keyCode <= 57 ) || // 0 al 9
				      (event.keyCode >= 65 && event.keyCode <= 90 ) || // A al Z
					  (event.keyCode >= 97 && event.keyCode <= 122)    // a al z
				     ))
					return;

				this.value = this.value.toUpperCase();
			});

		//////////////////////////////////////////////////////////////////
		// Lookfor Inputs: Utilizado en conjunto con elementos SELECT
		// para buscar un valor de dicho elemento SELECT o mostrar
		// el valor elegido en el INPUT.
		//////////////////////////////////////////////////////////////////
		var oInputs = $('input[lookfor]');
		var oSelects = $('select[lookfor]');

		oInputs.keyup(function(event)
			{
				if (event.keyCode == 9) return;

				var oObject = $('#' + this.getAttribute('lookfor'));
				if (!oObject.length) return;
				var oSelect = oObject[0];
				var bSeleccionado = false;

				oSelect.selectedIndex = -1;

				for(iSel = 0; iSel < oSelect.options.length ;iSel++)
				{
					if (oSelect.options[iSel].value.toUpperCase() == this.value.toUpperCase() &&
						$(oSelect.options[iSel]).css('display') != 'none' )
					{
						oSelect.selectedIndex = iSel;
						bSeleccionado = true;
						break;
					}
				}

				if (!bSeleccionado)
					oSelect.selectedIndex = 0;
				else if (this.getAttribute('valoranterior') != this.value)
				{
					this.setAttribute('valoranterior', this.value);
					oObject.change();
				}

				this.focus();
				return;

			});

		oInputs.focus(function(){
				try
				{
					this.select();
				}
				catch(oError)
				{
				}
			});

		oSelects.change(function()
			{
				var oTxt = $('#' + this.getAttribute('lookfor'));
				if (!oTxt.length) return;
				oTxt.val(this.value);
			});

		oSelects.each(function(iPos, oSelect)
			{
				if (!oSelect) return;

				var oTxt = $('#' + oSelect.getAttribute('lookfor'));
				if (oTxt.length) oTxt.val(this.value);
			});

		//////////////////////////////////////////////////////////////////
		// Mostrar/Ocultar objetos por el ID en el CLICK, pueden ser
		// varios separados por comas (sin espacios).
		//////////////////////////////////////////////////////////////////
		$('input[type=checkbox].ShowHide, div.ShowHide, span.ShowHide, li.ShowHide').click(function(){
				ShowHide(this);
			});

		//////////////////////////////////////////////////////////////////
		// Mostrar/Ocultar objetos por el ID en el BLUR, pueden ser
		// varios separados por comas (sin espacios).
		//////////////////////////////////////////////////////////////////
		$('*.BlurShowHide').blur(function(){
				ShowHide(this);
			});

		//////////////////////////////////////////////////////////////////
		// Clean objetos SELECT, INPUT,  que sean child del ID, pueden ser
		// varios separados por comas (sin espacios).
		//////////////////////////////////////////////////////////////////
		$('div.Clean, span.Clean').click(function()
			{
				if (this.getAttribute('obj') == '') return;

				var aObjects = this.getAttribute('obj').split(',');

				for(iPos = 0; iPos < aObjects.length; iPos++)
				{
					if ($('#' + aObjects[iPos]).length == 1)
					{
						// SELECT, INPUT, TEXTAREA
						$('#' + aObjects[iPos] + '>*:input').each(function(iPos, oInput)
							{
								// Text
								if ((oInput.tagName == 'input' && (oInput.type == 'text' || oInput.type == 'password')) ||
									oInput.tagName == 'textarea')
									oInput.value = oInput.defaultValue;
								// Checkbox u Radio
								if (oInput.tagName == 'input' && (oInput.type == 'radio' || oInput.type == 'checkbox'))
									oInput.checked = oInput.defaultChecked;
								//Select
								else if (oInput.tagName == 'select')
								{
									oInput.index = -1;
									$(oInput.options).each(function(iPos, oOption)
										{
											oOption.selected = oOption.defaultSelected;
										});
								}
							});
					}
				}
			});


	}
	catch(e){}
});

//function beforeSubmit(formData, jqForm, options)
//{
//	try
//	{
//		var oMensaje = $('#Mensajes');
//		var oOptions = {
//				        showInlineMessages:		true,
//				        showSummary:			false,
//				        inlineMessageCssClass:	'validation-advice'
//					  };
//		if ($.validationAide.validateForm("#" + jqForm.attr('id'), null, options, null, null))
//		{
//			jqForm.find('input[type=submit], .wait').toggle();
//			return true;
//		}
//		else
//		{
//			mostrarMensaje(oMensaje, 'Verificá los campos con error.', true, true);
//			return false;
//		}
//	}
//	catch(oError)
//	{
//		alert('Error: ' + oError.message);
//		return false;
//	}
//
//}

/*********************************************************************
Funcion: processResult
Motivo:
	Maneja la respuesta del servidor
Parametros:
	responseText -> Es el texto devuelto por el server.
	statusText	 -> Es el mensaje de status.
Devuelve:
	No devuelve datos ni resultados.
**********************************************************************/
function processResult(responseText, statusText, processData)
{
  try
  {
		var oMessage = $('.message');

		if (responseText.substring(0,1) == '[' || responseText.substring(0,1) == '{' )
		{
			// Genero el resultado objeto
	    	var oServerResponse = eval('(' + responseText + ')');
	    	processData(oServerResponse);
		}
		else
		{
	    	alert('Unexpected server error\n\nRespuesta del servidor inesperada.');
	    	showMessage(oMessage, responseText, true, false, true);
		}
  }
	catch(oError)
	{
		alert('FATAL ERROR (processResult): ' + oError.message);
	}
}

/*********************************************************************
Funcion: processError
Motivo:
	Maneja los errores en la respuesta del servidor.
Parametros:
	oHTML		-> Es el objeto XMLHttpRequest.
	sMensaje	-> Es el mensaje de error.
	oError		-> Es el objeto con el error si ocurrió alguno.
Devuelve:
	No devuelve datos ni resultados.
**********************************************************************/
function processError(oHTML, statusText, oError, processData)
{
	try
	{
		var oMessage = $('.message');

		if (oHTML.status == 0)
	    	showMessage(oMessage, "Acción cancelada por el usuario. Pueden haberse realizado modificaciones.", true, false);
	    else if (oHTML.status == 401)
	    {
			location.href = '/';
			return false;
		}
		else
		{
			if (oHTML.responseText.substring(0,1) == '[' || oHTML.responseText.substring(0,1) == '{' )
				var oServerResponse = eval('(' + oHTML.responseText + ')');
			else
				var oServerResponse = oHTML.responseText;

			if (typeof(processData) == 'function' )processData(oServerResponse, oError);
		}
	}
	catch(oError)
	{
		alert('FATAL ERROR (processError): ' + oError.message);
	}
}

