var CAL_MSG001 = "There are no rates for this Day";
var CAL_MSG002 = "Not availability were found at this time";
var CAL_MSG003 = "Too much items at this time";
var CAL_MSG004 = "Not available day";
var CAL_MSG005 = "Too much items for this day";
var CAL_MSG006 = "Please select at least one item";
var CAL_MSG007 = "Select at least [QT] [PRICENAME] for this day";
var CAL_MSG008 = "Too much items for [PRICENAME] by day";
var CAL_MSG009 = "Please select a Date Range";
var CAL_MSG010 = "-- Apply all Day --";
var CAL_MSG011 = "There is No Rates";
var CAL_MSG012 = "Daily ";
var CAL_MSG013 = "Rate";
var CAL_MSG014 = "Est. Total : ";
var CAL_MSG015 = "Not Available";

var srcRs = "";

var sPricesCommon = function(idPrice,idPriceType,price,priceName,quantity,min,max){
	this.idPrice = idPrice;
	this.idPriceType = idPriceType;
	this.priceName = priceName;
	this.price = price;	
	this.quantity = quantity;
	this.min = min;
	this.max = max;		
};

var sDatesCommon = function(day){
	this.day = day;	
	var idRate;	
	var isSpecialDay;
	var isByTime;
	var availablesByEventDay;
	var availablesByRateTime;
	var totalDay;
	var totalSelectedItems;
	var maxTicketsByEvent;
	this.prices = new Array();	// = new sPricesCommon(...	
	/*Faltan campos para indicar por que no hay dispo, reglas de dispo etc*/	
};

var cCommon = function(idRenderTimes,idRenderPrices,idRenderDays,idRenderSummary,idCommand,idCache, rRange,rSingle,chkRequiredID){
	var pId = 0; //Id de la propiedad
	var aId = 0; //Id de actividad
	var eId = 0; // Id de evento
	var lId = 0; //Id de idioma
	var rT = 0; //Tipos de tarifa
	var dsAvail = null; // Dataset de disponibilidad
	var selDates = null; //Array de dias seleccionados		
	var sDates = null; //Array de dias seleccionados, con valores adicionales		
	this.idRenderTimes = idRenderTimes;
	this.idRenderPrices = idRenderPrices;
	this.idRenderDays = idRenderDays;	
	this.idRenderSummary = idRenderSummary;
	this.idCommand = idCommand;
	this.idCache = idCache;
	
	//Agregados rRange,rSingle
	var rbRange =  rRange;
	var rbSingle = rSingle;
	
	this.chkRequired = document.getElementById(chkRequiredID);
};

if (typeof calendarHandler == "undefined") {
    var calendarHandler = {};
}

calendarHandler = function(data){
	this.cData = data;
	this.cData.sDates = new Array();
	
	if(typeof this.cData.selDates != "undefined"){	
		for(var i=0;i<this.cData.selDates.length;++i){
			var sDateComm = new sDatesCommon(this.cData.selDates[i]); 
			sDateComm.idRate=0;		 	
			sDateComm.isSpecialDay=0;
			sDateComm.isByTime=false;
			sDateComm.availablesByEventDay=0;
			sDateComm.availablesByRateTime=0;
			sDateComm.totalDay=0;
			sDateComm.totalSelectedItems=0;
			sDateComm.maxTicketsByEvent=0;
		
			this.cData.sDates.push(sDateComm);
		}				
	}
};

calendarHandler.idxEvents = 1;
calendarHandler.idxEventsDay = 3;
calendarHandler.idxRates = 4;
calendarHandler.idxPriceTypes = 5;
calendarHandler.idxActivityCompany = 0;
calendarHandler.idxHoursAvailability = 6;

