var IEFixEnabled = false,
	isMourningExtendi = true;


var PieInit = {
		start: function(){
		//ini
		
		
		
			$('#maine  ').each(function() {
		        PIE.attach(this);
		    });
			$('#maine ').each(function() {
	        PIE.attach(this);
	 
			});
		},
		topMenu: function(){
			$('').each(function() {
		        PIE.attach(this);
		    });
		}
}
var BrowserDetect = {
	init: function () {
		this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
		this.version = this.searchVersion(navigator.userAgent)
			|| this.searchVersion(navigator.appVersion)
			|| "an unknown version";
		this.OS = this.searchString(this.dataOS) || "an unknown OS";
	},
	searchString: function (data) {
		for (var i=0;i<data.length;i++)	{
			var dataString = data[i].string;
			var dataProp = data[i].prop;
			this.versionSearchString = data[i].versionSearch || data[i].identity;
			if (dataString) {
				if (dataString.indexOf(data[i].subString) != -1)
					return data[i].identity;
			}
			else if (dataProp)
				return data[i].identity;
		}
	},
	searchVersion: function (dataString) {
		var index = dataString.indexOf(this.versionSearchString);
		if (index == -1) return;
		return parseFloat(dataString.substring(index+this.versionSearchString.length+1));
	},
	dataBrowser: [
		{
			string: navigator.userAgent,
			subString: "Chrome",
			identity: "Chrome"
		},
		{ 	string: navigator.userAgent,
			subString: "OmniWeb",
			versionSearch: "OmniWeb/",
			identity: "OmniWeb"
		},
		{
			string: navigator.vendor,
			subString: "Apple",
			identity: "Safari",
			versionSearch: "Version"
		},
		{
			prop: window.opera,
			identity: "Opera"
		},
		{
			string: navigator.vendor,
			subString: "iCab",
			identity: "iCab"
		},
		{
			string: navigator.vendor,
			subString: "KDE",
			identity: "Konqueror"
		},
		{
			string: navigator.userAgent,
			subString: "Firefox",
			identity: "Firefox"
		},
		{
			string: navigator.vendor,
			subString: "Camino",
			identity: "Camino"
		},
		{		// for newer Netscapes (6+)
			string: navigator.userAgent,
			subString: "Netscape",
			identity: "Netscape"
		},
		{
			string: navigator.userAgent,
			subString: "MSIE",
			identity: "Explorer",
			versionSearch: "MSIE"
		},
		{
			string: navigator.userAgent,
			subString: "Gecko",
			identity: "Mozilla",
			versionSearch: "rv"
		},
		{ 		// for older Netscapes (4-)
			string: navigator.userAgent,
			subString: "Mozilla",
			identity: "Netscape",
			versionSearch: "Mozilla"
		}
	],
	dataOS : [
		{
			string: navigator.platform,
			subString: "Win",
			identity: "Windows"
		},
		{
			string: navigator.platform,
			subString: "Mac",
			identity: "Mac"
		},
		{
			   string: navigator.userAgent,
			   subString: "iPhone",
			   identity: "iPhone/iPod"
	    },
		{
			string: navigator.platform,
			subString: "Linux",
			identity: "Linux"
		}
	]

}

/**
 * Main Carousel
 * @param {jQ.Object} handler
 */
