
<!-- hide
var timeStr, dateStr;
function getTheDay(aText)
{
	myDays=["domingo","lunes","martes","miercoles","jueves","viernes","sabado","domingo"]

	myDate=new Date(eval('"'+aText.value+'"'))
	myDays[myDate.getDay()]
	document.form1.textDay.value=myDays[myDate.getDay()]
}
function clock() {
	var strFecha=""
	myDays=["domingo","lunes","martes","miercoles","jueves","viernes","sabado","domingo"]
	myMonths=["enero","febrero","marzo","abril","mayo","junio","julio","agosto","septiembre","octubre","noviembre","diciembre"]

        now= new Date();
        // time 
        hours= now.getHours();
        minutes= now.getMinutes();
        seconds= now.getSeconds();
        timeStr= "" + hours;
        timeStr+= ((minutes < 10) ? ":0" : ":") + minutes;
       // timeStr+= ((seconds < 10) ? ":0" : ":") + seconds;
		
		 strFecha = '<div class="txtText" align="right"><span class="txtSubtitulo">' + timeStr + '</span> '
		 

       

        // date
        date= now.getDate();
        month= now.getMonth()+1;
        year= now.getYear();
        dateStr= "" + month;
        dateStr+= ((date < 10) ? "/0" : "/") + date;
        dateStr+= "/" + year;
		strFecha+=" " + myDays[now.getDay()] + " " + date 
		strFecha+=" de " + myMonths[now.getMonth()] 		
		strFecha+=" </div>"
      //  document.clock.date.value = dateStr;
		document.getElementById("lyHora").innerHTML=strFecha
        Timer= setTimeout("clock()",6000);
}

//----------------------------------------------------------------------------------------------------
/* Funcion : openContact
 * Proposito: Abre la ventana de contacto
 * @Parametros :
 * 			
 */
 //---------------------------------------------------------------------------------------------------- 

function openContact(){
		window.open("contacto.asp","wcontacto", "width=420,height=550,scrollbars=no,location = no,resizable=no")
}
// -->



//Funciones utiles para todo el sitio
//----------------------------------------------------------------------------------------------------
/* Funcion : GetDateFormat
 * Proposito: Obtiene la fecha segun el formato que se le envie como parametro
 * @Parametros :
 * 			s_format: formato de fecha "dd/mm/yyyy,mm/dd/yyyy"
 */
 //---------------------------------------------------------------------------------------------------- 

function GetDateFormat(s_format){
	var arr_date = s_format.split("/");
	
	var actual_date=new Date(); 
	var date_formatted= Array();
	/*var nhours=thetime.getHours(); 
	var nmins=thetime.getMinutes(); 
	var nsecn=thetime.getSeconds(); 
	*/
	for (icountDate=0;icountDate<arr_date.length;icountDate++){
	//	alert(arr_date[icountDate])
		switch(arr_date[icountDate]){
			case "dd":
				date_formatted[icountDate] = pad(actual_date.getDate(),2);
			break;
			case "mm":
				date_formatted[icountDate] = pad(actual_date.getMonth()+1,2); //el indice de los meses comienza en 0
			break;
			case "yy":
				date_formatted[icountDate] = actual_date.getYear()
			break;
			case "yyyy":
				date_formatted[icountDate] = actual_date.getYear();
			break;
		}//switch
	}//for
//	alert(date_formatted.join("/"))

	return (date_formatted.join("/"));
}

//----------------------------------------------------------------------------------------------------
/* Funcion : AgregarDias
 * Proposito: Obtiene la fecha segun el formato que se le envie como parametro
 * @Parametros :
 * 			s_date: fecha en formato "mm/dd/yyyy"
 *			iType de elemento a sumar dia,mes o año (d,m,y)
 *			iValue Valor a sumar			
 */
 //---------------------------------------------------------------------------------------------------- 

function AgregarDias(s_date,iType,iValue){
	var arr_valores = s_date.split(" ") //divide la fecha de la hora
	var arr_date = (arr_valores[0]).split("/");
	var s_return =""; 
	switch(iType){
		case "d":
			arr_date[1] = parseInt(arr_date[1],10) + parseInt(iValue,10)
			arr_date[1] = pad(arr_date[1],2)
		break;
		case "m":
			arr_date[0] = parseInt(arr_date[0],10) + parseInt(iValue,10)
			arr_date[0] = pad(arr_date[0],2)
		break;
		case "y":
			arr_date[2] = parseInt(arr_date[2],10) + parseInt(iValue,10)
		break;
	}//switch
	s_return = arr_date.join("/") 
	if(arr_valores.length>1)
		s_return+= " " + arr_valores[1];
	return s_return;

}
/*********************************************************************
	Function: pad
	Purpose:  Left pad a number with zeros to a given width
	Inputs:   value, width (defaults to 2)
	Returns:  numeric string of width characters
	*********************************************************************/
	var pad=function(value, width){
		//width=choose(width,2);
		var returnValue=value.toString();
		for(var i=width-returnValue.length;i>0;i--)
			returnValue="0"+returnValue;
		return returnValue;
	}
//----------------------------------------------------------------------------------------------------
/* Funcion : Editar
 * Se utiliza en todas las secciones de listado
 * Proposito: Asigna la accion(update) y el identificador unico del registro a una forma dentro de la misma pagina
 * @Parametros :
 * 				Recibe como parametro el identificador unico
 *				form_name  : es el nombre de la forma
 *				sfile	   : es el archivo donde se redireccionara al hacer clic
 */
 //---------------------------------------------------------------------------------------------------- 
function Editar(id_registro,sfile,sform_name){
	//alert("id_registro=" + id_registro + " sform_name=" + sform_name )
	document.forms[sform_name].action = sfile
	document.forms[sform_name].id_registro.value =  id_registro
	document.forms[sform_name].frm_action.value = "update"
	document.forms[sform_name].submit()
}
 //----------------------------------------------------------------------------------------------------
/* Funcion : Editar_Todo
 * Proposito: Llama los metodos para actualizar todos los elementos que aparezcan en una matriz
 * 			  al hacer click en el boton de actualizar
 * @Parametros :
 *				form_name  : es el nombre de la forma
 *				sfile	   : es el archivo donde se redireccionara al hacer clic
 */
 //----------------------------------------------------------------------------------------------------
function Editar_Todo(sfile,sform_name){
	alert("id_registro=" + id_registro + " sform_name=" + sform_name )
	document.forms[sform_name].action = sfile
	document.forms[sform_name].id_registro.value =  0
	document.forms[sform_name].frm_action.value = "update_all"
	document.forms[sform_name].submit()

}

 //----------------------------------------------------------------------------------------------------
/* Funcion : Eliminar
 * Se utiliza en todas las secciones de listado
 * Proposito: Asigna la accion(delete) y el identificador unico del registro a una forma dentro de la misma pagina
 * @Parametros :
 * 				Recibe como parametro el identificador unico
 *				form_name  : es el nombre de la forma
 *				sfile	   : es el archivo donde se redireccionara al hacer clic
 */
 //---------------------------------------------------------------------------------------------------- 
function Eliminar(id_registro,sfile,sform_name){
	answer = confirm('¿Desea eliminar el registro?')
	if(answer ) {
		document.forms[sform_name].action = sfile
		document.forms[sform_name].id_registro.value =  id_registro
		document.forms[sform_name].frm_action.value = "delete"
		document.forms[sform_name].submit()
	}

}
//----------------------------------------------------------------------------------------------------
/* Funcion : Permisos
 *
 * Proposito: Abre una ventana nueva para asignar los permisos a ese perfil
 * @Parametros :
 * 				Recibe como parametro el identificador unico del perfil
 *				form_name  : es el nombre de la forma
 *				sfile	   : es el archivo donde se redireccionara al hacer clic
 */
 //----------------------------------------------------------------------------------------------------
function Permisos(id_registro,sfile){
	window.open(sfile+ "?id_perfil=" + id_registro,"Permisos"+id_registro , "width=650,height=450,scrollbars,location = no,resizable")
}

 //----------------------------------------------------------------------------------------------------
/* Funcion : OpenWindow(id_registro,sFile)
 *
 * Proposito: Abre una ventana nueva y pasa como parametro un identificador
 * @Parametros :
 * 				Recibe como parametro el identificador unico
 *				sfile	   : es el archivo donde se redireccionara al hacer clic
 */
 //----------------------------------------------------------------------------------------------------
