var flag_focus;
var textarea_max_length = 200;

/*
String.prototype.trim = function()
{
	return this.replace(/(^\s*)|(\s*$)/g, '');
}
*/
var loadCategories = function(element, container, format_name, field_name)
{
	var id = element.value;
	new Ajax.Updater(container, '/infomype/businessPlan/loadCategories',
			{	aynchronous:true,
				evalScripts:true,
				parameters:'id='+id+'&format_name='+format_name+'&field_name='+field_name	
			});
	
	return false;
}

var loadSubSectors = function() 
{
	loadCategories(this, 'ctn_sub_sector_id', format_name, 'sub_sector_id');
}

var loadProducts = function() 
{
	loadCategories(this, 'ctn_category_id', format_name, 'category_id');	
}

/*
 * Metodo para Mostrar Mensaje
 */
var showMessage = function(ctn_message, message)
{
	$(ctn_message).style.display = '';
	$(ctn_message).innerHTML = '<ul class="error_list"><li>'+message+'</li></ul>';
}

/*
 * Metodo para Ocultar Mensaje
 */
var hideMessage = function(ctn_message)
{
	$(ctn_message).style.display = 'none';
}

/*
 * Metodo para Checkbox o Radiobutton
 * ----------------------------------------------------------------------
 * Permite verificar si hay como minimo un elemento en "checked"
 * Recibe: 
 * - elements: Array de elementos de tipo checkbox o radio button
 * Retorna: 
 * - flag: true(si HAY como minimo un checked), false(si NO HAY alguno en checked)
 * Nota: Adicionalmente si es flag es false hace "focus" en el primer elemento del array  
 */

function isArray(object) {
	  return object != null && typeof object === "object" && 'splice' in object && 'join' in object;
	}

var verifyChecked = function(elements)
{
	var type = typeof elements.length;
	
	if (type != 'number'){
		e = new Array();
		e[0] = elements;
		elements = e;
	}	
	
	var flag = false;
	for (var i = 0; i < elements.length ; i++) {
		if (elements[i].checked == true) {
		flag = true;			
		}		  
	}
	
	/*
	 * Verificamos si no esta checkado y si no hay un elemento que haya hecho focus antes 
	 * para poder hacer el focus en el primer elemento de la lista de seleccion
	 */
	if (flag == false && flag_focus == false) {
		flag_focus = true;
		elements[0].focus();	
	}
	return flag;
}

/*
 * Metodo para validar elementos de un formulario
 * ----------------------------------------------------------------------
 * Permite validar si un elemento del formulario esta como "vacio" o no retornando un mensaje.
 * Recibe: 
 * - flag: valor del flag..
 * - element_type: el tipo de elemento, puede ser un checkbox, radio, text(o textarea), num, etc.
 * - max_length: longitud cuando se trata de un string (text o textarea). Por defecto es 150
 * - element: elemento segun tipo, dependiendo del "element_type"...
 * - ctn_message: id del contenedor donde se mostrara el mensaje
 * - message: contenido del mensaje que se desea mostrar
 * 
 * Retorna: Un "flag" con true(si HAY como minimo un checked), false(si NO HAY alguno en checked)
 * Nota: Adicionalmente si es flag es false hace "focus" en el primer elemento del array  
 */



