function createSwitcher(sSelector, bTargetAsParent, sMode) {
	
	$(sSelector).click( function(e){
	
		var oTarget = $(this),
			sPrevAnchor = null;
		
		var oParent = bTargetAsParent ? oTarget : oTarget.closest("li"); 
		
		oParent.siblings().each( function(index, el){
			var oEl = $(el);
			if (oEl.hasClass("on")) {
				oEl.removeClass("on");
				sPrevAnchor = bTargetAsParent ? oEl.attr("href") : $(oEl.children(":first-child")).attr("href");
			}
		});
		
		oParent.addClass("on");
		
		var oNewOn = $(oTarget.attr("href")),
			oPrevOn = $(sPrevAnchor);
		
		if (oNewOn.length && sPrevAnchor) {
			switch (sMode) {
				case "fade":
					oPrevOn.removeClass("on");
					oNewOn.css("opacity", 0.15);
					oNewOn.addClass("on");
					oNewOn.animate({ 
				        opacity: 1
					}, 250 );
				break;
				
				case "blend":
					oPrevOn.fadeOut(250, function(){
						$(this).removeClass("on");
					});
					
					oNewOn.fadeIn(250, function(){
						$(this).addClass("on");
					});
				break;
				
				default:
					oNewOn.addClass("on");
					oPrevOn.removeClass("on");
				break;
			}
		}
		
		return false;
	});
};


function createScroller(sScrollCntSelector, sBtnSelector, bTargetAsParent) {
	
	var oScrollCnt = $(sScrollCntSelector);
	
	if (oScrollCnt.length) {

		oScrollCnt.scrollTo( $(sBtnSelector+":first").attr("href") );
		
		$(sBtnSelector).click( function(e){
			var oTarget = $(this),
				sPrevAnchor = null;
			
			var oParent = bTargetAsParent ? oTarget : oTarget.closest("li"); 
			
			var oScrollToCnt = $(oTarget.attr("href"));
			
			if (oScrollToCnt.length) {
				oScrollCnt.scrollTo( oScrollToCnt, 250 );
				
				oParent.siblings().each( function(index, el){
					var oEl = $(el);
					if (oEl.hasClass("on")) {
						oEl.removeClass("on");
						sPrevAnchor = bTargetAsParent ? oEl.attr("href") : $(oEl.children(":first-child")).attr("href");
					}
				});
				
				oParent.addClass("on");
			}
			
			return false;
		});
	}
};


function extendScrollerWithArrows(sCtrlBtnsCntSelector, sLeftArrowSelector, sRightArrowSelector) {
	
	var oCtrlBtns = $(sCtrlBtnsCntSelector);
	
	var fireBtn = function(bShowPrev){
		var oOnBtn = oCtrlBtns.siblings(".on"),
			oNewOnBtn;
		
		if (bShowPrev) {
			oNewOnBtn = oOnBtn.prev();
		}
		else{
			oNewOnBtn = oOnBtn.next();
		}
		
		if (!oNewOnBtn.length || oCtrlBtns.index(oNewOnBtn) < 0) {
			oNewOnBtn = $(oCtrlBtns.get( bShowPrev ? oCtrlBtns.length-1 : 0 ));
		}
		
		var oTriggerBtn = oNewOnBtn.find("a");
		
		if (!oTriggerBtn.length){
			oTriggerBtn = oNewOnBtn;
		}
		
		oTriggerBtn.trigger("click");
	};
	
	
	$(sLeftArrowSelector).click(function(){
		fireBtn(true);
		return false;
	});
	
	$(sRightArrowSelector).click(function(){
		fireBtn(false);
		return false;
	});
};


