/**
 * General triggered behaviour on document load
 */
var general_rules = {
	'#analytics-placeholder':function(){
    	var params = this.getClassParameters();
		if (params.sid) {
			pageTracker = _gat._getTracker(params.sid);
			if (params.target) {
				pageTracker._trackPageview(unescape(params.target));
			} else {
				pageTracker._trackPageview();
			}

			if ($('ga-ecommerce-data')) {
				// if ecommerce data is present as well
				var ecommerceTracker = new EcommerceTracker(pageTracker);
			}
		}
	},
    '.hilite-keywords' : function() {
       var hiliter = new KeywordHiliter("ajax.php",this);
       hiliter.options.elementTag = 'ABBR';
       hiliter.fetchKeywords();
    },
    '.no-javascript' : function() {
      this.hide();
    },
    '.show-no-javascript' : function() {
      this.show();
    }
};
Event.addBehavior(general_rules);

/**
 * Rules for hyperlink behaviour
 */
var hyperlink_rules = {
    'a.void:click' : function(e) {
      return false;
    },

    'a.popup:click' : function(e) {

        /**
         * Event:  click
         * Action: open a popup window
         */
        var params = this.getClassParameters();
        var width = params.width || 684;
        var height = params.height || 350;
        var top = params.top || 200;
        var left = params.left || '50%';
        window.open(this.href,
            'PopUp',
            'width=' + width + ',height=' + height + ',top=' + top + ',left=' + left + ',scrollbars=0,status=no,resizable=0,toolbar=0,titlebar=0,menubar=0,location=0');
        return false;
    },

    'a.external:click,a.new-window:click' : function(e) {

        /**
         * Event:  click
         * Action: open a new window
         */
        if (!e.ctrlKey && !e.altKey && !e.shiftKey) {
          window.open(this.href);
          return false;
        }
    },

    'a.status:mouseover' : function(e) {

        /**
         * Event:  mouseover
         * Action: display the hyperlinks title in the status bar
         */
        window.status=this.title;
        return true;
    },
    'a.status:mouseout' : function(e) {

        /**
         * Event:  mouseout
         * Action: clear the status bar
         */
        window.status='';
        return true;
    },

    'a.switch:click': function(e) {
        /**
         * Event:  click
         * Action: show / hide the tab with the same ID minus "_switch"
         */
        var c = $(this.id.replace('-switch',''));
        var content = $(c.id + '-content');
        if (c) {
          c.toggle();
        }
        return false;
    },

    'a.tabswitch:click' : function(e) {
        /**
        * Event: click
        * Action: hide related div, show related div's related element
        */
        var container = $(this.getAttribute('rel'));
        if(container) {
          var other = $(container.getAttribute('rel'));
          if (other) {
            container.addClassName('hide');
            other.removeClassName('hide');
          }
        }
        return false;
    },
    
    'a.modal:click' : function(e) {

        /**
         * Event:  click
         * Action: open a zoomed in image
         */
        var image = this.up().next().down('img');
        var dialog = new MUIL.Dialog.Image(image);
        return false;
    },
    
    'a.submit' : function(e) {
        /**
        * Event: click
        * Action: submit the form given as a param. (used by captcha)
        */
        var params = this.getClassParameters();
        var form = $(params.form);
        if (form){
          form.submit();
        }
        return false;
    }
};
Event.addBehavior(hyperlink_rules);

/**
 * Behaviour rules for form elements
 */