calendarHandler.prototype = {
	cData : null,
	before : function(date, compareTo) {
		var ms = compareTo.getTime();
		if (date.getTime() < ms) {
			return true;
		} else {
			return false;
		}
	},
	after : function(date, compareTo) {
		var ms = compareTo.getTime();
		if (date.getTime() > ms) {
			return true;
		} else {
			return false;
		}
	},
	between : function(date, dateBegin, dateEnd) {
		if (this.after(date, dateBegin) && this.before(date, dateEnd) || (date.getTime() == dateBegin.getTime() || date.getTime() == dateEnd.getTime() )) {
			return true;
		} else {
			return false;
		}
	},
	getTimeString : function(date){
		if(null==date) return "";
		var hrs, min, time;
		hrs = date.getHours();
		time = (hrs >=12) ? " PM":" AM";
		hrs = (hrs > 12) ? hrs-12:(hrs==0)?12:hrs;
		min = date.getMinutes();
		min = (min<10) ? "0"+min:min;
		return hrs + ":" + min + time;	
	},
	getDistinctTime : function(ds, sd){		
		var distRows = new Array();
		var rateRows = ds.value.Tables[calendarHandler.idxRates].Rows;
		var iRows = rateRows.length;
		for(var i = 0; i<iRows;++i){			
			//Selected dates
			var sD1 = sd[0]; 
			var sD2 = sd[sd.length-1];
			//Rate dates
			var rD1 = rateRows[i].beginDate;
			var rD2 = rateRows[i].endDate;
			if(this.between(rD1,sD1,sD2) || this.between(rD2,sD1,sD2) || (this.between(sD1,rD1,rD2) && this.between(sD2,rD1,rD2))){			
				var strTime = this.getTimeString(rateRows[i].time);				
				var exists = distRows.join(",").indexOf(strTime);
				if (exists<0 || strTime==""){
					distRows.push(strTime);				
				}						
			}
		}
		return distRows;
	},
	getRatesByTime: function (sTime,ds){
		var rRows = new Array();
		var rateRows = ds.value.Tables[calendarHandler.idxRates].Rows;
		var iRows = rateRows.length;	
		for(var i = 0; i<iRows;++i){
			var strTime = this.getTimeString(rateRows[i].time);
			if(strTime == sTime){
				rRows.push(rateRows[i]);
			}
		}
		return rRows;	
	},
	getPriceTypesByRates: function (rRows,ds){
		var priceTypeRows = ds.value.Tables[calendarHandler.idxPriceTypes].Rows;
		var cPriceTypes = new Array();
		for(var i = 0; i<rRows.length;++i){
			for(var j = 0; j<priceTypeRows.length;++j){
				if(rRows[i].idRate == priceTypeRows[j].idRate)	
					cPriceTypes.push(priceTypeRows[j]);
			}			
		}
		return cPriceTypes;
	},	
	getPriceTypesByIdRate: function (idRate,priceRows,priceTypeRows){		
		var cPriceTypes = new Array();		
			for(var j = 0; j<priceRows.length;++j){
				if(idRate == priceRows[j].idRate){
					for(var i = 0;i<priceTypeRows.length;++i){
						if(priceRows[j].idTypePrice == priceTypeRows[i].idTypePrice)
							cPriceTypes.push(priceRows[j]);	
					}										
				}					
			}					
		return cPriceTypes;
	},
	getDistinctPriceType: function(tpR){
		var tpRows = new Array();
		for(var i = 0;i<tpR.length;++i){
			tpRows.push(tpR[i]);
		}						
		var distRows = new Array();
		var iRows = tpRows.length;	
		for(var i = 0; i<iRows;++i){
			if(tpRows[i].deleted!=0){			
				distRows.push(tpRows[i]);
				for(var j = i+1; j<iRows;++j){
					if(tpRows[i].idTypePrice == tpRows[j].idTypePrice){	
						if(distRows[i].minAge > tpRows[j].minAge)
							distRows[i].minAge = tpRows[j].minAge;							
						if(distRows[i].maxAge < tpRows[j].maxAge)
							distRows[i].maxAge = tpRows[j].maxAge;
						tpRows[j].deleted = 0;					
					}
				}
			}
		}
		return distRows;	
	},	
	getCommonPriceTypes: function (tpRows){
		var tpRowsCommon = new Array();
		var iRows = tpRows.length;	
		for(var i=0;i<iRows;++i){			
			for(var j=0;j<iRows;++j){				
				if(tpRows[i].idRate!=tpRows[j].idRate && tpRows[i].idTypePrice == tpRows[j].idTypePrice){
					tpRowsCommon.push(tpRows[i]);
				}						
			}			
		}
		if(tpRowsCommon.length==0){
			for(var i=0;i<iRows;++i){
				tpRowsCommon.push(tpRows[i]);
			}				
		}else{
			tpRowsCommon = this.getDistinctPriceType(tpRowsCommon);
		}
		return tpRowsCommon;
	},
	getRateRowByDay:function(day,rateRows){
		var row = null;
		for(var i = 0; i<rateRows.length;++i){			
			//Rate dates
			var rD1 = rateRows[i].beginDate;
			var rD2 = rateRows[i].endDate;
			if(this.between(day,rD1,rD2)){
				row = rateRows[i];
			}
		}
		return row;		
	},
	isSpecialDay : function(day,strBits){
		return (strBits.charAt(day.getDay()) == '1')
	},
	getRowsAvailByEvent: function(idEvent, ds){
		var rEventsAvail = new Array();
		var rDaysEvents = ds.value.Tables[calendarHandler.idxEventsDay].Rows;
		for(var j = 0; j<rDaysEvents.length;++j){
			if(idEvent == rDaysEvents[j].idEvent){
				rEventsAvail.push(rDaysEvents[j]);
			}					
		}					
		return rEventsAvail;
	},
	getRowsAvailByRate: function(idRate, ds){
		var rRatesAvail = new Array();
		var rHoursAvailability = ds.value.Tables[calendarHandler.idxHoursAvailability].Rows;
		for(var j = 0; j<rHoursAvailability.length;++j){
			if(idRate == rHoursAvailability[j].idRate){
				rRatesAvail.push(rHoursAvailability[j]);
			}					
		}					
		return rRatesAvail;	
	},	
	getRowAvailEventByDay: function(idEvent,day,ds){
		var rEvent = null;
		var rDaysEvents = ds.value.Tables[calendarHandler.idxEventsDay].Rows;
		for(var i=0; i<rDaysEvents.length;++i){
			var cDay = rDaysEvents[i].day;
			var cDate = new Date(cDay.split("/")[0],cDay.split("/")[1]-1,cDay.split("/")[2]);
			var selDay= new Date(day);
			selDay.setHours(0);
			selDay.setMinutes(0);
			if(idEvent == rDaysEvents[i].idEvent &&  cDate.getTime() == selDay.getTime()){
				rEvent = rDaysEvents[i];
				return rEvent;
			}
				
		}
		return rEvent;
	},
	getRowAvailRateByDay: function(idRate,day,ds){
		var rHoursAvailability = ds.value.Tables[calendarHandler.idxHoursAvailability].Rows;
		var rRate = null;
		for(var i=0; i<rHoursAvailability.length;++i){
			var cDate = rHoursAvailability[i].day;
			if(idRate == rHoursAvailability[i].idRate && cDate.getTime() == day.getTime()){
				rRate = rHoursAvailability[i];
				return rRate;
			}				
		}
		return rRate;
	},	
	setDayRates: function(rateRows, pricesRows, typePriceRows, strTime){	
		if (this.cData.dsAvail.value.Tables[calendarHandler.idxActivityCompany].Rows.length>0){
			this.cData.maxTicketsByEvent = this.cData.dsAvail.value.Tables[calendarHandler.idxActivityCompany].Rows[0].maxTickets;
		}
		
		for(var i = 0; i<this.cData.sDates.length;++i){
			if(strTime!='')
			{
				var dHour;
				var dMinutes;
				var difHour;
				if(strTime.indexOf('AM')!=-1)
				{
					difHour=0;
				}
				else
				{
					difHour=12;
				}
				
				dHour=eval(strTime.substring(0,strTime.indexOf(':')))+difHour;
				dMinutes=eval(strTime.substring(strTime.indexOf(':')+1,strTime.indexOf(':')+3));
				this.cData.sDates[i].day.setHours(dHour);
				this.cData.sDates[i].day.setMinutes(dMinutes);			
			}
			/* Verificamos si el dia esta entre una tarifa */
			var rRate = this.getRateRowByDay(this.cData.sDates[i].day, rateRows);
			if(null != rRate){
				this.cData.sDates[i].idRate = rRate.idRate;
				this.cData.sDates[i].isSpecialDay = this.isSpecialDay(this.cData.sDates[i].day,rRate.days);
				if(null != rRate.time)
					this.cData.sDates[i].isByTime = true;
				else
					this.cData.sDates[i].isByTime = false;
				
				/*Asignamos la disponibilidad*/
				var rowEventAvail = this.getRowAvailEventByDay(rRate.idEvent,this.cData.sDates[i].day, this.cData.dsAvail);
				if(null != rowEventAvail){
					this.cData.sDates[i].availablesByEventDay = rowEventAvail.availables;
				}				
				var rowRateAvail = this.getRowAvailRateByDay(rRate.idRate,this.cData.sDates[i].day, this.cData.dsAvail);
				if(null != rowRateAvail){
					this.cData.sDates[i].availablesByRateTime = rowRateAvail.availables;
				}
				
				//Traemos los precios, filtrados por filtro de precio
				var aPrices  = this.getPriceTypesByIdRate(this.cData.sDates[i].idRate,pricesRows,typePriceRows)			
				for(var j=0; j<aPrices.length;++j){
					var priceAmount = (this.cData.sDates[i].isSpecialDay) ? aPrices[j].AltpriceSpecial:aPrices[j].Altprice;
					var price = new sPricesCommon(aPrices[j].idPrice,aPrices[j].idTypePrice,priceAmount,aPrices[j].namePrice,0,aPrices[j].minAge,aPrices[j].maxAge);
					
					this.cData.sDates[i].prices.push(price);
					//Obtener availables de tarifa o hora										
				}
									
			}else{
				this.cData.sDates[i].idRate=0;
			}			
		}
	},
	setSelectedItems: function(){
		var cmbPrices = document.getElementsByName("_cmbPrice_" + this.cData.eId);
		for(i=0;i<this.cData.sDates.length;++i){
			var totalDay = 0.0;
			var totalSelectedItems = 0;
			var prices = this.cData.sDates[i].prices;
			for(j=0;j<prices.length;++j){
				for(k=0;k<cmbPrices.length;k++){
					if(cmbPrices[k].getAttribute("tp") == prices[j].idPriceType){
						var selected = parseInt(cmbPrices[k].options[cmbPrices[k].selectedIndex].value);
						if(selected>0){
							prices[j].quantity = selected;
							totalDay += prices[j].price * prices[j].quantity;
							totalSelectedItems += prices[j].quantity;
						}else{
							prices[j].quantity = 0;
						}						
					}
				}
			}
			this.cData.sDates[i].totalDay = totalDay;
			this.cData.sDates[i].totalSelectedItems = totalSelectedItems;
		}
	}
};