function createArrowScroller(oConfig) {
	
	var oItemsColl = $(oConfig.sItemsSelector),
		oCounterSelector = new Object();
	
	if (oConfig.hasOwnProperty("sCounterSelector")) {
		oCounterSelector = $(oConfig.sCounterSelector);
	}

	if (oItemsColl.length){

		var oScrollCnt = $(oConfig.sScrollCntSelector),
			iCurrIndex = 0;
		
		oScrollCnt.scrollTo( $(oItemsColl.get(iCurrIndex)) );
		
		var scroll = function(bShowPrev){
			if (bShowPrev) {
				--iCurrIndex;
			}
			else{
				++iCurrIndex;
			}
			
			if (iCurrIndex < 0){
				iCurrIndex = oItemsColl.length-1;
			}
			else if (iCurrIndex >= oItemsColl.length){
				iCurrIndex = 0;
			}
			
			oScrollCnt.scrollTo( $(oItemsColl.get(iCurrIndex)), 250 );
			
			if (oCounterSelector.length) {
				oCounterSelector.text(iCurrIndex + 1);
			}
			
		};
		
		$(oConfig.sLeftArrowSelector).click(function(){
			scroll(true);
			return false;
		});
			
		
		$(oConfig.sRightArrowSelector).click(function(){
			scroll(false);
			return false;
		});
	}
};


function createOneLineBubbles(sBubblesCntSelector, oTextSourceConfig, sBigBubbleSelector) {
	$(sBubblesCntSelector).hover(
		function(){
			
			var oBubbleCnt = oTarget = $(this),
				oBigBubble = $(oBubbleCnt.parent().find(sBigBubbleSelector));
			
			if (!oBigBubble.length || oBigBubble.css("display") == "none"){
				var oBubble = oBubbleCnt.find(".one-line-bubble"); 
			
				
				if (!oBubble.length){
					var oTextSource = oTarget.find(oTextSourceConfig.selector),
						sTitle = oTextSource.attr(oTextSourceConfig.attribute);
					
					oTextSource.attr(oTextSourceConfig.attribute, "");
					
					if (sTitle && sTitle.length){
						oBubble = $('<span class="one-line-bubble"><span>' + sTitle + '</span></span>').appendTo(oBubbleCnt);
					}
				}
				
				if (oBubble.length){
					oBubble.fadeIn("fast");
				}
			}
		},
		function(){
			$(this).find(".one-line-bubble").fadeOut(150);
		}
	);
};


function createBigBubbles(sBubblesIcoCollSelector, oTextSourceConfig, sOneLineBubbleSelector) {
	
	var oIcoColl = $(sBubblesIcoCollSelector);
	
	oIcoColl.click(
		function(){

			var oTarget = $(this),
				oBubbleCnt = $(oTarget.parent()),
				oThisIcoColl = $(oBubbleCnt.children(":not(#big-bubble)")),
				oBubble = $("#big-bubble"),
				oBubbleBody; 
			
			if (!oBubble.length){
				oBubble = $('<div id="big-bubble"></div>');
				oBubble.hide();
				
				var oBubbleHdr = $('<div class="big-bubble-hdr clearfix"><h5>Legenda</h5></div>').appendTo(oBubble);
				
				$('<a href="#"><span>Zamknij</span></a>').appendTo(oBubbleHdr).click(function(){
					oBubble.fadeOut(150);
					return false;
				});
				
				oBubbleBody = $('<ul class="big-bubble-bdy clearfix"></ul>');
				oBubble.append(oBubbleBody);
				
				$('<div class="big-bubble-ftr"></div>').appendTo(oBubble);
			}
			else{
				oBubbleBody = oBubble.find(".big-bubble-bdy");
			}
			
			oBubbleBody.empty();
			
			oBubbleCnt.append(oBubble);
			
			oThisIcoColl.find(sOneLineBubbleSelector).hide();
			
			oThisIcoColl.each(function(index, el){
				var oEl = $(el),
					oImg = oEl.find(oTextSourceConfig.selector).clone(),
					sTitle = oImg.attr(oTextSourceConfig.attribute);
				
				if (!sTitle || !sTitle.length) {
					sTitle = oEl.find(sOneLineBubbleSelector).text();
					
					if (!sTitle) {
						sTitle = "";
					}
				}
				
				var oItem = $('<li class="clearfix"></li>');
				
				
				oItem.append(oImg);
				$('<span>' + sTitle + '</span>').appendTo(oItem);
				
				oBubbleBody.append(oItem);
			});
			
			if (oBubble.length){
				oBubble.fadeIn("fast");
			}
			
			return false;
		}
	);
};