function OpenWindow(id_registro,sfile){
	window.open(sfile+ "?id_registro=" + id_registro,"Permisos" , "width=550,height=450,scrollbars,location = no,resizable")
}

 //----------------------------------------------------------------------------------------------------
/* Funcion : Procesando
 *
 * Proposito: Deshabilita un boton para evitar que le den dos clicks
 *	      Verifica que la forma este validada antes de ejecutar un submit
 * @Referencia:
 *		Este metodo es llamado desde la propiedad  onaftervalidate, se incluye en el tag form
 * 		ej. onaftervalidate = "Procesando('frmcaptura','btnSubmit',50)"
 *
 * @Parametros :
 * 		sfrom_name: nombre de la forma la cual se esta procesando
 *		btn_name  : nombre del boton
 *		itime	  : tiempo para ejecutar el submit
 *
 * Condiciones: la forma que se verifica debe ser validada con el script validation.js
 * 		(añadiendo los parametros al tag <form> para validar)
 * 		Se debe Llamar el metodo Validation.Setup() despues de la forma
 *		Lo que hace este metodo es añadir eventos y funciones al objeto form para verificar si ya esta validado
 */
 //---------------------------------------------------------------------------------------------------- 
var timer
function Procesando(sform_name, btn_name,itime){
	try{
		document.all[btn_name].value = "Procesando..."
		//alert(document.all[btn_name].value)
	
		//Comprueba con la funcion el objeto validation (validation.js)
		// si la forma no contiene errores de captura (si es valida)
		if(document.all[btn_name].disabled==false){
			document.all[btn_name].disabled =true
			timer = window.setTimeout("document.forms['" + sform_name+"'].submit()",itime);
			window.clearTimeout(timer)
			
		}else{
			window.clearTimeout(timer)
		}
	}catch(e){alert(e.message)}
	return true
}
//----------------------------------------------------------------------------------------------------
/* Funcion : Ordenar
 *
 * Proposito:ASigna los cookies del nuevo orden seleccionado en el listado
 * @Parametros :
 * 				name	:	nombre del cookie
 *				sFields	:	Campo seleccionado para el ordenamiento
 *				s_tipo_ordenamiento : tipo_ordenamiento ASC y DESC
 */
 //----------------------------------------------------------------------------------------------------
function Ordenar(sPrefix,sFields,s_tipo_ordenamiento){
	
	setCookie(sPrefix + "_ord", sFields );
	setCookie(sPrefix + "_last_col",sFields );
	setCookie(sPrefix + "_ord_tipo", s_tipo_ordenamiento );
	document.location.reload(0);
	
}

//----------------------------------------------------------------------------------------------------
/* Funcion : SetValoresFiltroAutomatico
 *
 * Proposito:Asigna los cookies de los filtros
 * @Parametros :
 * 				sPrefix	:	nombre de la pagina
 *				s_CamposFiltro	:	Nombre de los selects con los campos
 *				s_CondicionesFiltro : Nombre de los selects con las condiciones
 *				s_ValoresFiltro : Nombre de los inputs con los valores
 *				s_total_filtros : Nombre del input hidden que contiene el # de filtros
 */
 //----------------------------------------------------------------------------------------------------
function SetValoresFiltroAutomatico(sPrefix,s_CamposFiltro,s_CondicionesFiltro,s_ValoresFiltro,s_total_filtros){
	
	var total = document.all(s_total_filtros).value

	if(total>=1){
		var condiciones  = (document.all(s_CondicionesFiltro))
		var arrCondiciones = Array()

		for (i=0;i<condiciones.length;i++)
			arrCondiciones[i] = (condiciones[i].value)
			
		
		var campos  = (document.all(s_CamposFiltro))
		var arrcampos = Array()
			
		for (i=0;i<campos.length;i++)
			arrcampos[i] = (campos[i].value)
			
		
		var valores  = (document.all(s_ValoresFiltro))
		var arrvalores = Array()
				
		for (i=0;i<valores.length;i++)
			arrvalores[i] = (valores[i].value)
			
		
		
		s_campos	= arrcampos.join(",")
		s_valores	= arrvalores.join(",") 
		s_condiciones 	=  arrCondiciones.join(",") 
		
	}else{
		var condiciones  = (document.all(s_CondicionesFiltro).value)
		var campos  = (document.all(s_CamposFiltro).value)
		var valores  = (document.all(s_ValoresFiltro).value)

		s_campos	= campos
		s_valores	= valores 
		s_condiciones 	=  condiciones 
	}
	
	
	
	
		
	//alert("Campos:"+s_campos + "\n"+"Condiciones:" +s_condiciones+ "\n"+"Valores:"+ s_valores +"\n"+total)
	
	setCookie(sPrefix + "_total_filtro", total );
	setCookie(sPrefix + "_campos_filtro",s_campos );
	setCookie(sPrefix + "_valores_filtro", s_valores );
	setCookie(sPrefix + "_condiciones_filtro", s_condiciones );
	
	document.location.reload(0);
	
}//function

//----------------------------------------------------------------------------------------------------
/* Funcion : addRow
 *
 * Proposito:Agrega un renglon a la tabla e introduce un renglon con los campos del filtro
 * @Parametros :
 * 				id:		Identificador de la tabla donde estan los filtros
 *				maxFiltros      # maximo de filtros
 * 				sPrefix	 	Prefijo de las cookies,
 * Dependencias:	La tabla debe tener la etiqueta tbody
 *			Debe existir una etiqueta span <span style='display:none' id='filtro_molde' >
 *			que contenga el molde de los campos para filtrar
 *			
 *			Debe existir un campo hidden con el total de filtros activos (total_filtros)			
 */
 //----------------------------------------------------------------------------------------------------

 function addRow(sPrefix,id,maxFiltros){
 
    var tbody = document.getElementById(id).getElementsByTagName("TBODY")[0];
    
    var filtros = document.getElementById('filtro_molde')
    
    var total = parseInt(document.all("total_filtros").value,10)    
    
    total = total + 1
  
    
    if(total>maxFiltros){
    	total = maxFiltros
    	
    }else{
	    var row = document.createElement("TR")
	    var td1 = document.createElement("TD")
	    td1.appendChild(document.createTextNode(""))
	    row.appendChild(td1);
	    td1.innerHTML=filtros.innerHTML.replace("undefined","''")


	   /* var nod=document.createElement("TR");
	    var nod2=document.createElement("TD");
	    nod2.appendChild(document.createTextNode("Orange"));
	    nod.appendChild(nod2);
		myTable.insertBefore(nod, fin_filtro);
	   */ 

	    tbody.appendChild(row);
    }
  
    document.all("total_filtros").value = total
    setCookie(sPrefix + "_total_filtro", total );
  
    
  }
  
//----------------------------------------------------------------------------------------------------
/* Funcion : RemoveRow
 *
 * Proposito:Elimina un renglon de la tabla de los filtros
 * @Parametros :
 * 				id:		Identificador de la tabla donde estan los filtros
 *				sPrefix	 	Prefijo de las cookies,
 * Dependencias:	Disminuye el total de filtros y establece el cookie
 */
 //----------------------------------------------------------------------------------------------------
function RemoveRow(sPrefix,id){
	
  try{
	    var total = parseInt(document.all("total_filtros").value,10)
	    total = total - 1
	    if(total<1){
		total=1
	    }else{
		var tbody = document.getElementById(id).getElementsByTagName("TBODY")[0];
		//alert(tbody.lastChild.innerHTML)
		tbody.removeChild(tbody.lastChild);    
		
		
	    }
	    	
	    setCookie(sPrefix + "_total_filtro", total );
	    document.all("total_filtros").value = total


	    
  }
  catch(x){}
}

 //----------------------------------------------------------------------------------------------------
/* Funcion : Cookies
 *
 * Proposito: Almacenar datos en cookies
 * @Parametros :
 * 				name	:	nombre del cookie
 *				value	:	valor
 */
  //----------------------------------------------------------------------------------------------------
function setCookie(name, value)
         {
         //If name is the empty string, it places a ; at the beginning
         //of document.cookie, causing clearCookies() to malfunction.
         if(name != '')
            document.cookie = name + '=' + value;
         }
 //----------------------------------------------------------------------------------------------------
/* Funcion : getCookie
 *
 * Proposito: Obtiene el valor de los cookies
 * @Parametros :
 * 				name	:	nombre del cookie
 */
 //---------------------------------------------------------------------------------------------------- 
