

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_setTextOfLayer(objName,x,newText) { //v4.01
  if ((obj=MM_findObj(objName))!=null) with (obj)
    if (document.layers) {document.write(unescape(newText)); document.close();}
    else innerHTML = unescape(newText);
}

function MM_goToURL() { //v3.0
  var i, args=MM_goToURL.arguments; document.MM_returnValue = false;
  for (i=0; i<(args.length-1); i+=2) {
		eval(args[i]+".location='"+args[i+1]+"'");
	}
}


////////////////////////////////////
function CloneObject(what,depth,nombre) {
   if(!depth) depth=0;
	  if(depth>10) return null;
	
		if(nombre&&!what.length) alert(nombre+" "+what.lenght);//this[0]=what;

		for (var i in what) {
		    if (typeof what[i] == 'object') {
           	this[i] = new CloneObject(what[i],depth+1,i);
        }
        else{
				    this[i] = what[i];
				}
    }
}

function RetrieveObject(what) {
    var output = '';
    for (var i in what) {
        if (typeof what[i] == 'object') {
            output += RetrieveObject(what[i]);
        }
        else
            output += i + ' = ' + what[i] + '\n';
    }
    return output;
}


function DumpProps(obj, parent) {
   for (var i in obj) {
      if (parent) { var msg = parent + "." + i + "\n" + obj[i]; } else { var msg = i + "\n" + obj[i]; }
      if (!confirm(msg)) { return; }
      if (typeof obj[i] == "object") { 
         if (parent) { dumpProps(obj[i], parent + "." + i); } else { dumpProps(obj[i], i); }
      }
   }
}


function CopyProperties(src,dst,depth){
	if(typeof(src)=="string") src=MM_findObj(src);
	if(typeof(dst)=="string") dst=MM_findObj(dst);
	
	var out="";
	for(var i in src){
		out+=i+"\n";
		if(typeof src[i] =="object"){
			if(depth==null) 			CopyProperties(src[i],dst[i],depth--);
	
			if(depth!=null && depth>0)
				CopyProperties(src[i],dst[i],depth--);
		}
		else 	try{dst[i]=src[i];}catch(e){};
	}
	//alert(out);
}

function MergeObjects(src,dst){
	///copia las propiedades de un objeto al otro
	for (var i in src){
		if(src[i]!=undefined) {
			dst[i] = src[i];
		}
	}
}


///////////////////////

/*function ClearContent(obj){
	var objDst=null;
	if(typeof(obj)=="string")
		objDst= MM_findObj(obj);
	else objDst=obj;
	
	if (objDst) objDst.innerHTML="";
}*/

function ClearContent(obj){
	var objDst=null;
	if(typeof(obj)=="string")
		objDst= MM_findObj(obj);
	else objDst=obj;
	if(objDst){
		while(objDst.childNodes.length) objDst.removeChild(objDst.lastChild);
	}
}

function SetContent(obj,content){
	var objDst=null;
	if(typeof(obj)=="string")
		objDst= MM_findObj(obj);
	else objDst=obj;
	if(objDst){
		objDst.innerHTML="";
		objDst.innerHTML=content;
	}
}


function CopyContent(src,dst,clearAfter){
	var objSrc=objDst=null;
	if(typeof(src)=="string")
		objSrc= MM_findObj(src);
	else objSrc=src;
	if(typeof(dst)=="string")
		objDst= MM_findObj(dst);
	else objDst=dst;

	//alert(src.name);


	if(objSrc && objDst){
		objDst.innerHTML = "";
		objDst.innerHTML = objSrc.innerHTML;
	}
	
	if(clearAfter){
		objSrc.innerHTML="";
	}
	
}


function Ifr2Div(srcIfr){
	if(typeof(srcIfr)=="string")
		srcIfr= MM_findObj(srcIfr);

	var ifr = MM_findObj(srcIfr.id);
	CopyContent(srcIfr.contentWindow.document.body,'div'+srcIfr.id)
}



function SwapImage (imageObject, img1, img2){
	var obj = imageObject;
	if(typeof imageObject == "string") obj = MM_findObj(imageObject);
	if (obj.src.indexOf(img1)!=-1) obj.src = img2;
	else obj.src = img1;
}

function ShowHide(div,hide){
	var objeto,objetoHidden;
	if(typeof div!="string") {
		objeto = div;
	}
	else{
		objeto = MM_findObj(div);
		objetoHidden= MM_findObj(div+"Hidden");
	}
	if (objeto && objetoHidden){ //////////////hay un objeto igual pero con el sufijo Hidden, por lo tanto
															/////////////// se intercambia el contenido entre ambos objetos
		if (objeto.expandido==undefined) objeto.expandido=false;
		//alert(objeto.innerHTML);
		if (objeto.expandido){
			var tmp=objetoHidden.innerHTML;
			objetoHidden.innerHTML="";
			objetoHidden.innerHTML=objeto.innerHTML;
			objeto.innerHTML="";
			objeto.innerHTML=tmp;
			objeto.expandido=false;
		}
		else{
			var tmp=objeto.innerHTML;
			objeto.innerHTML="";
			objeto.innerHTML=objetoHidden.innerHTML;
			objetoHidden.innerHTML="";
			objetoHidden.innerHTML=tmp;
			objeto.expandido=true;
		}
	}
	//////////////////////
	else if (objeto){ //////////////////Solo hay un objeto, así que se le cambia la propiedad style.display
		var vis = objeto.style.display;
		if (hide == null){
			if (vis=="none") {
				objeto.style.display="";
			}
			else objeto.style.display="none";
		}
		else{
			if (hide) objeto.style.display="none";
			else objeto.style.display = "";
		}
			
		
		objIconExp = MM_findObj(div+"IconExpanded");
		objIconCon = MM_findObj(div+"IconContracted");
		if(objIconExp && objIconCon){
			objIconExp.style.display=objeto.style.display;
			objIconCon.style.display=objIconExp.style.display=="none"?"":"none";		
		}
		//return 	objeto.style.display; ///////////LO TUVE QUE SACAR!!! no sé en qúe sitios podrá influir..
	}
	//////////////////////
}


