/****************************************************************
*  Funciones de JavaScripts
*  Ezequiel Villarreal G.  2005, Todos los derechos reservados.
*****************************************************************/


//Variables principales para trabajar con múltiples navegadores
var _jslib_isIE = document.all?true:false;
var _jslib_isNS = document.layers?true:false;
var _jslib_isNS6 = document.getElementById&&!document.all?true:false;


//Función para obtener el objeto de la forma o del documento
function GetObject(name) {
	if(_jslib_isIE) {
		return document.all[name];
	} else if(_jslib_isNS) {
		return document.layers[name];
	} else if (_jslib_isNS6) {
		return document.getElementById(name);
	}
	
	return null;
}

/*------------------------------------------------------------------------------------------------------------\
	Date Created: 10-27-05
	Modified Date: 10-27-05
	Function Name: MyAjax()
	Porpouse: Función para crear el objeto AJAX
/-------------------------------------------------------------------------------------------------------------*/
function MyAjax() {
	var xmlhttp=false;
	try {
		xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
	} catch (e) {
		try {
			xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
		} catch (E) {
			xmlhttp = false;
		}
	}
	
	if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
		xmlhttp = new XMLHttpRequest();
	}
	
	return xmlhttp;
}


/*------------------------------------------------------------------------------------------------------------\
	Date Created: 10-22-05
	Modified Date: 11-17-05
	Function Name: SetAjax()
	Porpouse: Clase para trabajar con AJAX
/-------------------------------------------------------------------------------------------------------------*/
function SetAjax(file_name) {
	this.Form = null;
	this.Method = "GET";
	this.Objects = new Array();
	this.AllFormElements = false;
	this.FilePath = file_name;
	this.FileRedirect = null;
	this.FileRedirectResult = false;
	this.setVar = null;
	this.RunScript = false;
	this.returnType = "TEXT";
	this.returnMode = 0;
	this.SplitChar = "|";
	this.Element = null;
	this.ElementAttribute = "innerHTML";
	this.manageError = function(errnum, value) { };
	
	
	this.onLoading = function() { };
	this.onLoaded = function() { };
	this.onInteractive = function() { };
	this.onCompletion = function() { };
	
	
	this.Execute = function () {
		var _query = this.MakeQuery();
		var _URL = this.FilePath;
		var _RedirectResult = "";
		var _errNumber = -1;
		
		var AJAX = new MyAjax();
		
		if (AJAX) {
			var self = this;
			if (self.Method.toUpperCase() == "GET") _URL += _query;
			
			AJAX.open(self.Method, _URL, true);
			AJAX.onreadystatechange = function() {
				switch (AJAX.readyState) {
					case 1:
						self.onLoading();
						break;
					case 2:
						self.onLoaded();
						break;
					case 3:
						self.onInteractive();
						break;
					case 4:
						if (AJAX.status == 200) {
							var _resultado = (self.returnType.toUpperCase() == "TEXT") ? AJAX.responseText : AJAX.responseXML;
							
							var _resultado_split = _resultado.split("[/ERROR]");
							if (_resultado_split.length == 2) {
								_errNumber = _resultado_split[0];
								_errNumber = _errNumber.replace("[ERROR]", "");
								_errNumber = _errNumber.replace("[/ERROR]", "");
								
								_resultado = _resultado_split[1];
							}
							
							if (_resultado.indexOf("Notice") > 0) {
								alert(_resultado);
								return false;
							}
							
							if (_errNumber != -1) {
								self.manageError(_errNumber, _resultado);
								return false;
							} else {
								if (self.RunScript) self.runResponse(_resultado);
								self.returnElement(_resultado, self.ElementAttribute);
								if (self.returnMode == 1) self.ReturnQuery(_resultado);
								
								self.onCompletion();
								
								if (self.FileRedirectResult && self.returnType.toUpperCase() == "TEXT") _RedirectResult = _resultado;
								if (self.FileRedirect) document.location.href = self.FileRedirect + _RedirectResult;
							}
						} else if (AJAX.status == 404) {
							alert("El Archivo \"" + self.FilePath + "\" no se encuentra.");
						} else {
							var _ext = self.FilePath.substring(self.FilePath.indexOf(".")+1, self.FilePath.length);
							alert("Error Number: " + AJAX.status + "\nDescription: " + AJAX.statusText + "\nDocument Type: " 
							+ _ext.toUpperCase());
						}
						break;
				}
			}
			
			if (self.Method.toUpperCase() == "POST") AJAX.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
			var _SendV = (self.Method.toUpperCase() == "GET") ? null : _query;
			
			AJAX.send(_SendV);
		}
	}
	
	
	this.returnElement = function(_result, _attribute) {
		var elementObj = null;
		elementObj = (!jsGetObject(this.Element)) ? this.Element : jsGetObject(this.Element);
		
		if (elementObj) {
			var elemNodeName = elementObj.nodeName;
			elemNodeName = elemNodeName.toLowerCase();
			_result = ReplaceEnters(ClearHTML(_result), "");
			
			if (elemNodeName == "input" || elemNodeName == "select" || elemNodeName == "option" || elemNodeName == "textarea") {
				elementObj.value = _result;
			} else {
				jsSetAttribute(elementObj, _attribute, _result);
			}
		}
	}
	
	
	this.runResponse = function(_result) {
		eval(_result);
	}
	
	
	this.setVarFunction = function(_vars) {
		var query = "";
		var _Group, _Item;
  		for (var _Group in _vars) {
			if (_vars[_Group].length == 2) {
				var _Name = _vars[_Group][0];
				var _Value = _vars[_Group][1];
				query += "&" + _Name + "=" + _Value;
			} else {
				alert("Error: Solo puede establecer dos valores: [nombre, valor].\nGrupo: " + _Group);
				break;
			}
		}
		
		return query;
	}
	
	this.ReturnQuery = function(_result) {
		var _obj_type = "";
		var _res;
		
		if (this.returnType.toUpperCase() == "TEXT") {
			var _RS = _result.split(this.SplitChar);
			
			for (i=0; i < _RS.length; i++) {
				if (jsGetObject(this.Objects[i])) {
					_obj_type = jsGetObject(this.Objects[i]).nodeName.toLowerCase();
					_res = ClearHTML(_RS[i]);
					
					if (_res != "") {
						if (_obj_type == "input" || _obj_type == "select" || _obj_type == "option" || _obj_type == "textarea") {
							jsGetObject(this.Objects[i]).value = _res;
						} else {
							jsGetObject(this.Objects[i]).innerHTML = _res;
						}
					}
				}
			}
		} else {
			//var _ip = _result.getElementsByTagName('usuario').item(0).firstChild.data;
		}
	}
	
	this.MakeQuery = function() {
		var query = "";
		var union = "";
		var _obj_type = "";
		
		if (this.AllFormElements && this.Form) {
			if (this.Form.elements.length) {
				for (i=0; i < this.Form.elements.length; i++) {
					_obj_type = this.Form.elements[i].nodeName.toLowerCase();
					
					if (_obj_type == "input" || _obj_type == "select" || _obj_type == "option" || _obj_type == "textarea") {
						if (this.Form.elements[i].type != "button" && this.Form.elements[i].type != "submit" && this.Form.elements[i].type != "reset" && 
						this.Form.elements[i].type != "image") {
							query += this.Form.elements[i].name + "=" + this.Form.elements[i].value + "&";
						}
					}
				}
				
				query = query.substring(0, query.length-1);
			}
		} else {
			var total = this.Objects.length;
			if (total) {
				for(i=0; i < total; i++) {
					union = (i < (total-1)) ? "&" : "";
					query += this.Objects[i] + "=" + jsGetObject(this.Objects[i]).value + union;
				}
				
				if (this.Method.toUpperCase() == "GET") query = "?" + query;
			} else {
				query = "?";
			}
			
			query += this.setVarFunction(this.setVar);
		}
		
		return query;
	}
}

