
var nodated = 'Introduza la fecha de recogida por favor';
var nodateb = 'Introduza la fecha de devlución por favor';
var noequal = 'La fecha de recogida es menor que la de devolución';
var nocar = 'Escoja un tipo de vehículo por favor';
var noname = 'Díganos su nombre por favor';
var nofname = 'Díganos sus apllidos por favor';
var notelef = 'Díganos su número de telefón';
var noemail = 'Díganos su correo electrónico por favor';
var norfemail = 'Revise la dirección de correo por favor';
var nodisp = 'Lo sentimos, no hay disponibilidad para las fechas / vehículos seleccionados';

var lang = 'es';
var istep1a = new Image(44, 41);
var istep2a = new Image(44, 41);
var istep3a = new Image(44, 41);
var istep1g = new Image(44, 41);
var istep2g = new Image(44, 41);
var istep3g = new Image(44, 41);
var istep1m = new Image(44, 41);
var istep2m = new Image(44, 41);
var istep3m = new Image(44, 41);
istep1a.src = '/media/1-a.png'; 
istep2a.src = '/media/2-a.png'; 
istep3a.src = '/media/3-a.png'; 
istep1g.src = '/media/1-g.png';
istep2g.src = '/media/2-g.png';
istep3g.src = '/media/3-g.png';
istep1m.src = '/media/1-m.png';
istep2m.src = '/media/2-m.png';
istep3m.src = '/media/3-m.png';

window.onload = init;
window.onunload = end;

var reseve = null;
var today = new Date(2010, 8, 05);
var cald = null;
var calb = null;

function init(){
	var ecals = $('cald', 'calb');
	if(ecals[0])
		cald = new calendar(today.getFullYear(), today.getMonth() + 1, today.getDate(), ecals[0], lang, 'dated');
	else 
		return;
	if(ecals[1])
		calb = new calendar(today.getFullYear(), today.getMonth() + 1, today.getDate(), ecals[1], lang, 'dateb');
	else
		return;	
						
	
	reserve = new reserveprocess(true);
	reserve.setStep(1);
	Event.observe('astep1', 'click', function(){ reserve.nextStep(); });
	Event.observe('astep2', 'click', function(){ reserve.nextStep(); });
	Event.observe('astep3', 'click', function(){ reserve.nextStep(); });
	Event.observe('placed', 'change', function(){ reserve.changePlace(0); });
	Event.observe('placeb', 'change', function(){ reserve.changePlace(1); });
	Event.observe('timed', 'change', function(){ reserve.changeTime(0); });
	Event.observe('timeb', 'change', function(){ reserve.changeTime(1); });
	Event.observe('cartype', 'change', function(){ reserve.changeCar(); }); 
	
	var element = $('placed', 'oldplaced', 'nflight', 'cartype', 'un_3');
	element[1].value = element[0].value;
	element[2].className = (element[0].value.charAt(0) == '1') ? 'vest' : 'hvest';
	element[3].selectedIndex = 0;
	if(element[4]){
		Event.observe('add_3', 'click', function(){ reserve.changeUnits('op', 'un', '3', 1); });		
		Event.observe('reduce_3', 'click', function(){ reserve.changeUnits('op', 'un', '3', 0); });	
		element[4].value = 1;
	}
}


function end(){
	if(typeof(GUnload) != 'undefined')
		GUnload();
}

function showConditions(show){
	var IE6 = false /*@cc_on || @_jscript_version < 5.7 @*/; 
	var url = '/views/conditions.php?lang=' + lang + '&csw=1';
	if(!IE6){
		initCSSWindow('inhaber', 'backwindow', 'cswindow');	
		if(show){
			new Ajax.Request(url, { 
					method: 'get', 
					onSuccess: function(transport){ 
						document.getElementById('cswcontainer').innerHTML = transport.responseText;
						placeCSSWindow('cswindow');						
					}
			});	
			document.getElementById('inhaber').style.display = 'block';						
		}else{	
			document.getElementById('inhaber').style.display = 'none';		
		}
	}else{
		popup_window(url + '&ie=1', 630, 460, 'Rentacar Menorca');
	}	
}