function GetStyleProperty(obj,property){
	////devuelve una propiedad CSS tanto si fue definida INLINE o si fue definida en un archivo externo, o <style>
	var ret;
	if(obj.currentStyle) ret =obj.currentStyle[property];
	if(ret==undefined) ret = obj[property];
	return ret;
}


function AlignBottom(element){
	//alinea un elemento a la parte inferior de su parent, y lo pone como position absolute
	var f = element;
	var p = f.offsetParent;
	f.style.width=String(p.offsetWidth+"px");
	f.style.position="absolute";
	pH = parseFloat(p.offsetHeight);
	fH = parseFloat(f.offsetHeight);
	var mt = (pH-fH)+"px";
	f.style.marginTop = String(mt);
	p.style.width=f.offsetWidth;
}



///////////////////////////////////////////////

function GetCheckeds(nomForm,nomControl){
	//devuelve un array con todos los valores de los checkeds
	if (nomForm==null)nomForm=0;
	var form = document.forms[nomForm];
	var arr = new Array();
	if (form){
		var cant = form[nomControl]?form[nomControl].length:0; 
		var i;
		if (!cant){
			if(form[nomControl] && form[nomControl].checked) arr.push(form[nomControl].value);	
		}
		else{
			for (i=0; i< cant;i++)
				if(form[nomControl][i].checked) arr.push(form[nomControl][i].value);	
		}
	}
	else alert("no se ha encontrado el formulario");
	return arr;
}

function CheckAll(nomForm,nomControl,value){
	//el checkbox principal debe llamarse choAll. Los demás, chk.
	if(!nomControl) nomControl = "chk";
	if (nomForm==null)nomForm=0;
	var form = document.forms[nomForm];
	if (form){
	if (value==null) value = form.chkAll.checked;
	var cant = form[nomControl]?form[nomControl].length:0; 
		var i;
		if (!cant){
			if(form[nomControl])	
			form[nomControl].checked=value;
		}
		else{
			for (i=0; i< cant;i++)
				form[nomControl][i].checked = value;	
		}
	}
	else alert("no se ha encontrado el formulario");
}


/////////////////////////////////

//Enter ISO 639-2 letter Language codes to detect (see: http://www.w3.org/WAI/ER/IG/ert/iso639.htm):
var langcodes=new Array("en","es");
var langCodeSelected = "default";
var arrYY_MENSAJE=new Object();
arrYY_MENSAJE.en="The information is incomplete or incorrect.";
arrYY_MENSAJE.es="La información está incompleta o contiene errores.";

var YY_MENSAJE = arrYY_MENSAJE.es;

var languageinfo=navigator.language? navigator.language : navigator.userLanguage;
if(languageinfo){
	for (var i=0;i<langcodes.length;i++){
		if (languageinfo.substr(0,2)==langcodes[i]){
			langCodeSelected = langcodes[i];
			YY_MENSAJE = arrYY_MENSAJE[langcodes[i]];
			break;
		}
	}
}

//////////////////

//YY_MENSAJE ="La información está incompleta o contiene errores:";