function createGallery(oScrollerConfig, oConfig) {
	if (oScrollerConfig) {
		createArrowScroller(oScrollerConfig);
	}
	
	if (oConfig.hasOwnProperty("sFancyBoxSelector")) {
		createFancyBox(oConfig.sFancyBoxSelector);
	}
	
	if (oConfig.hasOwnProperty("sMagnifyingGlassSelector")) {
		var oMagnifyingGlass = $(oConfig.sMagnifyingGlassSelector);
		
		if (oScrollerConfig.hasOwnProperty("sCounterSelector")){
			var oCounter = $(oScrollerConfig.sCounterSelector),
				oItemsColl = $(oScrollerConfig.sItemsSelector);
			
			oMagnifyingGlass.click( function(){
				var iIndex = parseInt(oCounter.text()) - 1;
				$(oItemsColl.get(iIndex)).trigger("click");
				return false;
			});
		}
		
		$(oScrollerConfig.sItemsSelector).hover(
			function(){
				oMagnifyingGlass.addClass("hover");
			},
			function(){
				oMagnifyingGlass.removeClass("hover");
			}
		);
	}
};


function createGuideBubble(){
	
	var isIE8 = ($.browser.msie && parseInt($.browser.version.substr(0,1)) >= 8),
		oListBubbleCnt = $(".list-bubble-cnt"),
		oListBubble = oListBubbleCnt.find(".list-bubble"),
		oShown = $(".guide-detail, .guide-detail .shown");
	
	
	$(".more-box").hover(
		function(){
			var oTarget = $(this);
				iLeft = parseInt(oTarget.offset().left),
				iTop = parseInt(oTarget.offset().top)+5;
			
			if (isIE8){
				iLeft = iLeft-10; 
				iTop = iTop-17; 
			}
			
			oListBubbleCnt.css({
				"left": iLeft,
				"top": iTop
			});
			
			oListBubbleCnt.show();
			oListBubble.fadeIn("fast");
		}
	);
	
	oListBubbleCnt.hover(
		function(){
			oListBubble.fadeIn("fast");
		}
	);
	
	$(oShown).hover(
		function(){
		},
		function(){
			oListBubble.fadeOut(150, function(){
				oListBubbleCnt.hide();	
			});
			
		}
	);
};


function createScoreBubbles(sSelectorPrefix){
	$(sSelectorPrefix + " .score:has(.score-bubble)").hover(
			function(){
				var oTarget = $(this);
				oTarget.css("zIndex", 40);
				oTarget.find(".score-bubble").fadeIn("fast", function(){
					oTarget.css("zIndex", 40);
				});
			},
			function(){
				var oTarget = $(this);
				oTarget.find(".score-bubble").fadeOut(150, function(){
					oTarget.css("zIndex", 20);
				});
			}
	);
};


function createFancyBox(sSelector){
	$(sSelector).fancybox({
			"imageScale": false,
			"overlayShow": true,
			"hideOnContentClick": false,
			"overlayOpacity": 0.6
	});
};


function rollCollection(sCollectionSelector, iTimeout) {
	
	var elements,
		collectionSelector = sCollectionSelector,
		timeout = 3000,
		visibleIndex = -1;
	
	if (parseInt(iTimeout)){
		timeout = iTimeout;
	}
	
	var getElements = function() {
		if (!elements) {
			elements = $(collectionSelector);
		}
		
		return elements;
	};
	
	var run = function() {
		var elems = getElements(),
			previousIndex = visibleIndex;
		
		if (elems.length){
			++visibleIndex;
			
			if (visibleIndex >= elems.length ) {
				visibleIndex = 0;
			}
			
			if (previousIndex > -1) {
				$(elems.get(previousIndex)).hide();
			}
			
			var oNewOn = $(elems.get(visibleIndex));
			
			oNewOn.css({
				"opacity": 0.15,
				"display": "block"
				});
			
			oNewOn.animate({ 
		        opacity: 1
			}, 250 );
	
			setTimeout(run, timeout);
		}
	};
	
	run();
};

