(function($){ 
	
	$.fn.selBox = function(options){
		
		var opts = $.extend({}, $.fn.selBox.defaults, options);
		
		return this.each(function(){
			
			var sBox  = this;
			var $sBox = $(this);
			
			var o = $.meta ? $.extend({}, opts, $sBox.data()) : opts;
			
			var hasFocus     = 0;
			var hasScroll    = 0;
			var layerHeight  = 0;
			var hoveredIndex = 0;
			
			var $container;
			var $input;
			var $layer;
			var $options;
			var $selectedOpt;
			var $hoveredOpt;
			
			sBox.init = function(){
				$container = sBox.buildContainer();
				$input = sBox.buildInput();
				$layer = sBox.buildLayer();
				
				$input.width((($sBox.innerWidth() > o.maxInputWidth) ? o.maxInputWidth : $sBox.innerWidth()) - o.arrowWidth);
				$container.width(($sBox.innerWidth() > o.maxInputWidth) ? o.maxInputWidth : $sBox.innerWidth());
				
				$container.append($input).append($layer);
				
				$sBox.hide().before($container);
				
				$layer.width((($sBox.innerWidth() > o.maxInputWidth) ? o.maxInputWidth : $sBox.innerWidth()) - 2).css("top", o.selectHeight + 1);
				if ($layer.height() > o.maxHeight) {
					hasScroll = 1;
					$layer.height(o.maxHeight);
				}
				layerHeight = $layer.height();
				
				$options = $("li", $layer);
				$selectedOpt = $options.filter("." + o.optOnClass);
				$hoveredOpt = $options.filter("." + o.optHoverClass);
				
				sBox.assignActions();
			}
			
			sBox.buildContainer = function(){
				return $("<div id=\"" + $sBox.attr("id") + "_sBox\" class=\"" + o.containerClass + "\"></div>");
			}
			
			sBox.buildInput = function(){
				return $("<input type=\"text\" id=\"" + $sBox.attr("id") + "_sBoxInput\" class=\"" + o.inputClass + "\" tabIndex=\"" + $sBox.attr("tabindex") + "\" autocomplete=\"off\" readonly=\"readonly\" style=\"-moz-user-select: none;\" />");
			}
			
			sBox.buildLayer = function(){
				var _opt = "<ul id=\"" + $sBox.attr("id") + "_sBoxOptions\" class=\"" + o.layerClass + "\">";
				
				$("option", sBox).each(function(i, v){
					var $v = $(v);
					var _class = "";
					
					if ($v.is(":selected")) {
						_class = " class=\"" + o.optOnClass + " " + o.optHoverClass + "\"";
						$input.val($v.text());
						hoveredIndex = i;
					}
					
					_opt += "<li" + _class + " rel=\"" + $v.val() + "\">" + $v.html() + "</li>";
				});
				
				_opt += "</ul>";
				
				return $(_opt);
			}
			
			sBox.assignActions = function(){
				
				$container.click(function(e){
					$input.click().get(0).focus();
					e.preventDefault(); e.stopPropagation();
				}).hover(function(e){
					hasFocus = 1;
				}, function(e){
					hasFocus = 0;
				});
				
				$layer.hover(function(){}, function(){
					hasFocus = 0;
				})
				
				$input.focus(function(e){
					e.preventDefault(); e.stopPropagation();
				}).blur(function(e){
					if (hasFocus == 0) {
						$layer.hide();
					}
					e.preventDefault(); e.stopPropagation();
				}).keydown(function(e){
					sBox.inputKey(e.keyCode);
					e.preventDefault(); e.stopPropagation();
				}).click(function(e){
					sBox.toggleLayer();
					e.preventDefault(); e.stopPropagation();
				});
				
				$options.click(function(e){
					$input.get(0).focus();
					sBox.optionChange($(this));
					e.preventDefault(); e.stopPropagation();
				}).mouseover(function(e){
					sBox.hoverChange($(this));
					e.preventDefault(); e.stopPropagation();
				});
			}
			
			sBox.toggleLayer = function(){
				$layer.toggle();
				if ($layer.is(":visible")) {
					hasFocus = 1;
					sBox.scrollTo($selectedOpt);
				}
			}
			
			sBox.scrollTo = function($obj){
				if (hasScroll > 0) {
					var optionOffset = $obj.get(0).offsetTop;
					var layerOffset = $layer.get(0).scrollTop;
					
					if (optionOffset < layerOffset) {
						$layer.scrollTop(optionOffset);
					}
					else if ((optionOffset - layerHeight) >= layerOffset) {
						$layer.scrollTop(optionOffset - layerHeight + $obj.height() + 2);
					}
				}
			}
			
			sBox.inputKey = function(key){
				
				switch(key) {
					case 33: // pgUp
						sBox.moveKey(-10);
						break;
					case 34: // pgDown
						sBox.moveKey(10);
						break;
					case 38: // up
						sBox.moveKey(-1);
						break;
					case 40: // down
						sBox.moveKey(1);
						break;
					case 36: // home
						sBox.moveKey(0);
						break;
					case 35: // end
						sBox.moveKey($options.length - 1);
						break;
					case 13: // return
						if ($layer.is(":visible")) {
							sBox.optionChange($hoveredOpt);
						}
						else {
							$layer.show();
							sBox.scrollTo($selectedOpt);
						}
						break;
					case 27: // escape
						$layer.hide();
						break;
						
					default:
						if ((key >= 48 && key <= 57) || (key >= 65 && key <= 90) || (key >= 97 && key <= 122)) {
						
							var patt = new RegExp("^" + String.fromCharCode(key), "i");
							var hasFirst = 0;
							
							$newOpt = $options.filter(function(i){
								if (!hasFirst && (patt.test($options[i].innerHTML) == true)) {
									hasFirst = 1;
									return true;
								}
								else if ((i > hoveredIndex) && (patt.test($options[i].innerHTML) == true)) {
									return true;
								}
								else {
									return false;
								}
							});
							
							if ($newOpt.length > 0) {
								
								if ($newOpt.length > 1) {
									newSel = 1;
								}
								else {
									newSel = 0
								}
								
								if ($layer.is(":visible")) {
									sBox.scrollTo($($newOpt.get(newSel)));
									sBox.hoverChange($($newOpt.get(newSel)));
								}
								else {
									sBox.optionChange($($newOpt.get(newSel)));
								}
							}
						}
				}
			}
			
			sBox.optionChange = function($obj){
				$input.val($obj.text());
				
				$("option", sBox).removeAttr("selected").filter("[value='" + $obj.attr("rel") + "']").attr("selected", "selected");
				
				$layer.hide();
				$selectedOpt.removeClass(o.optOnClass);
				$obj.addClass(o.optOnClass);
				$selectedOpt = $obj;
				sBox.hoverChange($obj);
				
				o.afterChange.call(this, $obj);
			}
			
			sBox.hoverChange = function($obj){
				$hoveredOpt.removeClass(o.optHoverClass);
				$obj.addClass(o.optHoverClass);
				$hoveredOpt = $obj;
				hasFocus = 1;
				hoveredIndex = $options.index($obj);
			}
			
			sBox.moveKey = function(offset){
				if ($layer.is(":visible")) {
					var _index = $options.index($hoveredOpt);
					var _new_index;
					
					if ((offset == 0) || (offset == ($options.length - 1))) {
						_new_index = offset;
					}
					else {
						_new_index = ((_index + offset) < 0) ? 0 : (((_index + offset) > ($options.length - 1)) ? ($options.length - 1) : (_index + offset));
					}
					
					sBox.hoverChange($($options[_new_index]));
					sBox.scrollTo($($options[_new_index]));
				}
				else {
					var _index = $options.index($selectedOpt);
					var _new_index
					
					if ((offset == 0) || (offset == ($options.length - 1))) {
						_new_index = offset;
					}
					else {
						_new_index = ((_index + offset) < 0) ? 0 : (((_index + offset) > ($options.length - 1)) ? ($options.length - 1) : (_index + offset));
					}
					
					sBox.optionChange($($options[_new_index]));
				}
			}
			
			sBox.init();
			
		});
	};
	
	$.fn.selBox.defaults = {
		maxHeight      : 240,
		maxInputWidth  : 220,
		arrowWidth     : 25,
		selectHeight   : 20,
		containerClass : "sBox_container",
		inputClass     : "sBox_input",
		layerClass     : "sBox_layer",
		optOnClass     : "sBox_optOn",
		optHoverClass  : "sBox_optHover",
		afterChange    : function(obj){}
	};
	
})(jQuery);  
;(function($) {

    $.fn.lazyload = function(options) {
	var settings = {
		threshold    : 0,
		failurelimit : 0
	};
                
	if(options) {
		$.extend(settings, options);
	}

        /* Fire one scroll event per scroll. Not one scroll event per image. */
        var elements = this;
	$(window).bind("scroll", function(event) {
		var counter = 0;
		elements.each(function() {
			if ($.abovethetop(this, settings)) {
				/* Nothing. */
			} else if (!$.belowthefold(this, settings)) {
				$(this).trigger("appear");
			} else {
				if (counter++ > settings.failurelimit) {
					return false;
				}
			}
		});
		/* Remove image from array so it is not looped next time. */
		var temp = $.grep(elements, function(element) {
			return !element.loaded;
		});
		elements = $(temp);
	});
        
        this.each(function() {
            var self = this;
            
            /* Save original only if it is not defined in HTML. */
            if (undefined == $.data(self, "original")) {
                $.data(self, "original", $(self).attr("src"))
            }

            if ( $.abovethetop(self, settings) || $.belowthefold(self, settings) ) {
                        
                if (settings.placeholder) {
                    $(self).attr("src", settings.placeholder);      
                }
		
                self.loaded = false;
            } else {
                self.loaded = true;
            }
            
            /* When appear is triggered load original image. */
            $(self).one("appear", function() {
                if (!this.loaded) {
			$(self).attr("src", $.data(self, "original"));
                };
            });
        });
        
        /* Force initial check if images should appear. */
        $(settings.container).trigger("scroll");
        
        return this;

    };

	/* Convenience methods in jQuery namespace.           */
	/* Use as  $.belowthefold(element, {threshold : 100, container : window}) */

	$.belowthefold = function(element, settings) {
		if (settings.container === undefined || settings.container === window) {
			var fold = $(window).height() + $(window).scrollTop();
		} else {
			var fold = $(settings.container).offset().top + $(settings.container).height();
		}
		return fold <= $(element).offset().top - settings.threshold;
	};
        
	$.abovethetop = function(element, settings) {
		if (settings.container === undefined || settings.container === window) {
			var fold = $(window).scrollTop();
		} else {
			var fold = $(settings.container).offset().top;
		}
		return fold >= $(element).offset().top + settings.threshold  + $(element).height();
	};
    
})(jQuery);