calendarHandler.prototype.render = function(){
	//alert('calendarHandler.prototype.render');
	this.renderTimes();
	this.renderPriceTypes();	
};

calendarHandler.prototype.renderTimes = function(){	
	var html = "";
	var rows = this.getDistinctTime(this.cData.dsAvail,this.cData.selDates);
	var iRows = rows.length;
	//alert(iRows);
	if(0 == iRows){		
		document.getElementById(this.cData.idRenderTimes).innerHTML = html;	
	}
	else{
		html = "<SELECT id ='_cmbTime" + this.cData.eId + "' onchange='renderCalendarPrices(cComm_" + this.cData.eId + ")' >";	
		for(var i = 0; i<iRows;++i){			
			var time = CAL_MSG010;
			if(rows[i]!=""){
				time = rows[i];				
			}
			html = html + "<OPTION value='" + rows[i] + "'>" + time + "</OPTION>";			
		}				
		html = html + "</SELECT>";					
		document.getElementById(this.cData.idRenderTimes).innerHTML = html;		
	}	
};

calendarHandler.prototype.reloadPriceTypes = function(){
	var cmbTimes = document.getElementById("_cmbTime" + this.cData.eId);
	if(!cmbTimes){
		document.getElementById(this.cData.idRenderPrices).innerHTML = CAL_MSG011;
		this.RenderPrices(new Array());
	}else{
			if (cmbTimes.selectedIndex!=-1){		
				var strTime = cmbTimes.options[cmbTimes.selectedIndex].value;
				var rRows = this.getRatesByTime(strTime, this.cData.dsAvail);
				
				var tpRows = this.getPriceTypesByRates(rRows,this.cData.dsAvail)
				var tpRowsCommon = this.getCommonPriceTypes(tpRows);
				
				this.setDayRates(rRows, tpRows, tpRowsCommon, strTime);				
			}else{
					document.getElementById(this.cData.idRenderPrices).innerHTML = "";
				}	
		}
};

