function DText(casilla) {
	casilla.readOnly = true; 
	casilla.className = "CasillaDisabled";
}

function DYBText(casilla) {
  DText(casilla); casilla.value = "";
}

function EText(casilla) {
	casilla.readOnly = false; 
	casilla.className = "Casilla";
}

function DTextArea(casilla) {
	casilla.disabled = true; 
	casilla.className = "CasillaDisabled";
}

function DYBTextArea(casilla) {
  DTextArea(casilla); casilla.value = "";
}

function ETextArea(casilla) {
	casilla.disabled = false; 
	casilla.className = "Casilla";
}

function DSelectDD(casilla) {
	casilla.readOnly = true; 
	casilla.className = "CasillaDisabled";
}

function ESelectDD(casilla) {
  casilla.readOnly = false;
  casilla.className = "Casilla";
}

function DSelect(casilla) {
	casilla.disabled = true; 
	casilla.className = "CasillaDisabled";
}

function ESelect(casilla) {
  casilla.disabled = false;
  casilla.className = "Casilla";
}

function DCheckbox(casilla) {
	casilla.disabled = true; 
	casilla.className = "CasillaCBDisabled";
}

function DYBCheckbox(casilla) {
	casilla.disabled = true; 
	casilla.className = "CasillaCBDisabled";
	casilla.checked = false;
}

function ECheckbox(casilla) {
  casilla.disabled = false;
  casilla.className = "CasillaCB";
}

function EsFecha(fecha)
{
  var dia, mes, anno;
  var dias = new Array(31,28,31,30,31,30,31,31,30,31,30,31);
  
  if ((fecha.charAt(1)=='/')||(fecha.charAt(1)=='-')) {
    dia = parseInt(fecha.substring(0,1), 10); 
    if ((fecha.charAt(3)=='/')||(fecha.charAt(3)=='-')) {
      mes = parseInt(fecha.substring(2,3), 10); 
      anno = parseInt(fecha.substring(4,8), 10); 
    } else {
      mes = parseInt(fecha.substring(2,4), 10); 
      anno = parseInt(fecha.substring(5,9), 10); 
    }
  } else {
    dia = parseInt(fecha.substring(0,2), 10);
    if ((fecha.charAt(4)=='/')||(fecha.charAt(4)=='-')) {
      mes = parseInt(fecha.substring(3,4), 10);
      anno = parseInt(fecha.substring(5,9), 10);
    } else {
      mes = parseInt(fecha.substring(3,5), 10);
      anno = parseInt(fecha.substring(6,10), 10);
    }
  }
  if (isNaN(anno)) return 0;
  if (isNaN(mes)) return 0;
  if (isNaN(dia)) return 0;
		    
  if (dia<1 || mes<1 || anno<0 || mes>12) return 0;
  if (anno<100) if (anno<50) anno+=2000; else anno+=1900;
	    
  if ( (anno%400==0)||( (anno%4==0)&&(anno%100!=0) ) ) dias[1]++;
		    
  return (dia <= dias[mes-1]);
}

function EsHora(hora)
{
	var hor, min, seg
	if (hora == '') return 0;
	
	if ((hora.charAt(1)==':')||(hora.charAt(1)=='.')) {
    hor = parseInt(hora.substring(0,1), 10); 
    if ((hora.charAt(3)==':')||(hora.charAt(3)=='.')||(hora.charAt(3)==' ')) {
      min = parseInt(hora.substring(2,3), 10); 
      seg = parseInt(hora.substring(4,8), 10); 
    } else {
      min = parseInt(hora.substring(2,4), 10); 
      seg = parseInt(hora.substring(5,9), 10); 
    }
  } else {
    hor = parseInt(hora.substring(0,2), 10);
    if ((hora.charAt(4)==':')||(hora.charAt(4)=='.')||(hora.charAt(4)==' ')) {
      min = parseInt(hora.substring(3,4), 10);
      seg = parseInt(hora.substring(5,9), 10);
    } else {
      min = parseInt(hora.substring(3,5), 10);
      seg = parseInt(hora.substring(6,10), 10);
    }
  }
  if (hor == '' || min == '') return 0;
  if ((isNaN(hor)) || (isNaN(min))) return 0;
  if (hor<0 || hor>12) return 0;
  if (min<0 || min>60) return 0;
  if (seg<0 || seg>60) return 0;
  return 1;
}

function RadioSeleccionado(Obj_checkBoxGroup){
  for(j=0; j< Obj_checkBoxGroup.length; j++)
  {
    if(Obj_checkBoxGroup[j].checked) {
      return Obj_checkBoxGroup[j].value;
    } else { }
  }
}