var form_rules = {
	'form.overlabel' : function() {
		this.addClassName('overlabel-apply');
		this.removeClassName('overlabel');
	},
	'form.overlabel-apply label:click' : function(event) {
		// focus input field
		var field = this.getAttribute('for');
		if (field) {
			field.focus();
		}
	},
	'form.overlabel-apply input:focus' : function(event) {
		// hide label
		var label = $(this.form).down('label[for='+this.id+']');
		if (label) {
			label.setStyle({textIndent: '-10000px'});
		}
	},
	'form.overlabel-apply input:blur' : function(event) {
		if ('' == this.getValue()) {
			// show label if no value
			var label = $(this.form).down('label[for='+this.id+']');
			if (label) {
				label.setStyle({textIndent: '0px'});
			}
		}
	},
	'form.auto-submit' : function(e) {
		this.submit();
	},
	'select.auto-submit:change' : function(e) {
		this.form.submit();
	},
	'input[type!="radio"].auto-submit:change,input[type!="checkbox"].auto-submit:change, input[type="radio"].auto-submit:click,input[type="checkbox"].auto-submit:click' : function(e) {
		this.form.submit();
	},
	/**
	 * Event:  blur
	 * Action: convert field value to upper case
	 */
	'input.auto-upper:blur' : function(e) {
		this.value = this.value.toUpperCase();
	},
	
	/**
	 * Event:  change
	 * Action: convert field value to upper case
	 */
	'input.auto-upper:change' : function(e) {
		this.value = this.value.toUpperCase();
	},
	'.default-value:blur' : function(e) {
		/**
		 * Event:  blur
		 * Action:
		 *   - when empty set default value
		 */
		if(this.value == ''){
			var params = this.getClassParameters();
			if(params.default_value != ''){
				this.value = params.default_value;
				this.addClassName('auto-clear');
			} 
		}
	},
	'.auto-blur:focus' : function(e) {
	
		/**
		 * Event:  focus
		 * Action:
		 *   - replace field's classname from "-off" to "-on"
		 *   - if labeled, replace label's classname from "-off" to "-on"
		 *   - if label is image, replace image with "_hover" version
		 */
		this.className = this.className.replace('-off','-on');
		var fieldLabel = $(this.form).down('[for=' + this.id + ']');
		if (fieldLabel) {
			fieldLabel.className = fieldLabel.className.replace('-off','-on');
			var image = fieldLabel.down('img');
			if (image) {
				image.src = image.src.replace('_normal','_hover');
			}
		}
		// Check for grouped fields
		var fieldSet = this.up('fieldset');
		if (fieldSet && fieldSet.up('fieldset')) {
			var legend = fieldSet.down('legend');
			if (legend) {
				legend.className = legend.className.replace('-off', '-on');
			}
		}
	},
	'.auto-blur:blur' : function(e) {
	
		/**
		 * Event:  blur
		 * Action:
		 *   - replace field's classname from "-on" to "-off"
		 *   - if labeled, replace label's classname from "-on" to "-off"
		 *   - if label is image, replace image with "_normal" version
		 */
		this.className = this.className.replace('-on','-off');
		var fieldLabel = $(this.form).down('[for=' + this.id + ']');
		if (fieldLabel) {
			fieldLabel.className = fieldLabel.className.replace('-on','-off');
			var image = fieldLabel.down('img');
			if (image) {
				image.src = image.src.replace('_hover','_normal');
			}
		}
		// Check for grouped fields
		var fieldSet = this.up('fieldset');
		if (fieldSet && fieldSet.up('fieldset')) {
			var legend = fieldSet.down('legend');
			if (legend) {
				legend.className = legend.className.replace('-on', '-off');
			}
		}
	},
	'.auto-clear:focus' : function(e) {
	
		/**
		 * Event:  focus
		 * Action:
		 *   - clear value
		 *   - remove auto-clear class
		 */
		if (this.hasClassName('auto-clear')) {
			this.value='';
		}
		this.removeClassName('auto-clear');
	},
	'input.rollover:mouseover' : function(el) {
	
		/**
		 * Event:  mouseover
		 * Action:
		 *   - if not "active", replace classname by "-hover" classname
		 *   - if type is "image", replace image by "_hover" version
		 */
		if (!this.hasClassName('active')) {
			this.className = this.className.replace('-normal','-hover');
			if (this.type == 'image') {
				this.src = this.src.replace('_normal','_hover');
			}
		}
	},
	'input.rollover:mouseout' : function(e) {
		/**
		 * Event:  mouseout
		 * Action:
		 *   - replace classname by "-hover" classname
		 *   - if type is "image", replace image by "_hover" version
		 */
		if (!this.hasClassName('active')) {
			this.className = this.className.replace('-hover','-normal');
			if (this.type == 'image') {
				this.src = this.src.replace('_hover','_normal');
			}
		}
	}
};
Event.addBehavior(form_rules);

