  
  //====================================================================================
  //====================================================================================    
  
  var nameCalendar	="";
  var calFormat 	= "dd-mm-yyyy";
  
  // codes
  var calWidth		= 168; 
  var calHeight		= 194;
  var calOffsetX	= -10;
  var calOffsetY	= 0;
  var calWin		= null;
  var winX		= 0;
  var winY		= 0;
  var cal		= "cal";
  var cals		= new Array();
  var currentCal	= null;
  
  var isOpera		= (navigator.userAgent.indexOf("Opera")!=-1)?true:false;
  var isOpera5		= (navigator.appVersion.indexOf("MSIE 5")!=-1 && navigator.userAgent.indexOf("Opera 5")!=-1)?true:false;
  var isOpera6		= (navigator.appVersion.indexOf("MSIE 5")!=-1 && navigator.userAgent.indexOf("Opera 6")!=-1)?true:false;
  var isN6		= (navigator.userAgent.indexOf("Gecko")!=-1);
  var isN4		= (document.layers)?true:false;
  var isMac		= (navigator.userAgent.indexOf("Mac")!=-1);
  var isIE		= (document.all && !isOpera && (!isMac || navigator.appVersion.indexOf("MSIE 4")==-1))?true:false;
  
  //====================================================================================  
  // 
  //====================================================================================  

  /**
  * 
  *
  * @param 
  */  
  function addCalendar(name, title, fieldAnyo, fieldDia, form, capa) 
  {
  	cals[cals.length] = new calOBJ(name, title, fieldAnyo, fieldDia, form);
  }

  /**
  * calOBJ: Crea el objeto calendario
  *
  * @param name: Nombre del calendario
  * @param title: Titulo del calendario
  * @param fieldAnyo: Campo de aos y mes del calendario
  * @param fieldDia: campos del dia del calendario
  * @param form: 
  * @param capa:   
  */  
  function calOBJ(name, title, fieldAnyo, fieldDia, form) 
  {
  	this.name 	= name;
  	this.title 	= title;
  	this.field 	= fieldAnyo;
  	this.field_d 	= fieldDia;
  	this.formName 	= form;
  	this.form 	= null;
  }

  /**
  * findCalendar: recupera el objeto calendario 
  * del array de calendarios
  *
  * @param name: Nombre del calendario
  */  
  function findCalendar(name) 
  {
  	for (var i = 0; i < cals.length; i++) {
  		if (cals[i].name == name) {
  			if (cals[i].form == null) {
  				if (cals[i].formName == "") {
  					if (document.forms[0]) {
  						cals[i].form = document.forms[0];
  					}
  				}
  				else if (document.forms[cals[i].formName]) {
  					cals[i].form = document.forms[cals[i].formName];
  				}
  			}
  			return cals[i];
  		}
  	}	
  	return null;
  }
  
  /**
  * getDayName: Retorna el nombre del dia
  *
  * @param y: Ao
  * @param m: Mes
  * @param d: dia  
  */  
  function getDayName(y,m,d) {
  	var wd	= new Date(y,m,d);
  	return yxDays[wd.getDay()].substring(0,3);
  }
  
  /**
  * 
  *
  * @param 
  */  
  function getMonthFromName(m3) {
  	for (var i = 0; i < yxMonthsLarge.length; i++) {
  		if (yxMonthsLarge[i].toLowerCase().substring(0,3) == m3.toLowerCase()) {
  			return i;
  		}
  	}	
  	return 0;
  }


  /**
  * getFormat
  *
  * @param 
  */  
  function getFormat() {
  	var calF= calFormat;	
  	calF 	= calF.replace(/\\/g, '\\\\');
  	calF 	= calF.replace(/\\/g, '\\\/');
  	calF 	= calF.replace(/\[/g, '\\\[');
  	calF 	= calF.replace(/\]/g, '\\\]');
  	calF 	= calF.replace(/\(/g, '\\\(');
  	calF 	= calF.replace(/\)/g, '\\\)');
  	calF 	= calF.replace(/\{/g, '\\\{');
  	calF 	= calF.replace(/\}/g, '\\\}');
  	calF 	= calF.replace(/\</g, '\\\<');
  	calF 	= calF.replace(/\>/g, '\\\>');
  	calF 	= calF.replace(/\|/g, '\\\|');
  	calF 	= calF.replace(/\*/g, '\\\*');
  	calF 	= calF.replace(/\?/g, '\\\?');
  	calF 	= calF.replace(/\+/g, '\\\+');
  	calF 	= calF.replace(/\^/g, '\\\^');
  	calF 	= calF.replace(/\$/g, '\\\$');
  	calF 	= calF.replace(/dd/i, '\\d\\d');
  	calF 	= calF.replace(/mm/i, '\\d\\d');
  	calF 	= calF.replace(/yyyy/i, '\\d\\d\\d\\d');
  	calF 	= calF.replace(/day/i, '\\w\\w\\w');
  	calF 	= calF.replace(/mon/i, '\\w\\w\\w');	

  	return new RegExp(calF);
  }
  
  function getDateNumbers(date) {
  	var y, m, d;
  	var yIdx 	= calFormat.search(/yyyy/i);
  	var mIdx 	= calFormat.search(/mm/i);
  	var m3Idx 	= calFormat.search(/mon/i);
  	var dIdx 	= calFormat.search(/dd/i);
  	y		= date.substring(yIdx,yIdx+4)-0;
	// Comprobamos que tenga formato de fecha
	var aDate = date.split('-');
	if (aDate.length != 3) return new Array((new Date()).getFullYear(), (new Date()).getMonth(), (new Date()).getDate());
	for (var i=0; i<aDate.length; i++){
		if (aDate[i] == '') return new Array((new Date()).getFullYear(), (new Date()).getMonth(), (new Date()).getDate());
	}
  	if (mIdx != -1) {
  		m=date.substring(mIdx,mIdx+2)-1;
  	}
  	else {
  		var m = getMonthFromName(date.substring(m3Idx,m3Idx+3));
  	}
  	d=date.substring(dIdx,dIdx+2)-0;  
  	return new Array(y,m,d);
  }
  
  function hideCal() {
  	calWin.close();
  	calWin 		= null;
  	window.status 	= "";
  }
  
  function lastDay(d) {
  	var yy=d.getFullYear(), mm=d.getMonth();
  	for (var i=31; i>=28; i--) {
  		var nd=new Date(yy,mm,i);
		if (mm == nd.getMonth()) {
			return i;
		}
  	}
  }
  
  function firstDay(d) {
  	var yy	= d.getFullYear(), mm=d.getMonth();
  	var fd	= new Date(yy,mm,0);
  	return fd.getDay();
  }
  
  function lastDayPreMounth(d) {
  	var yy=d.getFullYear(), mm=d.getMonth();
	var yy_pm=yy;
	var mm_pm=mm-1;
	if (mm == 0){
		yy_pm=yy_pm-1;
		mm_pm=11;
	}
  	for (var i=31; i>=28; i--) {
  		var nd=new Date(yy_pm,mm_pm,i);
		if (mm_pm == nd.getMonth()) {
			return i;
		}
  	}
  }
  
  /**
   * get2Digits: Retorna el digito en formato de dos digitos
   *
   * @param n: numero 
   */
  function get2Digits(n) {
    	return ((n<10)?"0":"")+n;
  }
  
  /**
   * clearDate: Borra calendario
   */
  function clearDate() {
  	currentCal.form[currentCal.field].value="";
  	hideCal();
  }
  
  /**
   * diactual
   */
  function diactual () {  	
  	var today 	= new Date();
  	var day   	= today.getDate();
  	var month 	= today.getMonth();
  	var year  	= today.getFullYear();
  	var dia 	= today.getDay();
  	var fechactual 	= day+"-"+month+"-"+year;
  	return fechactual;
  }
  
  
  /**
   * checkDate: 
   *
   * @param name: 
   */
  function checkDate(name) {
  	var thisCal = findCalendar(name);
  	if (thisCal != null && thisCal.form != null && thisCal.form[thisCal.field]) {
  		var calRE = getFormat();
  		if (calRE.test(thisCal.form[thisCal.field].value)) {
  			return 0;
  		}
  		else {
  			return 1;
  		}
  	}
  	else {
  		return 2;
  	}
  }
  
  /**
   * getCurrentDate: 
   */
  function getCurrentDate() {
  	var date=calFormat, d = new Date();
  	date = date.replace(/yyyy/i, d.getFullYear());
  	date = date.replace(/mm/i, get2Digits(d.getMonth()+1));
  	date = date.replace(/dd/i, get2Digits(d.getDate()));	
  	return date;
  }
  
  /**
   * compareDates: 
   *
   * @param date1: 
   * @param date2:  
   */
  function compareDates(date1, date2) {
  	var calRE = getFormat();
  	var d1, d2;	
  	if (calRE.test(date1)) {
  		d1 = getNumbers(date1);
  	}
  	else {
  		d1 = getNumbers(getCurrentDate());
  	}	
  	if (calRE.test(date2)) {
  		d2 = getNumbers(date2);
  	}
  	else {
  		d2 = getNumbers(getCurrentDate());
  	}	
  	var dStr1 = d1[0] + "" + d1[1] + "" + d1[2];
  	var dStr2 = d2[0] + "" + d2[1] + "" + d2[2];	
  	if (dStr1 == dStr2) {
  		return 0;
  	}
  	else if (dStr1 > dStr2) {
  		return 1;
  	}
  	else {
  		return -1;
  	}
  }
  
  /**
   * getNumbers: 
   *
   * @param date: 
   */
  function getNumbers(date) {
  	var calRE = getFormat();
  	var y, m, d;	
  	if (calRE.test(date)) {
  		var yIdx = calFormat.search(/yyyy/i);
  		var mIdx = calFormat.search(/mm/i);
  		var m3Idx = calFormat.search(/mon/i);
  		var dIdx = calFormat.search(/dd/i);	
  		y=date.substring(yIdx,yIdx+4);
  		if (mIdx != -1) {
  			m=date.substring(mIdx,mIdx+2);
  		}
  		else {
  			var mm=getMonthFromName(date.substring(m3Idx,m3Idx+3))+1;
  			m=(mm<10)?("0"+mm):(""+mm);
  		}
  		d=date.substring(dIdx,dIdx+2);	
  		return new Array(y,m,d);
  	}
  	else {
  		return new Array("", "", "");
  	}
  }  


  ///====================================================================================
  
  function calBody(d,day,name) 
  {
	// Pintamos estilos y cuerpo html
	var s =	'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\n';
  	s +=	'<html xmlns="http://www.w3.org/1999/xhtml">\n';
	s += 	'	<head>\n';
	s += 	'		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />\n';
	s += 	'		<title>'+currentCal.title+'</title>\n';
	s += 	'		<style type="text/css">\n';
	s += 	'			<!--\n';
	s += 	'			* {\n';
	s += 	'				margin:0px;\n';
	s += 	'				padding:0px;\n';
	s += 	'			}\n';
	s += 	'			ul {\n';
	s += 	'				width:168px;\n';
	s += 	'				margin:1px;\n';
	s += 	'			}\n';
	s += 	'			ul li {\n';
	s += 	'				font-family: Verdana, Arial;\n';
	s += 	'				font-size:10px;\n';
	s += 	'				list-style-type:none;\n';
	s += 	'				background-color:#E5FAE5;\n';
	s += 	'				float:left;\n';
	s += 	'				color: #999999;\n';
	s += 	'				width:20px;\n';
	s += 	'				display:inline;\n';
	s += 	'				text-align:center;\n';
	s += 	'				margin:1px;\n';
	s += 	'				padding-bottom:4px;\n';
	s += 	'				padding-top:3px;\n';
	s += 	'				padding-left:1px;\n';
	s += 	'				padding-right:1px;\n';
	s += 	'			}\n';
	s += 	'			a {\n';
	s += 	'				color:#333333;\n';
	s += 	'			}\n';
	s += 	'			a:hover {\n';
	s += 	'				font-weight:bold;\n';
	s += 	'			}\n';
	s += 	'			.dia {\n';
	s += 	'				background-color:#4B769E;\n';
	s += 	'				color:#FFF;\n';
	s += 	'				font-size:10px;\n';
	s += 	'			}\n';
	s += 	'			.mes {\n';
	s += 	'				background-color:#4B769E;\n';
	s += 	'				color:#FFF;\n';
	s += 	'				font-size:10px;\n';
	s += 	'				width:164px;\n';
	s += 	'			}\n';
	s += 	'			.mes a:hover {\n';
	s += 	'				font-weight:normal;\n';
	s += 	'			}\n';
	s += 	'			.mes img {\n';
	s += 	'				margin-left:5px;\n';
	s += 	'				margin-right:5px;\n';
	s += 	'			}\n';
	s += 	'			.hoy {\n';
	s += 	'				background-color:#567B57;\n';
	s += 	'			}\n';
	s += 	'			.hoy a {\n';
	s += 	'				color:#FFF;\n';
	s += 	'			}\n';
	s += 	'			.proximos {\n';
	s += 	'				background-color:#E5FAE5;\n';
	s += 	'			}\n';
	s += 	'			.anteriores {\n';
	s += 	'				background-color:#FAE5E5;\n';
	s += 	'			}\n';
	s += 	'			.otro_mes {\n';
	s += 	'				background-color:#D8E9FF;\n';
	s += 	'			}\n';
	s += 	'			.cerrar {\n';
	s += 	'				font-size:10px;\n';
	s += 	'				color:#FFF;\n';
	s += 	'			}\n';
	s += 	'			-->\n';
	s += 	'		</style>\n';
	s += 	'	</head>\n';
	s +=	'	<body>\n';
	s +=	'		<ul>\n';
	
	// Pintamos los controladores de los meses
  	var yy		= d.getFullYear();
  	var mm		= yxMonthsLarge[d.getMonth()];
	s +=	'			<li class="mes">\n';
	if ((d.getMonth() != (new Date()).getMonth()) || (d.getFullYear() != (new Date()).getFullYear())){ // Estamos mostrando el mes actual
		s +=	'			<a href="javascript:window.opener.prepMonth('+d.getMonth()+',\''+name+'\')"><img src="http://www.getx.com/solNew/img/iconos/mes_anterior.gif" border="0"/></a>\n';
	}
	s +=	'				' + mm + ' ' + yy + '\n';
	if ((d.getMonth() != 11) || (d.getFullYear() < ((new Date()).getFullYear() + 1))){ // Estamos mostrando mas de 2 aos del ao actual
		s +=	'			<a href="javascript:window.opener.nextMonth('+d.getMonth()+',\''+name+'\')"><img src="http://www.getx.com/solNew/img/iconos/mes_siguiente.gif" border="0"/></a>\n';
	}
	s +=	'			</li>\n';
	
	// Pintamos los nombres de los dias
	for (var i=0; i<7; i++) {
		s +=	'			<li class="dia">'+yxDays[i].substring(0,1)+'</li>\n';
  	}
	
	// Pintamos los dias
  	var dayCount=1;
  	var fd=firstDay(d);
  	var ld=lastDay(d);
	var ld_pm=lastDayPreMounth(d);
	var dd_nm=1;
	var mm_am=(new Date()).getMonth();
  	if (fd == 0) {
  		fd = 7;
  	}
  	for (var i=0; i<6; i++) {
		for (var j=0; j<7; j++) {
			if (i*7+j<fd || dayCount>ld) {
				if (i*7+j<fd){ // Dia anterior al actual
					// Calculamos los valores del mes que estamos pintando (mes anterior al que pintamos en la pantalla)
					var yy_mp=d.getFullYear();
					if (d.getMonth() == 0) yy_mp--;
					var mm_mp=d.getMonth()-1;
					if (mm_mp == -1) mm_mp=11;
					var dd_mp=ld_pm-(fd-j-1);
					if (d.getFullYear() < (new Date()).getFullYear()){ // Estamos mostrando un ao anterior al actual
						s +='			<li class="otro_mes">'+dd_mp+'</li>\n';
					}
					if (d.getFullYear() == (new Date()).getFullYear()){// Estamos mostrando el mismo ao
						if (d.getMonth() <= mm_am){ // Estamos mostrando un mes anterior al mes actual
							s +='			<li class="otro_mes">'+dd_mp+'</li>\n';
						}
						if (d.getMonth() == (mm_am+1)){ // Estamos mostrando el mes posterior al actual (mesActual+1)
							if (dd_mp < (new Date()).getDate()){ // Dia anterior al dia de hoy
								s +='			<li class="otro_mes">'+dd_mp+'</li>\n';
							} else { // El dia es posterior al dia de hoy
								s +='			<li class="otro_mes"><a href="javascript:window.opener.pickFullDate('+dd_mp+','+mm_mp+','+yy_mp+')">'+dd_mp+'</a></li>\n';
							}
						}
						if (d.getMonth() > (mm_am+1)){ // Estamos mostrando mas de un mes posterior al actual
							s +='			<li class="otro_mes"><a href="javascript:window.opener.pickFullDate('+dd_mp+','+mm_mp+','+yy_mp+')">'+dd_mp+'</a></li>\n';
						}
					}
					if (d.getFullYear() > (new Date()).getFullYear()){ // Estamos mostrando un ao posterior al actual
						s +='			<li class="otro_mes"><a href="javascript:window.opener.pickFullDate('+dd_mp+','+mm_mp+','+yy_mp+')">'+dd_mp+'</a></li>\n';
					}
				} else { // Dia posterior al actual
					// Calculamos los valores del mes que estamos pintando (mes posterior al que pintamos en la pantalla)
					var yy_nm=d.getFullYear();
					if (d.getMonth() == 11) yy_nm++;
					var mm_nm=d.getMonth()+1;
					if (mm_nm == 12) mm_nm=0;
					if (d.getFullYear() < (new Date()).getFullYear()){ // Estamos mostrando un ao anterior al actual
						s +='			<li class="otro_mes">'+dd_nm+'</li>\n';
					}
					if (d.getFullYear() == (new Date()).getFullYear()){ // Estamos mostrando el ao actual
						if (d.getMonth() < (mm_am-1)){ // Estamos mostrando mas de un mes anterior al actual
							s +='			<li class="otro_mes">'+dd_nm+'</li>\n';
						}
						if (d.getMonth() == (mm_am-1)){ // Estamos mostrando el mes anterior actual (mesActual-1)
							if (dd_nm < (new Date()).getDate()){ // Dia anterior al dia de hoy
								s +='<li class="otro_mes">'+dd_nm+'</li>\n';
							} else { // El dia es posterior al dia de hoy
								s +='<li class="otro_mes"><a href="javascript:window.opener.pickFullDate('+dd_nm+','+mm_nm+','+yy_nm+')">'+dd_nm+'</a></li>\n';
							}
						}
						if (d.getMonth() >= mm_am){ // Estamos mostrando un mes posterior al actual
							s +='			<li class="otro_mes"><a href="javascript:window.opener.pickFullDate('+dd_nm+','+mm_nm+','+yy_nm+')">'+dd_nm+'</a></li>\n';
						}
					}
					if (d.getFullYear() > (new Date()).getFullYear()){ // Estamos mostrando un ao posterior al actual
						//s +='			<li class="otro_mes"><a href="javascript:window.opener.pickFullDate('+dd_nm+','+mm_nm+','+yy_nm+')">'+dd_nm+'</a></li>\n';
						if (d.getMonth() != 11){
							s +='			<li class="otro_mes"><a href="javascript:window.opener.pickFullDate('+dd_nm+','+mm_nm+','+yy_nm+')">'+dd_nm+'</a></li>\n';
						} else {
							s +='			<li class="otro_mes">'+dd_nm+'</li>\n';
						}
					}
					dd_nm++;
				}
			} else {
				var myDate	= calFormat;
				myDate 		= myDate.replace(/yyyy/i, cY);
				myDate 		= myDate.replace(/mm/i, get2Digits(cM+1));
				myDate 		= myDate.replace(/MON/, yxMonths[cM].substring(0,3).toUpperCase());
				myDate 		= myDate.replace(/Mon/i, yxMonths[cM].substring(0,3));
				myDate 		= myDate.replace(/dd/i, get2Digits(dayCount));
				myDate 		= myDate.replace(/DAY/, getDayName(cY,cM,dayCount).toUpperCase());
				myDate 		= myDate.replace(/day/i, getDayName(cY,cM,dayCount));
				valorfecha	= compareDates(myDate, diactual());
				if (valorfecha==-1) {
					s+='			<li>'+(dayCount++)+'</li>\n';
				}
				if (valorfecha==0) {
					s+='			<li class="hoy"><a href="javascript:window.opener.pickDate('+dayCount+')">'+(dayCount++)+'</a></li>\n';
				}
				if (valorfecha==1) {
					s+='			<li><a href="javascript:window.opener.pickDate('+dayCount+')">'+(dayCount++)+'</a></li>\n';
				}
			}
		}
	}
	// Pintamos el link de cerrar el calendario
	s +=	'			<li class="mes"><a class="cerrar" href="javascript:window.opener.hideCal()">'+yxLinks[1]+'</a></li>\n';
	// Cerramos la pagina
	s +=	'		</ul>\n';
	s += 	'	</body>\n';
	s +=	'</html>\n';
	return s;
  }
  
  /**
  * prepMonth: Decrementa un mes 
  *
  * @param m: mes 
  * @param name: Nombre del calendario
  */ 
  function prepMonth(m,name) {
  	cM = m-1;
  	if (cM<0){ 
  		cM=11; cY--; 
  	}
  	var nd	= new Date(cY,cM,1);
  	changeCal(nd, name);
  }

  /**
  * nextMonth: Incrementa un mes 
  *
  * @param m: mes 
  * @param name: Nombre del calendario
  */   
  function nextMonth(m, name) {
  	cM = m+1;
  	if (cM>11) { 
  		cM=0; cY++;
  	}
  	var nd	= new Date(cY,cM,1);
  	changeCal(nd,name);
  }
  
  /**
  * changeCal: Cambio el calendario
  *
  * @param d: dia
  * @param name: Nombre del calendario
  */     
  function changeCal(d, name) {
  	var dd = 0;	
  	if (currentCal != null) {
  		var calRE = getFormat();	
  		if (currentCal.form[currentCal.field].value!="" && calRE.test(currentCal.form[currentCal.field].value)) {
  			var cd = getDateNumbers(currentCal.form[currentCal.field].value);
  			if (cd[0] == d.getFullYear() && cd[1] == d.getMonth()) {
  				dd=cd[2];
  			}
  		}
  		else {
  			var cd = new Date();
  			if (cd.getFullYear() == d.getFullYear() && cd.getMonth() == d.getMonth()) {
  				dd=cd.getDate();
  			}
  		}
  	}	
  	var myCalendar= calBody(d,dd,name);	
  	calWin.document.open();
  	calWin.document.write(myCalendar);
  	calWin.document.close();
  }
  
  /**
  * pickDate: 
  *
  * @param d: Dia pulsado
  */  
  function pickDate(d) { 
  	hideCal();	
  	var myDate	= calFormat;
  	myDate 		= myDate.replace(/yyyy/i, cY);
  	myDate 		= myDate.replace(/mm/i, get2Digits(cM+1));
  	myDate 		= myDate.replace(/MON/, yxMonths[cM].substring(0,3).toUpperCase());
  	myDate 		= myDate.replace(/Mon/i, yxMonths[cM].substring(0,3));
  	myDate 		= myDate.replace(/dd/i, get2Digits(d));
  	myDate 		= myDate.replace(/DAY/, getDayName(cY,cM,d).toUpperCase());
  	myDate 		= myDate.replace(/day/i, getDayName(cY,cM,d));
  	var arr_fecha	= myDate.split("-");		
  	currentCal.form[currentCal.field_d].value	= arr_fecha[0];
  	currentCal.form[currentCal.field].value		= arr_fecha[1]+"-"+arr_fecha[2];	  			  	 
  	currentCal.form[currentCal.field].focus();
  } 
  
  /**
  * pickDatePreMounth: 
  *
  * @param d: Dia pulsado
  */  
  function pickFullDate(d, m, y) { 
  	hideCal();	
  	var myDate	= calFormat;
  	myDate 		= myDate.replace(/yyyy/i, y);
  	myDate 		= myDate.replace(/mm/i, get2Digits(m+1));
  	myDate 		= myDate.replace(/MON/, yxMonths[m].substring(0,3).toUpperCase());
  	myDate 		= myDate.replace(/Mon/i, yxMonths[m].substring(0,3));
  	myDate 		= myDate.replace(/dd/i, get2Digits(d));
  	myDate 		= myDate.replace(/DAY/, getDayName(y,m,d).toUpperCase());
  	myDate 		= myDate.replace(/day/i, getDayName(y,m,d));
  	var arr_fecha	= myDate.split("-");		
  	currentCal.form[currentCal.field_d].value	= arr_fecha[0];
  	currentCal.form[currentCal.field].value		= arr_fecha[1]+"-"+arr_fecha[2];	  			  	 
  	currentCal.form[currentCal.field].focus();
  }  
  
  /**
   * markClick: 
   *
   * @param e:
   */   
  function markClick(e) {
  	if (isIE || isOpera6) {
  		winX=event.screenX;
  		winY=event.screenY;
  	}
  	else if (isN4 || isN6) {
  		winX=e.screenX;
  		winY=e.screenY;	
  		document.routeEvent(e);
  	}
  	return true;
  }
  
  function showCal(name,dia,mes,ano){
  	showCal(name);
  	}
  /**
   * showCal: Muestra el calendario
   *
   * @param name: Nombre del calendario
   */
  function showCal(name) {
	
  	nameCalendar 	= name;
  	var lastCal	= currentCal;
  	var d		= new Date()
  	var hasCal	= false;	
  	currentCal 	= findCalendar(name);	
  	if (currentCal != null && currentCal.form != null && currentCal.form[currentCal.field]) {
  		var calRE = getFormat();

		if (currentCal.form[currentCal.field].value!="" ) {
  			var cd = getDateNumbers(currentCal.form[currentCal.field_d].value + "-"+ currentCal.form[currentCal.field].value);
  			d=new Date(cd[0],cd[1],cd[2]);	
  			cY=cd[0];
  			cM=cd[1];
  			dd=cd[2];
  		}
  		else {
  			cY=d.getFullYear();
  			cM=d.getMonth();
  			dd=d.getDate();
  		}
  		var myCalendar = calBody(d,dd, name);	
  		if (calWin != null && !calWin.closed) {
  			hasCal=true;
  			calWin.moveTo(winX+calOffsetX,winY+calOffsetY);
  		}	
  		if (!hasCal) {
  			if (isIE || isOpera6) {
  				calWin=window.open("","cal","toolbar=0,width="+calWidth+",height="+calHeight+",left="+(winX+calOffsetX)+",top="+(winY+calOffsetY));
  			}
  			else {
  				calWin=window.open("","cal","toolbar=0,width="+calWidth+",height="+calHeight+",screenx="+(winX+calOffsetX)+",screeny="+(winY+calOffsetY));
  			}
  		}	
  		calWin.document.open();
  		calWin.document.write(myCalendar);
  		calWin.document.close();	
  		calWin.focus();
  	}
  	else {
  		if (currentCal == null) {
  			window.status = "Calendar ["+name+"] not found.";
  		}
  		else if (!currentCal.form) {
  			window.status = "Form ["+currentCal.formName+"] not found.";
  		}
  		else if (!currentCal.form[currentCal.field]) {
  			window.status = "Form Field ["+currentCal.formName+"."+currentCal.field+"] not found.";
  		}	
  		if (lastCal != null) {
  			currentCal = lastCal;
  		}
  	}
  }
  

  // ------
  
  
  if (isN4 || isN6) {
    document.captureEvents(Event.CLICK);
  }
  document.onclick=markClick;
  