;// General products functions #################################################################
$(function(){
	$("div.col_img").find("img").lazyload({
		placeholder : "/img/spacer.gif"
	});
	
	// Assign sort select actions
	$("select#order_by").selBox({
		afterChange: function(obj){
			$("#sort_form").find("input:hidden[name='__s']").val($(obj).attr("rel")).end().submit();
		}
	});
	
	// Init tooltip
	$("img.i_info").tooltip({
		delay: 0, 
		showURL: false,
		bodyHandler: function() {
			return $(this).metadata({type: "attr", name: "data"}).tip;
		}
	});
	
	var cell_contents = $("div.prod_cell_content");
	if (cell_contents.length) {
		var cell_max = 0, row_items = 4;
		cell_contents.each(function(i, v){
			cell_max = Math.max(cell_max, $(v).height());
			if ( ((i + 1) % row_items == 0) || ((i + 1) == cell_contents.length) ) {
				for (var ii = 0; ii < ((i + 1) == cell_contents.length ? (cell_contents.length % row_items == 0 ? row_items : (cell_contents.length % row_items)) : row_items); ii ++) {
					$(cell_contents[i - ii]).height(cell_max);
				}
				cell_max = 0;
			}
		});
	}
	
	$("div.prod_cell_content").find(".img_box img").mouseover(function(){
		var jThis = $(this), par = jThis.closest(".prod_cell_content"), img = par.find(".img_box img");
		$("div.prod_cell_tooltip").hide();
		if (typeof (img.data("submenu")) == "undefined") {
			var submenu = $("<div class=\"tooltip prod_cell_tooltip\" style=\"display: none;\"></div>").html("<em class=\"arr\">&nbsp;</em>" + par.html()).find(".img_box").remove().end()
				.find(".hide").removeClass("hide").end()
				.find("p:first").addClass("bold").end()
				.appendTo("body").css({top: img.offset().top + 160, left: img.offset().left - 50}).click(function(e){e.stopImmediatePropagation();});
			if ( (img.offset().left - 50 + submenu.width()) > ($("#bd").offset().left + $("#bd").width()) ) {
				submenu.css({left: img.offset().left - 130}).find(".arr").css({left: 130});
			}
			submenu.show();
			img.data("submenu", submenu);
			menu_actions(img, submenu);
		}
	});
	
	jQuery("a.toggle_mode").click(function(){
		var mode = jQuery(this).metadata({type: "attr", name: "data"}).mode;
		var def = jQuery(this).metadata({type: "attr", name: "data"}).def;
		var key = jQuery(this).metadata({type: "attr", name: "data"}).key;
		var search = jQuery(this).metadata({type: "attr", name: "data"}).search;
		var cookie_mode = (mode == "list" ? "l" : "g")
		var cookie = $.cookie("display_format");
		var cookie_size = 0;
		
		if (search > 0) {
			$.cookie("display_format_search", (mode == "gallery" ? "g" : "l"), {path: '/', domain: DOMAIN_BASE, expires: 365});
		
			document.location = document.location;
			return false;
		}
		
		if (cookie == null) {
			cookie = "";
		}
		
		cookie = cookie.split(",");
		
		var cookie_obj = {};
		if (cookie.length > 0) {
			jQuery(cookie).each(function(i, v){
				var tmp = v.split(":");
				if ( (v != "") && (tmp.length > 0) ) {
					cookie_obj[tmp[0]] = tmp[1];
				}
			});
		}
		
		if (mode != def) {
			cookie_obj[key] = cookie_mode;
		}
		else {
			delete cookie_obj[key];
		}
		
		var TMP_COOKIE = [];
		var new_cookie = null;
		for (var key in cookie_obj) {
			TMP_COOKIE.push(key + ":" + cookie_obj[key]);
			cookie_size ++;
		}
			
		if (cookie_size > 0) {
			new_cookie = TMP_COOKIE.join(",");
		}

		$.cookie('display_format', new_cookie, {path: '/', domain: DOMAIN_BASE, expires: 365});
		
		document.location = document.location;
		
		return false;
	});

	// Assign actions for left column filters
	assign_filters_actions();

	// Add report links
	$("span.report_container").each(function(i, v){
		$(this).html("<a href=\"" + PATH_SELF + "\" class=\"gray small\" onclick=\"view_iframe('" + do_link("site.report_problem", "pp=up&section=shopping&p=" + $(this).metadata().prod_key) + "', '" + LANG_TXT_REPORT_ERROR + "', 750, 550); return false;\">" + LANG_TXT_REPORT_ERROR + "</a>");
	})

	// Toggle magnify overlay
	$(".col_img, .img_box").hover(function(e){
		$(".magnify", this).show();
	}, function(e){
		$(".magnify", this).hide();
	});
	
	$("dd.invisible:first").height(Math.min(155, $("dd.invisible:first").height())).removeClass("invisible");

	// Toggle recomended stores
	var clicked_stores = $.cookie("_ckst_");
	$(".feat_store").each(function(i, v){
		var m_data = $(this).metadata();
		
		if (clicked_stores != null) {
			if ($.inArray(m_data.store_key, clicked_stores.split("|")) && (m_data.allow == "on")) {
				$("#recc_store_container_" + m_data.store_key).hide();
			}
			else {
				$("#recc_store_container_" + m_data.store_key).show();
			}
		}
	});
});