function RadioSelecciona(Obj_checkBoxGroup, valor){
  for(j=0; j< Obj_checkBoxGroup.length; j++)
  {
    if(Obj_checkBoxGroup[j].value==valor) {
      Obj_checkBoxGroup[j].checked=true;
    } else { }
  }
}

function RadioHabilita(Obj_checkBoxGroup){
  for(j=0; j< Obj_checkBoxGroup.length; j++)
  {
    if(Obj_checkBoxGroup[j].disabled) {
      Obj_checkBoxGroup[j].disabled = false;
    } else { }
  }
}

function RadioDesHabilita(Obj_checkBoxGroup){
  for(j=0; j< Obj_checkBoxGroup.length; j++)
  {
    if(!(Obj_checkBoxGroup[j].disabled)) {
      Obj_checkBoxGroup[j].disabled = true;
    } else { }
  }
}

function SelectSelecciona(Obj_select, valor) {
  for (j=0; j< Obj_select.length; j++)
  {
    if (Obj_select[j].value==valor) {
      Obj_select[j].selected = true;
    } else { }
  }
}

function PasswordValido(Password, Formato)
{
  var i
  var TodoBien
  var resultado
  
  resultado = false;
  // paso 1: longitudes
  if (Password.length!=Formato.length) return resultado; // longitudes diferentes? no vale
  // paso 2: caracter a caracter
  TodoBien = true;
  for (i=0;i<Password.length;i++) {
    if (Formato.charAt(i)=="X") {
      if (!((Password.charAt(i)>="A")&&(Password.charAt(i)<="Z"))) TodoBien=false;
    } else if (Formato.charAt(i)=="x") {
      if (!((Password.charAt(i)>="a")&&(Password.charAt(i)<="z"))) TodoBien=false;
    } else if (Formato.charAt(i)=="9") {
      if (!((Password.charAt(i)>="0")&&(Password.charAt(i)<="9"))) TodoBien=false;
    }
  }
  return TodoBien;
}

function replace(string,text,by) {
  var strLength = string.length, txtLength = text.length;
  if ((strLength == 0) || (txtLength == 0)) return string;

  var i = string.indexOf(text);
  if ((!i) && (text != string.substring(0,txtLength))) return string;
  if (i == -1) return string;

  var newstr = string.substring(0,i) + by;

  if (i+txtLength < strLength)
      newstr += replace(string.substring(i+txtLength,strLength),text,by);

  return newstr;
}

function JSDescribeRecurso(recurso, tipo, masinfo) {
  var txt;
  switch(""+tipo) {
    case "0": // RecursoTipoImagen
      txt = "Imagen "+(masinfo==""?"":"("+masinfo+")")+"";
      break;
    case "1": // RecursoTipoFlash
      txt = "Animación Flash "+(masinfo==""?"":"("+masinfo+")")+"";
      break;
    case "2": // RecursoTipoAVI
      txt = "Video AVI "+(masinfo==""?"":"("+masinfo+")")+"";
      break;
    case "": // Ninguno
      txt = "Ninguno";
      break;
    default:
      txt = "Desconocido";
      break;
  }
  return txt;
}

function JSDescribeRecursoSubible(chorizo, tipo, masinfo) {
  var txt;
  switch(""+tipo) {
    case "0": // RecursoTipoImagen
      txt = "Imagen "+(masinfo==""?"":"("+masinfo+")")+"";
      break;
    case "1": // RecursoTipoFlash
      txt = "Animación Flash "+(masinfo==""?"":"("+masinfo+")")+"";
      break;
    case "2": // RecursoTipoAVI
      txt = "Video AVI "+(masinfo==""?"":"("+masinfo+")")+"";
      break;
    case "-1": case "": // Ninguno
      txt = "Ninguno";
      break;
    default:
      txt = "Desconocido";
      break;
  }
  return txt;
}

function JSDescribeRTF(textoRTF, masinfo) {
  var txt;
  txt = textoRTF;
  return txt;
}