/* FUNCION QUE TRAE LOS MODELOS DE ACCESORIOS DEPENDIENDO DEL GRUPO DE ACCESORIO ESCOGIDO */
function cargarContenido() {
	var ajax = MyAjax();
	ajax.open("GET", "select_modelos_accesorios.php?codigo_grupo_accesorio=" + GetObject("codigo_grupo").value, true);
	ajax.onreadystatechange = function() {
		var OBJ = GetObject("modelo_accesorio");
		
		if (ajax.readyState == 4) {				
			if (ajax.status == 200) {
				var resultado = ajax.responseText;
				//alert(resultado);
				var result_data = "";
				
				clearTopicList(OBJ);
				GetObject("Cargador").innerHTML = "";
				appendToSelect(OBJ, 0, "Seleccione un Modelo de Accesorio");
				OBJ.disabled = false;
				
				var resultado_split = resultado.split("|");
				for (i=0; i < resultado_split.length; i++) {
					result_data = resultado_split[i].split(",");
					appendToSelect(OBJ, ClearHTML(result_data[0]), ClearHTML(result_data[1]));					
				}					
			} else {
				alert("Error Número: " + ajax.status + "\nDescripción: " + ajax.statusText);	
			}
		} else {
			OBJ.disabled = true;
			GetObject("Cargador").innerHTML = "Cargando, por favor espere...";
		}
	}
	
	ajax.send(null);
}
/* FUNCION QUE TRAE LOS MODELOS DE ACCESORIOS DEPENDIENDO DEL GRUPO DE ACCESORIO ESCOGIDO */

