function show_div(div_id, text)
{
	$('#'+div_id).html(text);
	$('#'+div_id).show();
}

function is_email(str)
{
	var filtro = /^[A-Za-z][A-Za-z0-9_.-]*@[A-Za-z0-9_.-]+\.[A-Za-z0-9_.]+[A-za-z]$/;
	if (filtro.test(str)) return true;
	else return false;
}
function is_date(date_string)
{
	// matches DD/MM/Y or DD/MM/YYYY or D/M/Y or DD/M/YYYY Leap years treated.
	var reg_expr = /^(((0?[1-9]|[12]\d|3[01])[\.\-\/](0?[13578]|1[02])[\.\-\/]((1[6-9]|[2-9]\d)?\d{2}|\d))|((0?[1-9]|[12]\d|30)[\.\-\/](0?[13456789]|1[012])[\.\-\/]((1[6-9]|[2-9]\d)?\d{2}|\d))|((0?[1-9]|1\d|2[0-8])[\.\-\/]0?2[\.\-\/]((1[6-9]|[2-9]\d)?\d{2}|\d))|(29[\.\-\/]0?2[\.\-\/]((1[6-9]|[2-9]\d)?(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00)|00|[048])))$/;
	if (!reg_expr.test(date_string)) {
		return false;
	}
	return true;
}
function validate_cedula(str)
{
	// Valida el formato con puntos y guion (1.234.567-8)
	// Retorna 0 si es valida, 1 si el formato es incorrecto
	var error = 0;
	var reg_expr = /^[1-9][\.][0-9]{3}[\.][0-9]{3}[\-][0-9]$/;
	if (!reg_expr.test(str)) {
		error = 1;
	}
	return error;
}
function popup_locked(url, w, h)
{
	win = window.open(url, '', 'width='+w+',height='+h+',toolbar=no,menubar=no,scrollbars=yes,resizable=no');
	win.moveTo(window.screen.availWidth / 2 - w / 2, window.screen.availHeight / 2 - h / 2);
}

function text_optimize(str)
{
	// replace with unicode characters:
	str = str.replace('á', '\u00E1');
	str = str.replace('é', '\u00E9');
	str = str.replace('í', '\u00ED');
	str = str.replace('ó', '\u00F3');
	str = str.replace('ú', '\u00FA');
	return str;
}
function urlencode(str)
{
    var result = "";
    for (i = 0; i < str.length; i++) {
        if (str.charAt(i) == " ") result += "+";
        else result += str.charAt(i);
    }
    return escape(result);
}

function in_array(needle, haystack, argStrict)
{
    var key = '', strict = !!argStrict;
    if (strict) {
        for (key in haystack) {
            if (haystack[key] === needle) {
                return true;
			}
        }
    } else {
        for (key in haystack) {
            if (haystack[key] == needle) {
				return true;
            }
        }
    }
     return false;
}
function find_position(obj)
{
	var curleft = curtop = 0;
	if (obj.offsetParent) {
		do {
			curleft += obj.offsetLeft;
			curtop += obj.offsetTop;
		} while (obj = obj.offsetParent);
	}
	return [curleft, curtop];
}

/**************** Efectos Inputbox ****************/
// Inicializar un input con un texto predeterminado
function _initInput(input_id, text_ini)
{	
	input = $("#"+input_id);
	input.val(text_ini);
	input.attr("text_ini", text_ini);
	input.focus(function() {
		if ($(this).val() == $(this).attr("text_ini")) $(this).val("") 
	});
	input.blur(function() {
		if ($(this).val() == "") $(this).val($(this).attr("text_ini"));
	});
	input.getTexto = function()
	{
		return $(this).val();
	};
}
function inputIsEmpty(input_id)
{
	input = $("#"+input_id);
	return (input.val() == "" || input.val() == input.attr("text_ini"));
}

// Efecto de texto que aparece y desaparece. Llamar dentro de document.ready
function text_blur_focus(input_id, default_text)
{
	$('#'+input_id).blur(function(){
		if ($('#'+input_id).val() == '') $('#'+input_id).val(default_text);
	});
	$('#'+input_id).focus(function(){
		if ($('#'+input_id).val() == default_text) $('#'+input_id).val('');
	});
}