function JSDescribeLink(enlace, masinfo) {
  var ar = (enlace+"||").split("|");
  var txt;
  switch(""+ar[0]) {
    case "0": // URLExterna
      txt = "Externo ("+Recorta(ar[1],20)+")";
      break;
    case "1": // URLInterna
      txt = "Interno ("+Recorta(ar[1],20)+")";
      break;
    case "2": // Pagina
      txt = "Pág. Integ. "+(masinfo==""?"":"("+masinfo+")")+"";
      break;
    case "3": // NoticiaRama
      txt = "Rama de Noticias "+(masinfo==""?"":"("+masinfo+")")+"";
      break;
    case "5": // DocumentoRama
      txt = "Rama de Documentos "+(masinfo==""?"":"("+masinfo+")")+"";
      break;
    case "7": // EnlaceRama
      txt = "Rama de Enlaces "+(masinfo==""?"":"("+masinfo+")")+"";
      break;
    case "9": // Contacto
      txt = "Form. Contacto "+(masinfo==""?"":"("+masinfo+")")+"";
      break;
    case "10": // Recurso
      txt = "Recurso "+(masinfo==""?"":"("+masinfo+")")+"";
      break;
    case "12": // Login
      txt = "Login ";
      if (""+masinfo != "") { 
        txt = txt + (masinfo==""?"":"("+masinfo+")");
      } else {
        if (""+ar[1]=="1") txt = txt + "(Login)";
        if (""+ar[1]=="2") txt = txt + "(Logout)";
        if (""+ar[1]=="3") txt = txt + "(Entrada personal)";
      }
      break;
    case "": // Ninguno
      txt = "Ninguno";
      break;
    default:
      txt = "Desconocido";
      break;
  }
  return txt;
}

function JSDescribePermiso(permiso, txtPrevio, masinfo) {
  var ar = permiso.split("|");
  var txt;
  txt = txtPrevio;
  switch(""+ar[0]) {
    case "0": // Nadie
      txt = txt+"Nadie "+(masinfo==""?"":"("+masinfo+")")+"";
      break;
    case "-1": // Todos
      txt = txt+"Todos "+(masinfo==""?"":"("+masinfo+")")+"";
      break;
    case "-2": // Sólo Autentificados
      txt = txt+"Sólo autentificados "+(masinfo==""?"":"("+masinfo+")")+"";
      break;
    case "-3": // Sólo Anónimos
      txt = txt+"Sólo anónimos "+(masinfo==""?"":"("+masinfo+")")+"";
      break;
    case "-4": // Algunos Grupos
      txt = txt+"Algunos grupos "+(masinfo==""?"":"("+masinfo+")")+"";
      break;
    case "-5": // Personalizado
      txt = txt+"Personalizado "+(masinfo==""?"":"("+masinfo+")")+"";
      break;
    case "": // Error
      txt = txt+"Desconocido "+(masinfo==""?"":"("+masinfo+")")+"";
      break;
    default: // Algún permiso
      txt = txt+"Permiso específico "+(masinfo==""?"":"("+masinfo+")")+"";
      break;
  }
  return txt;
}

function Recorta(texto, cuantos)
{
  if (texto.length>cuantos) 
    return texto.substring(0,cuantos-1)+"...";
  else
    return texto;
}

function hazEntra(este,ColorDentro) {
	if (!este.contains(event.fromElement)) {
	  este.style.cursor = "hand";
	  este.bgColor = ColorDentro;
  }
}

function hazSale(este,ColorFuera) 	{
  if (!este.contains(event.toElement)){
    este.style.cursor = "default";
    este.bgColor = ColorFuera;
  }
}