/* FUNCION QUE TRAE LOS MODELOS DEPENDIENDO DE LA MARCA ESCOGIDO */
function cargarContenidoMarca() {
	var ajax = MyAjax();
	ajax.open("GET", "select_modelos.php?codigo_marca=" + GetObject("marca").value, true);
	ajax.onreadystatechange = function() {
		var OBJ = GetObject("modelo");
		
		if (ajax.readyState == 4) {				
			if (ajax.status == 200) {
				var resultado = ajax.responseText;
				//alert(resultado);
				var result_data = "";
				
				clearTopicList(OBJ);
				GetObject("Cargador").innerHTML = "";
				appendToSelect(OBJ, 0, "Seleccione un Modelo");
				OBJ.disabled = false;
				
				var resultado_split = resultado.split("|");
				for (i=0; i < resultado_split.length; i++) {
					result_data = resultado_split[i].split(",");
					appendToSelect(OBJ, ClearHTML(result_data[0]), ClearHTML(result_data[1]));					
				}					
			} else {
				alert("Error Número: " + ajax.status + "\nDescripción: " + ajax.statusText);	
			}
		} else {
			OBJ.disabled = true;
			GetObject("Cargador").innerHTML = "Cargando, por favor espere...";
		}
	}
	
	ajax.send(null);
}
/* FUNCION QUE TRAE LOS MODELOS DEPENDIENDO DE LA MARCA ESCOGIDO */

//Función para crear las opciones del select de distritos
function appendToSelect(obj, value, content) {
	sub0 = new Option(content,value,"");
	obj.options[obj.options.length] = sub0;
}


//Función para eliminar las opciones del select de distritos
function clearTopicList(obj) {
	obj.options.length = 0;
}

/*------------------------------------------------------------------------------------------------------------\
	Date Created: 12-30-05
	Modified Date: 12-30-05
	Function Name: ClearHTML(sHTML)
	Porpouse: Limpia el código HTML.
		sHTML: HTML Tags a limpiar.
/-------------------------------------------------------------------------------------------------------------*/
function ClearHTML(sHTML) {
	sHTML = CleanWord(sHTML);
	sHTML = sHTML.replace(/<[^>]*>/gi, "");
	sHTML = sHTML.replace( /\n/gi, "") ;
	sHTML = sHTML.replace(/&nbsp;/gi, "");
	var RegX = new RegExp(String.fromCharCode(10), 'g');
	sHTML = sHTML.replace(RegX, "");
	RegX = new RegExp(String.fromCharCode(13), 'g');
	sHTML = sHTML.replace(RegX, "");
	return sHTML;
}

