
jQuery(document).ready(function(){
	
    initDatePicker();

	var navigation = new Navigation({
		root: '.nav.main',
		delayIn: 400,
		submenu: '.sub'
	});

	jQuery('#footer ul').ListDivider({
		maxLists : 4,
        equal: false
	});
});


/*
 * Main navigation
 */
Navigation = function(obj) {
	
	var self = this;
	this.rootSelector = obj.root || '#main_nav';
	this.root = jQuery(this.rootSelector);
	this.delayIn = obj.delayIn || obj.delay || obj.delayOut || 500;
	this.delayOut = obj.delayOut || obj.delay || obj.delayIn || 500;
	this.submenuSelector = obj.submenu || '.mn_sub';
	this.timerIn, this.timerOut;
	this.submenuOpened = false;
	
	this.cover = jQuery('<div id="main_nav_cover" />').hide().appendTo('body');
	
	this.root.delegate('li', 'mouseenter focusin', function() {
		var item = jQuery(this);
		clearTimeout(self.timerIn);
		clearTimeout(self.timerOut);
		var open = function() {			
			if(jQuery(self.submenuSelector, item).length > 0 || item.parents(self.submenuSelector).length > 0) self.open(item);
		};
		if(self.submenuOpened) {
			self.closeAll();
			open();		
		}	
		else self.timerIn = setTimeout(open, self.delayIn);
	});
	
	this.root.delegate('li', 'mouseleave focusout', function(e) {
		clearTimeout(self.timerIn);
		clearTimeout(self.timerOut);
		self.timerOut = setTimeout(function() {
			self.closeAll();
		}, self.delayOut);
	});
};

Navigation.prototype = {
	open: function(item) {
		item.parents('li').addClass('open');
		item.addClass('open');
		this.submenuOpened = true;
		this.cover.stop().fadeTo(200, 0.21);
	},
	closeAll: function() {
		var items = jQuery('li', this.root);
		items.removeClass('open');
		this.submenuOpened = false;
		this.cover.stop().fadeOut(200);
	}
};


/*
 * Calendar datepicker with forms 
 * 
 * @author Kristiaan Thivessen, <kristiaan.thivessen@efocus.nl>
 * @since 24 oktober 2011
 * @uses jQuery, jQuery UI
 */
function initDatePicker() {
	if (jQuery.datepicker == undefined) return false;
	
	jQuery.datepicker.regional.nl = {
		closeText: 'Sluiten',
		prevText: 'Vorige maand',
		nextText: 'Volgende maand',
		currentText: 'Vandaag',
		monthNames: ['januari', 'februari', 'maart', 'april', 'mei', 'juni', 'juli', 'augustus', 'september', 'oktober', 'november', 'december'],
		monthNamesShort: ['jan', 'feb', 'maa', 'apr', 'mei', 'jun', 'jul', 'aug', 'sep', 'okt', 'nov', 'dec'],
		dayNames: ['zondag', 'maandag', 'dinsdag', 'woensdag', 'donderdag', 'vrijdag', 'zaterdag'],
		dayNamesShort: ['zon', 'maa', 'din', 'woe', 'don', 'vri', 'zat'],
		dayNamesMin: ['zo', 'ma', 'di', 'wo', 'do', 'vr', 'za'],
		weekHeader: 'Wk',
		dateFormat: 'dd-mm-yy',
		firstDay: 1,
		isRTL: false,
		showMonthAfterYear: false,
		yearSuffix: ''
	};
	var lang = jQuery('html').attr('lang');
	if(lang == 'nl') jQuery.datepicker.setDefaults(jQuery.datepicker.regional.nl);

	if (jQuery('.datepicker.start, .datepicker.end').length != 0) {
		var dates = jQuery('.datepicker.start, .datepicker.end').datepicker({
			showOn:				'both',
			buttonImage:		'/img/ico-date.png',
			buttonImageOnly:	true,
			buttonText:			'Toon kalender',
			onSelect: function (selectedDate) {
				var option = (jQuery(this).hasClass('end')) ? 'maxDate' : 'minDate';
				var	instance = jQuery(this).data('datepicker');
				date = jQuery.datepicker.parseDate(
					instance.settings.dateFormat ||	jQuery.datepicker._defaults.dateFormat,
					selectedDate
				);
				dates.not(this).datepicker('option', option, date);
				}
			}, 
			jQuery.datepicker.regional['nl']
		);
	} else {
		var dates = jQuery('.datepicker').datepicker({
			showOn:				'both',
			buttonImage:		'/img/ico-date.png',
			buttonImageOnly:	true,
			buttonText:			'Toon kalender'
			},
			jQuery.datepicker.regional['nl']
		);
	}
};