function showMap(show, fp){
	var IE6 = false /*@cc_on || @_jscript_version < 5.7 @*/; 
	var elements = $('placed', 'placeb');
	var url = '/views/map.php?lang=' + lang + '&cp=' + getXSplitted(document.getElementById((fp ? 'placed' : 'placeb')).value, 1, '_');
	if(!IE6){
		if(show){
			initCSSWindow('inhaber', 'backwindow', 'cswindow');		
			new Ajax.Request(url, { 
					method: 'get', 
					onSuccess: function(transport){ 
						document.getElementById('cswcontainer').innerHTML = transport.responseText;
						placeCSSWindow('cswindow');
						var coords = document.getElementById('coords');
						if(GBrowserIsCompatible() && coords){
							var map = new GMap2(document.getElementById('gmap'));
							map.addControl(new GOverviewMapControl());
							map.addControl(new GSmallMapControl());													
							var coords = eval(coords.value);	
							map.setCenter(new GLatLng(39.974489161874125, 4.08416748046875), 11);
							for(x = 0; x < coords.length; x++){
								var point = new GLatLng(coords[x][1], coords[x][2]);
								var marker = new GMarker(point);	
								map.addOverlay(marker);
								var title = coords[x][0];								
								GEvent.addListener(marker, 'click', new Function('this.openInfoWindowHtml("' + title + '");'));
								if(coords[x][3]){ 
									marker.openInfoWindowHtml(title);
									map.setCenter(point, 11);
								}
							}							
					  	}						
					}
			});	
			document.getElementById('inhaber').style.display = 'block';			
		}else{	
			document.getElementById('inhaber').style.display = 'none';
			
		}
	}else{
		popup_window(url + '&ie=1', 740, 560, 'Rentacar Menorca');
	}	
}


