jQuery(document).ready(function(){
	// just run the shop js
	if(typeof(jQuery.runCart) == 'function'){
		jQuery.runCart('C');
	}

	var ezh = new ezp_hbm();
	ezh.initSite();
});

var lastEvent = false;
function ezp_hbm() {
	// Ajax Basic Handler
	this.getData = function(target, action, params, elts) {
		var container = this;
		var ajax_dataType = 'json';
		var ajax_async = false;
		if(target == 'calendar') {
			var ajax_url = '/calendar/view/';
		}

		ajax_url = ajax_url + action + '/' + params;
		$.ajax({
			type: "GET",
			url: ajax_url,
			async: ajax_async,
			dataType: ajax_dataType,
			success: function(_return) {
				var _date;
				if(target == 'calendar') {
					if(action == 'edit') {
						var newEvent = new Object();
						newEvent._id = _return.event.id;
						newEvent.title = _return.event.calendarname;
						_date = new Date(_return.event.reminderdate*1000);
						newEvent.start = $.fullCalendar.formatDate(_date,'u');
						newEvent.remindertime = _return.event.remindertime;
						newEvent.allDay = true;
						container.calendar.fullCalendar('updateEvent', newEvent );
						
						if(_return.success){
							container.showMessage(_return.msg);
						}
					} else if(action == 'get') {

					} else if(action == 'add') {

						if(_return.success) {
							eventDate = new Date(_return.event.reminderdate * 1000);
							newEvent = {
								id: _return.id,
								title: _return.event.calendarname,
								start: $.fullCalendar.formatDate(eventDate,'u'),
								remindertime : _return.event.remindertime,
								allDay: true
							};
							container.calendar.fullCalendar('renderEvent',	newEvent, false);
							container.calendar.fullCalendar('unselect');
							container.showMessage(_return.msg);
						}
					} else if(action == 'remove') {

						container.disableCalendarEditor();
						container.calendar.fullCalendar('removeEvents',_return.id);
						container.showMessage(_return.msg);
					}
				}
			}
		});

		return true;
	},
	this.disableCalendarEditor = function() { 
		$('#calendar-date, #calendar-id, #calendar-action, #calendar-name').attr('value','');
		$('#calendar-editor').fadeOut();
	},
	this.showMessage = function(text){
		$.nyroModalManual({
			content : '<div id="calendar-message">' + text + '</div>',
			endFillContent : function(elts, settings){
				$('#calendar-message', elts.content).show();
			},
			endRemove : function(elts, settings){
				$('#calendar-message', elts.content).text('');
			},
			closeButton: '<a title="close" id="closeBut" class="nyroModalClose" href="#">Schließen</a>',
			minWidth: 430,
			bgColor: 'none',
			height: 300,
			showBackground: function (elts, settings, callback) {
				callback();
			}
		});
	//		setTimeout(function(){
	//			$.nyroModalRemove();
	//		},
	//		5000);
	},
	this.initCalendar = function() {
		var container = this;
		var date = new Date();
		var d = date.getDate();
		var m = date.getMonth();
		var y = date.getFullYear();

		this.calendar = $('#calendar').fullCalendar({
			header: {
				left: 'prev,next today',
				center: 'title',
				right: ''
			},
			editable: false,
			allDayText: 'Ganzt.',
			firstHour: 8,
			slotMinutes: 30,
			defaultEventMinutes: 120,
			axisFormat: 'H:mm',

			dragOpacity: {
				agenda: .5
			},
			minTime: 0,
			maxTime: 24,
			timeFormat: "H:mm",
			defaultView: 'month',
			monthNames:["Jänner","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"],
			monthNamesShort:["Jän","Feb","März","April","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],
			dayNames:["Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag"],
			dayNamesShort:["SO","MO","DI","MI","DO","FR","SA"],
			columnFormat:{
				month:"ddd",
				week:"dddd d",
				day:"dddd M/d"
			},
			buttonText:{
				prev:"&nbsp;&#9668;&nbsp;",
				next:"&nbsp;&#9658;&nbsp;",
				prevYear:"&nbsp;&lt;&lt;&nbsp;",
				nextYear:"&nbsp;&gt;&gt;&nbsp;",
				today:"heute",
				month:"Monat",
				week:"Woche",
				day:"Tag"
			},
			titleFormat:{
				month:"MMMM yyyy",
				week:"MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}",
				day:"dddd, MMM d, yyyy"
			},

			firstDay:1,
			eventRender: function(event, element) {
				if(event.image){
					$(element).find('a.qtip_link').each(function(){
						$(this).qtip({
							content: {
								text: '<img src="' + event.image + '" alt="">' + event.desc,
								title: {
									text: event.title
								}
							},
							position: {
								corner: {
									target: 'topRight',
									tooltip: 'bottomRight'
								}
							},
							show: {
								when: {
									event: 'mouseover'
								},
								delay: 1

							},
							hide: 'mouseout',
							style: {
								border: {
									width: 2,
									radius: 2,
									color: '#EE7F00'
								},
								tip: {
									corner: 'bottomRight'
								},
								title : {
									background: '#fff',
									color: '#375201',
									'font-size': '16px'
								},
								background: '#fff',
								color: '#000',
								width: {
									max: 350,
									min: 300
								},
								padding: 14
							}
						});
					});
				}
			},
			events: function(start, end, callback){
				$.ajax({
					url: '/calendar/view/load',
					dataType: 'json',
					data: {
						// our hypothetical feed requires UNIX timestamps
						start: Math.round(start.getTime() / 1000),
						end: Math.round(end.getTime() / 1000)
					},
					success: function(doc) {
						var events = [];
						if(doc.success == false){
//							container.showMessage(doc.msg);
							container.not_login_msg = doc.msg;
						}
						if(doc.logged_in == true){
							container.logged_in = true;
						}
						if(typeof(doc.events) == 'object'){
							//console.dir(container.calendar);
							$(doc.events).each(function() {
								events.push({
									id: $(this).attr('id'),
									title: $(this).attr('title'),
									url: $(this).attr('url'),
									image : $(this).attr('image'),
									desc : $(this).attr('desc'),
									remindertime : $(this).attr('remindertime'),
									start: $(this).attr('start') // will be parsed
								});
							});
						}
						callback(events);
					}
				});
			},
			dayClick: function(date, allDay, jsEvent, view) {
				if(container.logged_in == true){
					$.nyroModalManual({
						endFillContent : function(elts, settings){
							$('#calendar-date', elts.content).attr('value',$.fullCalendar.formatDate(date,'dd.MM.yyyy'));
							$('#calendar-action', elts.content).attr('value','add');
							
							$('#calendar-save', elts.content).click(function() {
								if($('#calendar-action', elts.content).attr('value') == 'add') {
									container.getData('calendar','add', $.urlencode($('#calendar-name', elts.content).attr('value')) +'/'+$('#calendar-date', elts.content).attr('value')+'/'+$('#calendar_remind_days option:selected', elts.content).val(), elts);
								} else {
									container.getData('calendar','edit', $('#calendar-id', elts.content).attr('value') + '/' + $('#calendar-name', elts.content).attr('value') + '/'+$('#calendar-date', elts.content).attr('value')+ '/' + $('#calendar_remind_days option:selected', elts.content).val(), elts);
								}
							});
							$('#calendar-cancel', elts.content).click(function() {
								$.nyroModalRemove();
							});

							$('#calendar-delete', elts.content).click(function() {
								container.getData('calendar','remove', $('#calendar-id', elts.content).val(), elts);
							});
						},
						content : $('#calendar-editor').html(),
						closeButton: '<a title="close" id="closeBut" class="nyroModalClose" href="#">Schließen</a>',
						minWidth: 340,
						bgColor: 'none',
						height: 300,
						showBackground: function (elts, settings, callback) {
						//elts.bg.css({opacity:0}).fadeTo(500, 0.7, callback);
						callback();
						}
					});
				} else {
//					container.showMessage(container.not_login_msg);
				}
				
			},
			eventClick: function(calEvent, jsEvent, view) {
				if(calEvent.id > 0){
					$.nyroModalManual({
						hideLoading : function(elts, settings, callback){
							var ajax_dataType = 'json';
							var ajax_async = false;
							var ajax_url = '/calendar/view/get/' + calEvent.id;
							$.ajax({
								type: "GET",
								url: ajax_url,
								async: ajax_async,
								dataType: ajax_dataType,
								success: function(_return) {
									container._return = _return;
								}
							});
							callback();
						},
						endFillContent : function(elts, settings){
							$('#calendar-date', elts.content).attr('value',container._return.data.reminderdate);
							$('#calendar-id', elts.content).attr('value',container._return.data.id);
							$('#calendar-action', elts.content).attr('value','edit');
							$('#calendar-name', elts.content).attr('value',container._return.data.calendarname);
							$('#calendar_remind_days option[value="' + container._return.data.remindertime +'"]', elts.content).attr('selected', 'selected');
							$('#calendar-action', elts.content).attr('value','edit');

							$('#calendar-save', elts.content).click(function() {
								container.getData('calendar','edit', calEvent.id + '/'+$('#calendar-date', elts.content).attr('value')+'/'+ $('#calendar_remind_days option:selected', elts.content).val() + '/' + $('#calendar-name', elts.content).val() , elts);
							});
							$('#calendar-cancel', elts.content).click(function() {
								$.nyroModalRemove();
							});

							$('#calendar-delete', elts.content).click(function() {
								container.getData('calendar','remove', $('#calendar-id', elts.content).attr('value'), elts);
							});
						},
						content : $('#calendar-editor').html(),
						closeButton: '<a title="close" id="closeBut" class="nyroModalClose" href="#">Schließen</a>',
						minWidth: 340,
						bgColor: 'none',
						height: 300,
						showBackground: function (elts, settings, callback) {
							callback();
						}
					});
				} else if(calEvent.url){
					return true;
				} else {
					return false;
				}
			}
		});
		container = this;
		
	},
	this.initSite = function() {

		this.initCalendar();
		//storedetail opens in nyromodal
		$('.storeLink').click(function(e){
			e.preventDefault();
			var _url = $(this).attr('href');
			$.nyroModalManual({
				url : '/layout/set/ajax' + _url,
				closeButton: '<a title="close" id="closeBut" class="nyroModalClose" href="#">Schließen</a>',
				minWidth: 840,
				height: 400
			});
			return false;
		});
		this.initBackground();
	},
	this.positionBgImage = function(){
		var bgImageWidth = $('#bg-image img').width();
		var screenMiddle;
		if($.browser.msie){
			screenMiddle = document.body.offsetWidth/2;
		} else {
			screenMiddle = window.innerWidth/2;
		}
		var minDistance = 300;
		var imageDistanceToMiddle = screenMiddle - bgImageWidth;
		if(imageDistanceToMiddle < minDistance){
			var newLeft = screenMiddle - bgImageWidth - minDistance;
			$('#bg-image').css({
				left:newLeft +'px'
			});
		}
	},
	this.initBackground = function(){
		var container = this;
		this.positionBgImage();

		// window resize event
		$(window).resize(function() {
			container.positionBgImage();
		});
		return true;
	}
}
function change_div(div_name){
	var divs = new Array();
	divs[0] = 'store_photo';
	divs[1] = 'store_map';
	divs[2] = 'store_arrival';

	var tables = new Array();
	tables[0] = 'fototable';
	tables[1] = 'maptable';
	tables[2] = 'arrivaltable';

	var links = new Array();
	links[0] = 'fotolink';
	links[1] = 'maplink';
	links[2] = 'arrivallink';


	for(i=0;i<divs.length;i++){
		if(div_name == divs[i]){
			jQuery('#' + divs[i]).css('display', 'block');
			jQuery('#' + tables[i]).addClass('active');
			jQuery('#' + links[i]).addClass('active');
		} else {
			jQuery('#' + divs[i]).css('display', 'none');
			jQuery('#' + tables[i]).removeClass('active');
			jQuery('#' + links[i]).removeClass('active');
		}
	}
}
function _log(msg) {
	if (window.console && window.console.log)
		window.console.log(msg);
}
function explode (delimiter, string, limit) {
	// *     example 1: explode(' ', 'Kevin van Zonneveld');
	// *     returns 1: {0: 'Kevin', 1: 'van', 2: 'Zonneveld'}
	// *     example 2: explode('=', 'a=bc=d', 2);
	// *     returns 2: ['a', 'bc=d']

	var emptyArray = {
		0: ''
	};

	// third argument is not required
	if ( arguments.length < 2 ||
		typeof arguments[0] == 'undefined' ||
		typeof arguments[1] == 'undefined' ) {
		return null;
	}

	if ( delimiter === '' ||
		delimiter === false ||
		delimiter === null ) {
		return false;
	}

	if ( typeof delimiter == 'function' ||
		typeof delimiter == 'object' ||
		typeof string == 'function' ||
		typeof string == 'object' ) {
		return emptyArray;
	}

	if ( delimiter === true ) {
		delimiter = '1';
	}

	if (!limit) {
		return string.toString().split(delimiter.toString());
	} else {
		// support for limit argument
		var splitted = string.toString().split(delimiter.toString());
		var partA = splitted.splice(0, limit - 1);
		var partB = splitted.join(delimiter.toString());
		partA.push(partB);
		return partA;
	}
}

