$(function() {
	$.history.init(pageload);
	$('body').functionCollections('whenDocumentLoad');
});

function pageload(hash) {
	if(hash) {
    if(!$('#MODAL').length) {
		  $('body').modal('create',{html: '<p style="text-align:center;color:gray;"><img src="//www.e-markets.cz/images/loading.gif" alt="Loading..."/><br />Loading...</p>', maskBG: 'white', closeButton: false, boxWidth: 200, boxHeight: 120});
		}
		var $url = hash.replace('index.php', '').replace('ajax.php', '');
		$('#E-MARKETS-CONTENT-DYNAMIC').slideUp('slow');
		$.ajax({
			url: 'ajax.php'+$url,
			success: function(result) {
				$('#E-MARKETS-CONTENT-DYNAMIC').html(result);
				$('body').functionCollections('whenDynamicContentLoad');
			}
		});
		$('form#NAVIGATION select').val('');
		var $selectedCategory;
		var $regex = /category=(\d{1,11})/;
		if($regex && $url.match($regex) != null) {
			$selectedCategory = $url.match($regex)[1]
			if($selectedCategory) {
				$('form#NAVIGATION select').val($selectedCategory);
			}
		}
	}
	else {
	}
}

// EXTERNAL LINKS /////////////////////////////////////////////////////////////////////
(function($){
	$.fn.ajaxifyExternalLink = function(options) {
		this.click(function(event){
			event.preventDefault();
			event.stopImmediatePropagation();
			var $url = $(this).attr('href');
			if($url != '') {
				return window.open($url);
			}
		});
	};
})(jQuery);
// EXTERNAL LINKS /////////////////////////////////////////////////////////////////////

// ADDRESS /////////////////////////////////////////////////////////////////////

(function($){
	$.fn.ajaxifyAddAddressCustomer = function(options) {
		this.click(function(event){
			event.preventDefault();
			event.stopImmediatePropagation();
			$.ajax({
				url: $(this).attr('href').replace('/?', '/ajax.php?'),
				success: function(data) {
					$('body').modal('create', {html: data, boxWidth: 500, boxHeight: 300});
					$('#MODAL form input[data-autocomplete]').autocomplete();
					$('#MODAL form').bind('submit',
						function(event) {
							event.preventDefault();
							if($(this).validate()) {
		          				$.ajax({
									url: 'ajax.php',
									type: 'POST',
									async: false,
									data: $(this).serializeArray(),
									success: function(result) {
										$('div#ADDRESSES').append($('<div>').html(result));
					                    $('#ADDRESSES a.UPDATE-ADDRESS').ajaxifyUpdateAddressCustomer();
					                    $('#ADDRESSES a.DELETE-ADDRESS').ajaxifyDeleteAddressCustomer();
					                    $('#ADDRESSES a.E-MARKETS-EXTERNAL-LINK').ajaxifyExternalLink();
					                    $('body').modal('remove');
									}
								});
							}
						}
					);
				}
			});
		});
	};
})(jQuery);

(function($){
	$.fn.ajaxifyUpdateAddressCustomer = function(options) {
		this.click(function(event){
			event.preventDefault();
			event.stopImmediatePropagation();
			$(this).attr('id', 'UPDATING');
			$.ajax({
				url: $(this).attr('href').replace('/?', '/ajax.php?'),
				success: function(data) {
					$('body').modal('create', {html: data, boxWidth: 500, boxHeight: 300});
					$('#MODAL form input[data-autocomplete]').autocomplete();
					$('#MODAL form').bind('submit',
						function(event) {
							event.preventDefault();
							if($(this).validate()) {
								$.ajax({
									url: 'ajax.php',
									type: 'POST',
									async: false,
									data: $(this).serializeArray(),
									success: function(result) {
							            $('a#UPDATING').closest('div').replaceWith(result);
							            $('#ADDRESSES a.UPDATE-ADDRESS').ajaxifyUpdateAddressCustomer();
							            $('#ADDRESSES a.DELETE-ADDRESS').ajaxifyDeleteAddressCustomer();
							            $('#ADDRESSES a.E-MARKETS-EXTERNAL-LINK').ajaxifyExternalLink();
							            $('body').modal('remove');
									}
								});
							}
						}
					);
				}
			});
		});
	};
})(jQuery);