var validateElementForm = function(flag, element_type, max_length, element, ctn_message, message)
{
	//max_length = max_length != null ? max_length : 0;
	
	if (element_type == 'checkbox' || element_type == 'radio') {
		element_bool = verifyChecked(element);
		if (element_bool == true) {
			hideMessage(ctn_message);								
		} else {
			showMessage(ctn_message, message);
			flag = false;
		}
	} 
	
	if(element_type == 'text') {
		if (element.value != '') {
			var string = new String(element.value);
			if (max_length == null || string.length <= max_length) {
				hideMessage(ctn_message);
				
			} else {
				showMessage(ctn_message, 'Tienes un exceso de: '+(string.length-max_length)+' caracteres');
				flag = false;
			}
											
		} else {
			showMessage(ctn_message, message);			
			flag = false;
		}
	}
	
	if(element_type == 'num' || element_type == '+num') {
		if(element.value != ''){
			if (!isNaN(element.value)) {
			  if (element_type == '+num') {	
				if (element.value > 0) {
					if(max_length == null) {
						hideMessage(ctn_message);
						
					} else {
						var str_num = new String(element.value);
						if (str_num.length <= max_length) {
							hideMessage(ctn_message);
						} else {
							showMessage(ctn_message, 'Tienes un exceso de: '+(str_num.length-max_length)+' n&uacute;meros');
							flag = false;
						}
					}
					
				} else {
					showMessage(ctn_message, '"'+element.value+'" no es un numero mayor que 0');//puede variar el mensaje
					flag = false;
				}
			  } else {
				  hideMessage(ctn_message);
			  }
				
			} else {
				showMessage(ctn_message, '"'+element.value+'" no es un numero');
				flag = false;
			}
		} else {
			showMessage(ctn_message, message);
			flag = false;
		}
	}
	
	/*Para FILES*/
	/*Solamente verifica extension
	 *Restricciones:
	 *- La cadena "extension_permitted" debe contener las extensiones permitidas
	 *  separadas por comas y sin espacios
	 */
	if(element_type == 'file') {
		if (element.value != '') {
			var extensions_permitted = 'jpg,jpeg,gif,png'; //Extensiones permitidas para imagenes
			
			var str_file       = new String(element.value);
			var str_extensions = new String(extensions_permitted);
			
			var arr_extensions = str_extensions.split(',');
			var extension      = (str_file.substring(str_file.lastIndexOf(".")+1)).toLowerCase();
			var indicator      = arr_extensions.indexOf(extension);
			
			if (indicator >= 0) {
				hideMessage(ctn_message);				
			} else {				
				showMessage(ctn_message, 'Extension no permitida: " .'+extension+' "');
				flag = false;
			}
			
		}
		
	}
	if(element_type == 'audioe') {
		if (element.value != '') {
			var extensions_permitted = 'mp3'; //Extensiones permitidas para imagenes
			
			var str_file       = new String(element.value);
			var str_extensions = new String(extensions_permitted);
			
			var arr_extensions = str_extensions.split(',');
			var extension      = (str_file.substring(str_file.lastIndexOf(".")+1)).toLowerCase();
			var indicator      = arr_extensions.indexOf(extension);
			
			if (indicator >= 0) {
				hideMessage(ctn_message);				
			} else {				
				showMessage(ctn_message, 'Extension para audio no permitida: " .'+extension+' "');
				flag = false;
			}
			
		}
		
	}
	if(element_type == 'videoe') {
		if (element.value != '') {
			var extensions_permitted = 'flv'; //Extensiones permitidas para imagenes
			
			var str_file       = new String(element.value);
			var str_extensions = new String(extensions_permitted);
			
			var arr_extensions = str_extensions.split(',');
			var extension      = (str_file.substring(str_file.lastIndexOf(".")+1)).toLowerCase();
			var indicator      = arr_extensions.indexOf(extension);
			
			if (indicator >= 0) {
				hideMessage(ctn_message);				
			} else {				
				showMessage(ctn_message, 'Extension para video no permitida: " .'+extension+' "');
				flag = false;
			}
			
		}		
		
	}
	if(element_type == 'docue') {
		if (element.value != '') {
			var extensions_permitted = 'doc,pdf,odt,odf'; //Extensiones permitidas para imagenes
			
			var str_file       = new String(element.value);
			var str_extensions = new String(extensions_permitted);
			
			var arr_extensions = str_extensions.split(',');
			var extension      = (str_file.substring(str_file.lastIndexOf(".")+1)).toLowerCase();
			var indicator      = arr_extensions.indexOf(extension);
			
			if (indicator >= 0) {
				hideMessage(ctn_message);				
			} else {				
				showMessage(ctn_message, 'Extension para documentos no permitida : " .'+extension+' "');
				flag = false;
			}
			
		}
	}
	
	if(element_type == 'audioc') {
		if (element.value != '') {
			var extensions_permitted = 'mp3'; //Extensiones permitidas para imagenes
			
			var str_file       = new String(element.value);
			var str_extensions = new String(extensions_permitted);
			
			var arr_extensions = str_extensions.split(',');
			var extension      = (str_file.substring(str_file.lastIndexOf(".")+1)).toLowerCase();
			var indicator      = arr_extensions.indexOf(extension);
			
			if (indicator >= 0) {
				hideMessage(ctn_message);				
			} else {				
				showMessage(ctn_message, 'Extension para audio no permitida: " .'+extension+' "');
				flag = false;
			}
			
		}else {
			showMessage(ctn_message, message);			
			flag = false;
		}
		
	}
	if(element_type == 'videoc') {
		if (element.value != '') {
			var extensions_permitted = 'flv'; //Extensiones permitidas para imagenes
			
			var str_file       = new String(element.value);
			var str_extensions = new String(extensions_permitted);
			
			var arr_extensions = str_extensions.split(',');
			var extension      = (str_file.substring(str_file.lastIndexOf(".")+1)).toLowerCase();
			var indicator      = arr_extensions.indexOf(extension);
			
			if (indicator >= 0) {
				hideMessage(ctn_message);				
			} else {				
				showMessage(ctn_message, 'Extension para video no permitida: " .'+extension+' "');
				flag = false;
			}
			
		}else {
			showMessage(ctn_message, message);			
			flag = false;
		}
		
		
	}	
	if(element_type == 'docuc') {
		if (element.value != '') {
			var extensions_permitted = 'doc,pdf,odt,odf'; //Extensiones permitidas para imagenes
			
			var str_file       = new String(element.value);
			var str_extensions = new String(extensions_permitted);
			
			var arr_extensions = str_extensions.split(',');
			var extension      = (str_file.substring(str_file.lastIndexOf(".")+1)).toLowerCase();
			var indicator      = arr_extensions.indexOf(extension);
			
			if (indicator >= 0) {
				hideMessage(ctn_message);				
			} else {				
				showMessage(ctn_message, 'Extension para documentos no permitida : " .'+extension+' "');
				flag = false;
			}
			
		}else {
			showMessage(ctn_message, message);			
			flag = false;
		}
		
	}	
	
	/*
	 * Verificamos si se reporta mensaje y si no hay un elemento que haya hecho focus antes 
	 * para poder hacer el focus en el elemento actual
	 */
	if (flag == false && flag_focus == false) {
		flag_focus = true;
		element.focus();
	}
	
	return flag;
}