var rollover_rules = {
    'img.rollover:mouseover' : function(el) {
      /**
       * Event:  mouseover
       * Action: show hover version
       */
    this.src = this.src.replace('_normal','_hover');
    return false;

  },
    'img.rollover:mouseout' : function(el) {
      /**
       * Event:  mouseout
       * Action: show normal version
       */
    this.src = this.src.replace('_hover','_normal');
    return false;
  }
};
Event.addBehavior(rollover_rules);

var hostel_facility_rules = {
	    '.facilities-controls a:click' : function(event) {
	      /**
	       * Event:  mouseclick
	       * Action: show normal version
	       */
		var params = this.getClassParameters();
		event.stop();
		$$('.facilities-controls li').each(function(dataItem,dataIndex){
			if (dataIndex == (params.facility-1)) {
				dataItem.addClassName('active');
				$('facility'+params.facility).addClassName('active');
			} else {
				dataItem.removeClassName('active');
				$('facility'+(dataIndex+1)).removeClassName('active');
			}
		});
	  }
	};
Event.addBehavior(hostel_facility_rules);

var input_select_rules = {
	'input[type="text"]:focus': function(){
		Form.Element.select(this);
	}
};
Event.addBehavior(input_select_rules);

var language_select_rules = {
	'.language-select a:click': function(event){
		$('language-select').addClassName('visible');
		return false;
	}
};
Event.addBehavior(language_select_rules);

var carousel_rules = {
   '.home': function() {
       var tabRotator1 = new TabRotator(this, {
           contentElementSelector: '.carousel-background .carousel-content',
           tabsElementSelector: '.carousel-controls',
           parameterName: 'carouselID',
           interval: 8,
           animateLoader: false,
           animationFrames: 18,
           animationDuration: 0.25 // visual switch duration
       }),
       tabRotator2 = new TabRotator(this, {
           contentElementSelector: '.carousel .carousel-content',
           tabsElementSelector: '.carousel-controls',
           parameterName: 'carouselID',
           interval: 8,
           animateLoader: false,
           animationFrames: 18,
           animationDuration: 1 // text switch duration
       });
   }
};
Event.addBehavior(carousel_rules);

var dayprice_rules = {
   'a.toggle-weekview:click': function() {
		var params = this.getClassParameters();
		if (params && $(params.weekview)) {
			if ($(params.weekview).hasClassName('weekview-visible')) {
				$(params.weekview).removeClassName('weekview-visible');
			} else {
				$(params.weekview).addClassName('weekview-visible');
			}
		}
		return false;
	}
};
Event.addBehavior(dayprice_rules);

var hostelgallery_rules = {
   'div.impressions div.active': function() {
		var tabRotator = new TabRotator(this, {
           contentElementSelector: '.impressions-content',
           tabsElementSelector: '.impressions-thumbs',
           parameterName: 'impressionID',
           interval: 4,
           animateLoader: false,
           animationFrames: 18,
           animationDuration: 1.5
       });
  }
};
Event.addBehavior(hostelgallery_rules);

/**
* Datepicker rules
*/
var datepicker_rules ={
	'.datepicker' : function(el) {
		/**
		 * Event: load
		 * Action: append inputboxes with a datepicker
		 */
		if (interval = Element.getClassParameter(this, 'time')) {
			var options ={icon: '/images/calendar.png', timePicker: true, timePickerAdjacent: true, locale: Element.getClassParameter(this, 'locale'), timePicker24h: true};
		} else {
			var options ={icon: '/images/calendar.png', locale: Element.getClassParameter(this, 'locale')};
		}
		var picker = new Control.DatePicker(this,options);
	}
};
Event.addBehavior(datepicker_rules);

var analytics_rules = {
	'#form_booking #action_continue:click': function() {
		pageTracker._trackEvent("boeken", "stap2");
		pageTracker._trackPageview("boeken/stap2/");
	},
	'#form_booking #promoEntry-submit:click': function() {
		pageTracker._trackEvent("boeken", "kortingscode");
		pageTracker._trackPageview("boeken/kortingscode/");
	},
	'#form_booking #action_checkout:click': function() {
		pageTracker._trackEvent("boeken", "stap3");
		pageTracker._trackPageview("boeken/stap3/");
	},
	'.newsletter form input[type=submit]:click': function() {
		var language = $$('html')[0].readAttribute('lang');
		if (language) {
			pageTracker._trackEvent("nieuwsbrief", "nieuwsbrief_" + language);
			pageTracker._trackPageview("nieuwsbrief/nieuwsbrief_" + language);
		}
	}
};
Event.addBehavior(analytics_rules);