reserveprocess = function(cvr){
	var cstep = 1;
	var element = $('istep1', 'istep2', 'istep3');
	var cover = cvr;
	
	element[0].src = istep1m.src;
	element[1].src = istep2g.src; 
	element[2].src = istep3g.src;		

	this.nextStep = function(){
		switch(cstep){
			case 1:
				var element = $('dated', 'dateb'); /* 'msg' */
				if(!element[0].value){
					remark('lb' + element[0].id, true, nodated);
					return;
				}else{
					remark('lb' + element[0].id, false, null);
				}
				if(!element[1].value){
					remark('lb' + element[1].id, true, nodateb);
					return;
				}else{
					remark('lb' + element[1].id, false, null);				
				}
				this.addExtraOnTime(0);
				this.addExtraOnTime(1);
				element = $$('input.opt');
				var self = this;
				for(x= 0; x < element.length; x++)
					element[x].onclick = function(){ self.calculate();  }
				cstep++;
				this.setStep(2);
				this.calculate();
				break;
			case 2:
				var element = $('cartype');
				if(element.value == '-'){
					remark('lb' + element.id, true, nocar);
					return;
				}else{
					remark('lb' + element.id, false, null);
				}
				cstep++;
				var element = $('timed', 'extimed', 'timeb', 'extimeb', 'ptotal', 'p3total');
				element[5].innerHTML = element[4].innerHTML;
				var res = element[0].value.split('_');
				if(element[1]) 
					element[1].className = (res[0] == '1' ? 'yd' : 'nd');
				var res = element[2].value.split('_');
				if(element[3])
					 element[3].className = (res[0] == '1' ? 'yd' : 'nd');
				this.setStep(3);			
				break;
			case 3:
				var p12elements = $('dated', 'timed', 'placed', 'flight', 'dateb', 'timeb', 'placeb', 'cartype', 'extimed', 'extimeb', 'op_3', 'un_3');
				var r13elements = $('name', 'fname', 'telef', 'email', 'legal');
				if(!this.checkDates(p12elements[0], p12elements[4])) return;
				var r12elements = $('r_dated', 'r_timed', 'r_placed', 'r_flight', 'r_dateb', 'r_timeb', 'r_placeb', 'r_cartype', 'r_extras', 'r_units_3');
				r12elements[0].value = p12elements[0].value;
				r12elements[1].value = p12elements[1].value;
				r12elements[2].value = p12elements[2].value;
				r12elements[3].value = p12elements[3].value;
				r12elements[4].value = p12elements[4].value;
				r12elements[5].value = p12elements[5].value;
				r12elements[6].value = p12elements[6].value;
				r12elements[7].value = p12elements[7].value;
				if(p12elements[10] && p12elements[10].checked){
					r12elements[9].value = p12elements[11].value;
				}
				if(r13elements[0].value.length < 2){
					remark('lb' + r13elements[0].id, true, noname);
					return;
				}else
					remark('lb' + r13elements[0].id, false, null);
				if(r13elements[1].value.length < 2){
					remark('lb' + r13elements[1].id, true, nofname);
					return;
				}else
					remark('lb' + r13elements[1].id, false, null);
				if(r13elements[2].value.length < 2){
					remark('lb' + r13elements[2].id, true, notelef);
					return;
				}else
					remark('lb' + r13elements[2].id, false, null);
				if(!checkEmail(r13elements[3].value)){
					remark('lb' + r13elements[3].id, true, norfemail);
					return;
				}else
					remark('lb' + r13elements[3].id, false, null);
				if(!r13elements[4].checked){
					remarkBox();
					return;
				}
				
				r12elements[8].value = '';
				var optes = $$('input.opt');
				for(x = 0; x < optes.length; x++){
					inp = optes[x];
					if(inp.type == 'checkbox' && inp.checked){
						r12elements[8].value += inp.value + '_';
					}else if(inp.type == 'hidden'){
						r12elements[8].value += (inp.value != '0' ? (getXSplitted(inp.name, 1) + '_') : '');
					}
				}
				var pids = $$('input.pids');
				for(x = 0; x < pids.length; x++){
					var inp = pids[x];
					if(inp.type == 'radio' && inp.checked){
						$('pid').value = inp.value;
					}
				}
				var exlength = r12elements[8].value.length;	
				if(r12elements[8].value.charAt(exlength-1) == '_')
					r12elements[8].value = r12elements[8].value.substring(0, exlength - 1);
				document.getElementById('fstep3').submit();
				break;	
		}
	
	}
	
	this.setStep = function(step){
		var element = $('istep1', 'istep2', 'istep3');		
		cstep = step;
		switch(step){
			default:	
			case 1:
				element[0].src = istep1m.src;
				element[1].src = istep2g.src; 
				element[2].src = istep3g.src;
				if(cover){
					this.disableControls(2, true);
					this.disableControls(3, true);				
					document.getElementById('cartype').value = '-';
					document.getElementById('carinfo').innerHTML = '';
					document.getElementById('astep1').className = 'button';
					document.getElementById('astep2').className = 'button nd';
					document.getElementById('astep3').className = 'button nd';
				}else{
					var element = $('step1', 'step2', 'step3', 'strstep1', 'strstep2', 'strstep3', 'aback1', 'aback2', 'aback3');
					element[0].className = 'bbody yd';
					element[1].className = 'nd';
					element[2].className = 'nd';
					element[3].className = 'yd';
					element[4].className = 'nd';
					element[5].className = 'nd';
					element[6].className = 'nolnk';
					element[7].className = 'nolnk';
					element[8].className = 'nolnk';
					element[6].onclick = null;
					element[7].onclick = null;
				}
				break;
			case 2:
				element[0].src = istep1g.src;
				element[1].src = istep2m.src; 
				element[2].src = istep3g.src;	
				if(cover){	
					this.disableControls(2, false);	
					this.disableControls(3, true);		
					document.getElementById('astep1').className = 'button nd';
					document.getElementById('astep2').className = 'button';
					document.getElementById('astep3').className = 'button nd';
				}else{
					var element = $('step1', 'step2', 'step3', 'strstep1', 'strstep2', 'strstep3', 'aback1', 'aback2', 'aback3');
					element[0].className = 'nd';
					element[1].className = 'bbody yd';
					element[2].className = 'nd';
					element[3].className = 'nd';
					element[4].className = 'yd';
					element[5].className = 'nd';
					element[6].className = '';
					element[6].onclick = function(){ reserve.setStep(1); }
					element[7].onclick = null;
				}
				break;
			case 3:
				element[0].src = istep1g.src;
				element[1].src = istep2g.src; 
				element[2].src = istep3m.src;
				element = $('dated', 'pdated', 'dateb', 'pdateb'); 
				element[1].innerHTML = element[0].value;
				element[3].innerHTML = element[2].value;
				element = $('timed', 'ptimed', 'timeb', 'ptimeb'); 
				element[1].innerHTML = element[0].options[element[0].selectedIndex].text;
				element[3].innerHTML = element[2].options[element[2].selectedIndex].text;
				element = $('placed', 'pplaced', 'placeb', 'pplaceb');
				element[1].innerHTML = element[0].options[element[0].selectedIndex].text;
				element[3].innerHTML = element[2].options[element[2].selectedIndex].text;
				if(cover){
					this.disableControls(2, false);
					this.disableControls(3, false);								
					document.getElementById('astep1').className = 'button nd';
					document.getElementById('astep2').className = 'button nd';
					document.getElementById('astep3').className = 'button';
				}else{
					var element = $('step1', 'step2', 'step3', 'strstep1', 'strstep2', 'strstep3', 'aback1', 'aback2', 'aback3');
					element[0].className = 'nd';
					element[1].className = 'nd';
					element[2].className = 'bbody yd';
					element[3].className = 'nd';
					element[4].className = 'nd';
					element[5].className = 'yd';
					element[6].className = '';
					element[7].className = '';
					element[8].className = 'nolnk';
					element[6].onclick = function(){ reserve.setStep(1); }
					element[7].onclick = function(){ reserve.setStep(2); }
				}
				break;
		}
	}
						
	this.changeCar = function(){
		var element = $('progress',  'cartype', 'carinfo');
		if(element[1].value != '-'){
			element[0].className = 'sd';
			var url = '/views/carinfo.php?id=' + element[1].value + '&lang=' +  lang;	
			new Ajax.Request(url, { 
					method: 'get', 
					onSuccess: function(transport){ 
						element[2].innerHTML = transport.responseText;
						element[0].className = 'nd';
					} 
			});	
			this.calculate();			
		}else{
			element[2].innerHTML = '';
			document.getElementById('companies').innerHTML = '';
			document.getElementById('pcar').innerHTML = '0';
			document.getElementById('poptions').innerHTML = '0';
			document.getElementById('ptotal').innerHTML = '0';
			this.setStep(2);			
		}
	}
	
	this.changeDate = function(xdate){
		var element = $('dated', 'dateb');		
		if(element[0].value && element[1].value){
			if(!this.checkDates(element[0], element[1]))
				return false;
		}
		if(cstep > 1)
			this.calculate();		
		if(cstep > 2){
			element = (xdate == 0) ? $('dated', 'pdated') : $('dateb', 'pdateb');	
			element[1].innerHTML = element[0].value;
		}	
		
		
		return true;	
	}
	
	this.checkDates = function(dated, dateb){
		var dd = dated.value.split('/');
		dd = Date.parse(parseInt(dd[1]) + '/' + parseInt(dd[0]) + '/' + parseInt(dd[2]));
		var db = dateb.value.split('/');
		db = Date.parse(parseInt(db[1]) + '/' + parseInt(db[0]) + '/' + parseInt(db[2]));
		if(dd > db){
			dateb.value = '';
			remark('lb' + dated.id, true, noequal);
			return false;
		}
		remark('lb' + dated.id, false, null);			
		return true;
	}
	
	this.changePlace = function(xplace){	
		if(xplace == 0){
			var element = $('placed', 'pplaced', 'nflight', 'oldplaced');
			var old = element[3].value.charAt(0) == '1';
			var nou = element[0].value.charAt(0) == '1';
			if(nou != old){
				element[2].className = 'vest';
				if(element[0].value.charAt(0) == '1')
					new Effect.SlideDown(element[2]);
				else
					new Effect.SlideUp(element[2]);
			}
			element[3].value = element[0].value;			
		}else
			var element = $('placeb', 'pplaceb');
		if(cstep > 2)
			element[1].innerHTML = element[0].options[element[0].selectedIndex].text;
	}
	
	this.changeTime = function(xdate){
		if(cstep > 1){		
			this.addExtraOnTime(xdate);
			this.calculate();
		}
		if(cstep > 2){	
			var element = (xdate == 0) ? $('timed', 'ptimed') : $('timeb', 'ptimeb');
			element[1].innerHTML = element[0].options[element[0].selectedIndex].text;
		}
		
	}
	
	this.addExtraOnTime = function(xdate){
		var element = (xdate == 0) ? $('timed', 'extimed', 'extimedv') : $('timeb', 'extimeb', 'extimebv');
		if(element[1]){
			var res = element[0].value.split('_');
			element[1].className = (res[0] == '1' ? 'yd' : 'nd');
			element[2].value = (res[0] == '1' ? '1' : '0');			
		}	
	}	
	
	this.changeUnits = function(idoption, idfield, num, add){
		field = document.getElementById(idfield + '_' + num);	
		option = document.getElementById(idoption + '_' + num);	 
		if(field && option){
			if(!option.checked || cstep < 2)
				return false;
			val = parseInt(field.value);
			if(add){
				if(val < 6 && val > 0){
					val++;
					field.value = val;					
					this.calculate();
				}
			}else{
				if(val < 7 && val > 1){
					val--;
					field.value = val;
					this.calculate();
				}
			}
		}
	}	
	
	this.calculate = function(pid){
		var element = $('progress', 'dated', 'dateb', 'timed', 'timeb', 'cartype', 'fstep2', 'un_3','placed','placeb');
		element[0].className = 'sd';
			var url = '/calculate.php?lang=' + lang;
			var car = element[5].value;
			var vpid = (pid ? pid : $RF('fstep2', 'pid'));
			vpid = vpid ? vpid : '';
			var params = '&dated=' + element[1].value + '&dateb=' + element[2].value + '&timed=' + getXSplitted(element[3].value, 1) + '&timeb=' + getXSplitted(element[4].value, 1) + '&cartype=' + (car != '_' ? car : '') + (element[7] ? ('&un_3=' + element[7].value) : '');
			params += '&placed=' + getXSplitted(element[8].value, 1) + '&placeb=' + getXSplitted(element[9].value, 1) + '&pid=' + vpid;
			var fm = element[6];
			var optes = $$('input.opt');			
			for(x = 0; x < optes.length; x++){
				inp = optes[x];
				if(inp.type == 'checkbox')
					params += (inp.checked ? ('&' + inp.name +  '=' + inp.value) : '');
				else
					params +=  (inp.value != '0' ? ('&' + inp.name +  '=' + getXSplitted(inp.name, 1)) : '');
			}
			new Ajax.Request(url, { 
					method: 'post', 
					parameters: params,
					onSuccess: function(transport, json){ element[0].className = 'nd'; },
					onComplete: function(){ 
						element = $('pcar' , 'poptions', 'ptotal', 'p3total','companies'); 
						element[4].innerHTML = htmlc = '';
						if(ctotal[3] >= 0) {
							if(ctotal[4].length > 0) {
								var htmlc = '<ul class="options companies">';
								for(x = 0; x < ctotal[4].length; x++) {
									htmlc += '<li><div class="eprice"><b>' + ctotal[4][x].price + '&euro;</b></div>';
									htmlc += '	<div class="extra"><div class="fl"><input onclick="reserve.setCompany(this)" type="radio" class="pids" name="pid" value="' + ctotal[4][x].pid + '"' + (ctotal[4][x].current  ? ' checked="checked"' : '' )+ ' /></div>';
									htmlc += '	<div class="text"><b>' + ctotal[4][x].name + '</b></div></div>';
									htmlc += '<div id="wp_' + ctotal[4][x].pid + '" class="ex_wrapper"' + (ctotal[4][x].current  ? 'style="display:block;"' : '' ) + '>';
									for(y = 0; y < ctotal[4][x].extras.length; y++) {
										htmlc += '<div class="wp"><div class="eprice">' + ctotal[4][x].extras[y].price + '&euro;</div><div class="text">' + ctotal[4][x].extras[y].name + '</div></div>';
									}
									htmlc += '</div>';
									htmlc += '</li>';
								}
								htmlc += '</ul>';
							}
							element[0].innerHTML = ctotal[0];
							element[1].innerHTML = ctotal[1];
							element[2].innerHTML = ctotal[2];
							element[4].innerHTML = htmlc;
							if(cstep == 3)
								element[3].innerHTML = ctotal[2];
						}else{
							reserve.setStep(1);
							remark('lb' + 'dated', true, nodisp);
						}
					} 
			});	
	
	}
	
	this.setCompany = function(d) {
		var wps = $$('div.ex_wrapper');
		for(x = 0; x < wps.length; x++) {
			var t = wps[x].id.split('_');
			wps[x].style.display = t[1] == d.value ? 'block' : 'none';
		}
		this.calculate(d.value);
	}
		
	this.disableControls = function(step, enable)
	{
		var fm = document.getElementById('fstep' + step);
		for(x = 0; x < fm.length; x++){
			if(fm.elements[x].name.substr(0, 3) != 'no_')
				fm.elements[x].disabled = enable;
		}
	}	
}

