/*jslint white: true, devel: false, browser: false, undef: true, css: false, cap: false, on: false, fragment: false, maxerr: 50, indent: 4 */
/*global $, jQuery, window, document, location, setTimeout, $rdsk */

var rdsk = {};

rdsk = (function () {
	"use strict";
	
	var priv, api;
	
	priv = {	
		
		/*start modal window */
		setOpacity: function (obj) {
			$(obj).css({
				filter: 'alpha(opacity=84)',
				opacity: '.84'
			});
		},
		
		setWidth: function (obj) {
			return (obj.width() + 80) / 2;
		},
		
		setHeight: function (obj) {
			return (obj.height() + 80) / 2;
		},
		
		fadein: function (obj) {
			$(obj).fadeIn();
		},
		
		fadeout: function (obj) {
			$(obj).fadeOut();
		},
		
		openexternal: function (obj) {
			$(obj).attr('target', '_blank');
		},
		
		closemodal: function (obj) {
			$(obj).remove();
		},
		
		autoclose: function (obj) {
			setTimeout(function () {
				$(obj).click();
			}, 1000);
		}
		
	};
	
	api = {
	
		config: {
			btnClose: '<a href="#" class="m-close"><img src="/images/css/icons/close.png" title="Schliessen" alt="Schliessen">',
			modal: 'modalWindow',
			linkmodal: 'a.lnk-modal',
			closescope: 'a.m-close, a.v-close, #modalWindow',
			container: '#imagemovie',
			video: 'video#v',
			keycodeEsc: 27
		},
		
		modal: function (data, initMovie) {
			
			var popID = data.attr('data-id'), // get popup id
				popWidth = data.attr('data-width'); // get popup width

			if (!initMovie) {
				$('#' + popID).prepend(api.config.btnClose);
			}
			
			$('#' + popID).css({
				'margin-top': -priv.setHeight($('#' + popID)),
				'margin-left': -priv.setWidth($('#' + popID)),
				'width': Number(popWidth)
			});
			
			$('<div id=' + api.config.modal + '></div>').prependTo('body');
			
			priv.setOpacity('#' + api.config.modal);
			
			priv.fadein($('#' + popID));
			priv.fadein($('#' + api.config.modal));
			
			return false;
		},
		
		init: function () {
			
			/* custom jquery calender definitions */
			if (!!$('#datepicker').length) {
				$('#datepicker').datepicker({ 
					'minDate': 0,
					'maxDate': '+1M',
					'firstDay': 1,
					'dateFormat': 'dd.mm.yy',
					'dayNamesMin': ['So', 'Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa'],
					'showAnim': 'clip',
					'duration': 'fast',
					'beforeShowDay': $.datepicker.noWeekends
				});
			}
			
			// start video modal and send the key "imagemovie" to hide the close-layer
			// if not video load the default img modal
			if (!!$(api.config.container).length && typeof $(api.config.container).length === 'number') {
				var $this = $(api.config.container);

				api.modal($this, 'initMovie');
				
			} else {
			
				$(api.config.linkmodal).click(function (event) {
					event.preventDefault();
					var $this = $(this);
					
					api.modal($this);
				});
			
			}
			
			// trigger escape key to remove the modalWindow
			$(document).keyup(function (e) {
				var win = $('#' + api.config.modal),
					code = e.keyCode || e.which;
							
				if (win && code === api.config.keycodeEsc) {
					$('#' + api.config.modal).click();
				}
			});
			
			/* close window and fade layer */
			$(api.config.closescope).live('click', function (event) {
				event.preventDefault();
				//$('#modalWindow, .modalWindow-inside, .modalWindow-video').fadeOut(function () {
				priv.closemodal('#modalWindow, .modalWindow-inside, .modalWindow-video, a.m-close, #imagemovie');
				//}); 
				return false;
			});
			
			// close the modalWindow if video is ended
			$(api.config.video).bind('ended', function (e) {
				var cte = e.currentTarget.ended;
				
				if (cte && typeof cte === "boolean") {
					priv.autoclose('#' + api.config.modal);
				}
			});
			
			/* image hover on stage area - right to the content */
			$("div.gallery ul li").hover(function () { 
				var $this = $(this),
					thumbOver = $this.find("img").attr("src");
				
				$this.find("span.thumb").css({
					background: 'url(' + thumbOver + ') no-repeat center middle'
				});
				
				$this.find("img").stop().fadeTo('normal', 0.80);
				
			}, function () {
				var $this = $(this);
				
				$this.find("img").stop().fadeTo('normal', 1);
				
			});
			
			/* tooltip right to the source element */
			if (!!$('.tip').length) { 
				$('.tip').live('mouseenter mouseleave', function (e) {
					$(this).parent().next()
						.css({
							position: 'absolute',
							left: e.pageX + 20,
							top: e.pageY - 12
						})
						.toggleClass('hidden');
				});
			}
			
			/* needed for rendering buttons in same look n feel in each browser */
			jQuery.each(jQuery.browser, function () {
				
				if ($.browser.opera) {
					if (!!$('.btn').length) {
						$('.btn').css({
							'text-shadow': 'none'
						});
					}
				}
				
				if ($.browser.mozilla) {
					if (!!$('input.btn').length) {
						$('input.btn').css({
							'padding-bottom': '1px'
						});
					}
				}

			});
			
			priv.openexternal($("a[href^='http://']")); // open external links in new tab
			
		} // end init
		
	}; // end api
	
	return api;
}());



rdsk.init();