function getCookie(name)
         {
         //Without this, it will return the first value
         //in document.cookie when name is the empty string.
         if(name == '')
            return('');

         name_index = document.cookie.indexOf(name + '=');

         if(name_index == -1)
            return('');

         cookie_value =  document.cookie.substr(name_index + name.length + 1,
                                                document.cookie.length);

         //All cookie name-value pairs end with a semi-colon, except the last one.
         end_of_cookie = cookie_value.indexOf(';');
         if(end_of_cookie != -1)
            cookie_value = cookie_value.substr(0, end_of_cookie);

         //Restores all the blank spaces.
         space = cookie_value.indexOf('+');
         while(space != -1)
              {
              cookie_value = cookie_value.substr(0, space) + ' ' +
              cookie_value.substr(space + 1, cookie_value.length);

              space = cookie_value.indexOf('+');
              }

         return(cookie_value);
         }
 //----------------------------------------------------------------------------------------------------         
/* Funcion : clearCookie
 *
 * Proposito: Elimina un cookie
 * @Parametros :
 * 				name	:	nombre del cookie
 */
  //----------------------------------------------------------------------------------------------------
function clearCookie(name)
         {
         expires = new Date();
         expires.setYear(expires.getYear() - 1);

         document.cookie = name + '=null' + '; expires=' + expires;
         }
 //----------------------------------------------------------------------------------------------------         
/* Funcion : clearCookies
 *
 * Proposito: Elimina todas las cookies
 */
  //----------------------------------------------------------------------------------------------------
function clearCookies()
         {
         Cookies = document.cookie;
         Cookie = Cookies;
         expires = new Date();
         expires.setYear(expires.getYear() - 1);

         while(Cookie.length > 0)
              {
              //All cookie name-value pairs end with a semi-colon, except the last one.
              Cookie = Cookies.substr(0, Cookies.indexOf(';'));
              Cookies = Cookies.substr(Cookies.indexOf(';') + 1, Cookies.length);

              if(Cookie != '')
                 document.cookie = Cookie + '; expires=' + expires;
              else
                 document.cookie = Cookies + '; expires=' + expires;
              }
         }
         

 

//----------------------------------------------------------------------------------------------------
/* Funcion : show
 *
 * Proposito    : 	Muestra los elementos con el mismo id
 * Parametros   :	Puede recibir un arreglo de parametros
 *			lo que haria es mostrar todos los elementos con los id que le sean mandados
 * Dependencias :	El elemento html debe tener la propiedad clicked sus valores son (0,1)
 *
 */
 //----------------------------------------------------------------------------------------------------
 
function show()
{
	for(var I=0;I<arguments.length;I++)
	{

		var elementCount = document.all(arguments[I]).length;
		if(elementCount>1){
			for (j=0; j<elementCount; j++) {

				obj = document.all(arguments[I],j)
				obj.style.display = '';
			}
		}else{
			obj = document.all(arguments[I])
			obj.style.display = '';
		}
		

	}

}

 //----------------------------------------------------------------------------------------------------
/* Funcion : hide
 *
 * Proposito: Oculta los elementos con el mismo id
 * Parametros   :	Puede recibir un arreglo de parametros
 *			lo que haria es mostrar todos los elementos con los id que le sean mandados
 * Dependencias :	El elemento html debe tener la propiedad clicked sus valores son (0,1) 
 *
 */ 
 //----------------------------------------------------------------------------------------------------
function hide()
{
	

	for(var I=0;I<arguments.length;I++)
	{
		var elementCount = document.all(arguments[I]).length;
		if(elementCount>1){
			for (j=0; j<elementCount; j++) {
				obj = document.all(arguments[I],j)
				obj.style.display = 'none';
			}//for
		}else{
			obj = document.all(arguments[I])
			obj.style.display = 'none';
		}//if
	}//for
	
}
 //----------------------------------------------------------------------------------------------------
/* Funcion : MuestraPartidas
 *
 * Proposito: Mostrar y ocultar las partidas de una orden de compra en el listado_orden.asp
 * Parametros   :	Recibe un objeto TR
 *			
 * Dependencias :	Necesita que el objeto TR padre tenga como id el numero de la orden de compra
 *			Y las partidas necesitan en el TR el id "OC_"+numero de orden de compra
 * EJ.		: <tr id="1" clicked=0><td> </td></tr>
 * 		  <tr id="OC_1"><td> </td></tr>
 *
 */
 //----------------------------------------------------------------------------------------------------
function MuestraPartidas(obj){
	//verifica si el renglon ya fue presionado
	
	if(obj.clicked==0){
		obj.clicked=1			
		hide("OC_"+obj.id)				
	}else{
		show("OC_"+obj.id)				
		obj.clicked=0
	}
	return obj;//Regresa el objeto selecciondo
		
		
}//function 
 //----------------------------------------------------------------------------------------------------
/* Funcion : SelectRow
 *
 * Proposito: Cambia el color de un renglon seleccionado
 * Parametros   :	obj		: Recibe un objeto TR
 *			sFormName	: Nombre de la forma que se esta utilizando
 *			
 * Dependencias:	Necesita que el renglon tenga la propiedad "class"
 *			y una nueva propiedad llamada class_origen con el mismo valor
 *		EJ:
 *			<tr class="item" class_origen="item">
 *			Los elementos que seran editables necesitan la propiedad edit=1
 *		EJ.	<tr>
 * 				<td edit=1>campo editable</td>
 * 				<td >campo no editable</td>
 * 				
 */
 //----------------------------------------------------------------------------------------------------
var s_last_row		//ultimo objeto TR seleccionado
var className		//nombre de la clase origen
var function_obj	//Nombre de la funcion origen
function SelectRow(obj,sFormName){
	//Si ya fue presionado no guarda el nombre de la clase del renglon
	var bReturnLast = true
	
    if(s_last_row){
    	//alert("SelectRow: "+ s_last_row.tagName)
		//Esconde los inputs y pone texto en los campos editables
		bReturnLast = ReadOnlyRow(s_last_row,sFormName);
		/*
		if(!bReturnLast){
			EditRow(s_last_row,sFormName)
			return false;
		}
		*/	
		s_last_row.className=s_last_row.class_origen
		s_last_row.onclick=function_obj
    }
	
   if(obj.tagName=="TR"){		
	if(obj.className!="" && obj.className!="selected")
		className=obj.className
	
	obj.className = 'selected';	
	function_obj = obj.onclick;

	obj.onclick=""
  }	
	
    

	//Crea inputs para los campos editables
	if(obj.tagName=="TR"){
		s_last_row = obj 
		EditRow(obj,sFormName)
	}
    if(obj.tagName!="TR")
    return false;
	
}//function

//----------------------------------------------------------------------------------------------------
/* Funcion : EditRow
 *
 * Proposito: Cambia el texto de las columnas por inputs en caso de que el permiso sea =2
 * Parametros   :	obj		: Recibe un objeto TR
 *			sFormName	: Nombre de la forma que se esta utilizando
 * Dependencias	:
 *			Necesita que esten creados en la forma campos ocultos con la informacion de :
 *			1) arr_tipos_campos : tipo de dato para el campo "int,str,date,etc" 
 *			2) arr_permisos_campos_visibles: Nivel de acceso de los campos visibles (0,1,2)
 *			3)arr_nombre_campos_visibles   : Nombre de los campos visibles para el usuario
 *			
 */
 //----------------------------------------------------------------------------------------------------