function getXSplitted(string, indx, sep){
	var s = (sep ? sep : '_');
	var sptr = string.split(s);
	if(indx < sptr.length)
		return sptr[indx];
	else
		return sptr[0];
}

function remark(lab, remark, msg){
	if(remark){
		document.getElementById(lab).className = 'red';
		var dmsg = document.getElementById('msg');
		if(dmsg) {
			document.location.href = document.location.href.replace('#msg', '') + '#msg'; 
			dmsg.innerHTML = '&raquo; ' + msg;
			setTimeout(function(){
				dmsg.style.textDecoration = 'blink';
				setTimeout(function(){
					dmsg.style.textDecoration = 'none';
				}, 2500);
			}, 100);
		} else
			alert(msg);
	}else{
		document.getElementById(lab).className = '';			
		var dmsg = document.getElementById('msg');
		if(dmsg)		
			dmsg.innerHTML = '';	
	}
}	

function remarkBox(){
	document.getElementById('lopd').style.borderColor = '#ff0000';
	setTimeout("document.getElementById('lopd').style.borderColor = '#ffffff'", 500);
	setTimeout("document.getElementById('lopd').style.borderColor = '#ff0000'", 1000);
	setTimeout("document.getElementById('lopd').style.borderColor = '#ffffff'", 1500);
	setTimeout("document.getElementById('lopd').style.borderColor = '#ff0000'", 2000);	
	setTimeout("document.getElementById('lopd').style.borderColor = '#ffffff'", 2500);
}


