// -------------------------------------------------------------------------
//    Funciones importadas por la herramienta de diseño
// -------------------------------------------------------------------------
//
function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}
function MM_reloadPage(init) {  //reloads the window if Nav4 resized
  if (init==true) with (navigator) {if ((appName=="Netscape")&&(parseInt(appVersion)==4)) {
    document.MM_pgW=innerWidth; document.MM_pgH=innerHeight; onresize=MM_reloadPage; }}
  else if (innerWidth!=document.MM_pgW || innerHeight!=document.MM_pgH) location.reload();
}

// ·········································································
//    Devuelve el objeto asociado a un nombre de formulario y elemento
// ·········································································
//
function getObjectFromForm (sFormName, sElement) {
   return eval("document.forms['"+sFormName+"'].elements['" + sElement + "']");
} //getObjectFromForm 

// ·········································································
//    Dado un objeto, si es un array resuelve
// ·········································································
//
function getIndexedObjectFromForm (sFormName, sElement, iIndex) {
   var oObj = getObjectFromForm (sFormName, sElement);
   if (!iIndex)
      iIndex = 0;
   if ((oObj) && (oObj.length))  {
      if ((iIndex>=0)&&(iIndex<oObj.length))
         oObj = oObj[iIndex];
      else
         oObj = oObj[0];
   }
   return oObj;
} //getIndexedObjectFromForm 

// ·········································································
//    Fija el foco en el elemento 
// ·········································································
//
function setFoco (sFormName, sElement, iIndex) {
   var oObj = getIndexedObjectFromForm (sFormName, sElement, iIndex);
   if (oObj)
      oObj.focus();
} //setFoco

// ·········································································
//    Devuelve el valor de un campo 
// ·········································································
//
function getFieldValue (sFormName, sField, iIndex) {
   var oObj = getIndexedObjectFromForm (sFormName, sField, iIndex);
   if ((oObj) && (oObj.value))
      return oObj.value;
   return "";
} //getFieldValue

// ·········································································
//    Escribe el valor de un campo 
// ·········································································
//
function setFieldValue (sFormName, sField, sValue, iIndex) {
   var oObj = getIndexedObjectFromForm (sFormName, sField, iIndex);
   if (oObj)
      oObj.value = sValue;
} //setFieldValue

// ·········································································
//    Cambia el valor de un checkbox
// ·········································································
//
function setCheckValue (sFormName, sField, bValue, iIndex) {
   var oObj = getIndexedObjectFromForm (sFormName, sField, iIndex);
   if (oObj)
      oObj.checked = bValue;
} //setCheckValue

// ·········································································
//	   Dado un select devuelve el numero de elmentos seleccionados
// ·········································································
// 
function getSelectSelectedItems (sFormName, sSelectName) {
	var iCount=0;
	var selObj = getObjectFromForm (sFormName, sSelectName);
	for (i=0; i<selObj.options.length; i++)
		if (selObj.options[i].selected)
			iCount++;
	return iCount;
} //getSelectSelectedItems

// ·········································································
//    Devuelve el value del elemento seleccionado en una select
// ·········································································
//
function getSelectSelectedValue (sFormName, sSelectName) {
   var selObj = getObjectFromForm (sFormName, sSelectName);   
   if (selObj.options) {
	   for (i=0; i<selObj.options.length; i++)
		   if (selObj.options[i].selected) {
			   return selObj.options[i].value;
			}
	}
	return "";
} //getSelectSelectedValue

// ·········································································
//    Devuelve el id del elemento seleccionado en una select
// ·········································································
//
function getSelectSelectedId (sFormName, sSelectName) {
   var selObj = getObjectFromForm (sFormName, sSelectName);   
   if (selObj.options) {
	   for (i=0; i<selObj.options.length; i++)
		   if (selObj.options[i].selected) {
			   return selObj.options[i].id;
			}
	}
	return "";
} //getSelectSelectedId

// ·········································································
//    Inserta un elemento en una select
// ·········································································
//
function insertInSelect (sFormName,sSelectName,sId,sValue,sData,iPos) {
	var iIndex;
	var selObj = getObjectFromForm(sFormName,sSelectName);
	var sId;
	if (selObj) {
   	if ((iPos==null)||(iPos>selObj.options.length-1)||(iPos<0))
   		iPos = selObj.options.length;
   	
   	for (iIndex = selObj.options.length-1; iIndex>=iPos; iIndex--) {
   	   sId = selObj.options[iIndex+1].id;
   		selObj.options[iIndex+1] = new Option (selObj.options[iIndex].text,selObj.options[iIndex].value,false,false);
   		selObj.options[iIndex+1].id = sId;
   	}
   
   	selObj.options[iPos] = new Option (sData,sValue,false,false);
   	selObj.options[iPos].id = sId;
   }
} //insertInSelect

// ·········································································
//    Borra los elementos de una select
// ·········································································
//
function removeObjectsFromSelect (sFormName, sSelectName) {
	var selObj = getObjectFromForm(sFormName,sSelectName);
	if (selObj) {
      for (var iIndex=selObj.length; iIndex>=0; iIndex--) {
         if (selObj.options[iIndex])
            selObj.options[iIndex] = null;         
      }	
   }
} //removeObjectsFromSelect







// ·········································································
//    Copia el value de un campo en otro
// ·········································································
//
function copyValue (sSourceFormName, sSourceField, sDestinationForm, sDestinationField) {
   var sValue = getFieldValue (sSourceFormName, sSourceField);
   setFieldValue (sDestinationForm, sDestinationField, sValue); 
} //copyValue