function YY_checkform() { //v4.65
//copyright (c)1998,2002 Yaromat.com
  /////////////EL FORMULARIO NO PUEDE LLAMARSE FRM
	
	document.MM_returnValue=false;
	var args = YY_checkform.arguments; var myDot=true; var myV=''; var myErr='';var addErr=false;var myReq;
	if (args[0]=="frm") {alert("EL FORMULARIO NO PUEDE LLAMARSE frm");return false;}
	for (var i=1; i<args.length;i=i+4){
    if (args[i+1].charAt(0)=='#'){myReq=true; args[i+1]=args[i+1].substring(1);}else{myReq=false}
    var myObj = null;
	///VIEJA OPCION : var myObj = MM_findObj(args[0]+args[i].replace(/\[\d+\]/ig,""));
   //NUEVA OPCION PARA VARIOS FORMULARIOS CON CONTROLES DEL MISMO NOMBRE:
	 var frm = document.forms[args[0]]; ///no puede decir var ???
	 if (frm && frm[args[i].replace(/\[\d+\]/ig,"")]) myObj = frm[args[i].replace(/\[\d+\]/ig,"")];
	 
	 ///FIN NUEVA OPCION	
	
	if (myObj){ //Si existe ese control...
		myV=myObj.value;
		if (myObj.type=='text'||myObj.type=='password'||myObj.type=='hidden'){
		  myV=myV.trim();
			//myObj.value= myObj.value.trim();  /////////Agregado en Inscripción ISHYR para sacar los caracteres al pedo de espacio antes y después de los campos
			if (myReq&&myV.length==0){addErr=true}
		  if ((myV.length>0)&&(args[i+2]==1)){ //fromto
			var myMa=args[i+1].split('_');if(isNaN(parseInt(myV))||myV<myMa[0]/1||myV > myMa[1]/1){addErr=true}
		  } else if ((myV.length>0)&&(args[i+2]==2)){
			  var rx=new RegExp("^[\\w\.=-]+@[\\w\\.-]+\\.[a-z]{2,4}$");if(!rx.test(myV))addErr=true;
		  } else if ((myV.length>0)&&(args[i+2]==3)){ // date
			var myMa=args[i+1].split("#"); var myAt=myV.match(myMa[0]);
			if(myAt){
			  var myD=(myAt[myMa[1]])?myAt[myMa[1]]:1; var myM=myAt[myMa[2]]-1; var myY=myAt[myMa[3]];
			  var myDate=new Date(myY,myM,myD);
			  if(myDate.getFullYear()!=myY||myDate.getDate()!=myD||myDate.getMonth()!=myM){addErr=true};
			}else{addErr=true}
		  } else if ((myV.length>0)&&(args[i+2]==4)){ // time
			var myMa=args[i+1].split("#"); var myAt=myV.match(myMa[0]);if(!myAt){addErr=true}
		  } else if (myV.length>0&&args[i+2]==5){ // check this 2
				var myObj1 = MM_findObj(args[i+1].replace(/\[\d+\]/ig,""));
				if(myObj1.length)myObj1=myObj1[args[i+1].replace(/(.*\[)|(\].*)/ig,"")];
				if(!myObj1.checked){addErr=true}
		  } else if (myV.length>0&&args[i+2]==6){ // the same
				//vieja opcion:
				/*var myObj1 = MM_findObj(args[i+1]); ///WOOOPS! no, porque no busca en el mismo formulario
				if(myV!=myObj1.value){addErr=true}
				*/
				//nueva opcion:
				var myObj1=null;
				if (frm && frm[args[i].replace(/\[\d+\]/ig,"")]) myObj1 = frm[args[i+1].replace(/\[\d+\]/ig,"")];
				if ( (!myObj1) || (myObj1 && myV!=myObj1.value) ){addErr=true}

		  }
		} else
		if (!myObj.type&&myObj.length>0&&myObj[0].type=='radio'){
			  var myTest = args[i].match(/(.*)\[(\d+)\].*/i);
			  var myObj1=(myObj.length>1)?myObj[myTest[2]]:myObj;
		  if (args[i+2]==1&&myObj1&&myObj1.checked&&MM_findObj(args[i+1]).value.length/1==0){addErr=true}
		  if (args[i+2]==2){
			var myDot=false;
			for(var j=0;j<myObj.length;j++){myDot=myDot||myObj[j].checked}
			if(!myDot){myErr+='* ' +args[i+3]+'\n'}
		  }
		} else if (myObj.type=='checkbox'){
		  if(args[i+2]==1&&myObj.checked==false){addErr=true}
		  if(args[i+2]==2&&myObj.checked&&MM_findObj(args[i+1]).value.length/1==0){addErr=true}
		} else if (myObj.type=='select-one'||myObj.type=='select-multiple'){
		  if(args[i+2]==1&&myObj.selectedIndex/1==0){addErr=true}
		}else if (myObj.type=='textarea'){
		  if(myV.length<args[i+1]){addErr=true}
		}
		if (addErr){myErr+='* '+args[i+3]+'\n'; addErr=false}
	  }
  }
  if (myErr!=''){alert(YY_MENSAJE+'\t\t\t\t\t\n\n'+myErr)}
  document.MM_returnValue = (myErr=='');
	return document.MM_returnValue;
}


function trim(c){
	if (c==null) c = " ";
	var returnString = this;
	while(returnString.charAt(0)==c && returnString.length>0){
		returnString = returnString.substring(1,returnString.length);
	}
	while(+returnString.charAt(returnString.length-1)==c && returnString.length>0) returnString=returnString.substring(0,returnString.length-1);
	return returnString;
}

String.prototype.trim = trim;

/////////////////////////////////////

function Pix2Num(val){
	var n;
	if(typeof val =="number") return val;
	if(val==undefined) return 0;
	n = val.indexOf("%");
	if (n!=-1) 	return Number(val.substr(0,n));
	
	if (!isNaN(val)) return val;
	n = val.indexOf("px");
	if (n!=-1) 	return Number(val.substr(0,n));
	return null;
}


//WORKAROUND PARA EL CLIP 
function GetClipRect(obj){
	if (typeof obj == "string") obj = MM_findObj(obj);
	if (!obj.style.clip.left){
		var valores = obj.style.clip.substr(5,obj.style.clip.length-6);
		var temp = valores.split(" ");
		var ret = new Object();
		ret.top = temp[0];
		ret.right = temp[1];
		ret.bottom = temp[2];
		ret.left= temp[3];
		return ret;
	}
	else return obj.style.clip;
}

function SetClipRect(obj,rect){
	//rect es un objecto del tipo {top: right: bottom: left: } y cada valor debe ser un STRING
	if (typeof obj == "string") obj = MM_findObj(obj);
	var oldRect = GetClipRect(obj);
	oldRect.top = rect.top||oldRect.top;
	oldRect.right = rect.right||oldRect.right;
	oldRect.bottom = rect.bottom||oldRect.bottom;
	oldRect.left = rect.left||oldRect.left;

	if (!obj.style.clip.left){
		obj.style.clip = "rect("+oldRect.top+" "+oldRect.right+" "+oldRect.bottom+" "+oldRect.left+")";
	}
	else obj.style.clip = oldRect;
	return oldRect;
}
////////////////////////////////////////////////////

////////////Función que hace un prompt, y luego redirige a otra página
function PromptBeforeMove(pagina,pregunta){
	if (!pregunta) pregunta ="¿Está seguro?";
	if (confirm(pregunta)) location.href=pagina;
}