function gup(name){
  name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
  var regexS = "[\\?&]"+name+"=([^&#]*)";
  var regex = new RegExp( regexS );
  var results = regex.exec(window.location.href);
  if( results == null )
    return "";
  else
    return results[1];
}


showCalendar = function(con, show){
	var cal = document.getElementById(con);
	if(cal){
		if(con.charAt(con.length - 1) == 'd'){
			var dt = document.getElementById('dated').value;
			if(dt)
			{
				dt = dt.split('/');
				calb.setCalendarPosition(parseInt(dt[2]), parseInt(dt[1]) - 1, parseInt(dt[0]), document.getElementById('calb'), lang, 'dateb');
			}
		}		
		cal.className = (show ? 'yd' : 'nd');
	}
}


calendar = function(year, month, day, cal, lang, into){

	var cdate;
	var self = this;

	if(isNaN(year) || isNaN(month) || isNaN(day)){ 
		cdate = new Date();
	}else{
		cdate = new Date(year, month-1, day);
	}
	
	record = cdate.valueOf();

	Event.observe(cal.id + 'yback', 'click', function(){ self.yearBackward(cal, lang, into); });
	Event.observe(cal.id + 'mback', 'click', function(){ self.monthBackward(cal, lang, into); });
	Event.observe(cal.id + 'mforw', 'click', function(){ self.monthForward(cal, lang, into); });
	Event.observe(cal.id + 'yforw', 'click', function(){ self.yearForward(cal, lang, into); });
	buildCalendar(cdate.getFullYear(), cdate.getMonth(), cdate.getDate(), cal, lang, into);
		
	this.setCalendarPosition = function(year, month, day, cal, lang, into){
		buildCalendar(year, month, day, cal, lang, into);			
	}
	
	this.yearForward = function(cal, lang, into){ 
		cdate.setYear(cdate.getFullYear() + 1);
		buildCalendar(cdate.getFullYear(), cdate.getMonth(), cdate.getDate(), cal, lang, into);	
	}
	
	this.yearBackward = function(cal, lang, into){
		cdate.setYear(cdate.getFullYear() - 1);
		buildCalendar(cdate.getFullYear(), cdate.getMonth(), cdate.getDate(), cal, lang, into);
	}
	
	this.monthForward = function(cal, lang, into){
		if((cdate.getMonth() + 1) > 11){
			cdate.setFullYear(cdate.getFullYear() + 1);
			cdate.setMonth(0);
		}else{
			cdate.setMonth(cdate.getMonth()+1); 
		}
		buildCalendar(cdate.getFullYear(), cdate.getMonth(), cdate.getDate(), cal, lang, into);
	}
	
	this.monthBackward = function(cal, lang, into){
		if((cdate.getMonth() - 1) < 0){
			cdate.setFullYear(cdate.getFullYear() - 1);
			cdate.setMonth(11);
		}else{
			cdate.setMonth(cdate.getMonth()-1);
		}
		buildCalendar(cdate.getFullYear(), cdate.getMonth(), cdate.getDate(), cal, lang, into);
	}
	
	function getDaysInMonth(month, year){
		var ndays = 0;
		var date = new Date(year, month, 1);
		var month_days = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
		if(month == 1){
			if(((year % 4 == 0) && (year % 100 != 0)) || ( year % 400 == 0)){
				return 29;
			}
		}
		return month_days[month];
	}
	
	function buildCalendar(year, month, date, cal, lang, into){
		switch(lang){
			case 'en':
				var month_names = new Array('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Set','Oct','Nov', 'Dec');
				break;
			case 'ca':
				var month_names = new Array('Gen','Feb','Mar','Abr','Mai','Jun','Jul','Ago','Set','Oct','Nov', 'Des');
				break;
			default:
			case 'es':
				var month_names = new Array('Ene','Feb','Mar','Abr','May','Jun','Jul','Ago','Sep','Oct','Nov', 'Dic');
				break;
		}
		
		var wdate = new Date(year, month, date);
		var mswdate = wdate.valueOf();
		var day = wdate.getDate();
		var month = wdate.getMonth();
		var year = wdate.getFullYear();
		var strdate;

		smonth = document.getElementById(cal.id + 'mname');
		smonth.innerHTML = month_names[month] + "&nbsp;" + String(year).substring(2,4);
		
		var dtmp = new Date(year, month, 1);
		
		var offset = null;
		
		switch(dtmp.getDay()){
			case 1: offset = 6; break; 	// Di
			case 2: offset = 0; break;	// Dm
			case 3: offset = 1; break;	// Dx
			case 4: offset = 2; break;	// Dj
			case 5: offset = 3; break;	// Dv
			case 6: offset = 4; break;	// Ds
			case 0: offset = 5; break;	// Dm
		}		
		
		if(month == 0){
			var p_month = 11;
			var n_month = month + 1;
			var p_year = year - 1;
			var n_year = year;
		}else if(month == 11){
			var p_month = month - 1;
			var n_month = 0;
			var p_year = year;
			var n_year = year + 1;
		}else{
			var p_month = month - 1;
			var n_month = month + 1;
			var p_year = year;
			var n_year = year;
		}
			
		var p_month_days = getDaysInMonth(p_month, p_year);
		var month_current = getDaysInMonth(month, year); // quants de dies te el mes actual

		var start_offset = p_month_days - offset;
		var end_offset =  42 - (offset + month_current);
		var dc = 1, dn = 1;	
		var strdate = null;

		tbody = cal.getElementsByTagName('tbody');
		trs = tbody[0].getElementsByTagName('tr');
		var dtmp = null;

		for(x = 0; x < 6; x++){
			tds = trs[x].getElementsByTagName('td');
			for(y = 0; y < 7; y++){
				if(start_offset <= p_month_days){
					dtmp = new Date(p_year, p_month, start_offset);			
					strdate = start_offset + "/" + (p_month + 1) + "/" + p_year;
					tds[y].className = (dtmp.valueOf() <  today.valueOf() ? 'out off' : 'out');
					tds[y].innerHTML = start_offset;
					if(today.valueOf() <=  dtmp.valueOf())
						tds[y].onclick = new Function("document.getElementById('" + into + "').value = '" + strdate + "'; if(reserve.changeDate() || '" + cal.id + "' == 'cald') showCalendar('" + "con" + cal.id + "', false);");					
					start_offset++;
				}else if(dc <= month_current){
					strdate = dc + "/" + (month + 1) + "/" + year;
					dtmp = new Date(year, month, dc);
					tds[y].className = (dtmp.valueOf() ==  today.valueOf()) ? 'cday' : (dtmp.valueOf() <  today.valueOf() ? 'day off' : 'day');
					tds[y].innerHTML =  dc;
					if(today.valueOf() <=  dtmp.valueOf())
						tds[y].onclick = new Function("document.getElementById('" + into + "').value = '" + strdate + "'; if(reserve.changeDate() || '" + cal.id + "' == 'cald') showCalendar('" + "con" + cal.id + "', false);");					
					dc++;
				}else{
					dtmp = new Date(n_year, n_month, dn);
					strdate = dn + "/" + (n_month + 1) + "/" + n_year;
					tds[y].innerHTML = dn;								
					tds[y].className = (dtmp.valueOf() <  today.valueOf() ? 'out off' : 'out');
					if(today.valueOf() <=  dtmp.valueOf())
						tds[y].onclick = new Function("document.getElementById('" + into + "').value = '" + strdate + "'; if(reserve.changeDate() || '" + cal.id + "' != 'cald') showCalendar('" + "con" + cal.id + "', false);");
					dn++;	
				}
			}
		}
	}
}