calendarHandler.prototype.renderPriceTypes = function(){
	var cmbTimes = document.getElementById("_cmbTime" + this.cData.eId);
	if(!cmbTimes){
		document.getElementById(this.cData.idRenderPrices).innerHTML = CAL_MSG011;
		this.RenderPrices(new Array());
	}else{
			if (cmbTimes.selectedIndex!=-1){		
				var strTime = cmbTimes.options[cmbTimes.selectedIndex].value;
				var rRows = this.getRatesByTime(strTime, this.cData.dsAvail);
				
				var tpRows = this.getPriceTypesByRates(rRows,this.cData.dsAvail)
				var tpRowsCommon = this.getCommonPriceTypes(tpRows);
				
				this.setDayRates(rRows, tpRows, tpRowsCommon,strTime);
				this.RenderPrices(tpRowsCommon);
			}else{
					document.getElementById(this.cData.idRenderPrices).innerHTML = "";
				}	
		}
};

calendarHandler.prototype.RenderPrices = function (tpRows){

		var tblPrices = "<br/><TABLE cellSpacing='0' cellPadding='1' width='' border='0'>";	
		for(var j=0;j<tpRows.length;++j){
			tblPrices = tblPrices + "<TR><TD>";
			tblPrices = tblPrices + "<span>" + tpRows[j].namePrice + "</span>"; 
			tblPrices = tblPrices + "</TD><TD>";									
			tblPrices = tblPrices + "<SELECT name = '_cmbPrice_" + this.cData.eId + "' tp = " + tpRows[j].idTypePrice + " onmousewheel='return false;' style='' onchange='renderCalendarDays(cComm_" + this.cData.eId + ")'>";
			for(var k = tpRows[j].minAge; k <= tpRows[j].maxAge; k++)
				tblPrices = tblPrices + "<OPTION value=" + k + ">" + k + "</OPTION>";
			tblPrices = tblPrices + "</SELECT>";
			tblPrices = tblPrices + "</TD></TR>";				
		}		
		tblPrices = tblPrices + "</TABLE>";
		document.getElementById(this.cData.idRenderPrices).innerHTML = tblPrices;
		
		this.renderDays();
			
};
   
