$(function (){  
	$("body").addClass("js_enabled");
	
	$.expr[':'].external = function(obj){
	    return !obj.href.match(/^mailto\:/) && (obj.hostname != location.hostname);
	};
	
	// Add 'external' CSS class to all external links
	$("a:external:not(#close)").each(function(){
		this.target="_blank";
	});
	
	
	$("a[rel='external']").attr("target", "_blank");
	
	/*
	 * zoekveld
	 */
	if ($("#form_search").length) {
		//$("#form_search").m3Forms();
		
		$("#form_search").find(".text_input").addClass("default_value").bind("focusin focusout", function(e) {
			
			var $input = $(e.target);
			
			if (e.type == "focusin") {
				if ($input.attr("value") == $input.attr("defaultValue")) {
					$input.val("").removeClass("default_value");
				}
			}
			else if (e.type == "focusout") {
				if ($input.attr("value") == "") {
					$input.val($input.attr("defaultValue")).addClass("default_value");
				}
			}
		});
	}	
	
	/*
	 * newsletter
	 */
	
	if ($(".container_newsletter").length > 0) {
	
		function validateNewsletter() {
			if ($("#form_newsletter").length) {
				$("#form_newsletter").validate({
					rules: {
						"newsletter_email": {
							"required": true,
							"email": true
						}
					},
					messages: {
						"newsletter_email": {
							"required":"vul een e-mailadres in",
							"email":"dit e-mailadres is ongeldig"
						}
					},
					submitHandler: function(form) {
						$.ajax({
							type: 	"post",
							url:	$(form).attr('action'),
							data:	$(form).serialize(),
							success: function(respond_status) {
								var status;
								if (respond_status == 'subscribed') {
									status = '<p>We hebben je een e-mail gestuurd, waarmee je de inschrijving moet bevestigen.</p>';
								}
								else if (respond_status == 'unsubscribed') {
									status = '<p>Je bent uitgeschreven voor onze nieuwsbrief. Je ontvangt hierover een e-mail ter bevestiging.</p>';
								}
								else if (respond_status == 'not_found') {
									status = '<p>Het ingevoerde e-mailadres is niet gevonden.</p>';
								}
								else if (respond_status == 'already_exists') {
									status = '<p>Het ingevoerde e-mailadres bestaat al.</p>';
								}
								
								$(form).siblings('.status').html(status);
								$(form).slideUp();
								
							}
						})
					}
				});
			}
		}
		
		validateNewsletter();
		
		$(".container_newsletter").find("#switch_forms .toggle > a").live("click", function(e) {
			e.preventDefault();
			
			$.get(e.target.href, function(new_form) {
				
				$(".container_newsletter").fadeOut("slow", function() {
					$(".container_newsletter").parent(".block_inner")
						.html(new_form)
						.hide()
						.fadeIn("slow")
					;
					
					var newsletter_container_tmp = $(".container_newsletter");
					
					if (newsletter_container_tmp.attr("id") == "container_newsletter_unsubscribe") {
						newsletter_container_tmp.parents(".block").addClass("newsletter_unsubscribe");
					}
					else {
						newsletter_container_tmp.parents(".block").removeClass("newsletter_unsubscribe");
					}
					
					validateNewsletter();
				});
			});
		});
	}
	
	/*
	 * home
	 */
	if ($("#mycarousel").length) { // ook zoekresultaten
		
		//  WEL IE6
		if ($.browser.msie && $.browser.version=="6.0") {
			
			if ($("#home #mycarousel").length > 0) {
				$('#mycarousel').jcarousel();
			}
			
		}
		// NIET IE 6
		else {
			$('#mycarousel').jcarousel();
		}
		
		
	}
	
	if ($("#tabs_home").length) {
		$("#tabs_home").tabs().tabs('rotate', 4000);
		
		$('#tabs_home').hover(function(){
			$(this).tabs('rotate', 0, false);
		},function(){
			$(this).tabs().tabs('rotate', 4000);
		});
	}
	
	/*
	 * winkels az
	 */
	if ($("#nav_az").length) {
		
		m3Columnize(
			$(".section ul"), 3
		)
		
		m3SmoothScroll($("#nav_az a"), 800);
		m3SmoothScroll($(".section .heading a"), 400);
	}
	
	/*
	 * winkels categorieen
	 */
	if ($("#nav_categories").length) {
		m3Columnize(
			$(".section ul"), 3
		)
		
		m3Columnize(
			$("#nav_categories ul"), 2
		)
		
		m3SmoothScroll($("#nav_categories a"), 800);
		m3SmoothScroll($(".section .heading a"), 400);
	}
	
	/*
	 * winkel : instruction video in lightbox
	 */
	if ($("#store_instruction").length) {
		$("#store_instruction a").colorbox({
			iframe: true,
			width: 650,
			height: 550
		});
	}
	
	
	var action_blocks = $(".block_action");
	
	if (action_blocks.length > 0) {
		action_blocks.each(function() {
			$(this).click(function(e) {
				e.preventDefault();
				
				window.open(
					$(this).find("h4 a").attr("href")
				);
			});
		});
	}
	
	var product_daily_offer = $("#container_product .product.product_daily_offer");
	
	if (product_daily_offer.length > 0) {
		product_daily_offer.find(".logo_holder a").colorbox();
	}
	
	/*
	 * create a text selection:
	 *
	 * example: $('#elem').selectRange(3,5); 
	 */
	$.fn.selectRange = function(start, end) {
		return this.each(function() {
			if (this.setSelectionRange) {
				this.focus();
				this.setSelectionRange(start, end);
			} else if (this.createTextRange) {
				var range = this.createTextRange();
				range.collapse(true);
				range.moveEnd('character', end);
				range.moveStart('character', start);
				range.select();
			}
        });
	};
	
	$("#search_keyword").autocomplete("/auto_suggest", {
		multiple: true,
		minChars: 3,
		selectFirst: false,
		dataType: "json",
		width: $("#search_keyword").outerWidth(),
		formatItem: function(row, i, max) {
			var product_row = "";
			product_row += "<div class=\"logo_holder small product_" + row.category + "\">";
			product_row += "<img src='"+ row.supplier.logo  +"' />";
			product_row += "</div	>";
			product_row +=  row.product_title;
			
			return product_row;
		},
		formatMatch: function(row, i, max) {
			return row.product_title
		},
		formatResult: function(row) {
		},
		parse: function(data) {
			return $.map(data, function(row) {
				return {
					data: row,
					value: row.product_title,
					result: row.product_title
				}
			});
		}
	}).result(function(e, item) {
		window.location.href = item.href;
	});
	
	
	/*
	 * contact
	 */
	 
	if ($("#form_contact").length) {
		
		jQuery.validator.addMethod("exactlength", function(value, element, param) {
			return this.optional(element) || value.length == param;
		}, jQuery.format("Please enter exactly {0} characters."));


		$("#form_contact").validate({
			rules: {
				naam: {
					"required": true
				},
				email: {
					"required": true,
					"email": true
				},
				verificatiecode: {
					"required": true,
					"exactlength" : 5
				}
			},
			messages: {
				naam: {
					"required":"vul je naam in"
				},
				email: {
					"required":"vul het e-mailadres in",
					"email":"het ingevulde e-mailadres is ongeldig"
				},
				verificatiecode: {
					"required":"type de code uit de afbeelding over",
					"exactlength" : 'de code moet uit 5 tekens bestaan'
				}
			}
		});
	}
	
	/*
		Append Facebook Likes
	*/
	
	if ($(".facebook_like").length) {
	
		$(".facebook_like").each(function() {
			
			var iFrameSrc = $(this).attr('rel');
			
			var iFrame = "<iframe src='" + iFrameSrc + "'";
				iFrame += "	scrolling='no'";
				iFrame += "	frameborder='0'";
				iFrame += "	allowTransparency='true'";
				iFrame += "	style='border:none; overflow:hidden; width:120px; height:21px;' />"
			;
			
			$(iFrame).appendTo($(this));
			
			$(this).removeAttr('rel');
			
		});
	}
	
	function appendProductLabels() {
		
		var types =["aanbieding", "code", "gratis"];
		
		$(".product_aanbieding, .product_code, .product_gratis").each(function() {
			
			if ($(this).find('.product_label').length) {
				return;
			}
			
			var productLabel = document.createElement("div");
			productLabel.className = "product_label";
			
			if (!$(this).hasClass('.expired')) {
				var productType = this.className.split("product_")[1];
				productType = productType.replace(/\s+/g, '');
				productLabel.id = "product_label_" + productType;
			}
			else {
				productLabel.id = "product_label_expired";
			}
			
			
			this.appendChild(productLabel);
			
			$(this).css('position', 'relative');
		})
	}
	
	if ($(".product").length) {
		
		appendProductLabels();
	}
	
	/*
	 * Load more
	 */
	 
	 if ($('.loadmore').length) {
	 	
		var loadmore		= $('.loadmore'),
	 		loadmoreForm	= loadmore.find('form'),
	 		loadmoreButton   = loadmoreForm.find('input[type="submit"]'),
	 		nextPageField	= loadmoreForm.find('input[name="next_page"]')
	 	;
		
		function disableLoadMore() {
			loadmoreButton.attr("disabled", "disabled").addClass('disabled');
		}
		
		function enableLoadMore() {
			loadmoreButton.removeAttr("disabled").removeClass('disabled');
		}
			
		if (loadmoreForm.attr('action') == "") {
			disableLoadMore();
		}
		
		enableLoadMore();
		
		loadmoreForm.submit(function(e) {
			
			e.preventDefault();
			
			disableLoadMore();
			
			loadmore.addClass("loading");
				
			$.ajax({
				url		: $(e.target).attr('action') + '?next_page=' + nextPageField.val(),
				method	: 'GET',
				success	: function(response) {
					
					var productsXml = $(response).find("products");
					var productsHtml = productsXml.text();
					
					$(productsHtml).appendTo( $('.fragments') );
					
					appendProductLabels();
					
					if (productsXml.attr("next_page") !== '') {
						nextPageField.val(productsXml.attr("next_page"));
						enableLoadMore();
					}
					else {
						disableLoadMore();
					}
					
					loadmore.removeClass("loading");
					
				}
			});
		});
	}
});

String.prototype.capitalize = function(){ //v1.0
    return this.replace(/\w+/g, function(a){
        return a.charAt(0).toUpperCase() + a.substr(1).toLowerCase();
    });
};  