function MoverOpciones(strAction, elDesde, elHasta, eltxtSeleccionado, elArrayOrden, MaximoD, alertar) {
  var pos, c, terminado;
  var desde, hasta, txt, excedido;
  
  if (strAction == "DaI") { desde = eval(elDesde); hasta = eval(elHasta);	} 
  else { desde = eval(elHasta); hasta = eval(elDesde); }
  txt = eval(eltxtSeleccionado);
  
  if (desde.disabled) return;
  if (hasta.disabled) return;

  pos = hasta.length;
  terminado = false;
  excedido = false;
  c = 0;
  do 
  {
    if (c>=desde.length) { terminado = true; continue; }
    if (desde.options[c].selected)
    {
      if ((MaximoD==-1)||(hasta.length<MaximoD)) {
        hasta.length +=1;
        if (hasta.length!=1) {
          hasta.options[pos].value = hasta.options[pos-1].value;	
          hasta.options[pos].text = hasta.options[pos-1].text;
          hasta.options[pos-1].value = desde.options[c].value;	
          hasta.options[pos-1].text = desde.options[c].text;
        } else {
          hasta.options[0].value = desde.options[c].value;	
          hasta.options[0].text = desde.options[c].text;
        }
      } else {
        desde.options[c].selected = false;
        excedido = true;
      }
    }
    pos = hasta.length;
    c += 1;
  } while (!terminado); 
  terminado = false;
  c = desde.length - 1;
  if (c!=-1) {
    do 
    {	
      if (desde.options[c].selected )
      {
        for ( z = c ; z < desde.length-1;z++)
        {	
          desde.options[z].value = desde.options[z+1].value;	
          desde.options[z].text = desde.options[z+1].text;
        }
        desde.length -= 1;
      }
      --c;
      if (c < 0) terminado = true;
    } while(!terminado) 
  }
  
  // lo que ha seleccionado en el txt separado por comas
  txt.value = '';
  if (strAction == "DaI") {
    for (c=0;c<hasta.length;c++) {
      if (txt.value!='') txt.value+=',';
      txt.value+=hasta.options[c].value; 
    }
  } else {
    for (c=0;c<desde.length;c++) {
      if (txt.value!='') txt.value+=',';
      txt.value+=desde.options[c].value; 
    }
  }
  
  // reordenar los lists
  for (i=0; i<hasta.length; i++)
    for (j=i+1; j<hasta.length; j++) {
      if (elArrayOrden[hasta.options[i].value]>elArrayOrden[hasta.options[j].value]) {
        aux = hasta.options[i].value; hasta.options[i].value = hasta.options[j].value; hasta.options[j].value = aux;
        aux = hasta.options[i].text; hasta.options[i].text = hasta.options[j].text; hasta.options[j].text = aux;
      }
    }
  for (i=0; i<desde.length; i++)
    for (j=i+1; j<desde.length; j++) {
      if (elArrayOrden[desde.options[i].value]>elArrayOrden[desde.options[j].value]) {
        aux = desde.options[i].value; desde.options[i].value = desde.options[j].value; desde.options[j].value = aux;
        aux = desde.options[i].text; desde.options[i].text = desde.options[j].text; desde.options[j].text = aux;
      }
    }
  
  if (excedido&&alertar) {
    alert('No se pueden seleccionar más de '+MaximoD+' '+(MaximoD==1?'opción':'opciones'));
  }
}

function OpenPermiso(URLRaiz, Formulario, Cual, CualAdmin){
	UrlPermiso = URLRaiz+"Includes/Utils/PopupPermiso.asp?HayAdmin=0&CampoVer=I"+Cual+"&Feedback="+Cual+"&Form="+Formulario+"&ValorVer="+eval("document.Formulario.I"+Cual+".value");
	wPermiso = window.open(UrlPermiso,"Permiso","width=430, height=360, scrollbars=yes");
	window.wPermiso.focus();
}

function OpenPermisoAdmin(URLRaiz, Formulario, Cual, CualAdmin){
	UrlPermiso = URLRaiz+"Includes/Utils/PopupPermiso.asp?HayAdmin=1&CampoVer=I"+Cual+"&CampoAdmin=I"+CualAdmin+"&Feedback="+Cual+"&Form="+Formulario+"&ValorVer="+eval("document.Formulario.I"+Cual+".value")+"&ValorAdmin="+eval("document.Formulario.I"+CualAdmin+".value")+"&FeedbackAdmin="+CualAdmin;
	wPermiso = window.open(UrlPermiso,"Permiso","width=430, height=360, scrollbars=yes");
	window.wPermiso.focus();
}
	    	
function PermisoCambiado(Cual, Cual2, Formulario, masinfo) {
  eval("D"+Cual+".innerText='"+JSDescribePermiso(eval("document."+Formulario+".I"+Cual+".value"),'',masinfo)+"'");
  if (Cual2!="") {
    eval("D"+Cual2+".innerText='"+JSDescribePermiso(eval("document."+Formulario+".I"+Cual2+".value"),'',masinfo)+"'");
  }
}

function OpenRecurso(URLRaiz, Formulario, Cual, AnchoPreview, AltoPreview) {
	UrlRecurso = URLRaiz+"Includes/Utils/PopupRecurso.asp?Campo=I"+Cual+"&CampoTipo=T"+Cual+"&Feedback="+Cual+"&Form="+Formulario+
	  "&IDRec="+eval("document."+Formulario+".I"+Cual+".value")+"&AnchoPreview="+AnchoPreview+"&AltoPreview="+AltoPreview;
	wRecurso = window.open(UrlRecurso,"Recurso","width=330, height=350, scrollbars=yes");
	window.wRecurso.focus();
}

function RecursoCambiado(Cual, Formulario, HTMLPreview, masinfo) {
  try {
    eval("D"+Cual+".innerText=JSDescribeRecurso(document."+Formulario+".I"+Cual+".value,document."+Formulario+".T"+Cual+".value,'')");
  } catch (o) { }
  try {
    eval("X"+Cual).innerHTML=HTMLPreview;
  } catch (o) { }
}

