
/*
* BEATIFUL RATING
*/

(function($) {

	$.fn.extend({

		JBeatifulRating: function(oOptions) {

			var oDefaults = {
				nMaxRating: 5,
				iInterval: 200,
				iAnimationDuration: 600
			};

			oOptions = $.extend(oDefaults, oOptions);

			var iJBeatifulRatingDelay = 0;

			return this.each(function() {
				
				var gThis = this;
				
				gThis.m_oOptions = oOptions;
				
				gThis.m_jIndicator;
				gThis.m_nRating;
				gThis.m_nPercentage;
				gThis.m_bShown = false;
				
				gThis.Constructor = function() {
					
					gThis.m_nRating = parseFloat($(gThis).text().substr($(gThis).text().lastIndexOf(' ')));
					if (isNaN(gThis.m_nRating)) {
						gThis.m_nRating = 0;
					}
					gThis.m_nPercentage = ((gThis.m_nRating / gThis.m_oOptions.nMaxRating) * 100);
					gThis.m_jIndicator = $('<span class="indicator"/>').css('width', 0);
					$(gThis).empty().addClass('beatiful-rating').append(gThis.m_jIndicator).append('<span class="bg"/>');
					
					if ($(gThis).closest('.ui-tabs').length && $(gThis).closest('.ui-tabs-panel').hasClass('ui-tabs-hide')) {
						$(gThis).closest('.ui-tabs').bind('tabsshow', function(eEvent, oUi) {
							if (oUi.panel == $(gThis).closest('.ui-tabs-panel').get(0)) {
								gThis.Show();
							}
							return true;
						});
					}
					else {
						gThis.Show();
					}
					
				};
				
				gThis.Show = function() {
					if (gThis.m_bShown) {
						return;
					}
					gThis.m_bShown = true;
					gThis.m_jIndicator.delay(iJBeatifulRatingDelay).animate({
						width: gThis.m_nPercentage + '%'
					}, gThis.m_oOptions.iAnimationDuration, 'easeOutBack');
					iJBeatifulRatingDelay += gThis.m_oOptions.iInterval;
				};
				
				gThis.Constructor();

			});

		}

	});

})(jQuery);