function checkEmail(strng){
    var emailFilter=/^.+@.+\..{2,6}$/;
    if(!(emailFilter.test(strng))){ 
       return false;
    }else{
       var illegalChars= /[\(\)\<\>\,\;\:\\\"\[\]]/;
         if(strng.match(illegalChars)){
       		return false;
       }
    }
	return true;
}

function popup_window(url, width, height, title)
{
	width = width ? width : 'auto'; 
	height = height ? height : 'auto'; 	
	var w = window.open(url, 'conditions', 'toolbar=no, resizable=no, copyhistory=no, status=no, scrollbars=yes, width=' + width + ', height=' + height);
	w.document.close();
	w.resizeTo(width, height)	
	w.focus();
}


function popup(atag, width, height, title)
{
	width = width ? width : 'auto'; 
	height = height ? height : 'auto'; 	
	var w = window.open('', 'photo', 'toolbar=no, resizable=no, copyhistory=no, status=no, width=' + width + ', height=' + height);
	w.document.open();  
	w.document.write("<html><title>" + title + "</title>");  
	w.document.write("<body style=\"backround-color:#FFFFFF; margin:0; padding:0; width:" + width + "px; height:" + height + "\">");  
	w.document.write("<img src=\"" + atag.href + "\" width=\""+ width +"\" height=\""+ height +"\" alt=\"" + atag.alt + "\">");  
	w.document.write("</body></html>");  	
	w.document.close();
	w.resizeTo(width, height)	
	w.focus();
}

function initCSSWindow(container, window, cswindow){
	var elements = $(container, window, cswindow);  
	if(elements[0] && elements[1]){
		var sizes = getPageSizeWithScroll();
		elements[0].style.height = sizes.height + 'px';
		elements[1].style.height = sizes.height + 'px';
		if(elements[2]) elements[2].style.display = 'none';
	}
}

function placeCSSWindow(cswindow){
	cswin = document.getElementById(cswindow);
	if(cswin){
		cswin.style.marginTop = (100 + getPageOffsets().y) + 'px';
		cswin.style.display = 'block';
	}
}

function getPageOffsets(){
  var scrOfX = 0, scrOfY = 0;
  if(typeof( window.pageYOffset ) == 'number' ){
    scrOfY = window.pageYOffset;
    scrOfX = window.pageXOffset;
  }else if( document.body && ( document.body.scrollLeft || document.body.scrollTop)){//DOM compliant
    scrOfY = document.body.scrollTop;
    scrOfX = document.body.scrollLeft;
  }else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop)){ //IE6 standards
    scrOfY = document.documentElement.scrollTop;
    scrOfX = document.documentElement.scrollLeft;
  }
	return { x: scrOfX, y: scrOfY };	
}

function getPageSizeWithScroll(){
	if(window.innerHeight && window.scrollMaxY){
		pageWidth = window.innerWidth + window.scrollMaxX;
		pageHeight = window.innerHeight + window.scrollMaxY;
	}else if(document.body.scrollHeight > document.body.offsetHeight){
		pageWidth = document.body.scrollWidth;
		pageHeight = document.body.scrollHeight;
	}else{
		pageWidth = document.body.offsetWidth + document.body.offsetLeft;
		pageHeight = document.body.offsetHeight + document.body.offsetTop;
	}
	return { width: pageWidth, height: pageHeight };
}

function $RF(el, radioGroup) {
	if($(el).type && $(el).type.toLowerCase() == 'radio') {
		var radioGroup = $(el).name;
		var el = $(el).form;
	} else if ($(el).tagName.toLowerCase() != 'form') {
		return false;
	}
	
	var checked = $(el).getInputs('radio', radioGroup).find(
		function(re) {return re.checked;}
	);
	return (checked) ? $F(checked) : null;
}