calendarHandler.prototype.getErrorDay = function(selectedDate){
	var cErrMsg = new String('<span style="FONT-SIZE:9px;COLOR:red" title="[REPLACEMSG]">[NOTAVAIL]</span>');
	cErrMsg = cErrMsg.replace("[NOTAVAIL]",CAL_MSG015)
	
	//verificamos que exista tarifa
	if(selectedDate.idRate == 0)
		 return cErrMsg.replace("[REPLACEMSG]",CAL_MSG001);		

	/* verificamos que se seleccionaron los tickets */
	if(0 == selectedDate.totalSelectedItems )
		return "006"; //cErrMsgNoSelect.replace("[REPLACEMSG]",CAL_MSG006);		
	
	if(selectedDate.isByTime){
		/*Verificamos la disponibilidad por tarifa y por evento*/
		if(0 == selectedDate.availablesByRateTime){
			return cErrMsg.replace("[REPLACEMSG]",CAL_MSG002);
		}else
			if(selectedDate.availablesByRateTime<selectedDate.totalSelectedItems){
				return cErrMsg.replace("[REPLACEMSG]",CAL_MSG003);
			}
	}
			
	if(0 == selectedDate.availablesByEventDay){
		return cErrMsg.replace("[REPLACEMSG]",CAL_MSG004);
	}else{
		if(selectedDate.availablesByEventDay<selectedDate.totalSelectedItems||this.cData.maxTicketsByEvent<selectedDate.totalSelectedItems){
			return cErrMsg.replace("[REPLACEMSG]",CAL_MSG005);		
		}
	}
	

	var errTmp = new String() ;
	for(var i = 0;i<selectedDate.prices.length;++i){
		if(selectedDate.prices[i].quantity<selectedDate.prices[i].min){
			var msg = new String(CAL_MSG007);
			msg = msg.replace("[QT]",selectedDate.prices[i].quantity);
			msg = msg.replace("[PRICENAME]",selectedDate.prices[i].priceName);
			if(errTmp.length>0)
				errTmp = errTmp.concat("<br/>");
			errTmp = errTmp.concat(msg);
		}		
		if(selectedDate.prices[i].quantity>selectedDate.prices[i].max){
			var msg = new String(CAL_MSG008);
			msg = msg.replace("[QT]",selectedDate.prices[i].quantity);
			msg = msg.replace("[PRICENAME]",selectedDate.prices[i].priceName);
			if(errTmp.length>0)
				errTmp = errTmp.concat("<br/>");
			errTmp = errTmp.concat(msg);		
		}		
	}
	if(errTmp.length>0)
		return cErrMsg.replace("[REPLACEMSG]",errTmp.toString());
		
		
	
	return "";
}