(function($) {
	
	$.fn.extend({
		
		JCartForm: function(options) {
			
			var defaults = {
				classes: {
					validation: 'validation',
					validate_on_load: 'validate-on-load',
					validate_on_load_if_not_empty: 'validate-on-load-if-not-empty',
					ignore: 'ignore',
					toggle: 'toggle',
					calendar: 'date',
					status: 'status',
					suggestion: 'suggestion',
					hidden: 'invisible',
					valid: 'valid',
					invalid: 'invalid',
					calculation: 'calculation',
					not_required: 'not-required',
					sCurrency: 'PLN'
				}, // gdyby kiedyś wystąpiły jakieś konflikty w nazewnictwie...
				slide_time: 250, // długość animacji pokazywania/ukrywania fieldseta (w milisekundach)
				recalculate_url: 'koszyk.htm' // adres skryptu przeliczajacego koszyk
			};
			
			options = $.extend({}, defaults, options);
			
			return this.each(function() {
				
				var gThis = this;
				
				gThis.m_oOptions = options;
				gThis.m_jWrapper;
				
				gThis._CalculateFieldPrice = function(jNode) {
					fPrice = 0;
					if (jNode.is('label')) {
						if (jNode.find('.price').length) {
							fPrice = parseFloat(jNode.find('.price').text().substr(1));
						}
					}
					else if (jNode.is('option')) {
						var iIndex;
						if ((iIndex = jNode.text().search(/\([0-9,]+[^\)]*\)/)) != -1) {
							fPrice = parseFloat(jNode.text().substr(iIndex + 1));
						}
					}
					else if (jNode.is('td')) {
						fPrice = parseFloat(jNode.text());
					}
					return isNaN(fPrice) ? 0 : fPrice;
				};
				
				gThis._CalculateFieldsetPrice = function(jFieldset) {
					var fPrice = 0;
					jFieldset.find('.field-radio-group label:has(input:checked), .field-checkbox label:has(input:checked)').each(function() {
						fPrice += gThis._CalculateFieldPrice($(this));
						if ($(this).next('select').length) {
							fPrice += gThis._CalculateFieldPrice($(this).next('select').find('option:selected'));
						}
					});
					return fPrice;
				};
				
				gThis._CalculateFormPrice = function(jForm) {
					var fPrice = 0;
					jForm.find('table tr .price').each(function() {
						fPrice += gThis._CalculateFieldPrice($(this));
					});
					jForm.find('fieldset').each(function() {
						fPrice += gThis._CalculateFieldsetPrice($(this));
					});
					return fPrice;
				};
				
				gThis._CalculateOrderPrice = function() {
					$(gThis).find('dl.total dd').text(gThis._CalculateFormPrice($(gThis)).toFixed(2) + gThis.m_oOptions.sCurrency);
					$(gThis).find('.field-radio-group input, .field-checkbox input, select').each(function() {
						$(this).closest('fieldset').find('dl.subtotal dd').text(gThis._CalculateFieldsetPrice($(this).closest('fieldset')).toFixed(2) + gThis.m_oOptions.sCurrency);
					});
				};
				
				gThis.Toggle = function() {
					var fForm = $(this).closest('form').get(0);
					if ($(this).is(':checked')) {
						$('#' + $(this).attr('name')).slideDown(fForm.m_oOptions.slide_time).find('.' + fForm.m_oOptions.classes.validation).removeClass('ignore');
					}
					else {
						$('#' + $(this).attr('name')).slideUp(fForm.m_oOptions.slide_time).find('.' + fForm.m_oOptions.classes.validation).addClass('ignore');
					}
				};
				
				$(gThis).find('select').change(function() {
					$(this).prev('label').find('input').each(function() {
						if (!$(this).is(':checked')) {
							$(this).click().change();
						}
					});
					gThis._CalculateOrderPrice();
				});
				$(gThis).find('.field-radio-group input, .field-checkbox input').click(gThis._CalculateOrderPrice);
				$(gThis).find('.' + gThis.m_oOptions.classes.hidden).css('display', 'none');
				var iTimeTmp = gThis.m_oOptions.slide_time;
				gThis.m_oOptions.slide_time = 0;
				$(gThis).find('input.' + gThis.m_oOptions.classes.toggle).change(gThis.Toggle).click(gThis.Toggle).change();
				gThis.m_oOptions.slide_time = iTimeTmp;
				
				gThis._CalculateOrderPrice();
				
				gThis._Serialize = function() {
					var oData = {};
					var jFields = $(gThis).find('input:text, textarea');
					for (var i = 0; i < jFields.length; i++) {
						if ((jFields.eq(i).attr('name') != undefined) && (jFields.eq(i).attr('name') != '')) {
							oData[jFields.eq(i).attr('name')] = jFields.eq(i).val();
						}
					}
					jFields = $(gThis).find('select');
					for (var i = 0; i < jFields.length; i++) {
						if ((jFields.eq(i).attr('name') != undefined) && (jFields.eq(i).attr('name') != '')) {
							oData[jFields.eq(i).attr('name')] = jFields.eq(i).find('option:selected').attr('value');
						}
					}
					jFields = $(gThis).find('input:radio, input:checkbox');
					for (var i = 0; i < jFields.length; i++) {
						if (jFields.eq(i).is(':checked')) {
							if ((jFields.eq(i).attr('name') != undefined) && (jFields.eq(i).attr('name') != '')) {
								oData[jFields.eq(i).attr('name')] = jFields.eq(i).attr('value');
							}
						}
					}
					return oData;
				};
				
				if ($(gThis).parent().hasClass('wrapper')) {
					gThis.m_jWrapper = $(gThis).parent();
				}
				else {
					gThis.m_jWrapper = $('<div class="wrapper"/>');
					$(gThis).wrap(gThis.m_jWrapper);
				}
				
				$(gThis).find('table').wrapAll('<div/>');
				
				gThis._InitButtons = function() {
					var jButtons = $(gThis).find('table input[type="submit"], table input[type="image"]').click(function(eEvent) {
						$('body').css('cursor', 'wait');
						if (!(window.XMLHttpRequest && document.all)) {
							gThis.m_jWrapper.css('opacity', .35);
						}
						var oCurrentButton = {};
						oCurrentButton[$(this).attr('name')] = $(this).attr('value');
						$('body').append($('<div class="waiting"/>').css({
							top: $(gThis).offset().top,
							left: $(gThis).offset().left,
							width: $(gThis).width(),
							height: $(gThis).height()
						}));
						if (gThis.m_oOptions.bReloadEverything) {
							gThis.m_jWrapper.load(gThis.m_oOptions.recalculate_url + ' #' + $(gThis).attr('id'), $.extend({preventCaching: Math.random()}, gThis._Serialize(), oCurrentButton), function(sContent) {
								var jContent = $(sContent);
								if (!jContent.find('#' + $(gThis).attr('id')).length) {
									gThis.m_jWrapper.empty().append(jContent.find('.article')).append(jContent.find('.products-list-two-columns'));
								}
								$('#' + $(gThis).attr('id')).JCartForm($.extend({bDontInit: true}, gThis.m_oOptions));
								fInitCartDependencies();
								$('body').css('cursor', 'auto');
								if (!(window.XMLHttpRequest && document.all)) {
									gThis.m_jWrapper.css('opacity', 1);
								}
								$('.cart .quantity .field-text input:not(.weight)').JTextField({
									bResetOnEmpty: false,
									sType: JTextField.TYPE_INT,
									iMin: 0, // minimalna wartosc
									iRound: 1 // wielkosc zaokraglenia
								});
								$('.cart .quantity .field-text input.weight').JTextField({
									bResetOnEmpty: false,
									sType: JTextField.TYPE_INT,
									iMin: 50, // minimalna wartosc
									iRound: 50, // wielkosc zaokraglenia
									bZero: true
								});
								jContent.find('script').each(function() {
									eval($(this).html());
								});
								$('.waiting').remove();
							});
						}
						else {
							$(gThis).find('table:eq(0)').parent().load(gThis.m_oOptions.recalculate_url + ' #' + $(gThis).attr('id') + ' table:eq(0)', $.extend({preventCaching: Math.random()}, gThis._Serialize(), oCurrentButton), function(sContent) {
								var jContent = $(sContent);
								if (!jContent.find('#' + $(gThis).attr('id') + ' table:eq(0)').length) {
									gThis.m_jWrapper.empty().append(jContent.find('.article')).append(jContent.find('.products-list-two-columns'));
								}
								gThis.m_oOptions.bDontInit = true;
								gThis._InitButtons();
								$('body').css('cursor', 'auto');
								if (!(window.XMLHttpRequest && document.all)) {
									gThis.m_jWrapper.css('opacity', 1);
								}
								$('.cart .quantity .field-text input:not(.weight)').JTextField({
									bResetOnEmpty: false,
									sType: JTextField.TYPE_INT,
									iMin: 0, // minimalna wartosc
									iRound: 1 // wielkosc zaokraglenia
								});
								$('.cart .quantity .field-text input.weight').JTextField({
									bResetOnEmpty: false,
									sType: JTextField.TYPE_INT,
									iMin: 50, // minimalna wartosc
									iRound: 50, // wielkosc zaokraglenia
									bZero: true
								});
								gThis._CalculateOrderPrice();
								jContent.find('script').each(function() {
									eval($(this).html());
								});
								$('.waiting').remove();
							});
						}
						eEvent.stopImmediatePropagation();
						eEvent.preventDefault();
						return false;
					});
					if (!gThis.m_oOptions.bDontInit) {
						jButtons.eq(0).triggerHandler('click');
					}
				};
				
				gThis._InitButtons();
				
			});
			
		}
		
	});
	
})(jQuery);
/*
* GALLERY
*/