function FixZero(numero){
	if (typeof(numero) =="string"){
		if (numero.length==1) return ("0"+numero);
		else return (numero);
	}
	
	if (numero<10) return ("0"+numero);
	else return (numero);
}


function TransformColor(col1,col2,percent){
	if (!percent) percent=.5;
	//percent va de 0 a 1
	var RR1,RR2,GG1,GG2,BB1,BB2,RR,GG,BB;
	if (col1.charAt(0)=="#") col1=col1.substr(1,col1.length);
	if (col2.charAt(0)=="#") col2=col2.substr(1,col2.length);
	
	RR1 = eval("0x"+col1.substr(0,2));
	RR2 = eval("0x"+col2.substr(0,2));
	GG1 = eval("0x"+col1.substr(2,2));
	GG2 = eval("0x"+col2.substr(2,2));
	BB1 = eval("0x"+col1.substr(4,2));
	BB2 = eval("0x"+col2.substr(4,2));

	RR = Math.round(RR1+(RR2-RR1)*percent);
	GG = Math.round(GG1+(GG2-GG1)*percent);
	BB = Math.round(BB1+(BB2-BB1)*percent);
	
	RR = FixZero(RR.toString(16));
	GG = FixZero(GG.toString(16));
	BB = FixZero(BB.toString(16));
		
	return "#"+RR+GG+BB;
}

var arrMeses = ["enero","febrero","marzo","abril","mayo","junio","julio","agosto","septiembre","octubre","noviembre","diciembre"];

var arrDias = ["domingo","lunes","martes","miércoles","jueves","viernes","sábado"];



//////////////////////////OBJETO CALENDARIO
function Calendario(t){
	this.tabla = t;
	fecha = new Date();
	this.mes = fecha.getMonth();
	this.anio = fecha.getFullYear();
	this.color = "#FFFF00";
	this.arrDias = new Array();
	this.Initialize();
	this.Update();
}

Calendario.prototype.setColor=function(color){
	this.color = color;
	this.Initialize();
	this.Update();
}

Calendario.prototype.setMonth=function(mes){
	this.mes = mes-1;
	this.Update();
}

Calendario.prototype.getMonth=function(){
	return this.mes+1;
}

Calendario.prototype.setYear=function(anio){
	this.anio=anio;
	this.Update();
}

Calendario.prototype.getYear=function(){
	return this.anio;
}

Calendario.prototype.getSeleccionados=function(){
	var arr = new Array();
	for (var i=0,i2=0;i<this.arrDias.length;i++){
		if (this.arrDias[i] && this.arrDias[i].selected) {
			//alert(this.arrDias[i].dia+":"+i2);		
			arr[i2++]=this.arrDias[i].dia;
		}
	}
	return (arr);
}

Calendario.prototype.setSeleccionados=function(){
	for (var i= 0;i<this.arrDias.length;i++){
		if (this.arrDias[i] && this.arrDias[i].selected) this.arrDias[i].onclick();
	}
	
	for (i=0;i<arguments.length;i++){
		if (this.arrDias[Number(arguments[i])]) this.arrDias[Number(arguments[i])].onclick();
	}
}

Calendario.prototype.CambiarMes=function(cantidad){
	this.mes+=cantidad;
	if (this.mes<0) this.anio--,this.mes=11;
	if (this.mes>11) this.anio++,this.mes=0;
	this.Update();
}

Calendario.prototype.Clear=function(){
	filas = this.tabla.rows.length;

	for (i=1;i<filas-1;i++){
		this.tabla.deleteRow(1);
	}
	delete (this.arrDias);
	this.arrDias = new Array();
}

Calendario.prototype.RemoveNavigationBar=function(){
	filas = this.tabla.rows.length;
	this.tabla.deleteRow(filas-1);
}

Calendario.prototype.Initialize=function(){
	filas = this.tabla.rows.length;
	for (i=0;i<filas;i++){
		this.tabla.deleteRow(0);
	}
	
	myTR = this.tabla.insertRow(0);
	myTR.bgColor=TransformColor(this.color,"#000000",.3);
	
	for(i=0;i<arrDias.length;i++){
		myTD=myTR.insertCell(i);
		myTD.innerHTML= arrDias[i].substr(0,2);
		myTD.width=20;
		myTD.style.color = "#FFFFFF";
		myTD.align = "center";
	}

	myTR = this.tabla.insertRow(1);
	myTR.bgColor=TransformColor(this.color,"#FFFFFF",.7);
	myTD=myTR.insertCell(0);
	myTD.innerHTML= ("&lt;");
	myTD.align = "center";
	myTD.parent = this;
	myTD.onclick=function(){
		this.parent.CambiarMes(-1);
	}
	
	myTD.colSpan = 1;
	this.cellMes = myTR.insertCell(1);
	this.cellMes.colSpan=5;
	this.cellMes.innerHTML="MES";
	this.cellMes.align = "center";
	myTD = myTR.insertCell(2);
	myTD.innerHTML = "&gt;"
	myTD.align = "center";
	myTD.parent = this;
	myTD.onclick=function(){
		this.parent.CambiarMes(1);
	}
}