var validateElementPasswordForm = function(flag, password, re_password, ctn_message, message)
{
	if (password.value != re_password.value) {
		showMessage(ctn_message, message);
		flag = false;
	}
	
	/*
	 * Verificamos si se reportara mensaje y si no hay un elemento que haya hecho focus antes 
	 * para poder hacer el focus en el elemento actual
	 */
	if (flag == false && flag_focus == false) {
		flag_focus = true;
		password.focus();
	}
	
	return flag;
}

/*Definiendo un objeto*/
function objObservedElement(id_type, id_amount_1, id_amount_2, id_result)
{
	this.id_type 	 = id_type;
	this.id_amount_1 = id_amount_1;
	this.id_amount_2 = id_amount_2;
	this.result 	 = id_result;
	
	this.initialize = function(){
		//$(this.id_type).observe('change', this.calculateResult.bind(this));//[ SIMULACION MOMENTANEA ]
		$(this.id_amount_1).observe('keyup', this.calculateResult.bind(this));
		$(this.id_amount_2).observe('keyup', this.calculateResult.bind(this));
	}
	
	this.calculateResult = function()
	{	
		//validateFactorForm();
		
		var value_1 = parseFloat($(this.id_amount_1).getValue());
		var value_2 = parseFloat($(this.id_amount_2).getValue());
		var result;
		
		if ($(this.id_type).getValue() == 'cos') {
			result = value_1 + value_2;
		} else if ($(this.id_type).getValue() == 'uti') {
			result = value_1 - value_2;
		} else if ($(this.id_type).getValue() == 'pro') {
			result = value_1 * value_2;
		}
		
		if(!isNaN(result)) {
			$(this.result).value = result;
			
		} else {
			return false;
		}
				
	}
	
}

/*0906241234*/
/*Definiendo un objeto para cargar selects con ajax
 *Permite definir mas de un select... 
 */
function objElementLoad(format_name, element_id, field_name, url)
{
	this.format_name   = format_name;
	
	if (format_name != '') {
		this.element_id    = format_name+'_'+element_id;
	} else {
		this.element_id    = element_id;
	}
		
	this.field_name    = field_name;
	this.url		   = url;//'/infomype.php/businessPlan/loadCategories';
	
	this.initialize = function() {
		$(this.element_id).observe('change', this.loadCategories.bind(this));
		
	}
	
	this.loadCategories = function() {	
		var id  	  = $(this.element_id).getValue();
		
		if (this.format_name != '') {
			var container = this.format_name+'_ctn_'+this.field_name;
		} else {
			var container = 'ctn_'+this.field_name;
		}
		
		
		
		new Ajax.Updater(container, this.url,
				{	aynchronous:true,
					evalScripts:true,
					parameters:'id='+id+'&format_name='+this.format_name+'&field_name='+this.field_name	
				});
		
		return false;
				
	}
	
}