function EditRow(obj,sFormName){
	//alert("Mostrando hijos de " + obj.icountPartida)
	
	var i  	
	var iprimer_campo=true //variable para identificar el primer campo editable 
	
	var oParent = obj
	var oChildren=oParent.getElementsByTagName("td"); //numero de columnas del renglon seleccionado
	var iCountCamposVisibles = oChildren.length
	//alert(obj.icountPartida)
	
	
	var s_Nombres  =   new String(document.all("arr_nombre_campos_visibles").value)	
	var s_Permisos  =   new String(document.all("arr_permisos_campos_visibles").value)	
	var s_Tipos  =   new String(document.all("arr_tipos_campos_visibles").value)	
	var s_Valores  =   new String(document.all("arr_valores_campos_visibles"+ obj.icountPartida).value)	
	
		
	var arr_Nombres = new Array()
	var arr_Permisos = new Array()
	var arr_Tipos = new Array()
	var arr_Valores = new Array()

	arr_Nombres = (s_Nombres.split("|"))
	arr_Permisos = (s_Permisos.split("|"))
	arr_Tipos = (s_Tipos.split("|"))
	arr_Valores = (s_Valores.split("|"))
	
	/*Variables para totalizar los campos*/	
	var i_id_partida = obj.icountPartida 
	var i_oc_cliente = obj.oc_cliente.toString()
	//alert("id_partida="+ i_id_partida + "obj.oc_cliente="+i_oc_cliente)
	
	
	var iCount_campos_visibles=0
	var s_input,s_valor
	for (i=0;i<iCountCamposVisibles;i++){
		oChild = oChildren.item(i)
		

		//alert(arr_Nombres[i] +" " + arr_Permisos[i]+" " +arr_Tipos[i] +"=" +arr_Valores[i])
		if(arr_Permisos[i]>1){
		//alert(arr_Tipos[i])
			if(arr_Valores[iCount_campos_visibles]==undefined)
				s_valor=""
			else
				s_valor = arr_Valores[iCount_campos_visibles]
//			alert(arr_Valores[iCount_campos_visibles])
			
			switch(arr_Tipos[i]){
				case "int":	
					s_input=""

					s_input= "<input  onPropertyChange='Valida(this,\"integer\")' onkeyUp='Valida(this,\"integer\")' onkeyDown='Valida(this,\"integer\")' onchange='Valida(this,\"integer\")' class='textfield' name='"+ arr_Nombres[i] +"' size='" + oChild.width + "' value='"+ s_valor +"'>"
					s_validar1=""
					
					if(arr_Nombres[i]=="Camion"){
						
						s_input= "<input  onPropertyChange='Totalizar(\""+arr_Nombres[i] +"\",this," + i_id_partida +",\""+i_oc_cliente + "\");Valida(this,\"integer\")' onkeyUp='Valida(this,\"integer\")' onkeyDown='Valida(this,\"integer\")' onchange='Valida(this,\"integer\")' class='textfield' name='"+ arr_Nombres[i] +"' size='" + oChild.width + "' value='"+ s_valor +"'>"
						s_input+= "<a border=0 href='javascript:AddSubPartida(\"" + obj.icountPartida + "\")'><img src='../../media/imagenes/iconos/NOU.gif' width='10' height='10' border=0 alt='Agrega una subpartida'></a>"
					}


					
					if(arr_Nombres[i]=="Req_Cliente"){
						s_input= "<input  onPropertyChange='Valida(this,\"integer\")' onkeyUp='Valida(this,\"integer\")' onkeyDown='Valida(this,\"integer\")' onchange='Valida(this,\"integer\")' class='textfield' name='"+ arr_Nombres[i] +"' size='" + oChild.width + "' value='"+ s_valor +"'>"				
					}
					if(arr_Nombres[i]=="Conf_Mabe"){
						s_input = "<input Req_Cliente='"+oChild.Req_Cliente+"' onPropertyChange='Totalizar(\""+arr_Nombres[i] +"\",this," + i_id_partida +",\""+i_oc_cliente + "\");Valida(this,\"integer\")' onkeyUp='Valida(this,\"integer\")' onkeyDown='Valida(this,\"integer\")' onchange='Valida(this,\"integer\")' class='textfield' name='"+ arr_Nombres[i] +"' size='" + oChild.width + "' value='"+ s_valor +"'>"
					}
					if(arr_Nombres[i]=="Conf_Cliente"){
						
						s_input = "<input Conf_Mabe='"+oChild.Conf_Mabe+"'  onPropertyChange='Valida(this,\"integer\")' onkeyUp='Valida(this,\"integer\")' onkeyDown='Valida(this,\"integer\")' onchange='Valida(this,\"integer\")' class='textfield' name='"+ arr_Nombres[i] +"' size='" + oChild.width + "' value='"+ s_valor +"'>"
					}
					if(arr_Nombres[i]=="Cantidad"){
						s_input = "<input Conf_Mabe='"+oChild.Conf_Mabe+"' onPropertyChange='Valida(this,\"integer\");SumaSubpartidas(this,\"" + obj.icountPartida + "\")' onkeyUp='Valida(this,\"integer\");SumaSubpartidas(this,\"" + obj.icountPartida + "\")' onkeyDown='Valida(this,\"integer\");SumaSubpartidas(this,\"" + obj.icountPartida + "\")' onchange='Valida(this,\"integer\");SumaSubpartidas(this,\"" + obj.icountPartida + "\")' class='textfield' name='"+ arr_Nombres[i] +"' size='" + oChild.width + "' value='"+ s_valor +"'>"
					}
					
					
				break;
				case "str":
					
					s_input = "<input class='textfield' name='"+ arr_Nombres[i] +"' size='" + oChild.width + "' value='"+ s_valor +"'>"
					
				break;
				case "datetime":
				var s_calendario=""
					
					s_calendario= "<a target='' href='javascript:ActivaCalendario(document.forms[\"Listado\"]."+ arr_Nombres[i] + ",\""+arr_Nombres[i]+"\",\""+obj.icountPartida+"\")'>\n"					
					s_calendario+="<img src='calendar/img/cal.gif' width=16 height=16 border='0' ></a>\n"
					s_input = "<input  readonly='true' class='textfield' name='"+ arr_Nombres[i] +"' size='" + oChild.width + "' value='"+ s_valor +"'>"
					s_input+= s_calendario
					//Si el valor del input esta vacio debe poner como default la fecha actual
					var s_feha_tmp 
					if(arr_Nombres[i]=="Cita_Propuesta"){
						if(s_valor==""){
							//Obtiene el numero de dia de la semana.. si es viernes (indice 5 ) 
							//se deben sumar 3 dias a la fecha
							var oTmpDate = new Date()
							if(oTmpDate.getDay()==5)
								s_valor = AgregarDias(GetDateFormat("mm/dd/yy"),"d",3);//Regresa la fecha actual + 2 dias
							else
								s_valor = AgregarDias(GetDateFormat("mm/dd/yy"),"d",2);//Regresa la fecha actual + 2 dias
								
							s_valor+=" 9:00"
						}
							
						s_input = "<input   onPropertyChange='ValidaFecha(this)' readonly='true' class='textfield' name='"+ arr_Nombres[i] +"' size='" + oChild.width + "' value='"+ s_valor +"'>"
						s_input+= s_calendario
					}
					if(arr_Nombres[i]=="Cita_Confirmada"){
						s_input = "<input   onPropertyChange='ValidaFecha(this)' readonly='true' class='textfield' name='"+ arr_Nombres[i] +"' size='" + oChild.width + "' value='"+ s_valor +"'>"
						s_input+= s_calendario
					}
					

				break;
			}//switch
			
			oChild.innerHTML=s_input

			//---------------------------------------------------------------------------------			
			//Establece el focus en el primer elemento		
			//---------------------------------------------------------------------------------			
			if(iprimer_campo){
				if(arr_Nombres[i]!=""){
					//alert(document.all[arr_Nombres[i]].name +" =" + arr_Nombres[i]  )
					document.all[arr_Nombres[i]].focus();
				}//if arr_nombres!=""
				iprimer_campo = false;
			}//if primer campo
			//---------------------------------------------------------------------------------			
			
			
			iCount_campos_visibles+=1
		}//if permiso

	}//for
	
	//*********************************************************************************************
	//Convierte a campos editables las subpartidas							
	//*********************************************************************************************
	//Si tiene subpartidas, entonces convierte en solo lectura
	//El arreglo con los valores de subpartidos viene divido de la siguiente manera
	//los datos entre el caracter | es la informacion de la partida
	//los datos divididos por ; es la informacion de cada uno de los datos
	
		var num_subpartidas = parseInt(document.all["num_subpartidas"+oParent.icountPartida].value,10)

		//-----------------------------------------------------------------------------
		//-----Obtiene los valores de los campos de las subpartidas
		//-----------------------------------------------------------------------------
		var s_ValoresSubPartidas  =   new String(document.all("arr_valores_subpartidas"+ obj.icountPartida).value)	
		var arr_Valores_SubPartidas = new Array()
		var arr_renglonSubpartida = new Array();
		var arr_camposSubpartidas = new Array();

		for(i=0;i<num_subpartidas;i++){
			arr_Valores_SubPartidas[i]= new Array("","","","","")
		}
		
		arr_renglonSubpartida = (s_ValoresSubPartidas.split("|")) //divide el arreglo en subpartidas
		if(s_ValoresSubPartidas!="")
		for (i=0;i<arr_renglonSubpartida.length;i++){
			arr_camposSubpartidas =new Array()
			arr_camposSubpartidas = (arr_renglonSubpartida[i]).split(";")
			
			for (j=0;j<arr_camposSubpartidas.length;j++){				
				if(arr_camposSubpartidas[j]!=undefined)	
					arr_Valores_SubPartidas[i][j]=arr_camposSubpartidas[j];
			
			}///for icamposubpartida
		}//for isubpartida
		//-----------------------------------------------------------------------------

		var oTR_SubPartida 
		var oChildrenSubPartidas
		var oChildSubPartida
		var s_valor 
		//alert("num_subpartidas" + "="+num_subpartidas)
		oTR_SubPartida= obj
		for(j=0;j<num_subpartidas;j++){
	
			var oTR_SubPartida = oTR_SubPartida.nextSibling //Siguiente renglon
			//alert(oTR_SubPartida.innerHTML)
			var oChildrenSubPartidas = oTR_SubPartida.getElementsByTagName("td"); //numero de columnas del renglon seleccionado		
			s_valor="&nbsp;"
			
			for (k=0;k<oChildrenSubPartidas.length;k++){
				oChild = oChildren.item(k) //columna del renglon padre
				s_valor="&nbsp;"	
				var oChildSubPartida = oChildrenSubPartidas.item(k);
				if(arr_Permisos[k]>1){
					//De acuerdo al campo es el indice para el campo de la subpartida
					switch(arr_Nombres[k]){
						case "Cantidad":
							indice_campo_subpartida = 0
						break;
						case "Camion":
							indice_campo_subpartida = 1
						break;
						case "Capacidad":
							indice_campo_subpartida = 2
						break;
						case "Cita_Propuesta":
							indice_campo_subpartida = 3
						break;
						case "Cita_Confirmada":
							indice_campo_subpartida = 4
						break;
						default:
							indice_campo_subpartida=-1
						break;
					}//switch
					s_valor = ""
					
					if(indice_campo_subpartida>=0){
						
						s_valor = arr_Valores_SubPartidas[j][indice_campo_subpartida]
				
						switch(arr_Tipos[k]){
							case "int":	
								s_input= "<input  onkeyUp='Valida(this,\"integer\")' onPropertyChange='Valida(this,\"integer\")' onkeyDown='Valida(this,\"integer\")' onchange='Valida(this,\"integer\")' class='textfield' name='sub_"+ arr_Nombres[k] +"' size='" + oChild.width + "' value='"+ s_valor +"'>"
								if(arr_Nombres[k]=="Cantidad"){
									s_input = "<input Conf_Mabe='"+oChild.Conf_Mabe+"' onPropertyChange='Valida(this,\"integer\");SumaSubpartidas(this,\"" + obj.icountPartida + "\")' onkeyUp='Valida(this,\"integer\");SumaSubpartidas(this,\"" + obj.icountPartida + "\")' onkeyDown='Valida(this,\"integer\");SumaSubpartidas(this,\"" + obj.icountPartida + "\")' onchange='Valida(this,\"integer\");SumaSubpartidas(this,\"" + obj.icountPartida + "\")' class='textfield' name='sub_"+ arr_Nombres[k] +"' size='" + oChild.width + "' value='"+ s_valor +"'>"
								}					
							break;
							case "str":

								s_input = "<input class='textfield' name='sub_"+ arr_Nombres[k] +"' size='" + oChild.width + "' value='"+ s_valor +"'>"

							break;
							case "datetime":
								
								s_calendario= "<a target='' href='javascript:ActivaCalendario(document.forms[\"Listado\"].sub_"+ arr_Nombres[k] +(num_subpartidas-j-1)+ ",\"sub_"+arr_Nombres[k]+"\",\""+(num_subpartidas-j-1)+"\")'>\n"
								s_calendario+="<img src='calendar/img/cal.gif' width=16 height=16 border='0' ></a>\n"
								s_input = "<input  readonly class='textfield' name='sub_"+ arr_Nombres[k]+ (num_subpartidas-j-1) +"' size='" + oChild.width + "' value='"+ s_valor +"'>"
								s_input+= s_calendario

							break;

						}//switch


						oChildSubPartida.innerHTML="<div align='center'>"+s_input+"</div>"
					}//if indice_campo_subpartida
					s_input=""
				}//ifarr_Permisos[k]>1
				
				
				
			}//for k
									
		}//for j
	
}//function