Calendario.prototype.Update=function(){
	dia = 1;
	fecha = new Date(this.anio,this.mes,dia);
	primerDia = false;
	diaSemana=fecha.getDay();
	this.cellMes.innerHTML = this.anio+" - "+arrMeses[this.mes];
	
	for (diasMes=28;diasMes<=32;diasMes++){
		otraFecha = new Date(this.anio,this.mes,diasMes);
		if (otraFecha.getMonth()!=this.mes) {
			break;
		}
	}
	diasMes--;
	
	
	this.Clear();//LIMPIAR LOS DATOS
	
	for(fila=1,dia=0;dia<diasMes;fila++){
		myTR = this.tabla.insertRow(fila);
		for(i=0;i<arrDias.length;i++){
	
			if (i>=diaSemana) primerDia=true;
			if(primerDia) dia++;
			myTD=myTR.insertCell(i);
			myTD.align="center";
			if (dia<=diasMes && dia>0) {
				this.arrDias[dia]=myTD;
				myTD.innerHTML= dia;
				myTD.dia = dia;
				myTD.color2 = TransformColor(this.color,"#FFFFFF",.3);
				myTD.color1 = "#CCCCCC";
				myTD.bgColor=myTD.color1;
				myTD.onclick = function(){
					if (this.selected) this.bgColor = this.color1;
					else this.bgColor=this.color2;
					this.selected = !this.selected;
					this.oldColor = this.bgColor;
				}
				
				myTD.onmouseover=function(){
					this.oldColor = this.bgColor;
					//alert(TransformColor("<%=col4%>","<%=col3%>"));
					this.bgColor=TransformColor(this.bgColor,"#f6f6f6");	
				}
				
				myTD.onmouseout=function(){
					this.bgColor=this.oldColor;
				}
				
			}
		}
	}
	
	for (y=fila;y<7;y++) {
		myTR = this.tabla.insertRow(y);
		for(x=0;x<arrDias.length;x++){
		myTD = myTR.insertCell(x);
		myTD.innerHTML="&nbsp;";
		}
	}

	
}
///////////////////////////////////FIN OBJETO CALENDARIO

function CopyCombo(src,dst,dontCopyOnChange){
	var objSrc = MM_findObj(src);
	var objDest = MM_findObj(dst);
	if(!objDest || !objDest.options) return null;
	if (objSrc){
		objDest.options.length = objSrc.options.length;
		if (!dontCopyOnChange && objSrc.onchange) objDest.onchange = objSrc.onchange;
		for (var i=0;i<objSrc.options.length;i++) {
			objDest.options[i].text = objSrc.options[i].text;
			objDest.options[i].value= objSrc.options[i].value;
		}
		objDest.selectedIndex = objSrc.selectedIndex ;
	}
	else {
		//me fijo si debería tener "otra opción", que es cuando hay un valor = -1
		var otraOpcion = null;
		for (var i=0;i<objDest.options.length;i++) {
			if (objDest.options[i].value == -1){
				otraOpcion = objDest.options[i].text;
				//alert(objDest.options[i].text);
			}
		}
		objDest.options.length=1;
		objDest.selectedIndex = 0;
		if (otraOpcion){
			objDest.options.length++;
			objDest.options[objDest.options.length-1].value = -1;
			objDest.options[objDest.options.length-1].text = otraOpcion;
			
		}
	}
	if (objDest.onchange) objDest.onchange();
}
/////////////////

String.prototype.sintildes=function(){
	var re=/á/ig;
	var ret = this;
	ret = ret.replace(re,"a");
	re=/é/ig;
	ret = ret.replace(re,"e");
	re=/í/ig;
	ret = ret.replace(re,"i");
	re=/ó/ig;
	ret = ret.replace(re,"o");
	re=/ú/ig;
	ret = ret.replace(re,"u");
	return ret;
}

String.prototype.QueryString=function(){
	var ret="";
	var pos = this.indexOf("?");
	if(pos!=-1) ret = this.substr(pos+1);
	return ret;
}

String.prototype.URL=function(){
	var ret=this;
	var pos=this.indexOf("?");
	if(pos!=-1) ret=this.substr(0,pos);
	return ret;
}

String.prototype.RemoveFirstChars=function(caracter){
	var ret="";
	for(var i=0;this.charAt(i)==caracter&& i<this.length;i++);
	ret=this.substr(i);
	return ret;
}

String.prototype.IsEmail=function(){
  var rx=new RegExp("^[\\w\.=-]+@[\\w\\.-]+\\.[a-z]{2,4}$");
	return rx.test(this);
}

String.prototype.ExplodeQueryString=function(){
		//debe recibir sólo la querystring
	var query=this;
	var arr = query.split("&");
	var ret=new Object();
	for(var i=0;i<arr.length;i++){
		var pair = arr[i];
		var nomVariable = arr[i].substr(0,arr[i].indexOf("="));
		var valVariable = arr[i].substr(arr[i].indexOf("=")+1);
		if(ret[nomVariable]) {
			if(typeof (ret[nomVariable])=="string") {
				ret[nomVariable]=new Array(ret[nomVariable]);
			}
			ret[nomVariable].push(valVariable);
		}
		else {
			ret[nomVariable]=valVariable;
		}
		//alert(nomVariable+" es igual a "+valVariable);
		//eval("ret."+arr[i]);
	}
	return ret;
}

function MakeQueryString(obj){
	//crea un string querystring, partiendo de un objeto con propiedades.
	var ret=new Array();
	for(var e in obj){
		if(e)ret.push(escape(e)+"="+escape(obj[e]));
	}
	return ret.join("&");
}


String.prototype.ext = function(){
	var posicion = this.lastIndexOf(".");
	if(posicion==-1) return null;
	return (this.substr(posicion+1)).toLowerCase();
}

String.prototype.removeExt=function(){
	///devuelve el nombre del archivo sin la extensión
	var posicion = this.lastIndexOf(".");
	if(posicion==-1) return this;
	return (this.substr(0,posicion)).toLowerCase();
}

