//////////////////////////////////////////////////////////////////////////////////
// PromoGrid V0.1
// (c) 2010 by Netmedia Europe
// MIT License
//////////////////////////////////////////////////////////////////////////////////
(function ($) {
	function PromoGrid(containerdiv,options){
		var titleholder = $($(containerdiv.children()[0] ).children()[0]) ;
		var searchholder = $(containerdiv.children()[1]);
		var linkscontainer = $(containerdiv.children()[2] );
		var promocontainer = $(containerdiv.children()[3] );
		var loadingholder = $(containerdiv.children()[4] );
		var loadingtext = $(loadingholder.children()[0]);
		var _self = this;
		var datastore = null;

		this.init = function()
		{
			gridholder[options.type] = this;
			var success = false;
			$.getJSON(options.url,function(data){
				this.dataReady(data);
			});
			return success;
		}
		this.dataReady = function(data)
		{
			this.datastore = data;
			this.setlinks();
			if(options.defaultCatalog>-1)
				this.showPromos(options.defaultCatalog);
		}
		this.setlinks = function()
		{
			var linkUList = $(document.createElement('ul'));
			linkUList.addClass("columnlist");
			$.each(this.datastore,function(key,value){
				var linkListItem = $(document.createElement('li'));
				var newLink = $(document.createElement('a'));
				newLink.html(value.name + " ("+value.items.length+")");
				newLink.attr("href","#");
				newLink.attr("id","catlnk_"+value.id);
				newLink.click(function(){
					_self.showPromos(value.id);
					return false;
				});
				linkListItem.append(newLink);
				linkUList.append(linkListItem);
			});
			linkscontainer.append(linkUList);
			linkscontainer.append("<br clear='all' />");
		}
		this.showPromosFromArray = function(itemarray,title)
		{
			titleholder.html(title);
			if(options.showLoadingoverlay){
				loadingholder.show('fast',function(){
					_self.doShowPromos(itemarray,"promos",promocontainer);
					options.onShowPromos();
					loadingholder.hide();					
				});
			}else{
				_self.doShowPromos(itemarray,"promos",promocontainer);
				options.onShowPromos();
			}
			
			
		}
		this.showPromos = function(catalogId)
		{
			var val = null;
			$.each(this.datastore,function(key,value){
				if(value.id == catalogId)
				{
					val = value;
				}
			});
			titleholder.html(val.name);
			if(options.showLoadingoverlay){
				loadingholder.show('fast',function(){
					_self.doShowPromos(val.items,catalogId,promocontainer);
					options.onShowPromos();
					loadingholder.hide();
				});
			}else{
				_self.doShowPromos(val.items,catalogId,promocontainer);
				options.onShowPromos();
			}
			
		}
		this.doShowPromos = function(items,rel,promocontainer)
		{
			promocontainer.html("");
					var promolist = "<ul class='gridimgul'>";
					$.each(items,function(key,item)
					{
						promolist+="<li><div class='gridbox'>";
						promolist+="<a class='zoomable gridimg' href='"+item.picture+"' rel='"+rel;
						promolist+="' promodata='"+item.pagetype+"|"+item.shopcode+"|"+item.articleId+"|"+item.shopname+"|"+item.picture+"|"+item.from+"|"+item.to+"|"+item.shopurl+"|"+item.filename+"|"+item.brand+"|"+item.brandurl+"|"+item.tag+"|"+item.tagurl+"|"+item.title;
						promolist+="' title='Deze "+item.shopname+" promotie is geldig van "+item.from+" tot " + item.to + "'>";
						promolist+="<img src='" + item.thumbnail + "' alt='' class='lazyload' /></a>";
						promolist+="<span class='minititle'>"+ item.minititle +"</span></div></li>";						
					});
					promolist+="</ul>";
					promocontainer.append(promolist);
		}
		this.initSearch = function(){
			var searchform = searchholder.children()[0];
			var term = searchform.elements[1];
			var extra = searchform.elements[2];
                    var competitors = searchform.elements[3];

                    
			$(searchform).submit(function(){
				if($(term).val()==""){
					_self.showPromos(0);
				}else{
					var jsonUrl = "http://www.promobutler.be/indexedsearch.do?q="+$(term).val()+"&extravar="+ $(extra).val() +"&competitors="+ $(competitors).val() +"&type=json&lang="+lang+"&callback=?";
					$.getJSON(jsonUrl,function(data){
						_self.showPromosFromArray(data.results,data.term);
					});
				}
				return false;
			});
		}
		if(options.startLoad)
			this.init();
		if(options.hasSearch){
			this.initSearch();
		}else{
			searchholder.hide();
		}
		if(options.showLoadingoverlay){
			loadingtext.prepend(options.loadingText);
		}
	}
	$.fn.PromoGrid = function(options)
	{
		return this.each(
			function() {
				var opts = $.extend({},$.fn.PromoGrid.defaults,options);
				$(this).data('grid', new PromoGrid($(this), opts));
			}
		);
	}
	$.fn.PromoGrid.defaults = {
		url: "", // Should end with "...&callback=? for cross-comain compability.
		defaultCatalog: -1,
		startLoad: true,
		onShowPromos: function(){},
		type: "promotions",
		hasSearch: true,
		loadingText: "Bezig met laden",
		showLoadingoverlay: true
    };
})(jQuery);
var gridholder = new Array();
function parseJSON(type,data){
	gridholder[type].dataReady(data);
}
//////////////////////////////////////////////////////////////////////////////////
// PromoZoom V0.1
// (c) 2010 by Netmedia Europe
// MIT License
//
// Plugin based on the excellent Cloud Zoom (original copyright header below)
// Taken several parts of their code to rewrite according to our needs
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
// Cloud Zoom V1.0.2
// (c) 2010 by R Cecco. <http://www.professorcloud.com>
// MIT License
//
// Please retain this copyright header in all versions of the software
//////////////////////////////////////////////////////////////////////////////////
(function ($) {
	function format(str) {
		for (var i = 1; i < arguments.length; i++) {
        	    str = str.replace('%' + (i - 1), arguments[i]);
	        }
        	return str;
	}
	function PromoZoom(_image,options)
	{
		var image = _image;
		var container = image.parent();
		var wrap = image.parent().parent();
		var imgsrc = image.attr("src");
		var pz = this;
		var img = new Image();
		var mousetrapnull;
		var mx=0;
		var my=0;
		var controlTimer=0;
		var zoomDiv = null;
		var cw, ch;
		var destU = 0.
		var destV = 0;
		var currU = 0;
		var currV = 0;
		
		this.init = function () {
			 mouseTrap = $(document.createElement("div"))
					.addClass("mousetrap")
					.mousemove( function (event) {
						mx = event.pageX;
				 	    my = event.pageY;
					})
					.mouseleave(	function (event) {
							clearTimeout(controlTimer);
							zoomDiv.fadeOut(300);
							return false;
					})
					.mouseenter(function(event){
						mx = event.pageX;
			                        my = event.pageY;
	       			                var w = image.outerWidth();
	    	                	  	var h = image.outerHeight();
		                         	if(zoomDiv){
		                                	zoomDiv.stop(true,false);
		                                	zoomDiv.remove();
		                         	}
		                         	zoomDiv = $(document.createElement("div"))
		                        		.attr("id","promo-zoom-big")
		                        		.addClass("promo-zoom-big")
		                        		.attr("style","display:none;position:absolute;left:0px;top:0px;width:"+w+"px; height:"+h+"px;background-image:url(\""+imgsrc+"\");z-index:99;");
			                        container.append(zoomDiv);
			                        if ($.browser.msie && $.browser.version < 7) {
		        	                        $ie6Fix = $('<iframe frameborder="0" src="#"></iframe>').css({
			        	                        position: "absolute",
			                	                left: xPos,
				                                top: yPos,
				                                zIndex: 99,
				                                width: w,
			                                        height: h
	                                		}).insertBefore(zoomDiv);
						}
		                                zoomDiv.fadeIn(500);
		                                cw = (zoomDiv.outerWidth() / img.width) * zoomDiv.width();
		                                ch = (zoomDiv.outerHeight() / img.height) * zoomDiv.height();
		                                pz.controlLoop();
		                                return;
					 });
			if($.browser.msie){
				mouseTrap.attr("style","background-image:url(\".\"); z-index: 9999; position: absolute; width: "+image.outerWidth()+"px;height: "+image.outerHeight()+"px; left: 0px; top: 0px;");
			}else{
				mouseTrap.attr("style","z-index: 9999; position: absolute; width: "+image.outerWidth()+"px;height: "+image.outerHeight()+"px; left: 0px; top: 0px;");
			}
			container.append(mouseTrap);
		};
		this.controlLoop = function () {
			var x = (mx - image.offset().left - (cw * 0.5)) >> 0;
			var y = (my - image.offset().top - (ch * 0.5)) >> 0;
			if(x<0){
				x = 0;
			}else if(x > image.width() - cw){
				x = (image.width() - cw);
			}
			if(y<0){
				y = 0;
			}else if(y > image.height() - ch){
				y = (image.height() - ch);
			}
			
			destU = (((x) / image.outerWidth()) * img.width) >> 0;
			destV = (((y) / image.outerHeight()) * img.height) >> 0;
			currU += (destU - currU) / options.smoothMove;
			currV += (destV - currV) / options.smoothMove;
			zoomDiv.css('background-position',(-(currU >> 0) + 'px ') + (-(currV >> 0) + 'px'));
			controlTimer = setTimeout(function () {
		              pz.controlLoop();
		        }, 30);
		};
		$(img).load(function () {
			pz.init();
		});
		img.src = image.attr("src");
	}
	$.fn.PromoZoom = function(options)
	{
		return this.each(function() {
			 if ($(this).parent().parent().attr('id') != 'wrap') { //Wrap your element
				$(this).parent().wrap('<div id="wrap" style="top:0px;z-index:500;position:relative;"></div>');
			}
			var opts = $.extend({},$.fn.PromoZoom.defaults,options);
			$(this).data('zoom', new PromoZoom($(this), opts));
		});

	}
	$.fn.PromoZoom.defaults = {
        smoothMove: 3
    };
})(jQuery);