(function($){
	$.fn.ajaxifyDeleteAddressCustomer = function() {
		this.click(function(event){
			event.preventDefault();
			event.stopImmediatePropagation();
			$.ajax({
				url: $(this).attr('href').replace('/?', '/ajax.php?')
			});
			$(this).closest('div').remove();
		});
	};
})(jQuery);

(function($){
	$.fn.ajaxifyAddAddressOrder = function() {
		this.click(function(event){
			event.preventDefault();
			event.stopImmediatePropagation();
			$.ajax({
				url: $(this).attr('href').replace('/?', '/ajax.php?')+'&section=order',
				success: function(data) {
					$('body').modal('create', {html: data, boxWidth: 500, boxHeight: 300});
					$('#MODAL form input[data-autocomplete]').autocomplete();
					$('#MODAL form').bind('submit',
						function(event) {
							event.preventDefault();
							if($(this).validate()) {
								$.post('ajax.php', $(this).serializeArray(), 
									function(result) {
										if($(result).find('form').length) {
											$('MODAL-CONTENT').html(result);
										}
										else {
											$(result).prependTo('select[name="address[]"]');
											$('select[name="address[]"]').attr('selectedIndex', 0);
											$('body').modal('remove');
										}
									}
								);
							}
						}
					);
				}
			});
		});
	};
})(jQuery);

// FORM VALIDATION /////////////////////////////////////////////////////////////

(function($){
  $.fn.validate = function() {
    $(this).find('span.ERROR').remove();
    $(this).find('.ERROR').toggleClass('ERROR', false);
    var $succes = true;
		this.find('input[data-duty], select[data-duty], textarea[data-duty]').each(
      function() {
        if($(this).val() == "") {
          $(this).toggleClass('ERROR', true);
          $('label[for="'+$(this).attr('name')+'"]').toggleClass('ERROR', true);
          var $span = $('<span>', {'class': 'ERROR'}).text($(this).data('errorMessage'));
          $(this).parent().append($span);
          $succes = false;
        }
      }
    );
    $(this).find('input[type="checkbox"][data-duty]:not(:checked)').each(
      function() {
        $(this).toggleClass('ERROR', true);
        $('label[for="'+$(this).attr('name')+'"]').toggleClass('ERROR', true);
        var $span = $('<span>', {'class': 'ERROR'}).text($(this).data('errorMessage'));
        $(this).parent().append($span);
        $succes = false;
      }
    );
    return $succes;
	}
})( jQuery );

// CATEGORIES MENU DESCRIPTION /////////////////////////////////////////////////

(function($){
	$.fn.ajaxifyCategoriesMenuDescription = function() {
// 		this.load(function(event){
    $('#E-MARKETS-CONTENT-DYNAMIC a.E-MARKETS-CATEGORY-LINK[data-description]').each(
      function() {
        $('<div>', {'class': 'TITLE'}).html($(this).data('description')).hide().appendTo($(this).parent());
  			var $button = $('<span>', {'class': 'TITLE-BUTTON'}).text('více ');
  			$button.insertBefore($(this).siblings('.TITLE'));
  			$button.bind('click', function() {
  					if($(this).siblings('.TITLE').css('display') == 'none')
  						$(this).text('méně ').siblings('.TITLE').slideDown();
  					else
  						$(this).text('více ').siblings('.TITLE').slideUp();
  				}
  			);
      }
    );
// 		});
	};
})(jQuery);

// CATEGORY FORMS //////////////////////////////////////////////////////////////////

(function($){
	$.fn.ajaxifyCategoryForm = function(options) {
		this.change(function(event){
		  event.stopImmediatePropagation();
			var $query = '?';
  		$(this).closest('form').find('select, input[type="hidden"]').each(
  			function(){
  				$query += $(this).attr('name')+'='+$(this).val()+'&';
  			}
  		);
			if($query != '') {
        $.history.load($query); // calling pageload
      }
    });
	};
})(jQuery);

// DYNAMIC-CONTENT LINKS //////////////////////////////////////////////////////////////////

(function($){
	$.fn.ajaxifyDynamiContentLink = function(options) {
		this.click(function(event){
		  event.preventDefault();
		  event.stopImmediatePropagation();
			var $url = $(this).attr('href').split('?')[1];
			if($url != '') {
        $.history.load('?'+$url); // calling pageload
      }
		});
	};
})(jQuery);