/*------------------------------------------------------------------------------------------------------------\
	Date Created: 12-30-05
	Modified Date: 12-30-05
	Function Name: CleanWord(html)
	Porpouse: Limpia el código HTML generado por Microsoft Word.
		html: HTML Tags a limpiar.
/-------------------------------------------------------------------------------------------------------------*/
function CleanWord(html) {
	html = html.replace(/<o:p>\s*<\/o:p>/g, "") ;
	html = html.replace(/<o:p>.*?<\/o:p>/g, "&nbsp;") ;
	
	// Remove mso-xxx styles.
	html = html.replace( /\s*mso-[^:]+:[^;"]+;?/gi, "" ) ;

	// Remove margin styles.
	html = html.replace( /\s*MARGIN: 0cm 0cm 0pt\s*;/gi, "" ) ;
	html = html.replace( /\s*MARGIN: 0cm 0cm 0pt\s*"/gi, "\"" ) ;

	html = html.replace( /\s*TEXT-INDENT: 0cm\s*;/gi, "" ) ;
	html = html.replace( /\s*TEXT-INDENT: 0cm\s*"/gi, "\"" ) ;

	html = html.replace( /\s*TEXT-ALIGN: [^\s;]+;?"/gi, "\"" ) ;

	html = html.replace( /\s*PAGE-BREAK-BEFORE: [^\s;]+;?"/gi, "\"" ) ;

	html = html.replace( /\s*FONT-VARIANT: [^\s;]+;?"/gi, "\"" ) ;

	html = html.replace( /\s*tab-stops:[^;"]*;?/gi, "" ) ;
	html = html.replace( /\s*tab-stops:[^"]*/gi, "" ) ;

	// Remove FONT face attributes.
	html = html.replace( /\s*face="[^"]*"/gi, "" ) ;
	html = html.replace( /\s*face=[^ >]*/gi, "" ) ;

	html = html.replace( /\s*FONT-FAMILY:[^;"]*;?/gi, "" ) ;
	
	// Remove Class attributes
	html = html.replace(/<(\w[^>]*) class=([^ |>]*)([^>]*)/gi, "<$1$3") ;

	// Remove styles.
	html = html.replace( /<(\w[^>]*) style="([^\"]*)"([^>]*)/gi, "<$1$3" ) ;

	// Remove empty styles.
	html =  html.replace( /\s*style="\s*"/gi, '' ) ;
	
	html = html.replace( /<SPAN\s*[^>]*>\s*&nbsp;\s*<\/SPAN>/gi, '&nbsp;' ) ;
	
	html = html.replace( /<SPAN\s*[^>]*><\/SPAN>/gi, '' ) ;
	
	// Remove Lang attributes
	html = html.replace(/<(\w[^>]*) lang=([^ |>]*)([^>]*)/gi, "<$1$3") ;
	
	html = html.replace( /<SPAN\s*>(.*?)<\/SPAN>/gi, '$1' ) ;
	
	html = html.replace( /<FONT\s*>(.*?)<\/FONT>/gi, '$1' ) ;

	// Remove XML elements and declarations
	html = html.replace(/<\\?\?xml[^>]*>/gi, "") ;
	
	// Remove Tags with XML namespace declarations: <o:p></o:p>
	html = html.replace(/<\/?\w+:[^>]*>/gi, "") ;
	
	html = html.replace( /<H\d>\s*<\/H\d>/gi, '' ) ;

	html = html.replace( /<H1([^>]*)>/gi, '<div$1><b><font size="6">' ) ;
	html = html.replace( /<H2([^>]*)>/gi, '<div$1><b><font size="5">' ) ;
	html = html.replace( /<H3([^>]*)>/gi, '<div$1><b><font size="4">' ) ;
	html = html.replace( /<H4([^>]*)>/gi, '<div$1><b><font size="3">' ) ;
	html = html.replace( /<H5([^>]*)>/gi, '<div$1><b><font size="2">' ) ;
	html = html.replace( /<H6([^>]*)>/gi, '<div$1><b><font size="1">' ) ;

	html = html.replace( /<\/H\d>/gi, '</font></b></div>' ) ;
	
	html = html.replace( /<(U|I|STRIKE)>&nbsp;<\/\1>/g, '&nbsp;' ) ;

	// Remove empty tags (three times, just to be sure).
	html = html.replace( /<([^\s>]+)[^>]*>\s*<\/\1>/g, '' ) ;
	html = html.replace( /<([^\s>]+)[^>]*>\s*<\/\1>/g, '' ) ;
	html = html.replace( /<([^\s>]+)[^>]*>\s*<\/\1>/g, '' ) ;

	// Transform <P> to <DIV>
	var re = new RegExp("(<P)([^>]*>.*?)(<\/P>)","gi") ;	// Different because of a IE 5.0 error
	html = html.replace( re, "<div$2</div>" ) ;

	return html ;
}