calendarHandler.prototype.renderDays = function(){
	var specialRenderDay = new String('<span style="color:blue">[VALUE]</span>')

	var isValidSelecction = true;
	
	this.setSelectedItems();	
	var total = 0.0;
	//Renderear el arreglo 
	var html ="<div style='Width:145px'>";  //width=\"185px\"
	//html = html + "<TR>";
	html = html + "<span >" + CAL_MSG012 + "</span>";		
	html = html + "<span >" + CAL_MSG013 + "</span>";	
	//html = html + "<TD>DATOS TEMPORAL</TD>";	
	//html = html + "</TR>";
	html = html + "</Div>";
	html = html + "<Div style='OVERFLOW: auto; HEIGHT: 140px; Width:145px'>"; //  
	//html =  html + "<TABLE cellSpacing=\"1\" cellPadding=\"1\" border=\"0\">"; //width=\"185px\"
	var isError006 = true;
	var hasError = false;
	for(var i = 0; i<this.cData.sDates.length;++i){
		//html = html + "<TR>"
		html = html + "<Div style='float:left;' ><span style='float:left; width: 45%'> " + getShortDate(this.cData.sDates[i].day,this.cData.lId) + "</span>";				
		/*Verificamos si mostramos el mensaje de disponibilidad*/
		var err = this.getErrorDay(this.cData.sDates[i]);
		//alert(err);
		var priceRate = this.cData.sDates[i].totalDay;
		var strPriceRate="";
		if (this.cData.sDates[i].isSpecialDay)
			{
				if (eval(priceRate)>0)
					strPriceRate ="&nbsp;$" + specialRenderDay.replace("[VALUE]",CurrencyFormatted(priceRate));
			}
		else
			{
			if (eval(priceRate)>0)			
				strPriceRate = "&nbsp;$" + CurrencyFormatted(priceRate);
			}
		
		html = html + "<span style='float:Right; width: 45%'>"		
		if("" != err){
			if (err == "006"){
				if (isError006){
					isError006 = false;
					html = html + "<span id=\"err_06\" style=\"Position:absolute;FONT-SIZE:9px;COLOR:red\">" + CAL_MSG006 + "</span>"			
					isValidSelecction = false;
					hasError = true;
				}
				}else{
					if(isValidSelecction){
						html = html + err; //+ strPriceRate;
						hasError = true;
					}
				}
			}else{
				html = html + strPriceRate;
		}
		html = html + "</Span></Div>"
		total += priceRate;
	}
	
	html = html + "</div>";
	
	document.getElementById(this.cData.idRenderDays).innerHTML = html;	
	if (eval(total)>0)
	{document.getElementById(this.cData.idRenderSummary).innerHTML = "<br><strong> <Div nowrap>" + CAL_MSG014 + " $" + CurrencyFormatted(total) + " " + this.cData.dsAvail.value.Tables[0].Rows[0].AltCurrency + "</Div></strong>";}
	
	
	if(!hasError && isValidSelecction){
		this.setCache();		
	}else{
		var txtCache = document.getElementById(this.cData.idCache);
		txtCache.value = ""
		document.getElementById(this.cData.idCommand).disabled = true;	
		if(this.cData.chkRequired.style.display!='none')
		{
		this.cData.chkRequired.checked = false;
		this.cData.chkRequired.disabled = true;
		}
	}
};