//********************************************************************************
 //----------------------------------------------------------------------------------------------------
 /* Funcion : AddSubPartida
  *
  * Proposito: Agregar renglones para subpartidas, es decir agregar camiones para la distribucion de la orden
  * Parametros   :   num_partida		Es el numero de la partida (numero de renglon en la tabla)
  *			Se utilizara para localizar el renglon de la partida y manipularlo
  * Referencia:		El renglon de la partida necesita tener como id el numero de la partida,
  *			Inicia en 0
  *			Ej. para la primer partida: <tr id=0><td></td></tr>
  *
  * Dependencias       Necesita un elemento de tipo hidden llamado arr_nombre_campos_visibles,
  *		       que contiene los nombres de los campos visibles separados por |	
  */
//----------------------------------------------------------------------------------------------------

function AddSubPartida(num_partida){
	
	//alert(num_partida)
	//Nombre de los campos visibles
	//Permisos
	//Tipos de datos
	//Valores
	//------------------------------------------------------------------------------------
	var s_Nombres  =   new String(document.all("arr_nombre_campos_visibles").value)	
	var s_Permisos  =   new String(document.all("arr_permisos_campos_visibles").value)	
	var s_Tipos  =   new String(document.all("arr_tipos_campos_visibles").value)	
	//var s_Valores  =   new String(document.all("arr_valores_campos_visibles"+ obj.icountPartida).value)	
	
		
	var arr_Nombres = new Array()
	var arr_Permisos = new Array()
	var arr_Tipos = new Array()
	//var arr_Valores = new Array()
	

	arr_Nombres = (s_Nombres.split("|"))
	arr_Permisos = (s_Permisos.split("|"))
	arr_Tipos = (s_Tipos.split("|"))
	//arr_Valores = (s_Valores.split("|"))

	var subPartidas  =  parseInt(document.all["num_subpartidas"+num_partida].value,10)
	//alert(subPartidas)
	//------------------------------------------------------------------------------------	 
	var obj = document.getElementById("partida_"+num_partida)	//objeto renglon
	var obj_table=obj.parentNode; //tabla que contiene al renglon
	
	col_count = (obj.children.length)
	var row = document.createElement("TR")
	
       
	for (i=0;i<col_count;i++){
		var oChild = obj.children[i]
		var td1 = document.createElement("TD")
		scolumna =""
		if(arr_Nombres[i].toLowerCase()=="camion") scolumna = "Camion"
		if(arr_Nombres[i].toLowerCase()=="cantidad")	scolumna = "Cantidad"
		if(arr_Nombres[i].toLowerCase()=="capacidad")	scolumna = "Capacidad"
		if(arr_Nombres[i].toLowerCase()=="cita_propuesta") scolumna = "Cita_Propuesta"
		if(arr_Nombres[i].toLowerCase()=="cita_confirmada") scolumna = "Cita_confirmada"	
		
		s_input=""
		s_valor="";
		//Verifica el nivel de permiso del campo
		if((arr_Permisos[i]>1) && (scolumna!="")){
			switch(arr_Tipos[i]){
				case "int":	
					s_input= "<input  onPropertyChange='Valida(this,\"integer\")' onkeyUp='Valida(this,\"integer\")' onkeyDown='Valida(this,\"integer\")' onchange='Valida(this,\"integer\")' class='textfield' name='sub_"+ arr_Nombres[i] +"' size='" + oChild.width + "' value='"+ s_valor +"'>"
				
					if(arr_Nombres[i]=="Cantidad"){
						s_input= "<input  onPropertyChange='Valida(this,\"integer\");SumaSubpartidas(this,\"" + num_partida + "\")' onkeyUp='Valida(this,\"integer\");SumaSubpartidas(this,\"" + num_partida + "\")' onblur='SumaSubpartidas(this,\"" + num_partida + "\")' onkeyDown='Valida(this,\"integer\");SumaSubpartidas(this,\"" + num_partida + "\")' onchange='Valida(this,\"integer\");SumaSubpartidas(this,\"" + num_partida + "\")' class='textfield' name='sub_"+ arr_Nombres[i] +"' size='" + oChild.width + "' value='"+ s_valor +"'>"
					}//ifarr_Nombres
					
				break;
				case "str":
					s_input = "<input class='textfield' name='sub_"+ arr_Nombres[i] +"' size='" + oChild.width + "' value='"+ s_valor +"'>"
				break;
				case "datetime":
					var s_calendario=""
						
						s_calendario= "<a target='' href='javascript:ActivaCalendario(document.forms[\"Listado\"].sub_"+ arr_Nombres[i] +subPartidas+ ",\"sub_"+arr_Nombres[i]+"\",\""+subPartidas+"\")'>\n"					
						s_calendario+="<img src='calendar/img/cal.gif' width=16 height=16 border='0' ></a>\n"
						s_input = "<input  readonly class='textfield' name='sub_"+ arr_Nombres[i]+ subPartidas +"' size='" + oChild.width + "' value='"+ s_valor +"'>"
						s_input+= s_calendario
						
			
				break;
			}//switch					
			
		}//if(arr_Permisos
		//td1.appendChild(document.createTextNode(s_input))
		td1.innerHTML="<div align='center'>"+s_input+"</div>"
		row.appendChild(td1);	
	

	}//for
	
	row.className=obj.class_origen
	row.id="subpartida" + num_partida  //identificador de la subpartida
	//Inserta el nuevo renglon despues del renglon de la partida activa
	obj_table.insertBefore(row,obj.nextSibling)
	

	subPartidas++;
	document.all["num_subpartidas"+num_partida].value = subPartidas	
	document.all["id_subpartida"+num_partida].value+= "|"
  
	//alert("Agregar Camion " + obj.innerHTML)
	
	
}//function
										