var MaxCarousel = function (handler) {
	var $this 		= $(handler),
		$viewport 	= $this.find('.viewport'), 
		$visible 	= null,
		$pagination = $this.find('.pagination'),
		
		_actualSlide = 1,
		_slidesCount = 0,
		
		_sceneSize 	= 974,
		
		$controls 	= {
			prev : $this.find('.go-left'),
			next : $this.find('.go-right'),
			
			both : $this.find('.go-left, .go-right')
		},
		
		visibleClass = 'visible',
		expandedClass = 'expanded',
		rolledClass = 'rolled'
		eventSuffix = 'carousel',
		activeClass = 'active',
		
		_focus = {
			eventIn 	: 'mouseenter.' + eventSuffix,
			eventOut 	: 'mouseleave.' + eventSuffix,
			
			effect : 'linear',
			animationSpeed : 10
		},
		
		_slide = {
			effect : 'easeOutQuad',
			animationSpeed : 100
		},
		
		_click = {
			event 	: 'click.' + eventSuffix,
			effect : 'easeOutQuint',
			animationSpeed : 200 
		},
		
		defaultObj = {
			d : {}, //dimensions
			p : [] //position	
		},
		
		sizeRange = 5;
		
	//dimensions of actioned elements (offset dimensions - WITH BORDER!)
	var aDim = {
		expanded 	: 800,
		rolled 		: 55,
		margin 		: 18,
		nullPos 	: 11
	},
	imageDim = {
		x : 800,
		y : 400
	};
		
	//one of most important parameters with decide about frame positions & dimensions - after click
	var displaySystem = {
		left : {
			dim 	: [aDim.expanded, aDim.rolled, aDim.rolled],
			coords 	: [aDim.nullPos, aDim.nullPos + aDim.expanded + aDim.margin, aDim.nullPos + aDim.expanded + aDim.rolled + 2 * aDim.margin]
		},
		center : {
			dim 	: [aDim.rolled, aDim.expanded, aDim.rolled],
			coords 	: [aDim.nullPos, aDim.nullPos + aDim.rolled + aDim.margin, aDim.nullPos + aDim.expanded + aDim.rolled + 2 * aDim.margin]
		},
		right : {
			dim 	: [aDim.rolled, aDim.rolled, aDim.expanded],
			coords 	: [aDim.nullPos, aDim.nullPos + aDim.rolled + aDim.margin, aDim.nullPos + 2 * aDim.rolled + 2 * aDim.margin]
		}
	};
	
	var blockMapping = ['left', 'center', 'right'];
	

	var _methods = {
		//only once - at start!
		init : function () {
			$visible = $viewport.find('ul:first');
			$visible.addClass(visibleClass);
			
			this.bindVisible();
			
			//generate pagination
			_slidesCount = $viewport.find('ul.scene').length;
			
			var _p = "";
			
			
			
			$visible.find('li.expanded').click().removeClass('expanded');
				
			for (var i = 1; i <= _slidesCount; i++) {
				_p += Static.HTML.paginator.replace('{1}', i).replace('{2}', 'page-' + i);
			}
			$pagination.remove('li').html(_p);
			$pagination.append($slideshowControl);
			$pagination.find('li:first').addClass(activeClass);
			
			$pagination.find('a').unbind().click(function (event) {
				if (!$(this).parent().hasClass(activeClass)) {
					_methods.goTo($(this).attr('class').split('-')[1]);
				}
				event.preventDefault();
			});

			if (!IEFixEnabled){
				$slideshowControl.unbind().bind('click', function(event){
					thisMovie("carousel-timeout").setOn($(this).hasClass('paused'));
					$(this).toggleClass('paused');
				});
			};

			window.driverReload = function(){
				_methods.goNext();
			};
			
			$controls.prev.click(this.goBack);
			$controls.next.click(this.goNext);
		},
		
		//binding actions frame after scene change
		bindVisible : function () {
			if ($visible) {
				//console.info('try to bind some actions');
				
				//bind events
				this.bindMoveEffects($visible.find('li')).unbind(_click.event).bind(_click.event, _methods.click);
				
				//configure controlls
				$controls.prev.find('.dot-bgr').removeClass('gold-bgr').addClass($visible.find('li.left').hasClass('gold') ? 'gold-bgr' : 'blue-bgr');
				$controls.next.find('.dot-bgr').removeClass('gold-bgr').addClass($visible.find('li.right').hasClass('gold') ? 'gold-bgr' : 'blue-bgr');
				
				$visible.find('a.close').unbind('click').click(function (event) {
					$(this).closest('li').addClass('normalize');
					event.preventDefault();
				});
				
				//learning 
				if (typeof defaultObj.d.w == "undefined") {
					var $x = $visible.find('li:first');
					
					defaultObj.d = {
						w	: $x.width(),
						h	: $x.height()
					};
					//console.info('learn : default dimensions of each obj');
				}
				if (defaultObj.p.length < 1) {
					for (var i = 0; i < 3; i++) {
						var cName = blockMapping[i],
							$x = $visible.find('li.' + cName);
						
						defaultObj.p[cName] = $x.position();
						//console.info('learn : default position of obj {' + cName + '}');
					}
				}
				
				//end of : learning
			} else {
				//console.warn('something went wrong');
			}
		},
		
		bindMoveEffects : function ($obj) {
			return $obj.unbind(_focus.eventIn).bind(_focus.eventIn, _methods.focusUp).unbind(_focus.eventOut).bind(_focus.eventOut, _methods.focusDown);
		},
		
		unbindMoveEffects : function ($obj) {
			return $obj.unbind(_focus.eventIn).unbind(_focus.eventOut);
		},
		
		//clear some features
		unbindVisible : function ($scene) {
			this.unbindMoveEffects($scene.find('li'));
		},
		
		//"DRY" getter-method for obj parameters
		getObjParams : function (obj) {
			var specialClassNames 	= /(gold|hovered)/i,
				whiteSpace 			= /\s/;
				
			return {
				isGold 		: obj.hasClass('gold'),
				isRight 	: obj.hasClass('right'),
				isLeft 		: obj.hasClass('left'),
				scaleLine 	: obj.find('.line').val(),
				
				className	: obj.hasClass('left') ? 'left' : obj.hasClass('center') ? 'center' : 'right'
			};
		},
		
	
	
			
		
		//focus on block
		focusUp : function (event) {
			var $obj 		= $(this),
				objParams 	= _methods.getObjParams($obj),
				$brad 		= $this.find('li .brad'),
				_left = (objParams.scaleLine - (defaultObj.d.w / 2)),
				_maxL = 800 - (defaultObj.d.w + sizeRange);
			
			//console.log('c : ' + _left);
			
			if (_left < 0) {
				_left = 0;
			} else if (_left > _maxL) {
				_left = _maxL;
			}
			
			$this.find('.shadowed').removeClass('shadowed');
			$brad.addClass('brad-white');
			
			$obj.css({
				cursor 	: 'pointer'
			});
			
			//NOT FOR IE
			if (!IEFixEnabled) {
				$obj
				//animate frame
				.dequeue().animate({
					width 	: defaultObj.d.w + 2 * sizeRange,
					height 	: defaultObj.d.h + 2 * sizeRange,
					left 	: defaultObj.p[objParams.className].left - sizeRange,
					top 	: defaultObj.p[objParams.className].top - sizeRange,
					borderColor : objParams.isGold ? '#FEF200' : '#FFF'
				}, _focus.animationSpeed, _focus.effect)
				
				//animate image
				.find('.bgr').dequeue().animate({
					width 	: imageDim.x + 4 * sizeRange,
					height 	: imageDim.y + 2 * sizeRange,
					left 	: -1 * _left,
					top 	: 0
				}, _focus.animationSpeed, _focus.effect);
				
				//animate control buttons
				if(objParams.isLeft) {
					$controls.prev.find('.dot-bgr').dequeue().animate({  width : 30 }, _focus.animationSpeed, _focus.effect);
					if (!objParams.isGold) {
						//$controls.prev.find('.white-bgr').dequeue().animate({ opacity : 1}, _focus.animationSpeed);
					}
				} else if(objParams.isRight) {
					$controls.next.find('.dot-bgr').dequeue().animate({  width : 30 }, _focus.animationSpeed, _focus.effect);
					if (!objParams.isGold) {
						//$controls.next.find('.white-bgr').dequeue().animate({ opacity : 1}, _focus.animationSpeed);
					}
				}
				
				$obj.addClass('shadowed');
			} else {
				//IT IS IE! :|
				$obj
				//change frame
				.css({
					width 	: defaultObj.d.w + 2 * sizeRange,
					height 	: defaultObj.d.h + 2 * sizeRange,
					left 	: defaultObj.p[objParams.className].left - sizeRange,
					top 	: defaultObj.p[objParams.className].top - sizeRange,
					borderColor : objParams.isGold ? '#FEF200' : '#FFF'
				})
				
				//change image
				.find('.bgr').css({
					width 	: imageDim.x + 4 * sizeRange,
					height 	: imageDim.y + 2 * sizeRange,
					left 	: -1 * _left,
					top 	: 0
				});
				
				//change control buttons
				if(objParams.isLeft) {
					$controls.prev.find('.dot-bgr').css({ width : 30 });
					if (!objParams.isGold) {
						//$controls.prev.find('.white-bgr').css({ opacity : 1});
					}
				} else if(objParams.isRight) {
					$controls.next.find('.dot-bgr').css({ width : 30 });
					if (!objParams.isGold) {
						//$controls.next.find('.white-bgr').css({ opacity : 1});
					}
				}
				
				$obj.addClass('shadowed');
			}
		},
		
		//blur on block
		focusDown : function (event) {
			var $obj 		= $(this),
				$brad 		= $this.find('.brad'),
				objParams 	= _methods.getObjParams($obj),
				_left 		= (objParams.scaleLine - (defaultObj.d.w / 2) - sizeRange),
				_maxL 		= 800 - (defaultObj.d.w + sizeRange);
			
			//console.log('c : ' + _left);
			
			if (_left < 0) {
				_left = 0;
			} else if (_left > _maxL) {
				_left = _maxL;
			}
			
			
			if (_left < 0) {
				_left = 0;
			} else if (_left > (800 - defaultObj.d.w)) {
				_left = -(800 - defaultObj.d.w);
			}

			//remove box-shadow from elements
			$obj.parent().find('.shadowed').removeClass('shadowed');
			$brad.removeClass('brad-white');
			
			//NOT FOR IE
			if (!IEFixEnabled) {
				$obj
				
				//animate frame
				.dequeue().animate({
					width 	: defaultObj.d.w,
					height 	: defaultObj.d.h,
					left 	: defaultObj.p[objParams.className].left,
					top 	: defaultObj.p[objParams.className].top,
					borderColor : objParams.isGold ? '#FEF200' : '#30A4E2'
				}, _focus.animationSpeed, _focus.effect)
				
				//animate bgr image
				.find('.bgr').dequeue().animate({
					width 	: imageDim.x,
					height 	: imageDim.y,
					left 	: -_left,
					top 	: 0
				}, _focus.animationSpeed, _focus.effect);
				
				//animate control buttons
				if(objParams.isLeft) {
					$controls.prev.find('.dot-bgr').dequeue().animate({  width : 25 }, _focus.animationSpeed, _focus.effect);
					if (!objParams.isGold) {
						$controls.prev.find('.white-bgr').dequeue().animate({ opacity : 0}, _focus.animationSpeed);
					}
				} else if(objParams.isRight) {
					$controls.next.find('.dot-bgr').dequeue().animate({  width : 25 }, _focus.animationSpeed, _focus.effect);
					if (!objParams.isGold) {
						$controls.next.find('.white-bgr').dequeue().animate({ opacity : 0}, _focus.animationSpeed);
					}
				}
			} else {
				//IT IS IE! :|
				$obj
				
				//change frame
				.css({
					width 	: defaultObj.d.w,
					height 	: defaultObj.d.h,
					left 	: defaultObj.p[objParams.className].left,
					top 	: defaultObj.p[objParams.className].top,
					borderColor : objParams.isGold ? '#FEF200' : '#30A4E2'
				})
				
				//change bgr image
				.find('.bgr').css({
					width 	: imageDim.x,
					height 	: imageDim.y,
					left 	: -_left,
					top 	: 0
				});
				
				//change control buttons
				if(objParams.isLeft) {
					$controls.prev.find('.dot-bgr').css({ width : 25 });
					if (!objParams.isGold) {
						$controls.prev.find('.white-bgr').css({ opacity : 0});
					}
				} else if(objParams.isRight) {
					$controls.next.find('.dot-bgr').css({ width : 25 });
					if (!objParams.isGold) {
						$controls.next.find('.white-bgr').css({ opacity : 0});
					}
				}
			}
		},
		
		click : function(event){
			var $obj = $(this), objParams = _methods.getObjParams($obj), $brad = $this.find('.brad'), matrix = displaySystem[objParams.className];
			
			//remove box-shadow from elements
			$brad.addClass('brad-white');
			$obj.parent().find('.shadowed').removeClass('shadowed');
			
			$obj.css({
				cursor 	: 'default'
			});
			
			if ($obj.attr('status') == expandedClass) {
				//go to status : [] [] [] 
				if ($obj.hasClass('normalize')) {
					$obj.removeClass('normalize');
					for (var i = 0; i < 3; i++) {
						var cName  		= blockMapping[i],
							$obj 		= $visible.find('li.' + cName),
							prevStatus 	= $obj.attr('status'),
							_objParams 	= _methods.getObjParams($obj),
							_left 		= (_objParams.scaleLine - (defaultObj.d.w / 2));
						
						if (_left < 0) {
							_left = 0;
						} else if (_left > (800 - defaultObj.d.w)) {
							_left = (800 - defaultObj.d.w);
						}
						
						$obj
						
						.dequeue().animate({
							width 	: defaultObj.d.w,
							left 	: defaultObj.p[cName].left
						}, _click.animationSpeed, _click.effect)
						.removeAttr('status')
						
						//animate bgr image
						.find('.bgr').dequeue().animate({
							width 	: imageDim.x,
							height 	: imageDim.y,
							left 	: -_left,
							top 	: 0
						}, _focus.animationSpeed * 5, _click.effect);
						
						$obj.find('.short.info').dequeue().animate({
							bottom 	: 0
						}, _click.animationSpeed, _click.effect);
						$obj.find('.short').not('.short.info').dequeue().animate({
							height 	: 105
						}, 100);
						$obj.find('.long').dequeue().animate({
							right 	: -260
						}, _click.animationSpeed, _click.effect);
						
						_methods.bindMoveEffects($obj);
					}
				}
				
				//stop slideshow
				thisMovie("carousel-timeout").setOn(false);
				$pagination.find('.slideshow').removeClass('paused');
			} 
			//go to status : [][  ][]
			else {
				for (var i = 0; i < 3; i++) {
					var $obj 			= $visible.find('li.' + blockMapping[i]),
						newStatus 		= blockMapping[i] == objParams.className ? expandedClass : rolledClass,
						_s 				= $obj.attr('status'),
						statusChange 	= typeof _s == "undefined" || $obj.newStatus != _s,
						posChange 		= matrix.dim[i] != $obj.width() || $obj.position().left != matrix.coords[i],
						_objParams 		= _methods.getObjParams($obj),
						animationSPEED 	= IEFixEnabled ? _click.animationSpeed / 5 : _click.animationSpeed,
						_leftForNarrow 	= (_objParams.scaleLine - 28);
					
					if (_leftForNarrow < 0) {
						_leftForNarrow = 0;
					} else if (_leftForNarrow > 745) {
						_leftForNarrow = 745;
					}
					
					//console.log('left : ' + _leftForNarrow);
					
					posChange && $obj
					
					//animate frame
					.dequeue().animate({
						width 	: matrix.dim[i],
						left 	: matrix.coords[i]
					}, animationSPEED, _click.effect)
					
					.css({
						height 		: defaultObj.d.h,
						top 		: defaultObj.p[objParams.className].top,
						borderColor : _objParams.isGold ? '#FEF200' : '#CDE3F3'
					})
					
					//animate bgr image
					if (newStatus == expandedClass) {
						//wide image
						$obj.find('.bgr').dequeue().animate({
							width 	: imageDim.x,
							height 	: imageDim.y,
							top 	: 0,
							left 	: 0
						}, animationSPEED, _click.effect);
					} else {
						//narrow frame
						var $im 	= $obj.find('.bgr');
						
						$im.dequeue().animate({
							width 	: imageDim.x,
							height 	: imageDim.y,
							top 	: 0,
							left 	: -_leftForNarrow
						}, animationSPEED, _click.effect);
					}
					
					//if rolled hide bgr and title
					if (statusChange) {
						if (newStatus == rolledClass) {
							$obj.find('.short.info').dequeue().animate({ bottom : -105 }, animationSPEED, _click.effect)
							&&
							$obj.find('.short').not('.short.info').dequeue().animate({ height : 400 }, animationSPEED / 4)
							&&
							$obj.find('.long').dequeue().animate({ right: -260 }, animationSPEED, _click.effect)
						} else {
							$obj.find('.short.info').dequeue().animate({ bottom: -105 }, animationSPEED, _click.effect)
							&&
							$obj.find('.short').not('.short.info').dequeue().animate({ height: 0 }, animationSPEED)
							&&
							$obj.find('.long').dequeue().animate({ right: 0 }, animationSPEED, _click.effect);
						}
					}
					
					_methods.unbindMoveEffects($obj);
					$obj.attr('status', newStatus);
				}
				
				//start slideshow
				
					thisMovie("carousel-timeout").setOn(false);
					$pagination.find('.slideshow').addClass('paused');
				
			}
			
			//IT'S NOT IE
			if (!IEFixEnabled) {
				if (objParams.isLeft) {
					$controls.prev.find('.dot-bgr').dequeue().animate({
						width: 25
					}, _focus.animationSpeed, _focus.effect);
					if (!objParams.isGold) {
						$controls.prev.find('.white-bgr').dequeue().animate({
							opacity: 0
						}, _focus.animationSpeed);
					}
				} else if (objParams.isRight) {
					$controls.next.find('.dot-bgr').dequeue().animate({
						width: 25
					}, _focus.animationSpeed, _focus.effect);
					if (!objParams.isGold) {
						$controls.next.find('.white-bgr').dequeue().animate({
							opacity: 0
						}, _focus.animationSpeed);
					}
				}
			} else {
				//IT IS IE! :|
				if (objParams.isLeft) {
					$controls.prev.find('.dot-bgr').css({ width : 25 });
					if (!objParams.isGold) {
						$controls.prev.find('.white-bgr').css({ opacity : 0 });
					}
				} else if (objParams.isRight) {
					$controls.next.find('.dot-bgr').css({ width : 25 });
					if (!objParams.isGold) {
						$controls.next.find('.white-bgr').css({ opacity : 0 });
					}
				}
			}
		}
		
	};
	
	_methods.init();
};