// Animate product image
function animate_prod_img(row_element, destination){
	// Show animation only if toolbar is visible
	if ($("#user_toolbar").width() > 100) {
		// Clone product image and begin animation
		var img = $(row_element).closest("li").find("img[id^='pic_']:first");
		if (img.length) {
			var new_img = img.clone();
			new_img.css({position: 'absolute', zIndex: '1000', top: img.offset().top + 'px', left: img.offset().left + 'px'}).appendTo("body").animate({opacity: 0.5, width: '15px', height: '15px', top: $(destination).offset().top + 5, left: ($(destination).offset().left + $(destination).width() - 15)}, 1000, 'easeOutBounce', function(){$(this).remove()});
		}
	}
}

// Wishlist functions #################################################################

// Add single wishlist link or confirmation message
function add_wishlist_link(key, disabled){
	// Add confirmation message
	if (disabled) {
		$("#prod_row_" + key + " .wishlist_link").html("<a href=\"" + PATH_SELF + "\" class=\"i_fav_saved request_fav_prod_delete {page: 'my.remote', request: 'fav_prod_delete', p: '" + key + "', container: '#prod_row_" + key + " .wishlist_link', datatype: 'script', post: {_RETURN: '" + RETURN + "'}}\">&nbsp;</a>");
	}
	// Add save to wishlist link
	else {
		$("#prod_row_" + key + " .wishlist_link").html("<a href=\"" + PATH_SELF + "\" class=\"i_fav_save request_fav_prod_add {page: 'my.remote', request: 'fav_prod_add', p: '" + key + "', container: '#prod_row_" + key + " .wishlist_link', datatype: 'script', post: {_RETURN: '" + RETURN + "'}}\" title=\"" + LANG_TXT_SAVE_LIST + "\">&nbsp;</a>");
	}
}