//********************************************************************************
 //----------------------------------------------------------------------------------------------------
 /* Funcion : Valida
  *
  * Proposito: Valida si el contenido de un objeto input 
  * Parametros   :	Recibe un objeto input type='text'
  
  */
//----------------------------------------------------------------------------------------------------

 function Valida(obj,stype){
 	var bReturn
	
	bReturn= checkInt(obj) 	
	if(bReturn>-1){
	
		if(obj.name=="Conf_Mabe"){
			Mayor(obj,obj.Req_Cliente,'Req_Cliente')
		}//if
		if(obj.name=="Conf_Cliente"){
			Mayor(obj,obj.Conf_Mabe,'Conf_Mabe')
		}//if

	}
	
	return bReturn 	
 }
 
 //----------------------------------------------------------------------------------------------------
  /* Funcion : ValidaFecha
   *
   * Proposito: Valida si el contenido de un objeto input tiene como valor una fecha mayor o igual al dia de hoy 
   * Parametros   :	Recibe un objeto input type='text'   
   * Referencia   :	El valor de la fecha debe ser en formato mm/dd/yy + hh:mm
   */
 //----------------------------------------------------------------------------------------------------

 function ValidaFecha(obj){ 
 	var odate = new Date();
 	var s_date = obj.value
	//separa la fecha de la hora 		
	var arr_valores = s_date.split(" ")
 	var arr_date = (arr_valores[0]).split("/"); //fecha en formato 
 	
 	var actual_day = odate.getDate();
 	var actual_month = odate.getMonth()+1;//el indice de los meses comienza en 0
 	var actual_year = odate.getYear();
	

	var breturn=true;
//	alert(arr_date[1] +" ? " +actual_day+"  "+ arr_date[0] + "?" +actual_month+"   " + arr_date[2] +"?"+ actual_year)
	if(arr_date[1]<actual_day && arr_date[0]>=actual_month && arr_date[2]<=actual_year)

			breturn=false;	
	
	if(arr_date[1]>=actual_day && arr_date[0]<actual_month && arr_date[2]<=actual_year)
			breturn=false;	
	if(arr_date[1]>=actual_day && arr_date[0]>=actual_month && arr_date[2]<actual_year)
			breturn=false;	 
	
	if(!breturn){
		obj.value=GetDateFormat("mm/dd/yyyy") + " 9:00" 
		alert("La fecha " + s_date + " debe ser mayor o igual al dia de hoy")
	}
	
	return breturn;
 }
 
 //----------------------------------------------------------------------------------------------------
 /* Funcion : checkInt
  *
  * Proposito: Valida si el contenido de un objeto input es entero
  * Parametros   :	Recibe un objeto input type='text'
  
  */
//----------------------------------------------------------------------------------------------------
function checkInt(obj) {
	str = obj.value
	if (!str) return 0;
	var ok = "";
	for (var i = 0; i < str.length; i++) {
		var ch = str.substring(i, i+1);
		if (ch < "0" || "9" < ch) { 
			obj.value=str.substring(0, i);
		return -1;
	}
	else ok += ch;
	}
	return parseInt(str);
}
 
 
//----------------------------------------------------------------------------------------------------
/* Funcion : ReadOnlyRow
 *
 * Proposito: Cambia el input de las columnas por textos 
 * Parametros   :	Recibe un objeto TR
 * Dependencias	:
 *			Necesita que esten creados en la forma campos ocultos con la informacion de :
 *			1) arr_tipos_campos : tipo de dato para el campo "int,str,date,etc" 
 *			2) arr_permisos_campos_visibles: Nivel de acceso de los campos visibles (0,1,2)
 *			3)arr_nombre_campos_visibles   : Nombre de los campos visibles para el usuario
 * 				
 *		Para identificar el renglon se utiliza el atributo icountPartida(# consecutivo de la columna)
 *
 */