// GOOD LINKS //////////////////////////////////////////////////////////////////

(function($){
	$.fn.ajaxifyGoodLink = function() {
		this.click(function(event){
		  event.preventDefault();
		  event.stopImmediatePropagation();
			$.ajax({
				url: $(this).attr('href').replace('?', 'ajax.php?'),
				success: function(data) {
					$('body').modal('create', {html: data, boxWidth: 800, boxHeight: 550});
					$('body').functionCollections('whenDetailLoad');
				}
			});
		});
	};
})(jQuery);

// AUTOCOMPLETE ////////////////////////////////////////////////////////////////

(function($){
	$.fn.autocomplete = function(options) {
		this.keyup(function(e){
			var $input = $(this);
			var prevValue = $input.data('prevValue');
			var currentValue = $input.val();
			var $ul = $('#AUTOCOMPLETE');
			if (!$ul.length) {
				$ul = $('<ul>', {id: 'AUTOCOMPLETE'}).appendTo('body');
			}
			if (prevValue === currentValue || currentValue === "") {
				return;
			}
			$input.data('prevValue', currentValue);
			var xhr = $input.data('prevXhr');
			if(xhr) {
				xhr.abort();
			}
			xhr = $.getJSON($input.data('autocomplete'), {item: currentValue}, 
				function(payload, element){
					if(!payload.length) {
						$ul.remove();
					}
		        	else {
						var offset = $input.offset();	
						$ul
						.css({
							position: 'absolute',
							left: offset.left,
							top: offset.top + $input.height(),
							minWidth: $input.width()
						})
						.empty()
						.show();
						$.each(payload, 
							function(key, value) {
								$ul.append($('<li>')
									.mouseenter(
										function(){
											$(this).toggleClass('E-MARKETS-ACTIVE', true);
										}
									)
									.mouseleave(
										function(){
											$(this).toggleClass('E-MARKETS-ACTIVE', false);
										}
									)
									.text(value)
									.click(
										function() {
											$input.val($(this).text());
											$('#AUTOCOMPLETE').remove();
											var xhr = $input.data('prevXhr');
											if (xhr) xhr.abort();
										}
									)
								);
							}
						);
					}
				}
			);
			$input.data('prevXhr', xhr);
		});
		this.closest('form').submit(function(e){
			var $input = $(this).find('input[name="item"]');
			if($input.length && !$.trim($input.val()).length) {
		        e.preventDefault();
		        $('body').modal('create',{text: $input.data('errorMessage'), maskBG: 'black', boxWidth: 200, boxHeight: 120});
			}
		});
	};
})(jQuery);

// BASKET //////////////////////////////////////////////////////////////////////

(function($){
	$.fn.makeBasketOpenable = function() {
		$('span#E-MARKETS-BASKET-OPENER')
		.css({cursor: 'pointer', display: 'block'})
		.bind('click',
			function(event) {
				if(!$('#E-MARKETS-ORDER-RECAPITULATION-BLOCK').length) {
					event.stopImmediatePropagation();
					if($(this).text() == '▼') {
						$('body').toggleBasket(true);
					}
					else {
						$('body').toggleBasket(false);
					}
				}
			}
		);
	}
})( jQuery );

(function($){
	$.fn.toggleBasket = function(show) {
		if(show) {
			if($('#E-MARKETS-BASKET').hasClass('E-MARKETS-ACTIVE')) {
				$('#E-MARKETS-BASKET').reopenBasket();
			}
			else {
				$('#E-MARKETS-BASKET').openBasket();
				$('html,body').animate({scrollTop: 0},'slow');
			}
		}
		else {
			$('#E-MARKETS-BASKET').closeBasket();
		}
		$('body').functionCollections('whenBasketLoad');
	}
})( jQuery );

(function($){
	$.fn.openBasket = function() {
		$('#E-MARKETS-BASKET').toggleClass('E-MARKETS-ACTIVE', true);
		$('#E-MARKETS-BASKET-BODY').slideDown('slow', function(){$('span#E-MARKETS-BASKET-OPENER').attr('title', 'Zavřít').text('▲');});
	}
})( jQuery );