// Get products from wishlist
function populate_wishlist_links(data){
	// Build array with product keys
	prod_keys = $(data.keys.split(","));
	// Loop product rows and add links or messages
	$("li[id^='prod_row_']").each(function(i, v){
		var key = $(v).attr("id").substr(9);
		add_wishlist_link(key, ($.inArray(key, prod_keys) != -1) );
	});
	// Assign live actions for save links
	$("a.request_fav_prod_add").live("click", function(){
		// Animate product image
		if (USR_profile_key > 0) {
			animate_prod_img($(this), "#fav_ajax_tab");
		}
		// Send save request and refresh layer
		do_remote_action($.extend($(this).metadata(), {callback: function(data){
			refresh_fav_layer("prod");
		}}));
		
		return false;
	});
	// Assign live actions for remove links
	$("a.request_fav_prod_delete").live("click", function(){
		// Send save request and refresh layer
		do_remote_action($.extend($(this).metadata(), {callback: function(data){
			refresh_fav_layer("prod");
		}}));
		
		return false;
	});
}

// Callback after single product delete
function after_fav_prod_delete(data){
	add_wishlist_link(data.p, 0);
}

// Callback after multiple product delete
function after_fav_prod_delete_list(data){
	$("li[id^='prod_row_']").each(function(i, v){
		add_wishlist_link($(v).attr("id").substr(9), 0);
	});
}