(function($) {

	$.fn.extend({

		JGallery: function(oOptions) {

			var oDefaults = {
				iSlideSwitchInterval: 5000
			};

			oOptions = $.extend(oDefaults, oOptions);

			return this.each(function() {
				
				var gThis = this;
				
				gThis.m_oOptions = oOptions;
				
				gThis.m_aoFiles = [];
				gThis.m_iCurrent = 0;
				gThis.m_jMainPicture;
				gThis.m_iTimeout;
				gThis.m_bStopped = false;
				gThis.m_iLength = 0;
				
				gThis.Constructor = function() {
					gThis.m_jMainPicture = $(gThis).find('.main-picture');
					gThis.m_jMainPicture.find('a').attr('tabindex', -1).css('cursor', 'default').click(function() {
						return false;
					});
					gThis._Harvest();
					gThis.Start();
				};
				
				gThis.Start = function() {
					gThis.m_iTimeout = setTimeout(function() {
						if (gThis.m_bStopped) {
							return;
						}
						if (gThis.m_iCurrent < gThis.m_iLength - 1) {
							gThis.Next();
						}
						else {
							gThis.First();
						}
					}, gThis.m_oOptions.iSlideSwitchInterval);
				};
				
				gThis.Stop = function() {
					gThis.m_bStopped = true;
					clearTimeout(gThis.m_iTimeout);
				}
				
				gThis._Harvest = function() {
					var jImages = $(gThis).find('ul a:has(img)');
					for (var i = 0; i < jImages.length; i++) {
						gThis.m_aoFiles[i] = {
							sMediumFilename: jImages.eq(i).find('img').attr('src'),
							sAlt: jImages.eq(i).find('img').attr('alt'),
							sBigFilename: jImages.eq(i).attr('href')
						};
						jImages.eq(i).bind('click', {i: i}, function(eEvent) {
							gThis.GoTo(eEvent.data.i);
							return false;
						}).click(gThis.Stop);
						jImages.eq(i).text(i + 1);
					}
					gThis.m_iLength = i;
				};
				
				gThis.GoTo = function(iImage) {
					if ((gThis.m_aoFiles[iImage] == undefined) || (gThis.m_iCurrent == iImage)) {
						return;
					}
					gThis.m_iCurrent = iImage;
					var sMediumFilename = gThis.m_aoFiles[gThis.m_iCurrent].sMediumFilename;
					var sBigFilename = gThis.m_aoFiles[gThis.m_iCurrent].sMediumFilename;
					var sAlt = gThis.m_aoFiles[gThis.m_iCurrent].sAlt;
					gThis.m_jMainPicture.find('img').stop(true, false).animate({
						opacity: 0
					}, 50, function() {
						$(gThis).find('li').removeClass('active').eq(iImage).addClass('active');
						$(this).closest('a').attr('href', sBigFilename);
						var jOldImage = $(this);
						var jImage = $('<img/>');
						$(this).after(jImage.css({
							opacity: 0,
							position: 'absolute',
							left: -5000,
							top: -5000
						}));
						var fShow = function() {
							jOldImage.remove();
							jImage.css('position', 'static').animate({
								opacity: 1
							}, 150);
						};
						jImage.load(fShow);
						jImage.attr('src', sMediumFilename).attr('alt', sAlt);
					});
				};
				
				gThis.First = function() {
					gThis.GoTo(0);
					if (!gThis.m_bStopped) {
						gThis.Start();
					}
					return false;
				};
				
				gThis.Next = function() {
					gThis.GoTo(Math.max(0, Math.min(gThis.m_iLength - 1, gThis.m_iCurrent + 1)));
					if (!gThis.m_bStopped) {
						gThis.Start();
					}
					return false;
				};
				
				gThis.Prev = function() {
					gThis.GoTo(Math.max(0, Math.min(gThis.m_iLength - 1, gThis.m_iCurrent - 1)));
					if (!gThis.m_bStopped) {
						gThis.Start();
					}
					return false;
				};
				
				gThis.Constructor();

			});

		}

	});

})(jQuery);


var ShowCountry = function(sCountry) {
	JMap.s_gInstance.CountrySelected(sCountry);
};

var JMap = {};
JMap.s_gInstance = 0;

