//
//

var DateHandler = DH = {
	
	Launch: function(){
	    this.today = new Date();
		this.months = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'];
	},
	
    getDateSelect: function(id,d,m,y){
	    var html = "<select id='"+id+"_day' name='"+id+"_day'>";
		var len = this.monthLength(m-1,y);
		for(var i=d;i<=len;i++){
			var num = i;
		    html += "<option id='"+id+"_daynum_"+i+"' name='"+id+"_daynum_"+i+"' value='"+num+"'>"+num+" </option>";
		}
		html += "</select>";
		html += "<select id='"+id+"_month' name='"+id+"_month' class='year'>";
		for(var i=m;i<=12;i++){
			var num = i;
		    html += "<option id='"+id+"_monthnum_"+i+"' name='"+id+"_monthnum_"+i+"' value='"+num+"'>"+this.months[num-1]+" </option>";
		}
		html += "</select>";
		html += "<select id='"+id+"_year' name='"+id+"_year' class='year'>";
		var yr = this.today.getFullYear();
		for(var i=yr;i<yr+3;i++){
		    html += "<option id='"+id+"_yearnum_"+i+"' name='"+id+"_yearnum_"+i+"' value='"+i+"'>"+i+" </option>";
		}
		html += "</select>";
		return html;
	},
	DayChange: function(el){
	
	},
	MonthChange: function(e){
		var el = e.value? e : e.target;
		this.today = new Date();
		var cg = el.id.split('_month')[0];
		var daySelect = $(cg+"_day");
		var current = daySelect.value;
		daySelect.innerHTML = "";
		var opts = [];
		var today = this.today.getDate();
		var len = DH.monthLength(el.value-1,$(cg+"_year").value);
		//check if they're on the currrent month and year
		var start = (parseInt(el.value)-1==this.today.getMonth()&&parseInt($(cg+"_year").value)==this.today.getFullYear())? today-1 : 0;
		
		for(var i=start;i<len;i++){
			pos = i+1;
			pos = (pos<10)? "0"+pos : pos;
			var o = new Element("option", { id: cg+"_daynum_"+pos, value: i+1 });
			o.innerHTML = pos;
		    opts.push( o );
		}
		opts.each(function(el){
			    daySelect.appendChild(el);
			});
		// set selected day
		$(cg+"_daynum_"+current).selected = "selected";
	},
	YearChange: function(e){
		var el = e.target;
		this.today = new Date();
		var year = el.value;
		var cg = el.id.split('_year')[0];
		var current_day = $(cg+"_day").value;
		var current_month = $(cg+"_month").value;
	    if(parseInt(el.value)==this.today.getFullYear()){
		    //remove months	and days
			$(cg+'_select').innerHTML = DH.getDateSelect(cg,this.today.getDate(),(this.today.getMonth()+1),this.today.getYear());
			if($(cg+"_monthnum_"+current_month)) $(cg+"_monthnum_"+current_month).selected = "selected";
            if($(cg+"_daynum_"+current_day)) $(cg+"_daynum_"+current_day).selected = "selected";
			FormFactory.forms[0].SetHandlers();
			DH.MonthChange({value:current_month,id:cg});
		} else {
			$(cg+'_select').innerHTML = DH.getDateSelect(cg,1,1,el.value);
			$(cg+"_daynum_"+current_day).selected = "selected";
			$(cg+"_monthnum_"+current_month).selected = "selected";
            $(cg+"_yearnum_"+year).selected = "selected";
			FormFactory.forms[0].SetHandlers();
			DH.MonthChange({value:current_month,id:cg});
		}
	},
	monthLength: function( m, y ) {
	    m = parseInt( m );
		switch( m ) {
			case 1:  if( this.isLeapYear( y ) ) { return 29; } else { return 28; }
			case 3:  return 30;
			case 5:	 return 30;
			case 8:	 return 30;
			case 10: return 30;
			default: return 31;
		}   
	},
	isLeapYear: function( y ) {
	    return( y%4 == 0 && ( y%100 != 0 || y%400 == 0 ) );
	},
	getNumSelect: function(id,a){
	    var html = "<select id='"+id+"'>";
		for(var i=0;i<a.length;i++){
			html += "<option value='"+a[i]+"'>"+a[i]+" </option>";
		}
		html += "</select>";
		return html;
	}
};

var FF = Class.create({
    initialize: function(){
	    this.forms = [];
	    var url = window.location.toString().split('paragliding.net/');
		if(url.indexOf('fpa')!=-1 || url.indexOf('property')!=-1) return;
		this.root = url[0]+"paragliding.net/js/forms/";
	    url = url[1].split('/');
		url = url[1].split('/');
		this.type = url[0];
	},
	
	Launch: function(element,type){ // element is the form's container div
	    this.type = type || this.type;
		switch(this.type){
		    case "accommodation": this.forms.push(new AccommodationEnquiryHandler(element)); break;
			  case "property":      this.forms.push(new PropertyEnquiryHandler(element)); break;
				case "generic":      this.forms.push(new GenericEnquiryHandler(element)); break;
			default: 
			  this.forms.push(new AccommodationEnquiryHandler(element));
		}	
	}

});