// Compare functions #################################################################

// Build compare links
function add_top_links(nr_prod, cat) {
	
	if (typeof(cat) == "undefined") {cat = 0;}
	nr_prod = parseInt(nr_prod);
	
	// If cat was specified, check to match current cat
	if ( (cat == 0) || (cat == THIS_CAT_cat_key) ) {
		// Replace counter
		var prod_txt = LANG_TXT_COUNT_COMPARE_PRODUCTS.replace("#1", nr_prod);
		var compare_link = "";
		// Build counter text and compare link
		if (nr_prod > 1) {
			compare_link = "<a href=\"" + do_link("site.compare", "online=" + THIS_CAT_cat_str_key + "&type=saved") + "\" class=\"i_compare\" rel=\"nofollow\" target=\"_blank\" title=\"" + LANG_TXT_COMPARE_PROD + "\">&nbsp;</a> " + 
			"<a href=\"" + do_link("site.compare", "online=" + THIS_CAT_cat_str_key + "&type=saved") + "\" class=\"gray small bg_yel\" rel=\"nofollow\" target=\"_blank\">" + LANG_TXT_COMPARE_PROD + "</a> ";
		}
		else {
			compare_link = "<span class=\"gray small\">" + LANG_TXT_COMPARE_ALERT + "</span> ";
		}
		
		if (nr_prod > 0) {
			compare_link += "<span class=\"gray small\">(" + prod_txt + ")</span>";
		}
		// Add counters to page
		$("#compare_link_row").html(compare_link);
		$("#compare_link_row_btm").html(compare_link);
	}
}

// Get products from compare list
function populate_compare_checks(options){

	// All checkboxes from compare form
	var cks = $("input:checkbox", "#compare_form");
	// Refresh counters
	add_top_links(comps['c' + THIS_CAT_cat_key]);
	
	// We have products for current category
	if (comps['c' + THIS_CAT_cat_key] > 0) {
		// Build array width product keys
		prod_keys = $(options.keys.split(","));
		// Check selected checkboxes
		prod_keys.each(function(i){
			cks.filter("[value='" + this + "']").attr("checked", "checked");
		});
	}
	// Enable checkboxes
	cks.removeAttr("disabled");
	// Assign checkbox actions
	cks.click(function(e){
		var jThis = $(this);
		// If is checked
		if (jThis.is(":checked")) {
			// Animate product image
			animate_prod_img(jThis, "#comp_ajax_tab");
			// Send save request
			$.get(do_link("site.remote", "request=comp_prod_add&p=" + jThis.val()), function(data){
				// Update counters
				add_top_links(comps['c' + THIS_CAT_cat_key], THIS_CAT_cat_key);
				// Refresh layer
				refresh_comp_layer();
			}, "script");
		}
		else {
			// Send delete request
			$.get(do_link("site.remote", "request=comp_prod_delete&p=" + jThis.val()), function(data){
				// Update counters
				add_top_links(comps['c' + THIS_CAT_cat_key], THIS_CAT_cat_key);
				// Refresh layer
				refresh_comp_layer();
			}, "script");
		}
	});
}

// Callback after single product delete
function after_comp_prod_delete(data){
	// Refresh counters
	add_top_links(comps['c' + data.c], data.c);
	// Select checkboxes
	$("#prod_row_" + data.p + " .col_check :checkbox").removeAttr("checked");
}