/*
 * Make all block's equal height
 *
 * @author Kristiaan Thivessen, <kristiaan.thivessen@efocus.nl>
 * @since 21 jul 2011
 * @version 1.0
 * @copyright eFocus
 * @uses jQuery
 */
function equalHeight(strClassOuter, strClassInside) {
	if (!strClassOuter) strClassOuter = ".equalize";
	if (!strClassInside) strClassInside = ".equal";
	
    jQuery(strClassOuter).each(function(){
        var max = 0;
		
		// select only current tier of equal objects, not nested tiers
		var arrNested = jQuery(strClassOuter + " " + strClassInside, this);
		var arrChildren = jQuery(strClassInside, this).not(arrNested);
		
		// determine the tallest child
        arrChildren.each(function() {
			max = Math.max(max, jQuery(this).outerHeight());
        });
		// set all children to the tallest child
        arrChildren.each(function() {
            var el = jQuery(this);
			var val =  max - (el.outerHeight() - el.height());
            el.css({ 
				minHeight: val + 'px'
			});
        });
    });
};

/*
 * Init Carousel thumbs for the coverflow.
 * @author Lee Boonstra, <lee.boonstra@efocus.nl>
 * @since 4 apr 2011
 * @version 1.0
 * @uses coverflow.jquery.js
 * @copyright eFocus
 * 
 * @uses jQuery 1.2.6, <http://www.jquery.com> or higher
 * TODO cookies
 */
function setNavigation(i){
	var defaultItems = jQuery('div.carousel').find('li').not(jQuery('div.carousel').find('li.cloned'));
	jQuery(defaultItems).removeClass('active');
	jQuery(defaultItems[i]).toggleClass('active');
};

function initCarousel(){
	jQuery('div.carousel').Carousel();
	var defaultItems = jQuery('div.carousel').find('li').not(jQuery('div.carousel').find('li.cloned, li.empty'));
	jQuery(defaultItems).click(function(e){
		var path = e.target.src.split('?')[0];
		path = path.split('~')[1];
		path = '~' + path; 
		
		jQuery(defaultItems).each(function(i,el){
			if(decodeURI(path) === jQuery(el).find('img').attr('src').split('?')[0]){
				coverflow.show(i)
				jQuery(defaultItems).removeClass('active');
				jQuery(defaultItems[i]).toggleClass('active');
			}
		});	
	});
	
	jQuery("#carousel-thumbs").css("visibility", "visible");
		
	// andere optie is thumbs niet ss verkleinen waardoor URL dezelfde blijft.
};

/*
 * Routeplanner
 *
 * @author Phi son Do, <phison.do@efocus.nl>
 * @since 27 okt 2011
 * @version 1.0
 * @copyright eFocus
 * @uses jQuery
 */
function submitOV9292(){
	
	var doOVForm = function() {
		var ovForm = jQuery('form[name=ov9292]')
	
		if (jQuery(ovForm).length <= 0) { return false }
			
		//Zet de waarden van het getoonde formulier over naar de "hidden" form en submit deze uiteindelijk
	    document.forms['ov9292'].PCcijfers.value = document.forms['form1'].PCcijfers.value;
	    document.forms['ov9292'].PCletters.value = document.forms['form1'].PCletters.value;
	    //Datum staat in een dropdownlist (Date)
	    document.forms['ov9292'].Day.value = document.forms['form1'].Date.value.substring(0, 2);
	    document.forms['ov9292'].Month.value = document.forms['form1'].Date.value.substring(3, 5);
	    document.forms['ov9292'].Year.value = document.forms['form1'].Date.value.substring(6, 10);
	    document.forms['ov9292'].Hour.value = document.forms['form1'].Hour.value;
	    document.forms['ov9292'].Minute.value = document.forms['form1'].Minute.value;
	    
	    if (document.forms['form1'].type[0].checked)
	        document.forms['ov9292'].type.value = document.forms['form1'].type[0].value;
	    else if (document.forms['form1'].type[1].checked)
	        document.forms['ov9292'].type.value = document.forms['form1'].type[1].value;
	    
	    if (document.forms['form1'].mode[0].checked)
	        document.forms['ov9292'].mode.value = document.forms['form1'].mode[0].value;
	    if (document.forms['form1'].mode[1].checked)
	        document.forms['ov9292'].mode.value = document.forms['form1'].mode[1].value;
	    if (document.forms['form1'].mode[2].checked)
	        document.forms['ov9292'].mode.value = document.forms['form1'].mode[2].value;    
			
		ovForm.submit();	
	}
	
	jQuery('#ov9292Submit').click(function(){
		doOVForm();	
	});		
};