calendarHandler.prototype.setCache = function(){
	var txtCache = document.getElementById(this.cData.idCache);
	if(txtCache){		
		var dayEvent = "";

		for(var i = 0;i<this.cData.sDates.length;++i){
			if (this.cData.sDates[i].idRate>0){			
				if(dayEvent != ""){
					dayEvent = dayEvent + "*";
				}				
				dayEvent = dayEvent + this.cData.pId + "$" + this.cData.aId + "$" + this.cData.eId + "$";
				dayEvent = dayEvent + this.cData.sDates[i].idRate + "$" + getFormatDateMMDDYYYY(this.cData.sDates[i].day) + "$";				
				var pricesDayEvent = "";
				for(var j = 0;j<this.cData.sDates[i].prices.length;++j){
					if (this.cData.sDates[i].prices[j].quantity>0){
						if(pricesDayEvent != ""){
							pricesDayEvent = pricesDayEvent + ",";					
						}
						pricesDayEvent = pricesDayEvent + this.cData.sDates[i].prices[j].idPrice + "/" + this.cData.sDates[i].prices[j].quantity;
					}
				}				
				dayEvent = dayEvent + pricesDayEvent;
			}
		}
		
					
		//var qs = "?ID=" + this.cData.aId + "&ActivityFrom=" + getFormatDateMMDDYYYY(this.cData.sDates[0].day) + "&ActivityTo=" + getFormatDateMMDDYYYY(this.cData.sDates[this.cData.sDates.length-1].day) + "&Culture=" + this.cData.lId + "&ActivityRateType=" + this.cData.rT + "&Details=";
		//txtCache.value = qs + dayEvent;
		
		//var qs = "?ID=" + this.cData.aId + "&ActivityFrom=" + getFormatDateMMDDYYYY(this.cData.sDates[0].day) + "&ActivityTo=" + getFormatDateMMDDYYYY(this.cData.sDates[this.cData.sDates.length-1].day) + "&Culture=" + this.cData.lId + "&ActivityRateType=" + this.cData.rT + "&Details=";
		txtCache.value = dayEvent;		
		
		document.getElementById(this.cData.idCommand).disabled = false;	
		this.cData.chkRequired.checked = true;
		this.cData.chkRequired.disabled = false;
	}	
};

calendarHandler.prototype.clear = function(){
	document.getElementById(this.cData.idRenderTimes).innerHTML = CAL_MSG009;		
	document.getElementById(this.cData.idRenderPrices).innerHTML = "";
	document.getElementById(this.cData.idRenderDays).innerHTML = "";	
	document.getElementById(this.cData.idRenderSummary).innerHTML = "";					
	document.getElementById(this.cData.idCache).value = "";
	document.getElementById(this.cData.idCommand).disabled = true;	
}
/* comunes */
function renderCalendarPrices(cmm){
	var cHandler = new calendarHandler(cmm);
	cHandler.renderPriceTypes();
}