//----------------------------------------------------------------------------------------------------
function ReadOnlyRow(obj,sFormName){
	//alert("Mostrando hijos de " + obj.id)
	
	var i  	
	
	var oParent = obj
	var oChildren=oParent.getElementsByTagName("td"); //numero de columnas del renglon seleccionado
	var iCountCamposVisibles = oChildren.length
	//alert(obj.icountPartida)
	var bReturn=true
	var s_Nombres  =   new String(document.all("arr_nombre_campos_visibles").value)	
	var s_Permisos  =   new String(document.all("arr_permisos_campos_visibles").value)	
	var s_Tipos  =   new String(document.all("arr_tipos_campos_visibles").value)	
	var s_Valores  =   new String(document.all("arr_valores_campos_visibles"+ obj.icountPartida).value)	
	var s_PartidasModificadas = new String(document.all("arr_partidas_modificadas").value)	
	
	
	
	var arr_Nombres = new Array()
	var arr_Permisos = new Array()
	var arr_Tipos = new Array()
	var arr_Valores = new Array()
	var arr_PartidasModificadas = new Array()

	arr_Nombres = (s_Nombres.split("|"))
	arr_Permisos = (s_Permisos.split("|"))
	arr_Tipos = (s_Tipos.split("|"))
	arr_Valores = (s_Valores.split("|"))
	arr_PartidasModificadas = (s_PartidasModificadas.split("|"))
	var iempty_fields="" // Mensaje de campos vacios
	var s_input,s_valor
	var iCount_campos_visibles=0
	for (i=0;i<iCountCamposVisibles;i++){
	
		oChild = oChildren.item(i)
		if(arr_Permisos[i]>1){
			s_valor = document.all(arr_Nombres[i]).value
			if(s_valor==""){
					
					iempty_fields+="\n"+arr_Nombres[i];
					bReturn=false					
			}
			
			oChild.innerHTML ="<font class=textsize8>" + s_valor +"</font>"
			arr_Valores[iCount_campos_visibles] = s_valor
//			if(arr_Nombres[i].toUpperCase()=="CANTIDAD" || arr_Nombres[i].toUpperCase()=="CAMION")
			
			/*
			switch(arr_Nombres[i].toUpperCase()){
				case "CANTIDAD":
					if(s_valor=="")
							alert("la cantidad esta vacia ")
				break;
				case "CANTIDAD":
					if(s_valor=="")
							alert("la cantidad esta vacia ")
				break;
				case "CANTIDAD":
					if(s_valor=="")
							alert("la cantidad esta vacia ")
				break;
				case "CANTIDAD":
					if(s_valor=="")
							alert("la cantidad esta vacia ")
				break;
			}//switch

		*/
			iCount_campos_visibles+=1
			
		}//if
	}//for
	

	//*******************************************************************
	//*Cambia los campos de las subpartidas a solo lectura
	//*******************************************************************
	//Si tiene subpartidas, entonces convierte en solo lectura
	//El arreglo con los valores de subpartidos viene divido de la siguiente manera

	//los datos entre el caracter | es la informacion de la partida
	//los datos divididos por ; es la informacion de cada uno de los datos
	
	var num_subpartidas = parseInt(document.all["num_subpartidas"+oParent.icountPartida].value,10)
	
	
	var s_ValoresSubPartidas  =   new String(document.all("arr_valores_subpartidas"+ obj.icountPartida).value)	
	var arr_SubPartidas = new Array()
	var arr_renglonSubpartida = new Array();
	var arr_camposSubpartidas = new Array();
	

	for(i=0;i<num_subpartidas;i++){
		arr_SubPartidas[i]= new Array()
	}
	//alert("s_ValoresSubPartidas="+s_ValoresSubPartidas)
	arr_renglonSubpartida = (s_ValoresSubPartidas.split("|")) //divide el arreglo en subpartidas
	
	
	for (isubpartida=0;isubpartida<arr_renglonSubpartida.length;isubpartida++){
		//alert("isubpartida=" + isubpartida )
		
		arr_camposSubpartidas = (arr_renglonSubpartida[isubpartida]).split(";")
		
		for (icamposubpartida=0;icamposubpartida<arr_camposSubpartidas.length;icamposubpartida++){
			arr_SubPartidas[isubpartida]= new Array()
			arr_SubPartidas[isubpartida][icamposubpartida]="";
			arr_SubPartidas[isubpartida][icamposubpartida]=arr_camposSubpartidas[icamposubpartida];
		}///for j
	}
	
		

	
	var oTR_SubPartida 

	var oChildrenSubPartidas
	var oChildSubPartida
	var s_valor 
//	alert("num_subpartidas" + "="+num_subpartidas)
	oTR_SubPartida= obj
	for(j=0;j<num_subpartidas;j++){
		var oTR_SubPartida = oTR_SubPartida.nextSibling //Siguiente renglon
		
//		alert(oTR_SubPartida.innerHTML)
		var oChildrenSubPartidas = oTR_SubPartida.getElementsByTagName("td"); //numero de columnas del renglon seleccionado		
		s_valor="&nbsp;"
		
			
			
		for (k=0;k<oChildrenSubPartidas.length;k++){
			s_valor="&nbsp;"	
			var oChildSubPartida = oChildrenSubPartidas.item(k);
			
			if(arr_Permisos[k]>1){
				switch(arr_Tipos[k]){
					case "int":
						
						arr_valor=document.all["sub_"+arr_Nombres[k]]
						if(arr_valor!=undefined)
							if(arr_valor.length>=1)
								s_valor = arr_valor[0].value
							else
								s_valor = arr_valor.value
					break;
					case "datetime":
						//El nombre de los campos de tipo fecha esta compuesto por 3 partes
						// prefijo + nombre +numero de la subpartida
						//ej : sub_Cita_Propuesta0  //Primer subpartida
						//el orden de las fechas va de mayor a menor
						//alert("sub_"+ arr_Nombres[k] + (num_subpartidas-j-1))
						arr_valor=document.all["sub_"+ arr_Nombres[k] + (num_subpartidas-j-1)]
						if(arr_valor!=undefined)
							s_valor = arr_valor.value
						
					
					break;
					case "str":
						arr_valor=document.all["sub_"+arr_Nombres[k]]
						if(arr_valor!=undefined)
							if(arr_valor.length>=1)
								s_valor = arr_valor[0].value
							else
								s_valor = arr_valor.value
					break;
					
				}//switch
				//De acuerdo al campo es el indice para el campo de la subpartida
				switch(arr_Nombres[k]){
					case "Cantidad":
						indice_campo_subpartida = 0
					break;
					case "Camion":
						indice_campo_subpartida = 1
					break;
					case "Capacidad":
						indice_campo_subpartida = 2
					break;
					case "Cita_Propuesta":
						indice_campo_subpartida = 3
					break;
					case "Cita_Confirmada":
						indice_campo_subpartida = 4
					break;
					default:
						indice_campo_subpartida=-1
					break;
				}//switch
				if(indice_campo_subpartida>=0){
					
					arr_SubPartidas[j][indice_campo_subpartida]=s_valor
					oChildSubPartida.innerHTML="<font class=textsize8>" + s_valor +"</font>"
				}
				
				
			}//if arr_Permisos[k]
			
		}								
	}//for j
	
	//alert(arr_Valores.join("|"))
	arr_Renglones_Subpartidas = new Array();
	for(j=0;j<arr_SubPartidas.length;j++){
		arr_Renglones_Subpartidas[j] = arr_SubPartidas[j].join(";")
	}
	s_ValoresSubpartidas = arr_Renglones_Subpartidas.join("|")
	//alert(s_ValoresSubpartidas)
	document.all("arr_valores_subpartidas"+ obj.icountPartida).value = s_ValoresSubpartidas
	
	//*******************************************************************************
		
	if(s_PartidasModificadas.indexOf(obj.icountPartida)<0)
		s_PartidasModificadas= s_PartidasModificadas + obj.icountPartida +"|"	
	
	document.all("arr_partidas_modificadas").value = s_PartidasModificadas
	//alert(arr_Valores.join("|"))
	document.all("arr_valores_campos_visibles"+ obj.icountPartida).value = arr_Valores.join("|")
	/*
	document.all("empty_fields").value = "0"			
	
	if(iempty_fields!=""){
		alert("Hay campos vacios en la partida  \n"+iempty_fields )					
		document.all("empty_fields").value = "1"				
	}
	*/
	//----------------------------------------------------------------------------------
	// Aplica los totales a los inputs hidden del  renglon de totales de cada orden
	//----------------------------------------------------------------------------------
	var s_arr_campos_a_totalizar = new String(document.all("arr_campos_a_totalizar").value)
	var arr_Campos_a_totalizar = new Array();
	var arr_Campos_a_totalizar = (s_arr_campos_a_totalizar.split("|"))
	try{
		for(i_tot_campos_a_totalizar =0 ;i_tot_campos_a_totalizar<arr_Campos_a_totalizar.length ;i_tot_campos_a_totalizar++){
			s_campo = arr_Campos_a_totalizar[i_tot_campos_a_totalizar];
			//alert("HID_" + s_campo + obj.oc_cliente)
			document.all("HID_" + s_campo + obj.oc_cliente).value = document.all("TOT_" + s_campo + obj.oc_cliente).innerHTML
			//alert(document.all("TOT_" + arr_Campos_a_totalizar[i_tot_campos_a_totalizar] + obj.oc_cliente).innerHTML)
			//alert(document.all("HID_" + arr_Campos_a_totalizar[i_tot_campos_a_totalizar] + obj.oc_cliente).value)
		}//for
	}catch(e){}
	
	
	
	return bReturn;
	
}//function



 
 //----------------------------------------------------------------------------------------------------
//----------------------------------------------------------------------------------------------------//----------------------------------------------------------------------------------------------------//----------------------------------------------------------------------------------------------------
/* Funcion : Mayor
 *
 * Proposito: Validacion entre dos campos para impedir que uno sea mayor 
 * Parametros   :	obj:		Recibe un objeto input 
 *					numero		:entero con el que se evaluara 
 *					sname		: nombre del campo con el que se esta evaluando
 *			
 *
 */
/////----------------------------------------------------------------------------------------------------
function Mayor(obj,numero,sname){	
	var valor=parseInt(obj.value,10)

	if(valor>numero){

		alert(obj.name + " no puede ser mayor que " + sname )
		//alert(valor + " es mayor que " + numero)
		obj.value=numero
	}
}

//----------------------------------------------------------------------------------------------------
/* Funcion : Totalizar
 *
 * Proposito: Totalizar el renglon
 * Parametros   :	id_partida //numero consecutivo que identifica a la partida
 *			obj_INPUT  objeto input que manda llamar a la funcion
 *			id_partida
 *			oc_cliente
 *			
 *			
 *
 */
//----------------------------------------------------------------------------------------------------

