var msie = /*@cc_on!@*/false;
var oldmsie = msie && (!~navigator.userAgent.toLowerCase().indexOf("msie 9")&&!~navigator.userAgent.toLowerCase().indexOf("msie 10"));

/**
* Cookies object
*/
var cookie = {

	/**
	* Save a setting in cookie
	* @param {String} $name setting name
	* @param {String} $value setting value
	*/
	set: function($name, $value) {
		var date = new Date();
		date.setTime(date.getTime()+(365*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
		document.cookie = $name+"="+$value+expires+"; path=/";
	},

	/**
	* Get a setting from cookie
	* @param {String} $name setting name
	* @return {String} setting value
	*/
	get: function($name) {
		var nameEQ = $name + "=";
		var ca = document.cookie.split(';');
		for(var i=0;i < ca.length;i++) {
			var c = ca[i];
			while (c.charAt(0)==' ') c = c.substring(1,c.length);
			if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
		}
		return null;
	}
}

/**
* Scroll an element into view
* @param {Object HTMLElement} $element target element
*/
function scrollIntoView($element) {
	var pos = $($element).offset().top;
	$("html,body").animate({scrollTop: pos}, 1000);
}

/**
* Side menu in the shop
*/
var shopmenu = {
	init: function() {
		$(".shop_menu_block").mouseenter(function() {
			$(this).addClass("shop_menu_hover");
			$(this).find(".shop_menu_dashline").hide();
		});
		$(".shop_menu_block").mouseleave(function() {
			$(this).removeClass("shop_menu_hover");
			$(this).find(".shop_menu_dashline").show();
		});
	}
};

/**
* Slideshow XML
*/
var xmlLoader = {
	load: function(url, parser) {
		$.ajax({
			url: url,
			accepts: "text/xml",
			success: parser,
			error: xmlLoader.onError,
			dataType: "xml"
		});
	},
	onError: function() {
		//alert("slideshow niet geladen");
	}
};

/**
* Slideshow
*/
var ss = {

	cont: null,
	bprev: null,
	bnext: null,
	slides: [],
	curr: 0,
	timer: 0,
	wait: 4000,
	speed: 1500,
	anim: false,
	
	init: function() {
		ss.cont = $("#buining_slideshow");
		ss.cont.mouseenter(ss.showButtons);
		ss.cont.mouseleave(ss.hideButtons);
		ss.cont.append('<div id="buining_slideshow_prev" class="buining_slideshow_button"></div>');
		ss.cont.append('<div id="buining_slideshow_next" class="buining_slideshow_button"></div>');
		ss.bprev = $("#buining_slideshow_prev");
		ss.bnext = $("#buining_slideshow_next");
		ss.bprev.click(ss.prev);
		ss.bnext.click(ss.next);
		ss.hideButtons();
		xmlLoader.load("/slideshow.xml.php?v="+Math.round(Math.random()*9999), ss.parseSlides);
	},
	
	parseSlides: function(data) {
		$(data).find("slide").each(function(i, slide) {
			ss.slides.push({
				name: html_entity_decode($(slide).find("name").text()),
				type: $(slide).find("type").text(),
				url: $(slide).find("url").text()
			});
		});
		ss.startShow();
	},
	
	startShow: function() {
		ss.cont.append('<img id="slide'+ss.curr+'" style="position:absolute;top:0px;left:0px;" src="'+ss.slides[ss.curr].url+'" width="316" height="192" alt="'+ss.slides[ss.curr].name+'">');
		ss.timer = setTimeout(ss.next, ss.wait);
	},
	
	prev: function() {
		if(!ss.anim) {
			ss.anim = true;
			clearTimeout(ss.timer);
			var old = ss.curr;
			ss.curr = (ss.curr-1 < 0) ? ss.slides.length-1 : ss.curr-1;
			ss.cont.append('<img id="slide'+ss.curr+'" style="position:absolute;top:0px;left:-316px;" src="'+ss.slides[ss.curr].url+'" width="316" height="192" alt="'+ss.slides[ss.curr].name+'">');
			$("#slide"+ss.curr).animate({left:"+=316"}, ss.speed);
			$("#slide"+old).animate({
				left: "+=316"
			}, ss.speed, function() {
				$(this).remove();
				ss.timer = setTimeout(ss.next, ss.wait);
				ss.anim = false;
			});
		}
	},
	
	next: function() {
		if(!ss.anim) {
			ss.anim = true;
			clearTimeout(ss.timer);
			var old = ss.curr;
			ss.curr = (ss.curr+1 == ss.slides.length) ? 0 : ss.curr+1;
			ss.cont.append('<img id="slide'+ss.curr+'" style="position:absolute;top:0px;left:316px;" src="'+ss.slides[ss.curr].url+'" width="316" height="192" alt="'+ss.slides[ss.curr].name+'">');
			$("#slide"+ss.curr).animate({left:"-=316"}, ss.speed);
			$("#slide"+old).animate({
				left: "-=316"
			}, ss.speed, function() {
				$(this).remove();
				ss.timer = setTimeout(ss.next, ss.wait);
				ss.anim = false;
			});
		}
	},
	
	showButtons: function() {
		ss.bprev.fadeIn(250);
		ss.bnext.fadeIn(250);
	},
	
	hideButtons: function() {
		ss.bprev.fadeOut(250);
		ss.bnext.fadeOut(250);
	}
	
};

/**
* Dropdown submenus
*/
var submenu = {
      current: {menu:null,link:null},
      timer: 0,
      init: function() {
			$(".menubutton").not(".hassubmenu").mouseover(submenu.close)
            $(".hassubmenu").each(function() {
                  $(this).mouseover(submenu.close);
                  if ( $("#sub" + $(this).attr("id")) ) {
                        $(this).mouseover(submenu.open);
                        $(this).mouseout(function(){submenu.timer=setTimeout(submenu.close,500)});
                  }
            });
            $(".submenu a").mouseover(function(){clearTimeout(submenu.timer)});
            $(".submenu a").mouseout(function(){submenu.timer=setTimeout(submenu.close,500)});
            $(document).mouseup(submenu.close);
      },
      open: function(e) {
            clearTimeout(submenu.timer);
            submenu.current = {menu:$("#sub" + $(this).attr("id")),link:e.target};
            var btn = $(this);
			if ( !submenu.current.menu.data("h") ) submenu.current.menu.data("h", submenu.current.menu.height());
			var h = submenu.current.menu.data("h");
            submenu.current.menu.show().css({
				  left: btn.position().left+24,
				  height: 0
            });
			submenu.current.menu.animate({height: h}, 300);
      },
      close: function(e) {
            $(".submenu").hide();
            submenu.current = {menu:null,link:null};
      }
};

/**
* Filiaal dropdowns
*/
var filiaal = {

	minH: 219,
	maxH: 450,
	speed: 500,
	
	init: function() {
		$(".con_store_inner").mouseenter(filiaal.show);
		$(".con_store_inner").mouseleave(filiaal.hide);
	},
	
	show: function() {
		var e = this;
		$(e).stop(true,true).animate({height: filiaal.maxH}, filiaal.speed);
		$(e).parent().stop(true,true).animate({height: filiaal.maxH+7}, filiaal.speed);
	},
	
	hide: function() {
		var e = this;
		$(e).stop(true,true).animate({height: filiaal.minH}, filiaal.speed);
		$(e).parent().stop(true,true).animate({height: filiaal.minH+7}, filiaal.speed);
	}
	
};

/**
* Magnifier
*/
var magnifier = {

	element: undefined,
	smallImage: undefined,
	visible: false,
	loaded: false,
	image: undefined,
	ratio: 1,
	timer: 0,
	x: 0,
	y: 0,

	init: function() {
		magnifier.element = $("#shop_product_view_image_magnifier");
		magnifier.smallImage = $(".shop_product_view_image_small");
		magnifier.smallImage.bind("mouseover touchstart",function(){
			clearTimeout(magnifier.timer);
			magnifier.timer = setTimeout(magnifier.show, 500);
			$(document).bind("mousemove touchmove", magnifier.move);
		});
		if ( oldmsie ) {
			magnifier.element.css({
				"border": "1px solid #666",
				"width": 126,
				"height": 126
			});
			$("#shop_product_view_image_magnifier_glass").css({
				"background":"transparent",
				"border":"3px solid #FFF"
			});
		}
		return magnifier;
	},

	loadImage: function(src) {
		magnifier.element.css({
			'background-image':'url("/img/loader.gif")',
			'background-position':'center center'}
		);
		magnifier.image = new Image();
		magnifier.image.onload = magnifier.onLoad;
		magnifier.image.src = src;
		return magnifier;
	},

	onLoad: function() {
		magnifier.ratio = magnifier.image.width / 380; // 320 + 60
		magnifier.element.css('background-image','url("'+magnifier.image.src+'")');
	},

	show: function() {
		magnifier.visible = true;
		magnifier.element.stop(true,true).fadeIn();
	},

	hide: function() {
		clearTimeout(magnifier.timer);
		magnifier.visible = false;
		magnifier.element.stop(true,true).fadeOut();
		$(document).unbind("mousemove touchmove", magnifier.move);
		return magnifier;
	},

	move: function(e) {
		var evt = window.event ? (event.touches ? event.touches[0] : e) : e;
		var localX = evt.pageX - magnifier.smallImage.offset().left;
		var localY = evt.pageY - magnifier.smallImage.offset().top;
		magnifier.element.css({left: localX - 60, top: localY - 60});
		var percx = localX / magnifier.smallImage.width();
		var percy = localY / magnifier.smallImage.height();
		var posx = Math.round(-magnifier.image.width*percx)+60;
		var posy = Math.round(-magnifier.image.height*percy)+60;
		magnifier.element.css("background-position", posx+"px "+posy+"px");
		if ( localX < 0 || localY < 0 || localX > magnifier.smallImage.width() || localY > magnifier.smallImage.height() ) {
			magnifier.hide();
		}
		e && e.preventDefault();
		return magnifier;
	}

}

/**
* Shopping bag
*/
var shoppingBag = {

	timer: 0,

	updateAmount: function(productid, newamount, oldamount) {

		clearTimeout(shoppingBag.timer);
		shoppingBag.timer = setTimeout(function() {
			if ( newamount < oldamount ) {
				location.replace('/shop/shoppingbag?removeitem&amount=' + (oldamount-newamount) + '&id=' + productid);
			} else {
				location.replace('/shop/shoppingbag?additem&amount=' + (newamount-oldamount) + '&id=' + productid);
			}
		}, 500);

	},

	addItem: function() {
		$.ajax({
			data: 'additem=1&amount=' + $("#shop_dropdown_amount").val() + '&id=' + $("#shop_dropdown_size").val(),
			url: '/shoppingbag_ajax.php',
			success: function(e){location.reload()}
		});
	}

}

/**
* Promotional code
*/
var promoCodeValid = false;
var promoCode = "";

function validatePromoCode() {
	promoCode = $("#promocode").val();
	if ( !promoCode && !promoCodeValid ) return;
	$("#info_promocode").html('');
	$.getJSON("/validatepromocode.php","code=" + promoCode + "&costs=" + $("#promocode_ordercosts").val(), onPromoCodeValidate);
}
function onPromoCodeValidate(JSONResponse) {
	if ( JSONResponse.response == true ) {
		promoCodeValid = true;
		$("#info_promocode").html("De code is correct").removeClass("invalid").addClass("valid");
	} else {
		if ( JSONResponse.error == 1 ) {
			$("#info_promocode").html("Het minimale bedrag voor deze promotiecode is &euro; " + JSONResponse.mincosts).addClass("invalid").removeClass("valid");
			$("#promocode").val("");
		} else {
			$("#info_promocode").html("Deze code is niet (meer) geldig").addClass("invalid").removeClass("valid");
		}
	}
}

/**
* Toggle the disabled value of the delivery address fields
*/
function toggleDeliveryAddress($disabled) {
	if ( $disabled ) {
		//$(".shop_checkout_delivery_fields").find("input,textarea,select").attr("disabled","disabled");
		$(".shop_checkout_delivery_fields").hide();
	} else {
		//$(".shop_checkout_delivery_fields").find("input,textarea,select").removeAttr("disabled");
		$(".shop_checkout_delivery_fields").slideDown();
	}
}

/**
* Custom select dropdown
*/
var dropdown = {

	init: function() {
		$(".dropdown_wrap").each(function() {
			$(this).find(".dropdown_label").html($(this).find("option:selected").text());
			$(this).find("select").change(dropdown.updateValue);
			$(this).mousemove(function(e) {
				var l = e.pageX;
				var t = e.pageY;
				$(".dropdown_button").each(function() {
					if ( l > $(this).offset().left && l < $(this).offset().left + $(this).width() && t > $(this).offset().top && t < $(this).offset().top + $(this).height() ) {
						$(this).addClass("dropdown_button_hover");
						$(this).parent().find("select").css("cursor","pointer");
					} else {
						$(this).removeClass("dropdown_button_hover");
						$(this).parent().find("select").css("cursor","default");
					}
				});
			}).mouseout(function(){
				$(".dropdown_button").removeClass("dropdown_button_hover");
			});
		});
	},

	updateValue: function() {
		$(this).parent().find(".dropdown_label").html($(this).find("option:selected").text());
	}

}

/**
* Numeric steppers
*/
var numericStepper = {

	timer: 0,

	init: function() {
		$(".numericstepper").each(function() {
			$(this).find("a").eq(0).click(numericStepper.increment);
			$(this).find("a").eq(0).mousedown(numericStepper.incrementRepeated);
			$(this).find("a").eq(1).click(numericStepper.decrement);
			$(this).find("a").eq(1).mousedown(numericStepper.decrementRepeated);
			$(this).find("a").bind("mouseup mouseout",numericStepper.stop);
		});
	},

	increment: function(e) {
		var field = $(e.currentTarget).parent().find("input[type=text]");
		var val = Math.min((field.data("max")||99999), parseInt(field.val())+(field.data("step")||1));
		field.val(isNaN(val) ? 0 : val);
		field && field.trigger("change");
	},

	decrement: function(e) {
		var field = $(e.currentTarget).parent().find("input[type=text]");
		var val = Math.max((field.data("min")||0), parseInt(field.val())-(field.data("step")||1));
		field.val(isNaN(val) ? 0 : val);
		field && field.trigger("change");
	},

	incrementRepeated: function(e) {
		numericStepper.timer = setTimeout(function(){
			numericStepper.timer = setInterval(function(){numericStepper.increment(e)}, 200);
		},500);
	},

	decrementRepeated: function(e) {
		numericStepper.timer = setTimeout(function(){
			numericStepper.timer = setInterval(function(){numericStepper.decrement(e)}, 200);
		},500);
	},

	stop: function(e) {
		clearTimeout(numericStepper.timer);
		clearInterval(numericStepper.timer);
	}

}


/**
* Plan route
*/
function planRoute() {
	var adres = $("#route_adres").val();
	var plaats = $("#route_plaats").val();
	var filiaal = $("#route_filiaal").val();
	if(adres == "" || plaats == "") {
		$("#route_error").html("Vul alle velden in svp.");
	} else if(filiaal == "") {
		$("#route_error").html("Selecteer een filiaal svp.");
	} else {
		$("#route_error").empty();
		adres = adres.split(" ").join("+");
		plaats = plaats.split(" ").join("+");
		var win = window.open("http://maps.google.nl/maps?saddr="+escape(adres)+","+escape(plaats)+"&daddr="+filiaal);
	}
}

/**
* Decode HTML entities
* @param {String} str => input string
* @return {String} decodes string
*/
function html_entity_decode(str) {
	var txt = document.createElement("DIV");
	txt.innerHTML = str;
	return txt.innerText;
    /*try	{
		var tarea=document.createElement('textarea');
		tarea.innerHTML = str; var val = tarea.value;
		tarea.parentNode.removeChild(tarea);
		return val;
	}
	catch(e) {
		//for IE add <div id="htmlconverter" style="display:none;"></div> to the page
		document.getElementById("htmlconverter").innerHTML = '<textarea id="innerConverter">' + str + '</textarea>';
		var content = document.getElementById("innerConverter").value;
		document.getElementById("htmlconverter").innerHTML = "";
		return content;
	}*/
}

/**
* Remember form fields in the checkout page
*/
var rememberFields = {

	save: function(form) {
		var fields = [];
		$(form).find("input,textarea,select").each(function() {
			if ( $(this).attr("type") == "checkbox" || $(this).attr("type") == "radio" ) {
				if ( !$(this).attr("checked") ) return;
			}
			fields.push($(this).attr("name") + "=" + escape($(this).val()));
		});
		cookie.set("formFields_" + form.id, fields.join("&"));
	},

	load: function(form) {
		var saved = cookie.get("formFields_" + form.id);
		if ( saved ) {
			var fields = saved.split("&");
			for ( var i = 0; i < fields.length; i++ ) {
				var parts = fields[i].split("=");
				if ( parts.length == 2 ) {
					parts[1] = unescape(parts[1]);
					var field = $("input[name=" + parts[0] + "],textarea[name=" + parts[0] + "],select[name=" + parts[0] + "]");
					if ( field.hasClass("dontremember") ) continue;
					if ( field.attr("type") == "checkbox" ) {
						field.attr("checked","checked");
					} else if ( field.attr("type") == "radio" ) {
						$("input[name=" + parts[0] + "][value=" + parts[1] + "]").attr("checked","checked");
					} else if ( field.attr("tagName") == "SELECT" ) {
						field.find("option").eq(parseInt(parts[1])-1).attr("selected","selected");
					} else {
						field.val(parts[1]);
					}
				}
			}
		}
	}

}

/**
* Onload handler
*/
$(function() {

	if ( $("#reac_error").html() ) {
		$("document,body").animate({"scrollTop":$("#reac_error").offset().top},1000);
	}

	if ( page == "shop" || page == "checkout" || (page == "shoppingbag" && location.search.indexOf("id")==-1) ) {
		$(window).unload(function() {
			cookie.set("scrollTop",$(document).scrollTop());
		});
		if ( cookie.get("scrollTop") ) $(document).scrollTop(cookie.get("scrollTop"));
	}
	$("form.remember").each(function() {
		rememberFields.load(this);
	});
	if ( page == "checkout" ) {
		$(".required").focus(function() {
			$(this).removeClass("incorrect");
		}).blur(function() {
			if ( !$(this).val() ) {
				$(this).addClass("incorrect");
			}
		});
		$("#promocode").keyup(function() {
			if ( this.value.length == 13 ) validatePromoCode();
		}).blur(validatePromoCode);
		toggleDeliveryAddress(($("#delivery_address_different").attr("checked")?false:true));
		$("#shop_form_checkout").submit(validatePromoCode);
	}
	$(window).unload(function() {
		$("form.remember").each(function() {
			rememberFields.save(this);
		});
	});

	dropdown.init();
	numericStepper.init();
	magnifier.init();

	if ( $("#delivery_country").val() != 1 ) {
		$(".shop_form_checkout_shipping_costs_info").show();
	}

	if ( subPage ) {
		var anchor = subPage.toLowerCase().split("-").join(" ");
		$("h2,h3,h4").each(function(){
			if ( $(this).html().split("<br>").join(" ").toLowerCase() == anchor ) scrollIntoView(this);
		});
	}

});