(function($) {

	$.fn.extend({

		JMap: function(oOptions) {

			var oDefaults = {
				iWidth: 680,
				iHeight: 320,
				sXMLFile: 'tpl/DEFAULT/_data/herbata.xml',
				sSWFFile: 'tpl/DEFAULT/_data/world.swf',
				sProxyFile: 'tpl/DEFAULT/_data/libs/flashProxy/JavaScriptFlashGateway.swf',
				sActiveColor: 'ffe92f',
				sDefaultColor: '8db131',
				jCountrySelect: $()
			};

			oOptions = $.extend(oDefaults, oOptions);

			return this.each(function() {
				
				var gThis = this;
				
				gThis.m_oOptions = oOptions;
				gThis.m_sCurrentCountry;
				gThis.m_oProxy;
				gThis.m_jMapContent;
				
				gThis.Constructor = function() {
					JMap.s_gInstance = gThis;
					var uid = new Date().getTime();
					gThis.m_oProxy = new FlashProxy(uid, gThis.m_oOptions.sProxyFile);
					$(gThis).flash({
						swf: gThis.m_oOptions.sSWFFile + '?data_file=' + gThis.m_oOptions.sXMLFile,
						width: gThis.m_oOptions.iWidth,
						height: gThis.m_oOptions.iHeight,
						params: {
							wmode: 'transparent',
							allowScriptAccess: 'always'
						},
						flashvars: {
							lcId: uid
						}
					});
					gThis.m_oOptions.jCountrySelect.change(function(eEvent) {
						var sCountry = $(this).find('option:selected').attr('value');
						gThis.ShowCountry(sCountry);
					});
					gThis.m_jMapContent = $('#map-content');
					gThis.m_jMapContent.children('li').css('display','none');
				};
				
				gThis.SelectCountry = function(sCountry) {
					if (sCountry) {
						setTimeout(function() {
							gThis.m_oProxy.call('setColor', sCountry, gThis.m_oOptions.sActiveColor);
							setTimeout(function() {
								gThis.m_oProxy.call('setColor', sCountry, gThis.m_oOptions.sActiveColor);
							}, 20);
						}, 40);
					}
				};
				
				gThis.DeselectCountry = function(sCountry) {
					gThis.m_oProxy.call('setColor', sCountry, gThis.m_oOptions.sDefaultColor);
					setTimeout(function() {
						gThis.m_oProxy.call('setColor', sCountry, gThis.m_oOptions.sDefaultColor);
					}, 20);
				};
				
				gThis.CountrySelected = function(sCountry) {
					gThis.m_oOptions.jCountrySelect.val(sCountry).change();
				};
				
				gThis.ShowCountry = function(sCountry) {
					setTimeout(function() {
						if (gThis.m_sCurrentCountry) {
							gThis.DeselectCountry(gThis.m_sCurrentCountry);
						}
						gThis.m_sCurrentCountry = sCountry;
						gThis.SelectCountry(sCountry);
						gThis.m_jMapContent.children('li').hide();
						gThis.m_jMapContent.children('#' + sCountry).show();
					}, 10);
				};
				
				gThis.Constructor();

			});

		}

	});

})(jQuery);

(function($) {

	$.fn.extend({

		JProductCarousel: function(oOptions) {

			var oDefaults = {
				iItemWidth: 690,
				iFocusAnimationTime: 150,
				iSlideSwitchInterval: 7000,
				nBlurOpacity: 1,
				nFocusOpacity: .6
			};

			oOptions = $.extend(oDefaults, oOptions);

			return this.each(function() {
				
				var gThis = this;
				
				gThis.m_oOptions = oOptions;
				gThis.m_iLength = $(this).find('li').length;
				gThis.m_iCurrent = 0;
				gThis.m_jLeft;
				gThis.m_jRight;
				gThis.m_jSelector;
				gThis.m_iTimeout;
				gThis.m_bStopped = false;
				
				gThis.Constructor = function() {
					
					$(this).css('width', gThis.m_iLength * gThis.m_oOptions.iItemWidth).wrap('<div class="carousel-wrapper"/>').find('.description').each(function() {
						$(this).wrap('<div class="description-wrapper"/>');
						$(this).closest('li').find('.photo').css('margin-top', - ($(this).height() + 20));
						$(this).closest('li').find('.product').append($(this).find('p.price'));
					});
					
					gThis.m_jLeft = $('<a href="#" class="previous"/>').css({
						position: 'absolute',
						left: 5,
						top: 165,
						zIndex: 20,
						padding: 5,
						cursor: 'pointer',
						display: 'none'
					});
					gThis.m_jLeft.append('<img src="tpl/DEFAULT/_images/icons/arrows/triangle-left.png" alt="Poprzednie"/>');
					gThis.m_jRight = $('<a href="#" class="next"/>').css({
						position: 'absolute',
						right: 5,
						top: 165,
						zIndex: 20,
						padding: 5,
						cursor: 'pointer',
						display: 'none'
					});
					gThis.m_jRight.append('<img src="tpl/DEFAULT/_images/icons/arrows/triangle-right.png" alt="Następne"/>');
					gThis.m_jLeft.hover(function() {
						$(this).animate({
							left: 0,
							paddingRight: 10,
							opacity: gThis.m_oOptions.nBlurOpacity
						}, gThis.m_oOptions.iFocusAnimationTime, 'easeOutCubic');
					}, function() {
						$(this).stop(true, false).animate({
							left: 5,
							paddingRight: 5,
							opacity: gThis.m_oOptions.nFocusOpacity
						}, gThis.m_oOptions.iFocusAnimationTime, 'easeOutCubic');
					}).click(gThis.Prev).click(gThis.Stop);
					gThis.m_jRight.hover(function() {
						$(this).animate({
							right: 0,
							paddingLeft: 10,
							opacity: gThis.m_oOptions.nBlurOpacity
						}, gThis.m_oOptions.iFocusAnimationTime, 'easeOutCubic');
					}, function() {
						$(this).stop(true, false).animate({
							right: 5,
							paddingLeft: 5,
							opacity: gThis.m_oOptions.nFocusOpacity
						}, gThis.m_oOptions.iFocusAnimationTime, 'easeOutCubic');
					}).click(gThis.Next).click(gThis.Stop);
					$(this).closest('.carousel-wrapper').append(gThis.m_jLeft).append(gThis.m_jRight);
					
					$(this).children('li').each(function() {
						var sLink = $(this).find('h3 a').attr('href');
						$(this).hover(function() {
							$(this).find('.photo img').stop(true, false).animate({
								opacity: gThis.m_oOptions.nFocusOpacity
							}, gThis.m_oOptions.iFocusAnimationTime);
							return false;
						}, function() {
							$(this).find('.photo img').stop(true, false).animate({
								opacity: gThis.m_oOptions.nBlurOpacity
							}, gThis.m_oOptions.iFocusAnimationTime);
							return false;
						}).css({
							cursor: 'pointer'
						}).click(function() {
							window.location = sLink;
							return false;
						}).find('.photo img').css({
							opacity: gThis.m_oOptions.nBlurOpacity
						});
					});
					
					gThis.m_jSelector = $('<p class="selector"/>');
					$(this).children('li').each(function(i) {
						var jA = $('<a href="#"/>');
						jA.text(i + 1).get(0).iId = i;
						jA.click(function(eEvent) {
							gThis.GoTo(this.iId);
							return false;
						});
						gThis.m_jSelector.append(jA);
					});
					$(this).closest('.carousel-wrapper').append(gThis.m_jSelector);
					
					gThis.Update();
					gThis.Start();
					
				};
				
				gThis.Start = function() {
					gThis.m_iTimeout = setTimeout(function() {
						if (gThis.m_bStopped) {
							return;
						}
						if (gThis.m_iCurrent < gThis.m_iLength - 1) {
							gThis.Next();
						}
						else {
							gThis.First();
						}
					}, gThis.m_oOptions.iSlideSwitchInterval);
				};
				
				gThis.Stop = function() {
					gThis.m_bStopped = true;
					clearTimeout(gThis.m_iTimeout);
				}
				
				gThis.Update = function() {
					$(gThis).stop(true, false).animate({
						left: - gThis.m_iCurrent * gThis.m_oOptions.iItemWidth
					}, 400, 'easeOutQuart');
					if (gThis.m_iCurrent > 0) {
						gThis.m_jLeft.fadeIn(150);
					}
					else {
						gThis.m_jLeft.fadeOut(150);
					}
					if (gThis.m_iCurrent < gThis.m_iLength - 1) {
						gThis.m_jRight.fadeIn(150);
					}
					else {
						gThis.m_jRight.fadeOut(150);
					}
					gThis.m_jSelector.find('a').removeClass('active');
					gThis.m_jSelector.find('a:eq(' + gThis.m_iCurrent + ')').addClass('active');
				};
				
				gThis.GoTo = function(iTarget) {
					gThis.Stop();
					gThis.m_iCurrent = iTarget;
					gThis.Update();
					return false;
				};
				
				gThis.First = function() {
					gThis.m_iCurrent = 0;
					gThis.Update();
					if (!gThis.m_bStopped) {
						gThis.Start();
					}
					return false;
				};
				
				gThis.Next = function() {
					gThis.m_iCurrent = Math.max(0, Math.min(gThis.m_iLength - 1, gThis.m_iCurrent + 1));
					gThis.Update();
					if (!gThis.m_bStopped) {
						gThis.Start();
					}
					return false;
				};
				
				gThis.Prev = function() {
					gThis.m_iCurrent = Math.max(0, Math.min(gThis.m_iLength - 1, gThis.m_iCurrent - 1));
					gThis.Update();
					if (!gThis.m_bStopped) {
						gThis.Start();
					}
					return false;
				};
				
				gThis.Constructor();

			});

		}

	});

})(jQuery);

