window.com = window.com || {};
com.principle = com.principle || {};
com.principle.calendars = com.principle.calendars || {};

if (!window.console) {
	window.console = {
		log: function () {
			alert(arguments[0]);
		}
	};
}
/*
 * DOL 0.1 
 * Designer Oriented Library.
 * Copyright (c) 2008-2011 Shao S.Q. Chen
 * Licensed under the MIT License
 * Author: Laurie Z. Gao and Shao S.Q. Chen
*/

window.DOL = window.DOL || {};
DOL.Navigation = function (){
	
	var settings = {};
	var view = {};
	
	var defaults = {
		triggerEvent: 'click',
		loopingInterval: 10,
		duration: 500,
		debug: false
	};
	
	function setView() {
		if (settings.debug) console.log('Setting views');
		view = {};
		view.navBar = $(settings.navBar);
		view.items = view.navBar.find('.item');
		view.viewStack = $('#' + view.navBar.attr('dataProvider'));
		view.views = view.viewStack.find('.view');
		
		for (var i = 0; i < view.items.length; i++){
			view.items[i].index = i;
			$(view.items[i]).text(
				$(view.views[i]).attr('viewTitle')
			);
		}
	};
	
	function setEventListeners() {
		if (settings.debug) console.log('Setting Event Listeners');
		settings.triggerEvent = view.navBar.attr('triggerEvent') || settings.triggerEvent;
		settings.loopingInterval = view.viewStack.attr('loopingInterval') || settings.loopingInterval;
		settings.duration = parseInt(view.viewStack.attr('duration') || settings.duration);

		for (var i = 0; i < view.items.length; i++){
			$(view.items[i]).bind(settings.triggerEvent, function(event){
				$(this).blur();
				switchTo(this.index);
				clearTimeout(view.timer);
				$(this).trigger('dropdownComment');
				return false;
			});
		}

		for (var i = 0; i < view.items.length; i++){
			$(view.items[i]).bind('dropdownComment', function(event){
				var dropdownBlock = $('#' + ($(this).attr('dataProvider')));
				var dropdownBlockTriggers = $(this).siblings('.dropdownBlockTrigger');

				$(this).toggleClass('comment_active');
				dropdownBlock.slideToggle(parseInt(dropdownBlock.attr('speed')) || 100);
				$(dropdownBlockTriggers).each(function(i, element){
					if ( !($(element).hasClass('comment_active')) ) return;
					$(element).removeClass('comment_active');
					$('#' + ($(element).attr('dataProvider'))).slideUp(parseInt(dropdownBlock.attr('speed')) || 100);
				});
				return false;
			});
		}

		for (var i = 0; i < view.views.length; i++){
			$(view.views[i]).bind(settings.triggerEvent, function(event){
				$(this).blur();
				clearTimeout(view.timer);
				return false;
			});
			
			$(view.views[i]).bind('mouseout', function(event){
				$(this).blur();
				startLooping();
				return false;
			});
		}
	};
	
	function switchTo(index) {
		if (view.currentIndex || view.currentIndex === 0) {
			if (view.currentIndex == index) return;
			$(view.views[view.currentIndex]).fadeOut(settings.duration);
			$(view.items[view.currentIndex]).removeClass('active');
		};
		
		$(view.items[index]).addClass('active');
		$(view.views[index]).fadeIn(settings.duration);
		view.currentIndex = index;
		startLooping();
	};
	
	function startLooping() {
		clearTimeout(view.timer);
		if (! (settings.loopingInterval && settings.loopingInterval > 0)) return; 
		view.timer = setTimeout(function(){
			switchTo(getNextIndex());
		}, settings.loopingInterval)	
	};
	
	function getNextIndex() {
		var len = view.views.length;
		var nextViewIndex = (view.currentIndex + 1) % len;
		return nextViewIndex
	};
	
	function getPreviousIndex() {
		var len = view.views.length;
		var previousViewIndex = (view.currentIndex - 1 + len) % len;
		return previousViewIndex
	};
	
	return {
		init: function(options){
			settings = $.extend({}, defaults, options);
			setView();
			setEventListeners();
			switchTo(0);
		}
	}
}();

DOL.Validation = function (){
	
	var settings = {};
	var view = {};
	
	var defaults = {
		debug: false
	};
	
	function setView() {
		view = {};
		view.form = $(settings.form);
		view.requiredFields = $(view.form).find('.requiredField');
		view.btnSubmit = $(view.form).find('#btnSubmit');
		view.validationMsg = $(view.form).find('#validationMsg');
	};

	function setEventListeners() {
		
		$(view.btnSubmit).click(function(e){
			try {
				validate();
				$(view.validationMsg).hide();
				$(view.form).submit();
			} catch (err) {
				try { 
					if (err.message && err.message != '') $(view.validationMsg).text(err.message).show();
					err.element.focus();
					err.element.addClass('errorField');
				} catch (e) {}
			}
			return false;
		});	
		
		$('#emailNotifyOffers').keyup(function() {
			$('#chkNotifyOffers').attr('checked', 'checked');
		})

		
	}
	
	function validate() {
		
		$(view.requiredFields).each(function(i, el) {
			if (($.trim($(el).val())) == '') {
				throw {
					element: $(el),
					message: com.principle.calendars.Config.validationMessage['empty']
				}
			}
		});
		
		if (! /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})$/.test($('#emailNotifyOffers').val())) {
			throw {
				element: $('#emailNotifyOffers'),
				message: com.principle.calendars.Config.validationMessage['invalid']
			}
		}
		
		if (!($('#chkNotifyOffers').attr('checked'))) {
			throw {
				element: $('#chkNotifyOffers'),
				message: com.principle.calendars.Config.validationMessage['empty']
			}
		}
	}
	
	return {
		init: function (options) {
			settings = $.extend({}, defaults, options);
			setView();
			setEventListeners();
		}
	}
}()