function Totalizar(s_nombre,obj_INPUT,id_partida,oc_cliente){
	//------------------------------------------------------------------------------//
	/*Obtiene el valor que tiene el campo antes de ser modificado*/
	//------------------------------------------------------------------------------//
	var s_Nombres  =   new String(document.all("arr_nombre_campos_visibles").value)	
	var s_Permisos  =   new String(document.all("arr_permisos_campos_visibles").value)	
	var s_Tipos  =   new String(document.all("arr_tipos_campos_visibles").value)	
	var s_Valores  =   new String(document.all("arr_valores_campos_visibles"+ id_partida).value)	
			
	var arr_Nombres = new Array()
	var arr_Permisos = new Array()
	var arr_Tipos = new Array()
	var arr_Valores = new Array()

	arr_Nombres = (s_Nombres.split("|"))
	arr_Permisos = (s_Permisos.split("|"))
	arr_Tipos = (s_Tipos.split("|"))
	arr_Valores = (s_Valores.split("|"))
	var arr_campos_a_totalizar= Array();
	icountCamposEditables=0
	for(i=0;i<arr_Nombres.length;i++){
		
		if(arr_Permisos[i]>1){
			arr_campos_a_totalizar[arr_Nombres[i]] = arr_Valores[icountCamposEditables]
			icountCamposEditables++;
			//alert("arr_campos_a_totalizar["+arr_Nombres[i]+"] = " + arr_Valores[i])
		}
	}
	//alert(arr_campos_a_totalizar[s_nombre])
	//alert("obj_INPUT="+obj_INPUT + " id_partida="+id_partida +" oc_cliente="+oc_cliente)	
	//------------------------------------------------------------------------------//
	// Modifica el total de la partida
	// La modificacion se aplicara hasta que se ejecute la funcion ReadOnly
	//------------------------------------------------------------------------------//
	var valor_modificado = parseInt(obj_INPUT.value,10);
	var valor_anterior = parseInt(arr_campos_a_totalizar[s_nombre],10)
	var valor_suma_hidden = parseInt(document.all("HID_"+s_nombre+ oc_cliente).value,10)
	//alert(valor_modificado + "?" + valor_anterior)
	var i_totalizar;
	//Valor de la suma de esa orden de compra
	var i_suma  =   parseInt(document.all("TOT_"+s_nombre+ oc_cliente).innerHTML,10)
	
	if(isNaN(obj_INPUT.value))
		valor_modificado = 0
	if(isNaN(i_suma))
		i_suma = 0
	if(isNaN(valor_anterior))
		valor_anterior = 0
	if(isNaN(valor_suma_hidden))
		valor_suma_hidden = 0
			
	//alert(valor_modificado + "?" + valor_anterior)
	i_totalizar = valor_suma_hidden - valor_anterior + valor_modificado
	document.all("TOT_" + s_nombre + oc_cliente).innerHTML  =i_totalizar
	//alert("valor_suma_hidden="+valor_suma_hidden + "valor_modificado="+valor_modificado + " valor_anterior="+valor_anterior)
}

 //----------------------------------------------------------------------------------------------------
/* Funcion : SumaSubpartidas
 *
 * Proposito: Valida que la suma de las cantidades de las subpartidas sea menor o igual a la cantidad conf_mabe 
 * Parametros   :	id_partida //numero consecutivo que identifica a la partida
 *			obj_INPUT  objeto input que manda llamar a la funcion
 *			
 *			
 *
 */
//----------------------------------------------------------------------------------------------------
function SumaSubpartidas(obj_INPUT,id_partida){	
	//alert("id_partida=" + id_partida)
	var suma_valores = 0
	var arr_valor=document.all["sub_Cantidad"]
	var o_Cantidad=document.all["Cantidad"]
	var o_Conf_Mabe=document.all["Conf_Mabe"]
	var valor_cantidad = parseInt(o_Cantidad.value,10)

	var conf_mabe;
	if(o_Conf_Mabe!=undefined)
		conf_mabe =parseInt(o_Conf_Mabe.value,10)
	else
		conf_mabe =parseInt(obj_INPUT.Conf_Mabe,10)
	
	
	if(arr_valor!=undefined)
		if(arr_valor.length>=1)
			for(i=0;i<arr_valor.length;i++){
				tmp= parseInt(arr_valor[i].value,10);
				if(isNaN(tmp))
					tmp = 0
				suma_valores+= tmp
				//alert("arr_valor["+i+"]="+arr_valor[i].value)
			}//for i
		else{
			suma_valores= parseInt(arr_valor.value,10)
			//alert("arr_valor.value="+arr_valor.value)
		}
	//alert("suma_valores="+suma_valores+" valor_cantidad="+valor_cantidad)
	if(isNaN(valor_cantidad))
		valor_cantidad= 0
	if(isNaN(suma_valores))
		suma_valores= 0	
		
	if((suma_valores+valor_cantidad)>conf_mabe){
		obj_INPUT.value=""
		alert("La suma de las cantidades ("+(suma_valores+valor_cantidad)+") debe ser menor que la Confirmación Mabe="+conf_mabe)		
		obj_INPUT.value=""
	}
	
}//function


 //----------------------------------------------------------------------------------------------------
/* Funcion : MuestraFiltro
 *
 * Proposito   : Muestra y oculta la tabla con los campos con que se filtraran los listados
 * Parametros  :		s_id:  valor de la etiqueta "TAG" del elemento que se ocultara
 *
 */
//----------------------------------------------------------------------------------------------------
function MuestraFiltro(sPrefix,s_id){	
	var obj = document.getElementById(s_id)

	if(obj.clicked==0){
		obj.clicked = 1			
		hide(obj.id)	
		setCookie(sPrefix + "_filtro_activo", "0" );
	}else{
		show(obj.id)				
		obj.clicked = 0
		setCookie(sPrefix + "_filtro_activo", "1" );
		
	}
}


 //----------------------------------------------------------------------------------------------------
/* Objeto timestamp_class
 *
 * Proposito: Medir intervalos de tiempo, es util para medir el tiempo de aparicion en el navegador de una pagina
 * Funciones:
 *				 GetCurrentTime
 *				 StartTiming
 *				 EndTiming
 */	
 //----------------------------------------------------------------------------------------------------
/*Gracefully hide from old browsers
// Copyright © 2003 by David Tam, Ph.D.  http://www.ComputationalNeuralSystems.com/
//   You may copy, modify and/or distribute it under the terms of the GNU General Public License.
//   See http://www.gnu.org/licenses/gpl.html for terms and conditions

// Javascript to compute elapsed time between "Start" and "Finish" button clicks
*/
function timestamp_class(this_current_time, this_start_time, this_end_time, this_time_difference) { 
		this.this_current_time = this_current_time;
		this.this_start_time = this_start_time;
		this.this_end_time = this_end_time;
		this.this_time_difference = this_time_difference;
		this.GetCurrentTime = GetCurrentTime;
		this.StartTiming = StartTiming;
		this.EndTiming = EndTiming;
	}

	//Get current time from date timestamp
	function GetCurrentTime() {
	var my_current_timestamp;
		my_current_timestamp = new Date();		//stamp current date & time
		return my_current_timestamp.getTime();
		}

	//Stamp current time as start time and reset display textbox
	function StartTiming() {
		this.this_start_time = GetCurrentTime();	//stamp current time
		//document.TimeDisplayForm.TimeDisplayBox.value = 0;	//init textbox display to zero
		s_time=0
	}

	//Stamp current time as stop time, compute elapsed time difference and display in textbox
	function EndTiming() {
		this.this_end_time = GetCurrentTime();		//stamp current time
		this.this_time_difference = (this.this_end_time - this.this_start_time) / 1000;	//compute elapsed time
		//document.TimeDisplayForm.TimeDisplayBox.value = this.this_time_difference;	//set elapsed time in display box
		
		s_time = this.this_time_difference
		//alert("Tiempo de despliegue:" + s_time)
		//var obj_label=document.all.getElementById("tiempo")
		//obj_label.value=s_time
		document.all("tiempo").innerHTML  = s_time
		//alert(document.all("tiempo").value)
		//alert(obj_label.value)
		//document.write s_time
		}
		
//-**********************************************************************************************************************

/*Funciones para los efectos visuales de los botones*/
function buttonMouseOver(objDiv){
		var elt = objDiv
		objDiv.className = "buttonmouseover"
}

function buttonMouseOut(objDiv){
	objDiv.className = "buttonnormal"
}

function buttonMouseDown(objDiv){
	objDiv.className = "buttonmousedown"
}

function buttonMouseUp(objDiv){

	objDiv.className = "buttonnormal"
}