var pie_rules = {
	'.ie8 .carousel, .ie8 .utility ul, .ie8 ul.hostel-overview-nav a:hover, .ie8 ul.hostel-overview-nav a:active, .ie8 ul.hostel-overview-nav .active a:link, .ie8 ul.hostel-overview-nav .active a:visited, .ie8 .booking-promotions, .ie8 .booking-stayokaycard, .ie8 .booking-continue, .ie8 ul.arrangement-content li, .ie8 ul.groups-overview div, .ie8 .form_booking, .ie8 ul.hostel-overview a h2, .ie8 ul.impressions-na, .ie8 ul.hostel-overview-nav.ie8 .utility ul, .ie8 .subnav, .ie8 .subnav a:hover, .ie8 .subnav a:active, .ie8 .subnav .active a:link, .ie8 .subnav .active a:visited, .ie8 .spot, .ie8 ul.arrangement-overview p, .ie8 .more-link a:link, .ie8 .more-link a:visited, .ie8 .quickbooking div, .ie8 ul.listing-offers, .ie8 .page-top, .ie8 form .btn:hover, .ie8 form .btn, .ie8 .hostel-address-info, .ie8 .loading': function(event) {
		PIE.attach(this);
	}
};
Event.addBehavior(pie_rules);

var form_quickbooking_rules = {
	'form.form-quickbooking select.hostelID:change': function(event) {
		if (this.value != '') {
			this.form.submit();
		}
	}
};
Event.addBehavior(form_quickbooking_rules);



var booking_rules = {
	'input.refresh-basket:click, select.refresh-basket:change': function(event) {
		$('refresh').value = '1';
		this.form.submit();
	},
	'form.booking-products input.btn-add-product:click': function(event) {
		$('refresh').value = '1';
		this.form.submit();
	},
	'form.booking-addons input.btn-add-product:click': function(event) {
		$('refresh').value = '1';
		this.form.submit();
	},	
	'#booking-goto_payment:click': function() {
		$('booking-confirmation').submit();
		return false;
	},
	'.booking-checkout-issuer:change': function() {
		if (this.value != '') {
			// the select option is changed, make sure the corresponding radio button is checked
			var issuerSelectId = this.id;
			var methodID = (issuerSelectId.replace('issuer', 'method'));
			$(methodID).checked = true;
			
			// unset the other selected issuers
			$$('.booking-checkout-issuer').each(function(ele) {
				if (ele.id != issuerSelectId) {
					ele.clear();
				}
			});
		}
	},
	'.booking-checkout-method:change': function() {
		// unset all selected issuers
		$$('.booking-checkout-issuer').each(function(ele) {
			ele.clear();
		});
	}
};
Event.addBehavior(booking_rules);

var zoom_rules = {
	'.zoom-box:click' : function(e) {
		 /**
		 * Event:  click
		 * Action: open zoomed picture
		 */
		if (this.hasClassName('zoom-in')) {
			this.removeClassName('zoom-in');
		} else {
			// before opening this item, make sure no other item is open
			var target;
			if ($$('div.booking').size() > 0) {
				// hostel detail page
				target = 'div.booking';
			} else {
				// hostel overview page
				target = 'table';
			}
			var oldZoomedItem = this.up(target).down('div.zoom-in');

			if (oldZoomedItem) {
				oldZoomedItem.removeClassName('zoom-in');
			} 
			this.addClassName('zoom-in');

		
		}
	    return true;
	}
};
Event.addBehavior(zoom_rules);

var lightbox_rules = {
	'#mapbox' : function() {
		 /**
		 * Event:  click
		 * Action: open map in lightbox
		 */
		 new FancyZoom('mapbox');
	}
};
Event.addBehavior(lightbox_rules);

var loading_rules = {
	'form.booking-order:submit' : function(e) {
		 /**
		 * Event:  click
		 * Action: open map in lightbox
		 */
		if ($$('.loading')[0]) {
			$$('.loading')[0].addClassName('loading-active');
		}
	}
};
Event.addBehavior(loading_rules);