//Limpiar un formulario: los input del tipo hidden NO los borra =)
function clean_form(id_form)
{
	var all_inputs = $("#"+id_form+" :input");
	all_inputs.each(function(){
		if ($(this).attr('type') != 'hidden') {
			$(this).val('');
			$(this).blur();
		}
	});
}
/**************** Fin Efectos Inputbox ****************/

String.prototype.trim = function() {
  return this.replace(/^\s+/, '').replace(/\s+$/, '');
};



/******************* Popup con Ajax **********************/
function ajax_div(url, callback)
{
	if (!jQuery.isReady) return;
	$("<div id='ajax_div'></div>").appendTo("#full");	
	$.ajax({
		type: "GET",
		url: url,
		data: {PHPSESSID : PHPSESSID},
		success: function(response) {
			$('#ajax_div').html(response);
			show_div("ajax_div");
			if (callback) eval(callback).call();
		},
		error: function (errorCode, textStatus, errorThrown) {
			if (errorCode.status == 450) session_perdida();
		} 
	});
}

function goPage(sDiv, sUrl, sOrden, iIdCat, sTexto){
	var oData = {
		o : sOrden,
		idCat : iIdCat,
		t : sTexto
	}
	div_load(sDiv, sUrl, oData);
}

function div_load(div, url, oData)
{
	if (!jQuery.isReady) return;
	$.ajax({
		type: "POST",
		data: oData,
		url: url,
		async: false,
		success: function(response) {
			$('#'+div).html(response);
		},
		error: function (errorCode, textStatus, errorThrown) {
			if (errorCode.status == 450) session_perdida();
		}
	});
}

/**
 * Resetear Formulario
 
jQuery.fn.reset = function () {
  $(this).each (function() { this.reset(); });
}*/

/**
 * --------------------------------------------
 *  jValidateForm
 *  @description
 *  Chequea/Valida un formulario dado
 * --------------------------------------------
 **/
(function ($)
{
	$.fn.jValidateForm = function( oOpts )
	{
		var oDefault = {
			fields	: [ 'input', 'textarea', 'select' ],
			excludeFields : [],
			messageDiv : null,
			onError	: function() {},
			callback: function() {}
		}
		
		var oOptions = $.extend( oDefault , oOpts );
		var oMainObj = $(this);
		
		return this.each( function()
		{
			var aFields = oOptions.fields;
			
			var oFieldsLst = $(this).find( aFields.join(',') );
			var iFieldsCnt = oFieldsLst.length;
			var iError = 0;
			
			for( var i = 0; i < iFieldsCnt; i++ )
			{
				var bExcludeField = $.inArray( oFieldsLst[i].id , oOptions.excludeFields );
				
				if( bExcludeField == -1 )
				{
					var sElem = $(oFieldsLst[i]).get(0);
				
					var sTagName = sElem.tagName;

					if ( sTagName == 'INPUT' || sTagName == 'TEXTAREA')
					{
						if ( $(sElem).val() == '' )
						{
							$(sElem).parent().attr( 'style' , '' );
							$(sElem).parent().addClass( 'error' );
							iError++;
						}else{
							if ( $(sElem).parent().hasClass( 'error' ) )
							{
								$(sElem).parent().removeClass( 'error' );
							}
						}
					}else if( sTagName == 'SELECT' ) {

						$(sElem).change( function()
						{
							if ( $(this).val() != 0 )
							{
								$(this).parent().removeClass( 'error' );
							}
						});
						
						if ( $(sElem).val() == 0 || $(sElem).val() == '' )
						{
							$(sElem).parent().addClass( 'error' );
							iError++;
						}else{
							if ( $(sElem).parent().hasClass( 'error' ) )
							{
								$(sElem).parent().removeClass( 'error' );
							}
						}
					}
				}
			} // Fin For

			if ( iError > 0 )
			{
				if ( oOptions.messageDiv != null )
				{
					$('#' + oOptions.messageDiv ).show();
				}else{
					alert('Complete required fields');
				}

				oOptions.onError.call( this );
			}else{
				oOptions.callback.call( this );
			}
		});
	}
})(jQuery);