(function($) {

	$.fn.extend({

		JProductSuggestion: function(oOptions) {

			var oDefaults = {
				iFocusAnimationTime: 150,
				nBlurOpacity: 1,
				nFocusOpacity: .6
			};

			oOptions = $.extend(oDefaults, oOptions);

			return this.each(function() {
				
				var gThis = this;
				
				gThis.m_oOptions = oOptions;
				
				gThis.Constructor = function() {
					
					$(this).children('li').each(function() {
						var sLink = $(this).find('h3 a, h4 a').attr('href');
						$(this).hover(function() {
							$(this).find('.photo img').stop(true, false).animate({
								opacity: gThis.m_oOptions.nFocusOpacity
							}, gThis.m_oOptions.iFocusAnimationTime);
							return false;
						}, function() {
							$(this).find('.photo img').stop(true, false).animate({
								opacity: gThis.m_oOptions.nBlurOpacity
							}, gThis.m_oOptions.iFocusAnimationTime);
							return false;
						}).css({
							cursor: 'pointer'
						}).click(function() {
							window.location.href = sLink;
							return false;
						}).find('.photo img').css({
							opacity: gThis.m_oOptions.nBlurOpacity
						});
						$(this).find('input').hover(function() {
							$(this).parent().addClass('hover');
						}, function() {
							$(this).parent().removeClass('hover');
						}).click(function(eEvent) {
							eEvent.stopImmediatePropagation();
							return true;
						});
					});
					
				};
				
				gThis.Constructor();

			});

		}

	});

})(jQuery);

/*
* DYNAMIC TEXTFIELD
*/

var JTextField = {
	DEFAULTS: {
		bValueAsLabel: false,
		bResetOnEmpty: true,
		sType: 'string',
		iMin: '',
		iMax: '',
		iRound: '',
		bZero: false
	},
	TYPE_STRING: 'string',
	TYPE_INT: 'int'
};