String.prototype.filepath=function(){
	var pos = this.lastIndexOf("/");
	if(pos==-1) return this;
	return this.substr(0,pos+1);
}

String.prototype.filename=function(){
	var pos = this.lastIndexOf("/");
	if(pos==-1) return this;
	return this.substr(pos+1);
}


String.randomLetter=function(primerLetra,ultimaLetra){
	var codeA = (primerLetra||"a").charCodeAt(0);
	var codeZ = (ultimaLetra||"z").charCodeAt(0);
	return String.fromCharCode(codeA+Math.round(Math.random()*(codeZ-codeA)));
}

String.randomNumber=function(){
	return this.randomLetter("0","9");
}

String.randomString=function(cant){
	var ret;
	if(!cant)cant=1;
	var arr= new Array();
	var codeA="a".charCodeAt(0);
	var codeZ="z".charCodeAt(0);
	var code0="0".charCodeAt(0);
	var code9="9".charCodeAt(0);
	
	for (var i=codeA;i<=codeZ;i++) arr.push(String.fromCharCode(i));
	for (var i=code0;i<=code9;i++) arr.push(String.fromCharCode(i));

	ret="";
	for(var i=0;i<cant;i++) ret+=arr[Math.round(Math.random()*(arr.length-1))];
	return ret;
}

String.prototype.reemplazar=function(cadena,nuevacadena){
	var arr=this.split(cadena);
	return arr.join(nuevacadena);
}

////////////////////////////////////////

function isFunction(elemento){
	return typeof (elemento)=="function";
}


////////////////////////////////////////

function SelectCombo(cbo,value,comp){	
	if(!comp) comp=0;
	var obj;
	if (typeof (cbo)=="string")
		obj = MM_findObj(cbo);
	else obj=cbo;
	if (obj && obj.options){
		for (var i=0;i<obj.options.length;i++) {
			if (obj.options[i].value==value) obj.selectedIndex=i+comp;
		}
		if(obj.onchange) obj.onchange();
	}
}


function compareText (option1, option2) {
  return option1.text.toLowerCase() < option2.text.toLowerCase() ? -1 :
    option1.text.toLowerCase() > option2.text.toLowerCase() ? 1 : 0;
}
function compareValue (option1, option2) {
  return option1.value < option2.value ? -1 :
    option1.value > option2.value ? 1 : 0;
}
function compareTextAsFloat (option1, option2) {
  var value1 = parseFloat(option1.text);
  var value2 = parseFloat(option2.text);
  return value1 < value2 ? -1 :
    value1 > value2 ? 1 : 0;
}
function compareValueAsFloat (option1, option2) {
  var value1 = parseFloat(option1.value);
  var value2 = parseFloat(option2.value);
  return value1 < value2 ? -1 :
    value1 > value2 ? 1 : 0;
}

function Select2Array(select){
  var opt = new Array ();
	//var out="";  
	for (var i = 0; i < select.options.length; i++){
		opt[i] = 
      {
        text:select.options[i].text,
        value:select.options[i].value,
        defaultSelected:select.options[i].defaultSelected,
        selected:select.options[i].selected,
				title:select.options[i].title
      };

	}
	return opt;
}


function sortSelect (select, compareFunction) {
  if (!compareFunction)
    compareFunction = compareText;
  var options = new Array (select.options.length);

	for (var i = 0; i < options.length; i++){
    options[i] = 
      new Option (
        select.options[i].text,
        select.options[i].value,
        select.options[i].defaultSelected,
        select.options[i].selected
      );
		
		var optSrc = select.options[i];
		var optDst = options[i];
		for (var el in optSrc){
			if(typeof optSrc[el]!="object"){
				try{
				if(optDst[el]==undefined) 					try{optDst[el]=optSrc[el];}catch(e2){}
				} catch(e){}
			}

		}
	}
	options.sort(compareFunction);
	select.options.length = 0;
	for (var i = 0; i < options.length; i++)
    select.options[i] = options[i];
}


function cantcompare(option2,option1){
	var cant1 = option1.cant||0;
	var cant2 = option2.cant||0;
	return cant1 < cant2 ? -1 :
    cant1 > cant2 ? 1 : compareText(option2,option1);
}

function OrdernarPreferidos(stringOrObject,preferenciaInicial){
	//coloca los elementos seleccionados más veces en la parte más alta del combo.
	
	var sel;
	if(!preferenciaInicial)preferenciaInicial=10;
	if(typeof stringOrObject=="string") sel = MM_findObj(stringOrObject);
	else sel = stringOrObject;
	for (var i =0;i<sel.options.length;i++){
		var opt = sel.options[i];
		if(opt.selected==true) {
			if(!opt.cant>=0)opt.cant=preferenciaInicial;
			else opt.cant++;
		}else opt.cant-=.1;
		if(opt.cant>preferenciaInicial)opt.cant=preferenciaInicial;
	}
	
	var arr1 = new Array();
	var arr2 = new Array();
	for(var i=0;i<sel.options.length;i++){
		if(sel.options[i].value>0){
			if(sel.options[i].cant>0) arr1.push(sel.options[i]);
			else arr2.push(sel.options[i]);
		}
	}
	
	arr1.sort(compareText);
	arr2.sort(compareText);

	sel.options.length=0;
	
	for(var i=0;i<arr1.length;i++) {
		sel.options[i]= arr1[i];
	}
	
	sel.options[i]=new Option ("--------------",0);
	
	for(var i2=0;i2<arr2.length;i2++) {
		sel.options[i2+i+1] = arr2[i2];
	}
	
}