function renderCalendarDays(cmm){
	var cHandler = new calendarHandler(cmm);
	cHandler.reloadPriceTypes();
	cHandler.renderDays();
}

var aNameDaysES = new Array('Dom','Lun', 'Mar','Mie','Jue','Vie','Sab');
var aNameDaysEN = new Array('Sun','Mon', 'Tue','Wed','Thu','Fri','Sat');

function getShortDate(mydate,lang){
	return getDayText(mydate.getDay(),lang) + " " + eval(parseInt(mydate.getMonth())+1) + "/" +  mydate.getDate();
}
function getDayText(indexDay,lang){
	if(1 == lang){
		return aNameDaysES[indexDay];
	}else{
		return aNameDaysEN[indexDay];
	}
}
function getFormatDateMMDDYYYY(mydate){
	var month = (mydate.getMonth()+1>=10) ? (mydate.getMonth()+1):"0" + (mydate.getMonth()+1);	
	return month + "/" + mydate.getDate() + "/" + mydate.getFullYear();
}

function calendarReserve(obj,idCache){
	if (false==obj.disabled){
		var mylocation =  srcRs + document.getElementById(idCache).value;
		alert(document.getElementById(idCache).value);
		location = mylocation;
	}
	return false;
}


function getCompleteAvailabilityT04(aId,eId,lId,bD,eD,rT){

		var url = "getServiceAvail.aspx";
		var qr = "?aId=" + aId +"&eId=" + eId + "&lId=" + lId + "&bD=" + bD + "&eD=" + eD + "&rT=" + rT;
	
		var scriptContainer;
		scriptContainer = document.getElementById("dvAvailEle");
	
		var bd = document.getElementsByTagName('body')[0];        
		if(null == scriptContainer){
			scriptContainer = document.createElement('div');    
			scriptContainer.id = "dvAvailEle"
			var dsAvail = GetData(url + qr);               
			scriptContainer.innerText=dsAvail;
			void(bd.appendChild(scriptContainer));
			eval(dsAvail);
		}else{
			var dsAvail = GetData(url + qr);               
			scriptContainer.innerText = dsAvail; 		
			eval(dsAvail);
		}
		//sendToClipboard(qr+'         '+dsAvail);
		scriptContainer.style.display = "none";
        return getAvailability();        
}


function GetData(sUri) 
{
    var bAsync=false;
    document.body.style.cursor='wait';
	var done = function ()
	  {
        document.body.style.cursor='default';
		try {   
   		        return xmlHttp.responseText;
   		        
  		    }
		catch (exc) 
		    {
			    return "An error occured <br/>";
		    } 
      };
      
	var xmlHttp = XmlHttp.create();
	xmlHttp.open("GET", sUri, bAsync);
	if (bAsync) 
	  {
		xmlHttp.onreadystatechange = function () 
		  {
			if (xmlHttp.readyState == 4)
			  {
				  return done();
			  }
		  } 
        document.body.style.cursor='default';		  
		return "Loading....";
	  }
	xmlHttp.send(null);
	if (!bAsync) 
	  {
		return done();
	  }
    return;  
}

function CurrencyFormatted(amount)
{
	var i = parseFloat(amount);
	if(isNaN(i)) { i = 0.00; }
	var minus = '';
	if(i < 0) { minus = '-'; }
	i = Math.abs(i);
	i = parseInt((i + .005) * 100);
	i = i / 100;
	s = new String(i);
	if(s.indexOf('.') < 0) { s += '.00'; }
	if(s.indexOf('.') == (s.length - 2)) { s += '0'; }
	s = minus + s;
	return s;
}

function sendToClipboard(s)
   {
      if( window.clipboardData && clipboardData.setData )
      {
         clipboardData.setData("Text", s);
      }
      else
      {
        //alert("Internet Explorer required");
      }
   }