function OpenRecursoSubible(URLRaiz, Formulario, Cual, AnchoPreview, AltoPreview) {
	UrlRecursoSubible = URLRaiz+"Includes/Utils/PopupRecursoSubible.asp?Campo=I"+Cual+"&Feedback="+Cual+"&Form="+Formulario+"&CampoTipo=T"+Cual+
	  "&TipoSeleccionado="+eval("document."+Formulario+".T"+Cual+".value")+
	  "&Valor"+eval("document."+Formulario+".T"+Cual+".value")+"="+eval("document."+Formulario+".I"+Cual+".value")+
	  "&AnchoPreview="+AnchoPreview+"&AltoPreview="+AltoPreview;
	RecursoSubible = window.open(UrlRecursoSubible,"Recurso","width=430, height=360, scrollbars=yes");
	window.RecursoSubible.focus();
}

function RecursoSubibleCambiado(Cual, Formulario, HTMLPreview, masinfo) {
  try {
    eval("D"+Cual+".innerText=JSDescribeRecursoSubible(document."+Formulario+".I"+Cual+".value,document."+Formulario+".T"+Cual+".value,'')");
  } catch (o) { }
  try {
    eval("X"+Cual).innerHTML=HTMLPreview;
  } catch (o) { }
}

function OpenRTF(URLRaiz, Formulario, Cual){
	UrlRTF = URLRaiz+"Includes/Utils/PopupRTF.asp?Campo=I"+Cual+"&Feedback="+Cual+"&Form="+Formulario;
	wRTF = window.open(UrlRTF,"Texto","width=450, height=350, scrollbars=yes");
	window.wRTF.focus();
}

function RTFCambiado(Cual, Formulario, masinfo) {
  // feedback
  eval("D"+Cual+".innerHTML=JSDescribeRTF(document."+Formulario+".I"+Cual+".value,masinfo);");
}

function RTFPon(Cual, Formulario, que) {
  eval("document."+Formulario+".I"+Cual).value=que;
  RTFCambiado(Cual, Formulario, que);
}

function OpenLink(URLRaiz, Formulario, Cual){
	UrlLink = URLRaiz+"Includes/Utils/PopupLink.asp?Campo=I"+Cual+"&Feedback="+Cual+"&Form="+Formulario+"&Link="+eval("document."+Formulario+".I"+Cual+".value");
	Link = window.open(UrlLink,"Link","width=450, height=350, scrollbars=yes");
	window.Link.focus();
}
		
function LinkCambiado(Cual, Formulario, masinfo) {
  // feedback
  try {
    eval("D"+Cual+".innerText='"+JSDescribeLink(eval("document."+Formulario+".I"+Cual+".value"),masinfo)+"'");
  } catch (o) { }
}

function OpenColor(URLRaiz, Formulario, Cual){
	UrlPaleta = URLRaiz + "Includes/Utils/PopupColores.asp?Form="+Formulario+"&Feedback="+Cual;
	wPaleta = window.open(UrlPaleta,"Paleta","width=180, height=130");
	window.wPaleta.focus();
}

function ColorCambiado(Cual, Formulario, color) {
  var celda;
  celda = "C" + Cual;
  try {
	  eval("document."+Formulario+".I"+Cual+".value='"+color+"'");
	} catch (o) { }
	try {
	  document.all.item(celda).bgColor = color;
	  document.all.item(celda).title = color;
	} catch (o) { }
	return(false);
}

function EsEntero(que) {
  if (isNaN(que)) return false;
  if (""+parseInt(que)!=""+que) return false;
  return true;
}

function EsEnteroOVacio(que) {
  if (""+que=="") return true;
  return EsEntero(que);
}

function EsEmail(emailStr){
	var emailPat=/^(.+)@(.+)$/;
	var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]";
	var validChars="\[^\\s" + specialChars + "\]";
	var quotedUser="(\"[^\"]*\")";
	var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/;
	var atom=validChars + '+';
	var word="(" + atom + "|" + quotedUser + ")";
	var userPat=new RegExp("^" + word + "(\\." + word + ")*$");
	var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$");
	var matchArray=emailStr.match(emailPat);
	if (matchArray==null) {return(false);}
	var user=matchArray[1];
	var domain=matchArray[2];
	if (user.match(userPat)==null) {return(false);}
	var IPArray=domain.match(ipDomainPat);
	if (IPArray!=null) {
		for (var i=1;i<=4;i++) {if (IPArray[i]>255) {return false}}
		return(true);
	}
	var domainArray=domain.match(domainPat);
	if (domainArray==null) {return(false);}
	var atomPat=new RegExp(atom,"g");
	var domArr=domain.match(atomPat);
	var len=domArr.length;
	if (domArr[domArr.length-1].length<2 || domArr[domArr.length-1].length>3) {return false;}
	if (len<2) {return false}
	return(true);
}