function MoveSelectedComboElements(src,dst){
	if(typeof src=="string") src=MM_findObj(src);
	if(typeof dst=="string") dst=MM_findObj(dst);
	
	var ret="";
	for(var i=0;i<src.options.length;) {
		var option = src.options[i];
		if(option.selected){
			ret+="\n"+option.text;
			var opt = new Option(option.text,option.value,option.defaultSelected,option.selected);
			//opt.title=select.options[i].title;
			var ret="";
			dst.options[dst.options.length] = opt;
			src.options[i]=null;
		}
		else i++;
	}
	
	sortSelect(dst);
}

function Combo2Hidden(src,dst){
	//¿¿¿crea tantos hiddens como elementos tenga el combo???
	
	if(typeof(src)=="string") src=MM_findObj(src);
	
	obj=MM_findObj(dst+"hidden");
	
	if(!obj){
		//alert("El div "+src.name+"hidden no existe");
		var obj = document.createElement('div');
		obj.id=dst+"hidden";
		//obj.style.border="solid 5px";
		src.parentNode.appendChild(obj);
	}
	
	var d2Len=obj.childNodes.length;  

  for (var i=0;i<d2Len;i++){
       obj.removeChild(obj.childNodes[0]);
  }
	
	for(var i=0;i<src.options.length;i++){
		option = src.options[i];
		var t=document.createElement('input');  
		t.type="hidden";
		t.value=option.value;
		t.name=dst;
		obj.appendChild(t);
	}
}


////////////////// COPIA DE ROWS EN TABLAS
function addRow(tableName,rowName,comodin){
	var tabla = MM_findObj(tableName);
	//alert(tableName);
	var tabBody = tabla.getElementsByTagName('tbody')[0];
	//alert(comodin);
	var newRow;
	//alert(tabla.firstChild.innerHTML);

	var oldRow;
	if(rowName) oldRow = MM_findObj(rowName);
	
	if(rowName) newRow = tabBody.insertBefore(MM_findObj(rowName).cloneNode(true),MM_findObj(rowName));
	else newRow = tabBody.appendChild(tabBody.firstChild.cloneNode(true));
	if (!tabla.rowNum) tabla.rowNum=0;
	tabla.rowNum++;
	newRow.id = tableName+"_row_"+tabla.rowNum;
	newRow.style.display="";
	//ShowHide(newRow.id,false);
	if(comodin==null) comodin = "***";
	/*try{newRow.innerHTML = String(newRow.innerHTML).reemplazar(comodin,tabla.rowNum); //esta linea reemplazó a las dos siguientes
	}catch(e){
	*/
	for(var i=0;i<newRow.cells.length;i++){
		newRow.cells[i].innerHTML = String(newRow.cells[i].innerHTML).reemplazar(comodin, tabla.rowNum);
	}
		
	if(!tabla.rowsAdded) tabla.rowsAdded=new Array();
	tabla.rowsAdded[tabla.rowNum]=true;
	return tabla.rowNum;
}

function delRow(tableName,row){
	var oldRow = MM_findObj(tableName+"_row_"+row);
	var tabla = MM_findObj(tableName);
	tabla.deleteRow(oldRow.sectionRowIndex);
	tabla.rowsAdded[row]=false;
	var oldHTML = tabla.innerHTML;
	tabla.normalize();
}

function delAllRows(tableName){
	var tabla = MM_findObj(tableName);
	if(tabla.rowsAdded){
		for(var e in tabla.rowsAdded){
			if(!isFunction(tabla.rowsAdded[e]) && tabla.rowsAdded[e]==true) delRow(tableName,e);
		}
	}
}

swapNodes = function (nodeA, nodeB) {
  var nextSibling = nodeA.nextSibling;
  var parentNode = nodeA.parentNode;
  nodeB.parentNode.replaceChild(nodeA, nodeB);
  nodeA.parentNode.insertBefore(nodeB, nodeA.nextSibling);  
}


function upRow(tableName,row){
	var oldRow = MM_findObj(tableName+"_row_"+row);
	var newRow = oldRow.previousSibling;
	if(newRow){
		swapNodes(oldRow,newRow);
		return true;
	}
	else return false;
	
}

function downRow(tableName,row){
	var oldRow = MM_findObj(tableName+"_row_"+row);
	var newRow = oldRow.nextSibling;
	if (newRow){
		swapNodes(newRow,oldRow);
		return true;
	}
	else return false;
}


//////////////////


function ChangeObjectColor(obj,newColor){
	obj.oldObjectColor = obj.style.backgroundColor;
	obj.style.backgroundColor=newColor;
}

function RestoreObjectColor(obj){
	obj.style.backgroundColor=obj.oldObjectColor;
}

function ChangeObjectBg(obj,newImage){
	obj.oldObjectBg = obj.style.backgroundImage;
	//alert(obj.oldObjectBg);
	obj.style.backgroundImage="url("+newImage+")";
}

function RestoreObjectBg(obj){
	obj.style.backgroundImage=obj.oldObjectBg;
}


//////////////////////////////////////////////////////////////

if(!Array.prototype.push){
	Array.prototype.push=function(val){
		this[this.length]=val;
	}
}

Array.prototype.remove = function(elementnr) {
	for (;elementnr<this.length;elementnr++) {
		this[elementnr] = this[elementnr + 1];
	}
	if(this.length>0) this.length=this.length-1;
}