var swapFlash = function(){
	var $this = $('#maine'),
		$viewport = $this.find('.viewport'),
		$controls 	= {
			prev : $this.find('.go-left').unbind().css({left:'-24px',top:'171px'}),
			next : $this.find('.go-right').unbind().css({right:'-23px',top:'171px'}),
			both : $this.find('.go-left, .go-right').unbind(),
			pagination: $this.find('.pagination').remove()
		};
		
	$controls.both.find('.gold-bgr, .white-bgr, .blue-bgr').remove();

	var noFlash = '<p>Aby obejrzeæ zawartoœæ tej strony wymagana jest instalacja Adobe Flash Player w wersji 10.0.0 lub nowszej.</p><a href="http://www.adobe.com/go/getflashplayer" title="Zainstaluj Adobe Flash Player"><img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Zainstaluj Adobe Flash Player" /></a>';
	
	$viewport.empty().attr('id','flashContent').append(noFlash);

		swfobject.embedSWF("/swf/driver_20110527.swf?url="+_MainCarouselJsonEpgUrl, "flashContent", "990", "453", "10.0", null, {  mourning : /mourningExtended/i.test(i) ? 1 : 0 }, {wmode:"transparent", allowScriptAccess : "always"}, {name:"flashContent"});
	
	$controls.prev.click(function(e){
		e.preventDefault();thisMovie("flashContent").pageLeft();
	});
	
	$controls.next.click(function(e){
		e.preventDefault();
		thisMovie("flashContent").pageRight();
	});
}


$(document).ready(function () {
	//browser detect by PPK
	BrowserDetect.init();
	IEFixEnabled = /Explorer/i.test(BrowserDetect.browser);
	isMourningExtendi = /mourningExtended/i.test(i);
	

	
	
	
	MaxCarousel('#maine');
	
	if(IEFixEnabled){
		swapFlash();
	}//podmiana flasha tylko dla ie	
	
	
	
	

		
	
	
});