//if(!document.all){
var FormFactory = new FF();
//}

var EnquiryHandler = Class.create({
	
	initialize: function(container,name){
		DH.Launch();
		this.name = name;
		this.container = container;
		this.doNotConfirm = false;
		this.today = new Date();
		this.ar = new Date();
		this.dp = new Date();
		this.els = [];
		this.Launch();
	},	
	
    Launch: function(){
	    this.Render();
		this.SetHandlers();
	},
	
	Render: function(){},
	
	SetHandlers: function(){},
	
	CheckAndGetDates: function(bool){ // pass in boolean true to check departure date
	    if(!this.CheckEmail($('email').value)){
		    alert( "Please enter a valid email address");
			return null;
		}
	    var loc = window.location.toString();
		if(this.included.length==0&&!this.isFPA){
		    alert( "You must select at least one property by \nchecking the box in the top left corner of the advert");
			return null;
		}
		var arr_year = $('arr_year').value;
		var arr_month = $('arr_month').value; arr_month = (arr_month<10)? "0"+arr_month : arr_month;
		var arr_day = $('arr_day').value; arr_day = (arr_day<10)? "0"+arr_day : arr_day;
		var arr = arr_year+""+arr_month+""+arr_day;
		
		if(bool==true){
			var dep_year = $('dep_year').value;
			var dep_month = $('dep_month').value; dep_month = (dep_month<10)? "0"+dep_month : dep_month;
			var dep_day = $('dep_day').value; dep_day = (dep_day<10)? "0"+dep_day : dep_day;
			var dep = dep_year+""+dep_month+""+dep_day;

			if(arr>dep){
				alert( "Your arrival date is after your departure date! How's that going to work?");
				return null;
			}
			
			var adate = arr_year+"-"+arr_month+"-"+arr_day;
			var ddate = dep_year+"-"+dep_month+"-"+dep_day;
			return [adate,ddate];
			
		}
		
		var adate = arr_year+"-"+arr_month+"-"+arr_day;
		var ddate = null;
		return [adate,ddate];
	},
	
	Write: function(){
	    for(var i=0;i<this.els.length;i++){
		    this.container.insert(this.els[i]);
		}
	},
	
	CheckEmail: function(str){
	  return (str.indexOf('@')==-1)? false : true;
	  //var objRegExp  = /(^[a-z]([a-z_\.]*)@([a-z_\.]*)([.][a-z]{3})$)|(^[a-z]([a-z_\.]*)@([a-z_\.]*)(\.[a-z]{3})(\.[a-z]{2})*$)/i;
      //return objRegExp.test(str);
	},
	
	
	AddElement: function(){
		var args = $A(arguments), els = [], wrap = [];
		args.each(function(obj,i){
				if(obj.wrapper) wrap.push(i);
				var out = [], p = {}, el;
				for(var n in obj.properties){
	                switch(n){
					    //case 'class': out.push(['className',obj.properties.class]); break;
						
						case 'innerHTML': out.push(['innerHTML',obj.properties.innerHTML]); break;
						default: p[n] = obj.properties[n];
					}
				}
				el = new Element(obj.tag,p);
				out.each(function(tag){
					    el[tag[0]] = tag[1];
					});
			    els.push(el);
			});
		var wl = wrap.length-1;
		for(var n = wl; n >= 0; n--){
			var len = els.length-1;
			var pos = wrap[n];
			var element = els[pos];
			var added = 0;
			for(var i = pos; i < len; i++){
				element.insert(els[i+1]);
				added++;
			}
			wrap.pop();
			for(var x=0;x<added;x++){
			    els.pop();
			}
		}
		
	    this.els.push(els[0]);
	},
	
	Submit: function(){
		//new Ajax.Request(url,{method:'post',parameters:params,onSuccess:EnquiryHandler.HandleResponse});
	},
	
	HandleResponse: function(obj){
		if(parseInt(obj.responseText)==1){
		  var conf = $('confirmation');
		  conf.style.top = FormFactory.forms[0].clickY;
		  conf.style.left = FormFactory.forms[0].clickX;
		  //EnquiryHandler.SetToCenter(conf);
		  if(FormFactory.forms[0].doNotConfirm!=true){
			  fadeIn(conf);
		      conf.innerHTML = "Your enquiry has been sent ;)"
		      setTimeout("fadeOut($('confirmation'));",2000);
		  }
		  $('submitButton').disabled = false;
		} else {
	      // handle the fuckup
		}
	}

});


























