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;
	
	// Hora formato -> 3:00
	if ((hora.charAt(1)==':')||(hora.charAt(1)=='.')) {
		hor = hora.substring(0,1);  
		if ((hora.charAt(3)==':')||(hora.charAt(3)=='.')||(hora.charAt(3)==' ')) {
			min = hora.substring(2,3); 
			seg = hora.substring(4,8);
		} else {
			min = hora.substring(2,4); 
			seg = hora.substring(5,9);
		}
	// Hora formato -> 03:00
	} else {
		hor = hora.substring(0,2);
		if ((hora.charAt(4)==':')||(hora.charAt(4)=='.')||(hora.charAt(4)==' ')) {
			min = hora.substring(3,4);
			seg = hora.substring(5,9);
		} else {
			min = hora.substring(3,5);
			seg = hora.substring(6,10);
		}
	}

	if ((isNaN(hor)) || (isNaN(min)) || (isNaN(seg))) return 0;
	if (hor<0 || hor>23) 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 "3": // RecursoTipoVisita
      txt = "Visita Virtual "+(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 "3": // RecursoTipoVisita
      txt = "Visita Virtual "+(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 "13": // VisorRama
      txt = "Rama de galería fotográfica "+(masinfo==""?"":"("+masinfo+")")+"";
      break;
    case "14": // Agenda
      txt = "Agenda "+(masinfo==""?"":"("+masinfo+")")+"";
      break;
    case "15": // Catalog
      txt = "Catálogo "+(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+".innerHTML='"+JSDescribePermiso(eval("document."+Formulario+".I"+Cual+".value"),'',masinfo)+"'");
  if (Cual2!="") {
    eval("D"+Cual2+".innerHTML='"+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");
	//wRecurso.opener = self;
	window.wRecurso.focus();
}

function RecursoCambiado(Cual, Formulario, HTMLPreview, masinfo) {
  try {
    eval("D"+Cual+".innerHTML=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+".innerHTML=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=670, height=500, scrollbars=no, resizable=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");
	UrlLink = URLRaiz+"Includes/Utils/PopupLink.asp?Campo=I"+Cual+"&Feedback="+Cual+"&Form="+Formulario+"&Link="+escape(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+".innerHTML='"+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);
}

function esDecimal(valor) {
	// Input for Numeric values. Handles negatives, and comma formatted values. Also handles a single decimal point
	var expDec=/^-?\d*[0-9](|.\d*[0-9]|,\d*[0-9])?$/;
	return expDec.test(valor);
}

//Función que quita espacios de la izquierda a una cadena dada
function ltrim(cadena) {
	return cadena.replace(/^\s+/, "");
}

//Función que quita espacios de la derecha a una cadena dada
function rtrim(cadena) {
	return cadena.replace(/\s+$/, "");
}

//Función que quita espacios de la izquierda y derecha a una cadena dada
function trim(cadena) {
	return ltrim(rtrim(cadena));
}

function replace2(inputString, fromString, toString) {
	// Goes through the inputString and replaces every occurrence of fromString with toString
  		var temp = inputString;
	if (fromString == "") {
    	return inputString;
   	}
	if (toString.indexOf(fromString) == -1) { // If the string being replaced is not a part of the replacement string (normal situation)
    	while (temp.indexOf(fromString) != -1) {
        	var toTheLeft = temp.substring(0, temp.indexOf(fromString));
        	var toTheRight = temp.substring(temp.indexOf(fromString)+fromString.length, temp.length);
        	temp = toTheLeft + toString + toTheRight;
		}
	}else{ // String being replaced is part of replacement string (like "+" being replaced with "++") - prevent an infinite loop
		var midStrings = new Array("~", "`", "_", "^", "#");
		var midStringLen = 1;
		var midString = "";
		// Find a string that doesn't exist in the inputString to be used
		// as an "inbetween" string
		while (midString == "") {
			for (var i=0; i < midStrings.length; i++) {
				var tempMidString = "";
				for (var j=0; j < midStringLen; j++) { tempMidString += midStrings[i]; }
					if (fromString.indexOf(tempMidString) == -1) {
						midString = tempMidString;
						i = midStrings.length + 1;
					}
			}
		} // Keep on going until we build an "inbetween" string that doesn't exist
		// Now go through and do two replaces - first, replace the "fromString" with the "inbetween" string
		while (temp.indexOf(fromString) != -1) {
			var toTheLeft = temp.substring(0, temp.indexOf(fromString));
			var toTheRight = temp.substring(temp.indexOf(fromString)+fromString.length, temp.length);
			temp = toTheLeft + midString + toTheRight;
		}
		// Next, replace the "inbetween" string with the "toString"
		while (temp.indexOf(midString) != -1) {
			var toTheLeft = temp.substring(0, temp.indexOf(midString));
			var toTheRight = temp.substring(temp.indexOf(midString)+midString.length, temp.length);
			temp = toTheLeft + toString + toTheRight;
		}
	} // Ends the check to see if the string being replaced is part of the replacement string or not
	return temp; // Send the updated string back to the user
}

/***********************************************************************************************
Si estamos depurando el Interdev te mete meta código para su control... el problema es que si
utilizas AJAX te da problemas. Con esta rutina eliminamos esos datos de la cadena que devolvemos
***********************************************************************************************/
function quitameTextoDebug(cadena) {
	if(cadena.indexOf('ASP_DEBUG_INFO') > 0) { cadena = cadena.substr(cadena.indexOf('-->')+5); }
	return cadena;
}

function DameEtiqueta(string) {
	var letToFind    = "ÁÉÍÓÚÀÈÌÒÙÄËÏÖÜÂÊÎÔÛÝŸÑÇ€$&©®ª²³º×ŽÕßÅÃƒŠØ§¥";
	var letToReplace = "AEIOUAEIOUAEIOUAEIOUYYNCESYCRA23OXZOBAAFS0SY";
	var letToRemove  = "!\"#%'()*+,-./:;<=>?@[\]^`{|}~¡¢£¤¦¨«¬­¯°±´µ¶·¸»¼½¾¿ÆÞ÷";
	string = string.toUpperCase();
	string = string.replace(/^\s+/, "");
	string = string.replace(/\s+$/, "");
	while(string.indexOf(" ") != -1)
		string = string.replace(" ", "_");
	for(var i = 0; i < letToFind.length; i++){
		while(string.indexOf(letToFind.charAt(i)) != -1)
			string = string.replace(letToFind.charAt(i), letToReplace.charAt(i));
	}
	for(i = 0; i < letToRemove.length; i++)
		while(string.indexOf(letToRemove.charAt(i)) != -1)
			string = string.replace(letToRemove.charAt(i), "");
	while(string.indexOf("__") != -1)
		string = string.replace("__", "_");
	if(string.substring(string.length - 1, string.length) == "_")
		string = string.substring(0, string.length - 1);
	if(string.substring(0, 1) == "_")
		string = string.substring(1, string.length - 1);
	return string;
}

function AbrirVentana(url, name, width, height, toolbar, location, directories, status, menubar, scrollbars, resizable) {
	if(!isNaN(width )) var AnchuraFinal = (width  > screen.width ) ? screen.width  : width;
	if(!isNaN(height)) var AlturaFinal  = (height > screen.height) ? screen.height : height;
	var Opciones;
	Opciones  = "toolbar="     + ((toolbar     == 1) ? "yes" : "no") + ","
	Opciones += "location="    + ((location    == 1) ? "yes" : "no") + ","
	Opciones += "directories=" + ((directories == 1) ? "yes" : "no") + ","
	Opciones += "status="      + ((status      == 1) ? "yes" : "no") + ","
	Opciones += "menubar="     + ((menubar     == 1) ? "yes" : "no") + ","
	Opciones += "scrollbars="  + ((scrollbars  == 1) ? "yes" : "no") + ","
	Opciones += "resizable="   + ((resizable   == 1) ? "yes" : "no") + ","
	if(!isNaN(width )) Opciones += "width="       + AnchuraFinal + ","
	if(!isNaN(height)) Opciones += "height="      + AlturaFinal  + ","
	if(!isNaN(width )) Opciones += "left="        + ((screen.width  - AnchuraFinal) / 2) + ","
	if(!isNaN(height)) Opciones += "top="         + ((screen.height - AlturaFinal ) / 3)
	eval("ventana" + name + " = window.open(url, '" + name + "', Opciones)");
	eval("ventana" + name + ".focus();");
}