/* modify booking date on arr count */

function initBooking() {
	var start = jQuery('.booking input.start');
	var end = jQuery('.booking input.end');
	var arrDays = jQuery('.booking input.arr').val();
	
	if(!arrDays) return;
	
	var modDate = function(date, mod) {
		var r = /^[0-9]{1,2}-[0-9]{1,2}-(19|20)[0-9]{2}$/;
		if(!arrDays || !r.test(date)) return;
		var s = date.split(/[ -]/);
		var t = new Date(s[2], s[1]-1, s[0]);
		t.setTime(t.getTime() + (mod * 86400000));
		return pad(t.getDate(), 2) + '-' + pad(t.getMonth()+1, 2) + '-' + t.getFullYear();			
	}
	
	start.change(function(){
		end.val(modDate(start.val(), arrDays));	
	});
	end.change(function(){
		start.val(modDate(end.val(), -arrDays));		
	});
};

function pad(n, l) {
	var s = '' + n;
	while (s.length < l) {
		s = '0' + s;
	}	
	return s;
};

(function(){
	/*
	 * Generates equal number of seperated lists.
	 * by calculating the best option for equal rows.
	 * @author Lee Boonstra, <lee.boonstra@efocus.nl>
	 * @since 4 apr 2011
	 * @version 1.0
	 * @copyright eFocus
	 *
	 * @uses jQuery 1.2.6, <http://www.jquery.com> or higher
	 */
	jQuery.fn.ListDivider = function(opt){

		var options = {
            equal: false,
            handleRest: true,
			maxLists: 3
		};

		options = jQuery.extend({}, options, opt);

		return this.each(function(){
			var placeholder = jQuery(this);
			var arrItems = jQuery('>li', placeholder);
			splitRows(arrItems);

			function getRowAmount(n){
                if(options.equal){
                    for(var i=options.maxLists; i>0; i--){
                        if(n%i == 0){
                            return i;
                        }
                    }
                } else {
                    return options.maxLists;
                }
			}

            function createNew(num, el){
                var list = jQuery('<ul></ul>');
                list.addClass('list list'+num);
                if(el !== null) list.append(el);
                return list;
            }

			function splitRows(arr){
                var cols = getRowAmount(arr.length);
				var num = Math.floor(arr.length / cols);
				var counter = 0;
                var iCounter = 0;
                var list = createNew(counter, null);
				var container = jQuery('<div class="splitted_lists"></div>');
                var rest = null;

                if(options.equal){
                     jQuery(arr).each(function(i,el){
                        if(i%num == 0) {
                            list = createNew(counter, this);
                            container.append(list);
                            counter++;
                        } else {
                            list.append(this);
                        }
                     });
                } else {
                    if(options.handleRest){
                        var restTotal = arr.length % (num * cols);
                        rest = new Array();

                        for(var i=0; i<restTotal; i++){
                            //loop through rest items
                            rest.push(arr.length-i);
                        }
                    }

                    //TODO find some logic to calculate the rest items
                    jQuery(arr).each(function(i){
                        if(counter === 0){
                            //first list
                            list = createNew(counter, this);
                            container.append(list);
                            counter++;                          
                        }
                        if(iCounter === cols){
                            //more new list
                            iCounter = 0;
                            list = createNew(counter, this);
                            container.append(list);
                            counter++;
                        } else {
                            //append items
                            list.append(this);
                        }
                        iCounter++;
                    });
                }
                
				placeholder.parent().addClass('split' + cols);
                placeholder.replaceWith(container);
			}
		});
	};
})(jQuery);