function Equals(a,b){
	//alert("hasta acá");
	if(typeof a=="object"){
		for(var i in a){
			try{b[i]}catch(e){return false}
			return Equals(a[i],b[i]);
		}
	}
	else return a==b;
}

Array.prototype.removeDuplicates=function(){
	for(var i=0;i<this.length;){
		var eliminado=false;
		for (var e=i+1;e<this.length;){
			if(Equals(this[e],this[i])){
				eliminado=true;
				this.remove(e);
			}
			else e++;
		}
		if (!eliminado) i++;
	}
}

/////////////////////////////////////////////////////////////////

function GetDateModified( filespec ) {
  var fso, f, s;
  try{
		fso = new ActiveXObject( "Scripting.FileSystemObject" );
		f = fso.GetFile( filespec );
		s = new Date(f.DateLastModified);
		return s;
	}
	catch(e){
		var out=MM_findObj("output");
		if(out) out.innerHTML="<br>Si colocás 'Inicializar y activar la secuencia de comandos de los contoles activex' en 'Pedir Datos', las fechas de las fotos se colocarán automáticamente.<br>Para esto, andá a Herramientas/Opciones de Internet/Seguridad/Nivel Personalizado.<br>De lo contrario, tomará la hora actual.<br>Cuando aparezca una ventana preguntando si deseas permitir la ejecución de controles ActiveX, SOLAMENTE en esta página apreta SI.<br>NOTA: en otros sitios, este procedimiento puede resultar MUY inseguro.";
		return new Date();
	}
}


////////////////////////////////
function setMousePointer() { document.body.style.cursor = 'wait' } 
function resetMousePointer() { document.body.style.cursor = 'default';}


///////////////////////////////////////////////////////////////////////////
function currency(anynum) {
   //-- Returns passed number as string in $xxx,xxx.xx format.
   if (anynum==null || anynum=="") return "";
	 anynum=eval(anynum);
   workNum=Math.abs((Math.round(anynum*100)/100));workStr=""+workNum
   if (workStr.indexOf(".")==-1){workStr+=".00"}
   dStr=workStr.substr(0,workStr.indexOf("."));dNum=dStr-0
   pStr=workStr.substr(workStr.indexOf("."))
   while (pStr.length<3){pStr+="0"}

   //--- Adds comma in thousands place.
   if (dNum>=1000) {
      dLen=dStr.length
      dStr=parseInt(""+(dNum/1000))+","+dStr.substring(dLen-3,dLen)
   }

   //-- Adds comma in millions place.
   if (dNum>=1000000) {
      dLen=dStr.length
      dStr=parseInt(""+(dNum/1000000))+","+dStr.substring(dLen-7,dLen)
   }
   retval = dStr + pStr 
   //-- Put numbers in parentheses if negative.
   if (anynum<0) {retval="("+retval+")"}
   return "$"+retval
}

/////////////////////
function stopLoad(ventana){
	//deja de cargar el contenido de esa ventana
	if (!ventana) ventana = window;
	if (!document.all) ventana.stop(); else ventana.document.execCommand('Stop');
}










////////////////////////////////////////////////////////////////////////////////////

/*
   name - name of the cookie
   value - value of the cookie
   [expires] - expiration date of the cookie
     (defaults to end of current session)
   [path] - path for which the cookie is valid
     (defaults to path of calling document)
   [domain] - domain for which the cookie is valid
     (defaults to domain of calling document)
   [secure] - Boolean value indicating if the cookie transmission requires
     a secure transmission
   * an argument defaults when it is assigned null as a placeholder
   * a null placeholder is not required for trailing omitted arguments
*/

function setCookie(name, value, expires, path, domain, secure) {
  var curCookie = name + "=" + escape(value) +
      ((expires) ? "; expires=" + expires.toGMTString() : "") +
      ((path) ? "; path=" + path : "") +
      ((domain) ? "; domain=" + domain : "") +
      ((secure) ? "; secure" : "");
  document.cookie = curCookie;
}


/*
  name - name of the desired cookie
  return string containing value of specified cookie or null
  if cookie does not exist
*/

function getCookie(name) {
  var dc = document.cookie;
  var prefix = name + "=";
  var begin = dc.indexOf("; " + prefix);
  if (begin == -1) {
    begin = dc.indexOf(prefix);
    if (begin != 0) {
			return null;
		}
  } else
    begin += 2;
  var end = document.cookie.indexOf(";", begin);
  if (end == -1)
    end = dc.length;
	var ret = dc.substring(begin + prefix.length, end);
	if(ret) ret = unescape(ret);
	return ret;
}


/*
   name - name of the cookie
   [path] - path of the cookie (must be same as path used to create cookie)
   [domain] - domain of the cookie (must be same as domain used to
     create cookie)
   path and domain default if assigned null or omitted if no explicit
     argument proceeds
*/

function deleteCookie(name, path, domain) {
  if (getCookie(name)) {
    document.cookie = name + "=" +
    ((path) ? "; path=" + path : "") +
    ((domain) ? "; domain=" + domain : "") +
    "; expires=Thu, 01-Jan-70 00:00:01 GMT";
  }
}

// date - any instance of the Date object
// * hand all instances of the Date object to this function for "repairs"

function fixDate(date) {
  var base = new Date(0);
  var skew = base.getTime();
  if (skew > 0)
    date.setTime(date.getTime() - skew);
}

////////////////////////////////////////////////////////////////////





LoadScript = function(url) {
	document.write('<sc'+'ript language="javascript" type="text/javascript" src="' + url + '"></script>');
}


LoadCSS = function(url) {
	document.write('<link href="' + url + '" rel="stylesheet" type="text/css" />');
}