// Callback after multiple product delete
function after_comp_prod_delete_list(data){
	// Refresh counters
	add_top_links(0, data.c);
	// If current cat was deleted, uncheck all product checkboxes
	if ($("#compare_form").metadata().c == data.c) {
		$("#compare_form input:checkbox").removeAttr("checked");
	}
}
;;(function ($) {
    $.fn.carousel = function (params) {
        var params = $.extend({
            direction: "horizontal",
            loop: false,
            dispItems: 1,
            pagination: false,
            paginationPosition: "inside",
            nextBtn: '<a role="button">&nbsp;</a>',
            prevBtn: '<a role="button">&nbsp;</a>',
            btnsPosition: "inside",
            nextBtnInsert: "appendTo",
            prevBtnInsert: "prependTo",
            nextBtnInsertFn: false,
            prevBtnInsertFn: false,
            autoSlide: false,
            autoSlideInterval: 3000,
            delayAutoSlide: false,
            combinedClasses: false,
            effect: "slide",
            slideEasing: "swing",
            animSpeed: "normal",
            equalWidths: "true",
            verticalMargin: 0,
            callback: function () {},
            useAddress: false,
            adressIdentifier: "carousel",
            tabLabel: function (tabNum) {
                return tabNum;
            }
        }, params);
        if (params.btnsPosition == "outside") {
            params.prevBtnInsert = "insertBefore";
            params.nextBtnInsert = "insertAfter";
        }
        params.delayAutoSlide = params.delayAutoSlide || params.autoSlideInterval;
        return this.each(function () {
            var env = {
                $elts: {},
                params: params,
                launchOnLoad: []
            };
	    
	    this.env = env;
	    
	    var uls = $(this).children();
	    var lis = uls.find("li");
	    if (env.params.loop && (lis.length % env.params.dispItems) && (lis.length > env.params.dispItems)) {
		for (var i=0; i<(env.params.dispItems - (lis.length % env.params.dispItems)); i++) {
			cln = $(lis[i]).clone();
			cln.appendTo(uls);
		}
	    }
	    
            env.$elts.carousel = $(this).addClass("js");
            env.$elts.content = $(this).children().css({
                position: "absolute",
                "top": 0
            });
            env.$elts.wrap = env.$elts.content.wrap('<div class="carousel-wrap"></div>').parent().css({
                overflow: "hidden",
                position: "relative"
            });
            env.steps = {
                first: 0,
                count: env.$elts.content.children().length
            };
            env.steps.last = env.steps.count - 1;
            if ($.isFunction(env.params.prevBtnInsertFn)) {
                env.$elts.prevBtn = env.params.prevBtnInsertFn(env.$elts);
            } else {
                env.$elts.prevBtn = $(params.prevBtn)[params.prevBtnInsert](env.$elts.carousel);
            }
            if ($.isFunction(env.params.nextBtnInsertFn)) {
                env.$elts.nextBtn = env.params.nextBtnInsertFn(env.$elts);
            } else {
                env.$elts.nextBtn = $(params.nextBtn)[params.nextBtnInsert](env.$elts.carousel);
            }
            env.$elts.nextBtn.addClass("carousel-control next carousel-next");
            env.$elts.prevBtn.addClass("carousel-control previous carousel-previous");
	    $(this).siblings(".carousel_nav_sep").remove();
            initButtonsEvents(env);
            if (env.params.pagination) {
                initPagination(env);
            }
            initAddress(env);
            $(function () {
                var $items = env.$elts.content.children();
                var $maxHeight = 0;
                $items.each(function () {
                    $item = $(this);
                    $itemHeight = $item.outerHeight();
                    if ($itemHeight > $maxHeight) {
                        $maxHeight = $itemHeight;
                    }
                });
                if (env.params.verticalMargin > 0) {
                    $maxHeight = $maxHeight + env.params.verticalMargin;
                }
                $items.height($maxHeight);
                var $firstItem = env.$elts.content.children(":first");
                env.itemWidth = $firstItem.outerWidth();
                if (params.direction == "vertical") {
                    env.contentWidth = env.itemWidth;
                } else {
                    if (params.equalWidths) {
                        env.contentWidth = env.itemWidth * env.steps.count;
                    } else {
                        env.contentWidth = (function () {
                            var totalWidth = 0;
                            env.$elts.content.children().each(function () {
                                totalWidth += $(this).outerWidth();
                            });
                            return totalWidth;
                        })();
                    }
                }
                env.$elts.content.width(env.contentWidth);
                env.itemHeight = $maxHeight;
                if (params.direction == "vertical") {
                    env.$elts.content.css({
                        height: env.itemHeight * env.steps.count + "px"
                    });
                    env.$elts.content.parent().css({
                        height: env.itemHeight * env.params.dispItems + "px"
                    });
                } else {
                    env.$elts.content.parent().css({
                        width: env.itemWidth * env.params.dispItems + "px",
                        height: env.itemHeight + "px"
                    });
                }
                updateButtonsState(env);
                $.each(env.launchOnLoad, function (i, fn) {
                    fn();
                });
                if (env.params.autoSlide) {
                    window.setTimeout(function () {
                        resetSliderInterval(env);
                    }, env.params.delayAutoSlide);
                }
		
		env.params.callback(0);
            });
        });
    };
    
    function resetSliderInterval(env) {
	stopAutoSlide(env);
	env.autoSlideInterval = window.setInterval(function () {
	    goToStep(env, getRelativeStep(env, "next"));
	}, env.params.autoSlideInterval);
    }

    function initButtonsEvents(env) {
        env.$elts.nextBtn.add(env.$elts.prevBtn).bind("enable", function () {
            var $this = $(this).unbind("mousedown").bind("mousedown", function () {
                goToStep(env, getRelativeStep(env, ($this.is(".next") ? "next" : "prev")));
		if (env.params.autoSlide) {
			resetSliderInterval(env);
		}
            }).removeClass("disabled");
            if (env.params.combinedClasses) {
                $this.removeClass("next-disabled previous-disabled");
            }
        }).bind("disable", function () {
            var $this = $(this).unbind("mousedown").addClass("disabled");
            if (env.params.combinedClasses) {
                if ($this.is(".next")) {
                    $this.addClass("next-disabled");
                } else if ($this.is(".previous")) {
                    $this.addClass("previous-disabled");
                }
            }
        }).hover(function () {
            $(this).toggleClass("hover");
        });
    };

    function initPagination(env) {
        env.$elts.pagination = $('<span class="center-wrap carousel-pagination"></span>')[((env.params.paginationPosition == "outside") ? "insertAfter" : "appendTo")](env.$elts.carousel);
        env.$elts.paginationBtns = $([]);
        env.$elts.content.find("li").each(function (i) {
            if (i % env.params.dispItems == 0) {
                env.$elts.paginationBtns = env.$elts.paginationBtns.add($('<a role="button"><span>' + env.params.tabLabel(env.$elts.paginationBtns.length + 1) + '</span></a>').data("firstStep", i));
            }
        });
        env.$elts.paginationBtns.each(function () {
            $(this).appendTo(env.$elts.pagination);
        });
        env.$elts.paginationBtns.slice(0, 1).addClass("active");
        env.launchOnLoad.push(function () {
            env.$elts.paginationBtns.click(function (e) {
                goToStep(env, $(this).data("firstStep"));
                stopAutoSlide(env);
            });
        });
    };

    function initAddress(env) {
        if (env.params.useAddress && $.isFunction($.fn.address)) {
            $.address.init(function (e) {
                var pathNames = $.address.pathNames();
                if (pathNames[0] === env.params.adressIdentifier && !! pathNames[1]) {
                    goToStep(env, pathNames[1] - 1);
                } else {
                    $.address.value('/' + env.params.adressIdentifier + '/1');
                }
            }).change(function (e) {
                var pathNames = $.address.pathNames();
                if (pathNames[0] === env.params.adressIdentifier && !! pathNames[1]) {
                    goToStep(env, pathNames[1] - 1);
                }
            });
        } else {
            env.params.useAddress = false;
        }
    };

    function goToStep(env, step) {
        env.params.callback(step);
        transition(env, step);
        env.steps.first = step;
        updateButtonsState(env);
        if (env.params.useAddress) {
            $.address.value('/' + env.params.adressIdentifier + '/' + (step + 1));
        }
    };

    function getRelativeStep(env, position) {
        if (position == "prev") {
            if ((env.steps.first - env.params.dispItems) >= 0) {
                return env.steps.first - env.params.dispItems;
            } else {
                return ((env.params.loop) ? (env.steps.count - env.params.dispItems) : false);
            }
        } else if (position == "next") {
            if ((env.steps.first + env.params.dispItems) < env.steps.count) {
                return env.steps.first + env.params.dispItems;
            } else {
                return ((env.params.loop) ? 0 : false);
            }
        }
    };

    function transition(env, step) {
        switch (env.params.effect) {
        case "no":
            if (env.params.direction == "vertical") {
                env.$elts.content.css("top", -(env.itemHeight * step) + "px");
            } else {
                env.$elts.content.css("left", -(env.itemWidth * step) + "px");
            }
            break;
        case "fade":
            if (env.params.direction == "vertical") {
                env.$elts.content.hide().css("top", -(env.itemHeight * step) + "px").fadeIn(env.params.animSpeed);
            } else {
                env.$elts.content.hide().css("left", -(env.itemWidth * step) + "px").fadeIn(env.params.animSpeed);
            }
            break;
        default:
            if (env.params.direction == "vertical") {
                env.$elts.content.stop().animate({
                    top: -(env.itemHeight * step) + "px"
                }, env.params.animSpeed, env.params.slideEasing);
            } else {
                env.$elts.content.stop().animate({
                    left: -(env.itemWidth * step) + "px"
                }, env.params.animSpeed, env.params.slideEasing);
            }
            break;
        }
    };

    function updateButtonsState(env) {
        if (getRelativeStep(env, "prev") !== false) {
            env.$elts.prevBtn.trigger("enable");
        } else {
            env.$elts.prevBtn.trigger("disable");
        }
        if (getRelativeStep(env, "next") !== false) {
            env.$elts.nextBtn.trigger("enable");
        } else {
            env.$elts.nextBtn.trigger("disable");
        }
        if (env.params.pagination) {
            env.$elts.paginationBtns.removeClass("active").filter(function () {
                return ($(this).data("firstStep") == env.steps.first)
            }).addClass("active");
        }
    };

    function stopAutoSlide(env) {
        if ( !! env.autoSlideInterval) {
            window.clearInterval(env.autoSlideInterval);
        }
    };
})(jQuery);
;;(function($){var helper={},current,title,tID,IE=$.browser.msie&&/MSIE\s(5\.5|6\.)/.test(navigator.userAgent),track=false;$.tooltip={blocked:false,defaults:{delay:200,fade:false,showURL:true,extraClass:"",top:15,left:15,id:"tooltip"},block:function(){$.tooltip.blocked=!$.tooltip.blocked;}};$.fn.extend({tooltip:function(settings){settings=$.extend({},$.tooltip.defaults,settings);createHelper(settings);return this.each(function(){$.data(this,"tooltip",settings);this.tOpacity=helper.parent.css("opacity");this.tooltipText=this.title;$(this).removeAttr("title");this.alt="";}).mouseover(save).mouseout(hide).click(hide);},fixPNG:IE?function(){return this.each(function(){var image=$(this).css('backgroundImage');if(image.match(/^url\(["']?(.*\.png)["']?\)$/i)){image=RegExp.$1;$(this).css({'backgroundImage':'none','filter':"progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true, sizingMethod=crop, src='"+image+"')"}).each(function(){var position=$(this).css('position');if(position!='absolute'&&position!='relative')$(this).css('position','relative');});}});}:function(){return this;},unfixPNG:IE?function(){return this.each(function(){$(this).css({'filter':'',backgroundImage:''});});}:function(){return this;},hideWhenEmpty:function(){return this.each(function(){$(this)[$(this).html()?"show":"hide"]();});},url:function(){return this.attr('href')||this.attr('src');}});function createHelper(settings){if(helper.parent)return;helper.parent=$('<div id="'+settings.id+'"><h3></h3><div class="body"></div><div class="url"></div></div>').appendTo(document.body).hide();if($.fn.bgiframe)helper.parent.bgiframe();helper.title=$('h3',helper.parent);helper.body=$('div.body',helper.parent);helper.url=$('div.url',helper.parent);}function settings(element){return $.data(element,"tooltip");}function handle(event){if(settings(this).delay)tID=setTimeout(show,settings(this).delay);else
show();track=!!settings(this).track;$(document.body).bind('mousemove',update);update(event);}function save(){if($.tooltip.blocked||this==current||(!this.tooltipText&&!settings(this).bodyHandler))return;current=this;title=this.tooltipText;if(settings(this).bodyHandler){helper.title.hide();var bodyContent=settings(this).bodyHandler.call(this);if(bodyContent.nodeType||bodyContent.jquery){helper.body.empty().append(bodyContent)}else{helper.body.html(bodyContent);}helper.body.show();}else if(settings(this).showBody){var parts=title.split(settings(this).showBody);helper.title.html(parts.shift()).show();helper.body.empty();for(var i=0,part;(part=parts[i]);i++){if(i>0)helper.body.append("<br/>");helper.body.append(part);}helper.body.hideWhenEmpty();}else{helper.title.html(title).show();helper.body.hide();}if(settings(this).showURL&&$(this).url())helper.url.html($(this).url().replace('http://','')).show();else
helper.url.hide();helper.parent.addClass(settings(this).extraClass);if(settings(this).fixPNG)helper.parent.fixPNG();handle.apply(this,arguments);}function show(){tID=null;if((!IE||!$.fn.bgiframe)&&settings(current).fade){if(helper.parent.is(":animated"))helper.parent.stop().show().fadeTo(settings(current).fade,current.tOpacity);else
helper.parent.is(':visible')?helper.parent.fadeTo(settings(current).fade,current.tOpacity):helper.parent.fadeIn(settings(current).fade);}else{helper.parent.show();}update();}function update(event){if($.tooltip.blocked)return;if(event&&event.target.tagName=="OPTION"){return;}if(!track&&helper.parent.is(":visible")){$(document.body).unbind('mousemove',update)}if(current==null){$(document.body).unbind('mousemove',update);return;}helper.parent.removeClass("viewport-right").removeClass("viewport-bottom");var left=helper.parent[0].offsetLeft;var top=helper.parent[0].offsetTop;if(event){left=event.pageX+settings(current).left;top=event.pageY+settings(current).top;var right='auto';if(settings(current).positionLeft){right=$(window).width()-left;left='auto';}helper.parent.css({left:left,right:right,top:top});}var v=viewport(),h=helper.parent[0];if(v.x+v.cx<h.offsetLeft+h.offsetWidth){left-=h.offsetWidth+20+settings(current).left;helper.parent.css({left:left+'px'}).addClass("viewport-right");}if(v.y+v.cy<h.offsetTop+h.offsetHeight){top-=h.offsetHeight+20+settings(current).top;helper.parent.css({top:top+'px'}).addClass("viewport-bottom");}}function viewport(){return{x:$(window).scrollLeft(),y:$(window).scrollTop(),cx:$(window).width(),cy:$(window).height()};}function hide(event){if($.tooltip.blocked)return;if(tID)clearTimeout(tID);current=null;var tsettings=settings(this);function complete(){helper.parent.removeClass(tsettings.extraClass).hide().css("opacity","");}if((!IE||!$.fn.bgiframe)&&tsettings.fade){if(helper.parent.is(':animated'))helper.parent.stop().fadeTo(tsettings.fade,0,complete);else
helper.parent.stop().fadeOut(tsettings.fade,complete);}else
complete();if(settings(this).fixPNG)helper.parent.unfixPNG();}})(jQuery); 