// ·········································································
//    Indica si un campo esta vacio o no
// ·········································································
//
function isEmptyField (sFormName, sField) {
   var sValue = getFieldValue (sFormName, sField);
   return (sValue.length==0);
} //isEmptyField 

// ·········································································
//    Valida que un campo obligatorio tenga datos
// ·········································································
//
function validaCampoObligatorio (sFormName, sField, sFieldName) {
   if (isEmptyField (sFormName, sField)) {
      alert ("Debe especificar un valor para el campo >>"+sFieldName+"<<");
      setFoco (sFormName, sField);
      return false;
   }   
   return true;
} //validaCampoObligatorio

// ·········································································
//
// ·········································································
//
function validaEmail (sEmail) {
   if ((sEmail != null) && (sEmail.length >0)) {
      var iArroba = sEmail.indexOf ("@");
      var iPunto  = sEmail.lastIndexOf(".");
      return ((iPunto!=-1)&&(iArroba>0)&&(iPunto>iArroba+1)&&(iPunto<sEmail.length-1));
   }
   return false;
} //validaEmail 




// ·········································································
//    Submit del formulario indicado
// ·········································································
//
function submitForm (sFormName) {
   var oObj = eval("document.forms['"+sFormName+"']");
   if (oObj)
      oObj.submit();
   return false;
} //submitForm













// ·········································································
//    Escapa la cadena con el separador indicado
// ·········································································
//
function escapa (sString, cSep) {
   var sCompose = "";
   var cAct;
   if ((sString!=null)&&(sString.length>0)) {
      for (var i=0; i<sString.length; i++) {
         cAct = sString.charAt(i);
         if ((cAct==cSep)||(cAct=='\\'))
            sCompose += '\\';
         sCompose += cAct;
      }
   }
   return sCompose;
} //escapa

// ·········································································
//    Deserializa una cadena serializada con un separador determinado
// ·········································································
//
function deserializa (sSerialString, cSep) {
   var j          =0;
   var aData      = new Array();
   var sCompose   = "";
   var cAnt       = 'x';
   var cAct;
   
   if ((sSerialString!=null) && (sSerialString.length>0)){
      for (var i=0; i<sSerialString.length; i++) {
         cAct = sSerialString.charAt(i);
         if ((cAct==cSep) && (cAnt!='\\')) {
            aData[j++] = sCompose;
            sCompose = "";
         } else {
            if ((cAct!='\\') || (cAnt=='\\'))
               sCompose += cAct;
         }
         cAnt = cAct;
      }
   } 
   return aData;
} //deserializa

// ·········································································
//    Deserializa una cadena que serializa campos de un formulario:
//       txx: Campo de texto
//       pxx: Campo de passwords
//       cxx: Campo checkbox
//       sxx: Campo select
//
//       Ejm: txx:Nombre·xx\·xx·t:FAlta·29/09/1974·c00:Permisos·1· 
// ·········································································
//
function deserializaFields (sFormName, sFieldSerialString) {
   var aData = deserializa (sFieldSerialString, '·');
   var cType;
   var sFieldName;
   var sValue;
   var iIndex;
   if ((aData.length % 2) != 0) {
      alert ("Datos serializados de forma incorrecta");
      return false;
   }
   for (var i=0; i<aData.length; i++) {
      // Tipo de campo
      cType    = aData[i].charAt(0);
      sValue   = aData[i+1];
      // Indice 
      // alert (aData[i]+"="+sValue);
      var iPos    = aData[i].indexOf(':');
      if (iPos == -1) {
         alert ("No se trata de un serial de campos");
         return false;
      }
      if (iPos==1) {
         iIndex = 0;
      } else {
         var sCampo  = aData[i].substring(1,iPos);
         iIndex = parseInt (sCampo,10);
      }
      sFieldName = aData[i].substring (iPos+1);
      switch (cType) {
         case 'h':
            break;
         case 't':
         case 'p':
            setFieldValue (sFormName, sFieldName, sValue, iIndex);
            break;
         case 'c':
            setCheckValue (sFormName, sFieldName, (sValue=="1")||(sValue=="S"), iIndex);
            break;
         case 's':
      }
      
      i++;
   }
} //deserializaFields

// ·········································································
//    Indica si un año es o no bisiesto
// ·········································································
//
function esBisiesto (iAnyo) {
   var iMyAnyo = iAnyo;
   if (iAnyo<100)
      iMyAnyo  += 1900;
   
   return (iMyAnyo %4==0)&&( (!(iMyAnyo %100==0)) || (iMyAnyo %400==0) );
} //esBisiesto

// ·········································································
//    Obtiene el numero de dias que tiene un mes indicado en un año
// ·········································································
//
function getDiasMes (iMes,iAnyo) {
   switch (iMes) {
      case  1:
      case  3:
      case  5:
      case  7:
      case  8:
      case 10:	
      case 12: return 31;
      case  2:	return esBisiesto(iAnyo)?29:28;
      case  4:
      case  6:
      case  9:
      case 11:	return 30;
   }
   return 31;
} //getDiasMes

function print_page (sPage) {
   var sPrintPage = sPage;
   if (sPrintPage.indexOf("?")>0)
      sPrintPage += "&print=si";
   else
      sPrintPage += "?print=si";
   
   window.open(sPrintPage,"print","left=0,top=0,height=1,width=1,resizable=no,status=mp,toolbar=no,menubar=no,location=no");
   return false;
} //print_page