(function($) {

	$.fn.extend({

		JTextField: function(oOptions) {

			var oDefaults = JTextField.DEFAULTS;

			oOptions = $.extend({}, oDefaults, oOptions);

			return this.each(function() {
				
				var gThis = this;
				
				gThis.m_oOptions = oOptions;
				
				gThis.m_sDefaultValue;
				
				gThis.Constructor = function() {
					
					if (gThis.m_oOptions.bValueAsLabel) {
						gThis.m_sDefaultValue = $(this).attr('value');
					}
					else {
						gThis.m_sDefaultValue = $(this).closest('.field-text').find('label').text();
					}
					if (gThis.m_oOptions.bResetOnEmpty) {
						$(this).val(gThis.m_sDefaultValue);
					}
					$(this).focus(gThis.OnFocus).blur(gThis.OnBlur);
					
				};
				
				gThis.OnFocus = function() {
					if (gThis.m_oOptions.bResetOnEmpty && ($(this).val() == gThis.m_sDefaultValue)) {
						$(this).val('');
					}
				};
				
				gThis.OnBlur = function(eEvent) {
					if (!$(this).val().length && gThis.m_oOptions.bResetOnEmpty) {
						$(this).val(gThis.m_sDefaultValue);
					}
					else {
						$(this).val(gThis.Validate($(this).val()));
					}
				};
				
				gThis.Check = function() {
					if (gThis.Validate($(gThis).val()) == $(gThis).val()) {
						return true;
					}
					return false;
				};
				
				gThis.Validate = function(mValue) {
					if (gThis.m_oOptions.sType == JTextField.TYPE_INT) {
						var mValue = parseInt(mValue);
						if (isNaN(mValue)) {
							mValue = 0;
						}
						if ((mValue != 0) || (!gThis.m_oOptions.bZero)) {
							if (gThis.m_oOptions.iMin != '') {
								mValue = Math.max(gThis.m_oOptions.iMin, mValue);
							}
							if (gThis.m_oOptions.iMax != '') {
								mValue = Math.min(gThis.m_oOptions.iMax, mValue);
							}
							if (gThis.m_oOptions.iRound != '') {
								mValue = Math.round(mValue / gThis.m_oOptions.iRound) * gThis.m_oOptions.iRound;
							}
						}
					}
					return mValue;
				};
				
				gThis.Constructor();

			});

		}

	});

})(jQuery);

(function($) {
	
	$.fn.extend({
		
		JToggler: function(options) {
			
			var defaults = {
				classes: {
					validation: 'validation',
					validate_on_load: 'validate-on-load',
					validate_on_load_if_not_empty: 'validate-on-load-if-not-empty',
					ignore: 'ignore',
					toggle: 'toggle',
					calendar: 'date',
					status: 'status',
					suggestion: 'suggestion',
					hidden: 'invisible',
					valid: 'valid',
					invalid: 'invalid',
					calculation: 'calculation',
					not_required: 'not-required'
				},
				iSlideTime: 200
			};
			
			options = $.extend({}, defaults, options);
			
			return this.each(function() {
				
				var gThis = this;
				
				gThis.m_oOptions = options;
				
				gThis.UpdateRadioState = function(jNode) {
					var sId = '#' + jNode.attr('name') + '-' + jNode.attr('value');
					if (jNode.is(':checked')) {
						$(sId).slideDown(gThis.m_oOptions.iSlideTime);
						if (jNode.closest('form').length) {
							$(sId).find('.' + gThis.m_oOptions.classes.validation).removeClass('ignore');
						}
					}
					else {
						$(sId).slideUp(gThis.m_oOptions.iSlideTime);
						if (jNode.closest('form').length) {
							$(sId).find('.' + gThis.m_oOptions.classes.validation).addClass('ignore');
						}
					}
				};
				
				gThis.UpdateCheckboxState = function(jNode) {
					var sId = '#' + $(this).attr('name');
					if (jNode.is(':checked')) {
						$(sId).slideDown(gThis.m_oOptions.iSlideTime);
						if (jNode.closest('form').length) {
							$(sId).find('.' + gThis.m_oOptions.classes.validation).removeClass('ignore');
						}
					}
					else {
						$(sId).slideUp(gThis.m_oOptions.iSlideTime);
						if (jNode.closest('form').length) {
							$(sId).find('.' + gThis.m_oOptions.classes.validation).addClass('ignore');
						}
					}
				};
				
				gThis.Toggle = function() {
					if ($(this).is(':radio')) {
						$('input:radio[name="' + $(this).attr('name') + '"]').each(function() {
							gThis.UpdateRadioState($(this));
						});
					}
					else {
						gThis.UpdateCheckboxState($(this));
					}
				};
				
				var iTime = gThis.m_oOptions.iSlideTime;
				gThis.m_oOptions.iSlideTime = 1;
				$(gThis).change(gThis.Toggle).click(gThis.Toggle).change();
				gThis.m_oOptions.iSlideTime = iTime;
				
			});
			
		}
		
	});
	
})(jQuery);
function ResendValidationRequest(jField) {
	var fForm = jField.closest('form').get(0);
	if (jField.closest('div').find('label:has(.' + fForm.m_oOptions.icons['checking'][2] + ')').length) {
		jField.change();
		setTimeout("ResendValidationRequest", fForm.m_oOptions.timeout, jField);
		return;
	}
};