(function($){
	$.fn.reopenBasket = function() {
		$('#E-MARKETS-BASKET-BODY').show();
		$('span#E-MARKETS-BASKET-OPENER').attr('title', 'Zavřít').text('▲');
	}
})( jQuery );


(function($){
	$.fn.closeBasket = function() {
		$('#E-MARKETS-BASKET-BODY').slideUp('slow', function(){$('span#E-MARKETS-BASKET-OPENER').attr('title', 'Otevřít').text('▼');$('#E-MARKETS-BASKET').removeClass('E-MARKETS-ACTIVE');});
	}
})( jQuery );

(function($){
	$.fn.hideBasket = function() {
		$('#E-MARKETS-BASKET-BODY').hide();
		$('span#E-MARKETS-BASKET-OPENER').attr('title', 'Otevřít').text('▼');
		$('#E-MARKETS-BASKET').removeClass('E-MARKETS-ACTIVE');
	}
})( jQuery );

(function($){
	$.fn.ajaxifyBasketForm = function(options) {
		this.submit(
      		function(event){
				event.preventDefault();
				event.stopImmediatePropagation();
				$('html,body').animate({scrollTop: 0},'slow');
				$('#E-MARKETS-BASKET').html('<img style="margin:5px;" src="//www.e-markets.cz/images/loading_small.gif" alt="Loading..."/>');
				$.post('ajax.php', $(this).serializeArray(), 
					function(result) {
						$('#E-MARKETS-BASKET').html(result);
						$('body').hideBasket();
						$('#E-MARKETS-BASKET a.E-MARKETS-BASKET-LINK').ajaxifyBasketLink();
						$('#E-MARKETS-BASKET input[data-oldValue]').ajaxifyBasketInput();
		        		$('#E-MARKETS-BASKET').makeBasketOpenable();
						$('body').modal('remove');
            			$('#E-MARKETS-BASKET').fadeIn(500);
					}
				);
			}

		);
	};
})(jQuery);

(function($){
	$.fn.ajaxifyBasketInput = function(options) {

	this.keyup(
      	function(event){
      		event.preventDefault();
//         alert(1);
				if($(this).data('oldValue') != $(this).val()) {
					if(event.keyCode) {
						if(event.keyCode == 13) {
							$(this).hide();
							$('<img style="margin:5px;" src="//www.e-markets.cz/images/loading_small.gif" alt="Loading..."/>').insertAfter($(this));
							$.get('ajax.php?page=basket&update=1&company='+$(this).closest('form').find('input[name="company"]').val()+'&item='+$(this).attr('name')+'&count='+$(this).val(), 
								function(result) {
									$('#E-MARKETS-BASKET').html(result);
									if($(result).find('#E-MARKETS-BASKET-BODY').html() != null) {
										$(result).toggleBasket(true);
									}
									else {
										$(result).hideBasket();
									}
								}
							);
						}
					}
				}
			}
		);
		this.blur(
      	function(){
//         alert(1);
				if($(this).data('oldValue') != $(this).val()) {
					$(this).hide();
					$('<img style="margin:5px;" src="//www.e-markets.cz/images/loading_small.gif" alt="Loading..."/>').insertAfter($(this));
					$.get('ajax.php?page=basket&update=1&company='+$(this).closest('form').find('input[name="company"]').val()+'&item='+$(this).attr('name')+'&count='+$(this).val(), 
						function(result) {
							$('#E-MARKETS-BASKET').html(result);
							if($(result).find('#E-MARKETS-BASKET-BODY').html() != null) {
								$(result).toggleBasket(true);
							}
							else {
								$(result).hideBasket();
							}
						}
					);
				}
			}
		);

	};
})(jQuery);

(function($){
	$.fn.ajaxifyBasketLink = function(options) {
		this.click(
      function(event) {
				event.preventDefault();
				event.stopImmediatePropagation();
				$(this).hide();
				$('<img src="//www.e-markets.cz/images/loading_small.gif" alt="Loading..."/>').insertAfter($(this));
				$.ajax({
					url: $(this).attr('href').replace('?', 'ajax.php?'),
					success: function(result) {
						$('#E-MARKETS-BASKET').html(result);
						if($(result).find('#E-MARKETS-BASKET-BODY').html() != null) {
							$(result).toggleBasket(true);
						}
						else {
							$(result).hideBasket();
						}
					}
				});
			}
		);
	};
})(jQuery);