(function($) {
	
	$.fn.extend({
		
		JValidableForm: function(options) {
			
			var defaults = {
				timeout: 5000, // liczba milisekund po ktorych jest ponawiana proba
				validation_script: 'validation.php', // skrypt walidacji
				calculation_script: 'calculation.php', // skrypt kalkulacji ceny
				var_name: 'name', // nazwa zmiennej przekazywanej do skryptu walidacji, z użyciem której przekazywana jest nazwa walidowanego pola
				var_value: 'val', // nazwa zmiennej przekazywanej do skryptu walidacji, z użyciem której przekazywana jest wartość walidowanego pola
				icons: {
					0: ['./tpl/DEFAULT/_images/icons/field-invalid.png', '(błędnie wypełnione)', 'invalid'],
					1: ['./tpl/DEFAULT/_images/icons/field-ok.png', '(poprawne)', 'valid'],
					2: ['./tpl/DEFAULT/_images/icons/field-invalid.png', '(wymagane)', 'invalid'],
					3: ['', '', ''],
					checking: ['tpl/DEFAULT/_images/icons/field-checking.gif', '(sprawdzanie...)', 'checking']
				}, // ikony: ich adresy, alt-y i klasy
				classes: {
					validation: 'validation',
					validate_on_load: 'validate-on-load',
					validate_on_load_if_not_empty: 'validate-on-load-if-not-empty',
					ignore: 'ignore',
					toggle: 'toggle',
					calendar: 'date',
					status: 'status',
					suggestion: 'suggestion',
					hidden: 'invisible',
					valid: 'valid',
					invalid: 'invalid',
					calculation: 'calculation',
					not_required: 'not-required',
					compare: 'compare'
				}, // gdyby kiedyś wystąpiły jakieś konflikty w nazewnictwie...
				slide_time: 250, // długość animacji pokazywania/ukrywania fieldseta (w milisekundach)
				errors_encountered_message: 'Uwaga! Nie wszystkie pola wypełniono poprawnie.', // to, co widać - komunikat
				calendar_options: {
					minDate: 0
				}, // opcje przekazywane do jCalendara
				price_1: $(), // kontener na cenę 1
				price_2: $(), // kontener na cenę 2
				validate_all: false, // Czy na starcie wysłać żądanie walidacji wszystkich pól?
				sCompareFailedMessage: 'Błędne powtórzenie hasła'
			};
			
			options = $.extend({}, defaults, options);
			
			return this.each(function() {
				
				var gThis = this;
				
				this.m_oOptions = options;
				this.m_jCompareFields;
				this.m_bValidation = false;
				
				this.ValidationResponse = function(data) {
					var oParams = data.split('|');
					if (oParams.length < 3) return;
					var jTarget = $('[name="' + oParams[0] + '"]:first');
					if (jTarget.length) {
						jTarget = jTarget.eq(0);
						var fForm = jTarget.closest('form').get(0);
						if (fForm.m_oOptions.icons[oParams[1]] && fForm.m_oOptions.icons[oParams[1]][0] != '') {
							var jIcon = jTarget.closest('div').find('label .' + fForm.m_oOptions.classes.status);
							if (jIcon.length) {
								jIcon.attr('src', fForm.m_oOptions.icons[oParams[1]][0]).attr('alt', fForm.m_oOptions.icons[oParams[1]][1]).attr('class', fForm.m_oOptions.classes.status + ' ' + fForm.m_oOptions.icons[oParams[1]][2]);
							}
							else {
								jTarget.closest('div').find('label').eq(0).append('<img src="' + fForm.m_oOptions.icons[oParams[1]][0] + '" alt="' + fForm.m_oOptions.icons[oParams[1]][1] + '" class="' + fForm.m_oOptions.classes.status + ' ' + fForm.m_oOptions.icons[oParams[1]][2] + '"/>');
							}
							for (var i in fForm.m_oOptions.icons) {
								jTarget.closest('div').removeClass(fForm.m_oOptions.icons[i][2]);
							}
							jTarget.closest('div').addClass(fForm.m_oOptions.icons[oParams[1]][2]);
						}
						else {
							jTarget.closest('div').find('label .' + fForm.m_oOptions.classes.status).remove();
							for (var i in gThis.m_oOptions.icons) {
								jTarget.closest('div').removeClass(fForm.m_oOptions.icons[i][2]);
							}
						}
						jTarget.closest('div').find('.' + fForm.m_oOptions.classes.suggestion).remove();
						if (oParams[2].length) {
							jTarget.closest('div').append($('<span class="' + fForm.m_oOptions.classes.suggestion + '">' + oParams[2] + '</span>').css('display', 'none').fadeIn(250));
						}
					}
				};
				
				this.SendValidationRequest = function() {
					if ($(this).is('.ignore')) return;
					var fForm = $(this).closest('form').get(0);
					var oParams = {};
					oParams[fForm.m_oOptions.var_name] = $(this).attr('name');
					if (gThis.m_oOptions.form_id != undefined) {
						oParams.form_id = gThis.m_oOptions.form_id;
					}
					if ($(this).is('select')) {
						oParams[fForm.m_oOptions.var_value] = $(this).find('option:selected').val();
					}
					else if ($(this).is(':checkbox')) {
						oParams[fForm.m_oOptions.var_value] = $('[name="' + $(this).attr('name') + '"]:checked').val();
					}
					else if ($(this).is(':radio')) {
						oParams[fForm.m_oOptions.var_value] = $('[name="' + $(this).attr('name') + '"]:checked').val();
					}
					else {
						oParams[fForm.m_oOptions.var_value] = $(this).val();
					}
					var jIcon = $(this).closest('div').find('label .' + fForm.m_oOptions.classes.status);
					if (jIcon.length) {
						jIcon.attr('src', fForm.m_oOptions.icons['checking'][0]).attr('alt', fForm.m_oOptions.icons['checking'][1]).attr('class', fForm.m_oOptions.classes.status + ' ' + fForm.m_oOptions.icons['checking'][2]);
					}
					else {
						$(this).closest('div').find('label').eq(0).append('<img src="' + fForm.m_oOptions.icons['checking'][0] + '" alt="' + fForm.m_oOptions.icons['checking'][1] + '" class="' + fForm.m_oOptions.classes.status + ' ' + fForm.m_oOptions.icons['checking'][2] + '"/>');
					}
					$(this).closest('div').find('.' + fForm.m_oOptions.classes.suggestion).remove();
					setTimeout(ResendValidationRequest, fForm.m_oOptions.timeout, $(this));
					$.get(fForm.m_oOptions.validation_script, oParams, fForm.ValidationResponse, 'text');
				};
				
				this.CalculationResponse = function(data) {
					var oParams = data.split('|');
					if (oParams.length < 4) return;
					$('#' + oParams[0]).html(oParams[1]);
					$('#' + oParams[2]).html(oParams[3]);
				};
				
				this.SendCalculationRequest = function() {
					var fForm = $(this).closest('form').get(0);
					var oParams = {};
					var jItems = $(fForm).find('.' + fForm.m_oOptions.classes.calculation);
					for (var i = 0; i < jItems.length; i++) {
						var jItem = jItems.eq(i);
						if (jItem.is('select')) {
							oParams[jItem.attr('name')] = jItem.find('option:selected').val();
						}
						else if (jItem.is(':checkbox')) {
							oParams[jItem.attr('name')] = $('[name="' + jItem.attr('name') + '"]:checked').val();
						}
						else if (jItem.is(':radio')) {
							oParams[jItem.attr('name')] = $('[name="' + jItem.attr('name') + '"]:checked').val();
						}
						else {
							oParams[jItem.attr('name')] = jItem.val();
						}
					}
					oParams['price-1'] = fForm.m_oOptions.price_1.attr('id');
					oParams['price-2'] = fForm.m_oOptions.price_2.attr('id');
					$.get(fForm.m_oOptions.calculation_script, oParams, fForm.CalculationResponse, 'text');
				};
				
				this.CheckIfEmpty = function() {
					var fForm = $(this).closest('form').get(0);
					if ($(this).is(':text:not(.' + fForm.m_oOptions.classes.calendar + '), textarea, select') && ($(this).val() == '')) {
						$(this).change();
					}
				};
				
				this.CheckAll = function() {
					this.m_bValidation = true;
					this.m_jCompareFields.change();
					this.m_bValidation = false;
					var jAll = $(this).find('.' + this.m_oOptions.classes.validation + ':not(.' + this.m_oOptions.classes.ignore + ')');
					var jEmpty = jAll.filter('.' + this.m_oOptions.classes.not_required).parent().filter(':not(:has(.' + this.m_oOptions.classes.invalid + '))').find('.' + this.m_oOptions.classes.validation);
					var jValid = $(this).find('label:has(img.' + this.m_oOptions.classes.valid + ') + .' + this.m_oOptions.classes.validation + ':not(.' + this.m_oOptions.classes.ignore + ')');
					var iTotal = jAll.length - jEmpty.length;
					var iValid = jValid.length;
					if ((iTotal <= iValid) && !$('.' + this.m_oOptions.classes.invalid + ' .' + this.m_oOptions.classes.compare + ':not(' + this.m_oOptions.classes.ignore + ')').length) {
						return true;
					}
					var jInvalid = jAll.not(jEmpty).not(jValid).each(function() {
						if (!$(this).parent().hasClass(gThis.m_oOptions.classes.invalid)) {
							gThis.ValidationResponse($(this).attr('name') + '|2|');
							$(this).change();
						}
					});
					//alert(jInvalid.length);
					//jInvalid.each(function() {
					//	$(this);
					//});
					alert(this.m_oOptions.errors_encountered_message);
					return false;
				};
				
				this.ValidateAll = function() {
					$(this).find('.' + this.m_oOptions.classes.validation + ':not(.' + this.m_oOptions.classes.ignore + ')').change();
				};
				
				$(this).find('.' + this.m_oOptions.classes.validation).change(this.SendValidationRequest).blur(this.CheckIfEmpty).filter(':radio, :checkbox').blur(this.SendValidationRequest);
				$(this).find('.' + this.m_oOptions.classes.calculation).change(this.SendCalculationRequest).blur(this.CheckIfEmpty).filter(':radio, :checkbox').blur(this.SendCalculationRequest);
				
				$(this).find('.' + this.m_oOptions.classes.hidden).css('display', 'none');
				
				$(this).submit(this.CheckAll);
				
				this.m_jCompareFields = $(this).find('.' + this.m_oOptions.classes.compare);
				this.m_jCompareFields.change(function(eEvent) {
					var iOffset = Math.floor(gThis.m_jCompareFields.index($(this)) / 2) * 2;
					var jBase = gThis.m_jCompareFields.eq(iOffset);
					var jRepetition = gThis.m_jCompareFields.eq(iOffset + 1);
					var bResult = false;
					if (!jBase.val().length) {
						jRepetition.closest('div').find('label .' + gThis.m_oOptions.classes.status).remove();
						for (var i in gThis.m_oOptions.icons) {
							jRepetition.closest('div').removeClass(gThis.m_oOptions.icons[i][2]);
						}
						jRepetition.val('');
						jRepetition.closest('div').find('.' + gThis.m_oOptions.classes.suggestion).remove();
						delete jBase.get(0).sPreviousValue;
						return;
					}
					if (!gThis.m_bValidation && (((jBase.get(0).sPreviousValue == undefined) || !jBase.get(0).sPreviousValue.length) && !jRepetition.val().length)) {
						return;
					}
					if (jBase.val() == jRepetition.val()) {
						bResult = true;
					}
					jBase.get(0).sPreviousValue = jBase.val();
					if (bResult) {
						gThis.ValidationResponse(jRepetition.attr('name') + '|1|');
					}
					else {
						gThis.ValidationResponse(jRepetition.attr('name') + '|0|' + gThis.m_oOptions.sCompareFailedMessage);
					}
				}).change();
				
				if (this.m_oOptions.validate_all) {
					this.ValidateAll();
				}
				else {
					$(this).find('.' + this.m_oOptions.classes.validate_on_load).change();
					$(this).find('.' + this.m_oOptions.classes.validate_on_load_if_not_empty).each(function() {
						if ($(this).val().length) {
							$(this).change();
						}
					});
				}
				
			});
			
		}
		
	});
	
})(jQuery);