// Gallery

(function($){
	$.fn.ajaxifyGoodsImages = function() {
		this.click(
			function(event) {
				event.preventDefault();
				$('body').modal('create',{html: '<img src="'+$(this).attr('href')+'"/>'});
				$('#MODAL-CONTENT img:eq(0)').load(
					function() {
						$(this).attr('width', $(this).width()).attr('height', $(this).height());
						var windowHeight = $(window).height();
						var windowWidth = $(window).width();
						var documentHeight = $(document).height();
						var documentWidth = $(document).width();
						var boxWidth = $(this).width() + 48;
						var boxHeight = $(this).height() + 48;
						var	boxOffsetLeft = windowWidth / 2 - boxWidth / 2;
						var	boxOffsetTop = windowHeight / 2 - boxHeight / 2 + $(window).scrollTop();
						if(boxHeight > windowHeight)
							boxOffsetTop = $(window).scrollTop();
						if(boxWidth > windowWidth)
							boxOffsetLeft = 0;
						$('#MODAL').css({width: boxWidth, height: boxHeight, top: boxOffsetTop, left: boxOffsetLeft});
			
					}
				);
			}
		);
	};
})(jQuery);

(function( $ ){
	var methods = {
		whenDocumentLoad : function() {
		$("#SUBSUBMENUTOP").hide().delay(1000).slideDown("slow");
		$('#E-MARKETS-BASKET-BODY').hide();
		
		var liHeight = 0;
		$(".SCROLLING li").each(function(){
		if($(this).height() > liHeight)
			liHeight = $(this).height();
		});
		$(".SCROLLING li").each(function(){
			$(this).css('height', liHeight);
		});
		$(".SCROLLING").Slide({
			vertical: true,
			hoverPause:true,
			visible: 3,
			auto:600,
			speed:2500
		});
		$('#E-MARKETS-CONTENT-DYNAMIC form.E-MARKETS-BASKET-FORM').ajaxifyBasketForm();
		$('body a.E-MARKETS-GOOD-LINK, #E-MARKETS-ACTIONPRICES a').ajaxifyGoodLink();
		$('body a.E-MARKETS-CATEGORY-LINK, #E-MARKETS-BOTTOM a.E-MARKETS-INTERNAL-LINK, #E-MARKETS-CONTENT-DYNAMIC a.E-MARKETS-ORDER-LINK, ').ajaxifyDynamiContentLink();
		$('body form.E-MARKETS-CATEGORY-FORM').ajaxifyCategoryForm();
		$('body').toggleBasket(false);
		if($('#E-MARKETS-ORDER-RECAPITULATION-BLOCK').length) {
			$('span#E-MARKETS-BASKET-OPENER').hide();
		}
		$('#E-MARKETS-CONTENT-DYNAMIC').slideDown('slow', function(){$('body').modal('remove');});
		$('body').ajaxifyCategoriesMenuDescription();
		$('input[data-autocomplete]').autocomplete();
		$('#E-MARKETS-CONTENT-DYNAMIC a.ADD-ADDRESS-ORDER').ajaxifyAddAddressOrder();
		$('#E-MARKETS-CONTENT-DYNAMIC a.ADD-ADDRESS').ajaxifyAddAddressCustomer();
		$('#ADDRESSES a.UPDATE-ADDRESS').ajaxifyUpdateAddressCustomer();
		$('#ADDRESSES a.DELETE-ADDRESS').ajaxifyDeleteAddressCustomer();
		$('#E-MARKETS-CONTENT-DYNAMIC #E-MARKETS-CUSTOMER-FORMS form, #E-MARKETS-CONTENT-DYNAMIC #E-MARKETS-COMPANY-FORM form').submit(function(){return $(this).validate();});
		$('#E-MARKETS-ACTION-MENU').hide();
		$('#E-MARKETS-BASKET').removeClass('E-MARKETS-ACTIVE');
		$('#E-MARKETS-CUSTOMER-TYPES ul li a').click(
			function(event) {
				event.preventDefault();
				$('.E-MARKETS-CUSTOMER-FORM').fadeOut();
				$('#E-MARKETS-CUSTOMER-TYPES ul li a').toggleClass('E-MARKETS-ACTIVE');
				$('.E-MARKETS-CUSTOMER-FORM').toggleClass('E-MARKETS-ACTIVE');
				$('label.ERROR').removeClass('ERROR');
				$('.E-MARKETS-CUSTOMER-FORM.E-MARKETS-ACTIVE').fadeIn();
			}
		);
		$('a#E-MARKETS-ACTION-MENU-HOLDER').click(
			function(event) {
				event.preventDefault();
				if($('a#E-MARKETS-ACTION-MENU-HOLDER.E-MARKETS-ACTIVE').length) {
					$(this).toggleClass('E-MARKETS-ACTIVE', false);
					$('#E-MARKETS-ACTION-MENU').hide();
				}
				else {
					$(this).toggleClass('E-MARKETS-ACTIVE', true);
					$('#E-MARKETS-ACTION-MENU').show();
				}
			}
		);
		$('div#E-MARKETS-COMPANIES form select').change(
			function() {
				$(this).closest('form').submit();
			}
			);
			$('body a.E-MARKETS-EXTERNAL-LINK, #E-MARKETS-CONTENT-DYNAMIC a.E-MARKETS-MANUFACTURER-LINK').ajaxifyExternalLink();
			$('a.E-MARKETS-GOOD-IMAGE, td.E-MARKETS-GOODS-IMAGE a, .E-MARKETS-GOODS-IMAGES a').ajaxifyGoodsImages();
		},
		whenDynamicContentLoad : function() {
	    	$('span#E-MARKETS-BASKET-OPENER').show();
			$('#E-MARKETS-CONTENT-DYNAMIC form.E-MARKETS-BASKET-FORM').ajaxifyBasketForm();
			$('#E-MARKETS-CONTENT-DYNAMIC a.E-MARKETS-GOOD-LINK').ajaxifyGoodLink();
			$('#E-MARKETS-CONTENT-DYNAMIC a.E-MARKETS-CATEGORY-LINK, #E-MARKETS-CONTENT-DYNAMIC a.E-MARKETS-ORDER-LINK').ajaxifyDynamiContentLink();
			$('#E-MARKETS-CONTENT-DYNAMIC form.E-MARKETS-CATEGORY-FORM').ajaxifyCategoryForm();
			$('body').ajaxifyCategoriesMenuDescription();
			$('#E-MARKETS-CONTENT-DYNAMIC').slideDown('slow', function(){$('body').modal('remove');});
			$('html,body').animate({scrollTop: 0},'slow');
			$('#E-MARKETS-CONTENT-DYNAMIC a.E-MARKETS-EXTERNAL-LINK, #E-MARKETS-CONTENT-DYNAMIC a.E-MARKETS-MANUFACTURER-LINK').ajaxifyExternalLink();
			$('a.E-MARKETS-GOOD-IMAGE, td.E-MARKETS-GOODS-IMAGE a').ajaxifyGoodsImages();
	    },
	    whenBasketLoad : function() {
	  		$('#E-MARKETS-BASKET input[data-oldValue]').ajaxifyBasketInput();
	  		$('#E-MARKETS-BASKET a.E-MARKETS-BASKET-LINK').ajaxifyBasketLink();
	  		$('#E-MARKETS-BASKET').makeBasketOpenable();
	    },
	    whenDetailLoad : function() {
	  		$('#MODAL form.E-MARKETS-BASKET-FORM').ajaxifyBasketForm();
	  		$('#MODAL a.E-MARKETS-CATEGORY-LINK').ajaxifyDynamiContentLink();
	  		$('#MODAL a.E-MARKETS-EXTERNAL-LINK, #MODAL a.E-MARKETS-MANUFACTURER-LINK').ajaxifyExternalLink();
	  		$('#MODAL .GOODS-IMAGES a').click(
				function(event) {
					event.preventDefault();
				}
			);
	    }
	};

	$.fn.functionCollections = function( method ) {
		if ( methods[method] ) {
		  return methods[ method ].apply( this, Array.prototype.slice.call( arguments, 1 ));
		}
		else if ( typeof method === 'object' || ! method ) {
		  return methods.init.apply( this, arguments );
		}
		else {
		  $.error( 'Method ' +  method + ' does not exist on jQuery.tooltip' );
		}
	};

})( jQuery );

