/*
	ema.common.js

	@author  		CMICHAUX (at) emakina (dot) com
	@date			20110322
	@version 		1.0
*/

if(EMA == undefined)
	var EMA = {};

jQuery.expr[':'].parents = function(a,i,m){
    return jQuery(a).parents(m[3]).length < 1;
};




(function($){
	

	EMA.IdeaBookTabs = function(el, options){
		var _opt = {
			cssClasses: {
				active: "active",
				opened: "js-ideabooktabs-open",
				tabsTitles: "js-ideabooktabs-titles",
				tabsContent: "js-ideabooktabs-content",
				tabItem: "js-ideabooktabs-tab",
				minimizeBtn: "js-ideabooktabs-minimize",
				maximizeBtn: "js-ideabooktabs-maximize"
			}
		}, _prefix = "ideatabs_", _activeItem = -1, _container;
		
		$.extend(_opt, options);

		/**
		 * Initialise the Ideabook
		 */
		var _init = function(){
			
			var $this = $(this),
			$titles = $this.find("."+_opt.cssClasses.tabsTitles+" > li"),
			$minimizeBtn = $this.find("."+_opt.cssClasses.minimizeBtn),
			$maximizeBtn = $this.find("."+_opt.cssClasses.maximizeBtn);
			_container = $this;
			
			
			$titles.find("a").bind("click", function(e){
				e.preventDefault();
				var $this = $(this)
				_activeItem = $this.parent().attr(_getAttr("id"));
				_changeTo($this.attr("href"), true);
			});

			$minimizeBtn.bind("click", function(e){
				e.preventDefault();
				_changeTo(_activeItem, true, false);
				$minimizeBtn.hide();
				$maximizeBtn.show();
			});

			$maximizeBtn.bind("click", function(e){
				e.preventDefault();
				_changeTo(_activeItem, true, false);
				$minimizeBtn.show();
				$maximizeBtn.hide();
			});

			
			$titles.each(function(i){
				var $this = $(this);
				$this.attr(_getAttr("id"), i);
				if($this.hasClass(_opt.cssClasses.active) && _activeItem == -1){
					_activeItem = i;
				}
				else{
					$this.removeClass(_opt.cssClasses.active);
					$($this.find("a").attr("href")).hide();
				}
			});

			if(_activeItem == -1){
				_activeItem = Cookies.read("ideabook_activeItem");
			}
			if(_activeItem === undefined || _activeItem === "undefined")
				_activeItem = -1;
			else if(_activeItem === false)
				_activeItem = 0;
			
			if(_activeItem == -1){
				_container.removeClass(_opt.cssClasses.opened);
				$minimizeBtn.hide();
				$maximizeBtn.show();
			}
			else{
				_container.addClass(_opt.cssClasses.opened);
				$maximizeBtn.hide();
				$minimizeBtn.show();
			}

			_changeTo(_activeItem, false, false);
		},

		
		_changeTo = function(id, hide, redirect){
			hide = (hide == undefined) ? false : hide;
			redirect = (redirect == undefined) ? false : redirect;

			Cookies.set("ideabook_activeItem", id);
			if(typeof id != "string"){
				if(id == -1){
					return true;
				}
				else{
					return _changeTo(_container.find("["+_getAttr("id")+"="+id+"] a").attr("href"), hide, redirect);
				}
			}

			var $target = $(id);
			
			if(!$target.is(":visible")){
				
				_container.find("."+_opt.cssClasses.tabItem+":visible").slideUp();
				_container.find("."+_opt.cssClasses.active).removeClass(_opt.cssClasses.active);
				_container.find("[href="+id+"]").parent().addClass(_opt.cssClasses.active);
				$target.slideDown(function(){
					if(redirect)
						window.location = id;

					_container.trigger("tab:changed");
				});

				//not opened by click (cookie)
				if($target.length>0){_container.addClass(_opt.cssClasses.opened);}
			}
			else if(hide){
				$target.slideUp(function(){
					_container.trigger("tab:changed");
				});
				Cookies.set("ideabook_activeItem", -1);
				_container.find("."+_opt.cssClasses.active).removeClass(_opt.cssClasses.active);
				_container.removeClass(_opt.cssClasses.opened)
			}


			
		
		},
		
		_getAttr = function(attr){
			//Return the attribute with the prefix so multiple plugins that need to embed data can coexist on the same node
			return _prefix + attr;
		}
		
		
		_init.apply(el);
		
		
		return {
			changeTo: _changeTo
		}
	}
	
	$.fn.ideaBookTabs = function(options){
		return $(this).each(function(){
			new EMA.IdeaBookTabs(this, options);
		})
	}
	
	
	EMA.Moodboard = function(el, options){
		var $el = $(el);
		var _opt = {
			dataContainer: '.js-moodboard-datas',
			loadingClass: 'loading',
			itemTemplate: "#js-moodboard-item",
			sortableClass: "js-moodboard-sortable",
			placeholderClass: "js-moodboard-placeholder",
			onSave: function(order){},
			onSend: function(order){},
			onAddImage: function(order){},
			onCreatePdf: function(order){}
		}
		$.extend(_opt, options);
		var datas = [];
		
		this._init = function(){
			this.displayLoading();
			this.getDatas();
			_opt.dataContainer.remove();
			delete _opt.dataContainer;

			this.build();

			this.removeLoading();

			$el.find(".js-close").live("click", function(e){
				e.preventDefault();
				var $this = $(this);
				var $cnt = $this.parents(".js-moodboard");
				moodboard = $cnt.data("moodboard");
				moodboard.deleteItem($this.parents("li").index());
			});
			$el.data("moodboard", this);
		}

		this.build = function(){
			$el.append('<ul class="'+_opt.sortableClass+'"></ul>');

			_opt.sortableContainer = $el.children("."+_opt.sortableClass);

			$(_opt.itemTemplate).tmpl(datas).appendTo(_opt.sortableContainer);
			
			_opt.sortableContainer.sortable({placeholder: _opt.placeholderClass});
		}

		this.displayLoading = function(){
			$el.append('<div class="'+_opt.loadingClass+'"></div>');
			_opt.loading = $el.children("."+_opt.loadingClass);
		}

		this.removeLoading = function(){
			_opt.loading.remove();
			delete _opt.loading;
		}

		this.getDatas = function(){
			datas = [];
			_opt.dataContainer = $el.find(_opt.dataContainer).children("li").each(function(){
				var $this = $(this), tmp = {};
				tmp.id = $this.find(".id").text();
				tmp.item_classes = $this.find(".item_classes").text();
				tmp.collection = $this.find(".collection").text();
				tmp.name = $this.find(".name").text();
				tmp.price = $this.find(".price").text();
				tmp.product_image = $this.find(".product_image").text();
				datas.push(tmp);
			});
		};

		this.reflow = function(){
			this.displayLoading();
			datas.sort(function(){
				return (Math.round(Math.random())-0.5);
			});
			_opt.sortableContainer.remove();
			this.build();
			this.removeLoading();
		};

		this.deleteItem = function(index, trigger){
			if(trigger === undefined)
				trigger = true;
			var $item = $el.find("li:eq("+index+")");
			var id = $item.attr("id");
			id = (id).substr(id.indexOf("_")+1);
			$item.remove();
			$el.trigger("moodboard:item:removed", {id: id})
		}

		this.getOrder = function(){
			var order = [];
			_opt.sortableContainer.children("li").each(function(){
				var id = $(this).attr("id");
				id = (id).substr(id.indexOf("_")+1);
				order.push(id);
			})
			return order;
		}

		//*
		this.save = function(){
			var order = this.getOrder();
			Cookies.set("moodboard_order_save", order);
			_opt.onSave.call(this, order);
		}

		this.createPDF = function(){
			var order = this.getOrder();
			Cookies.set("moodboard_order_pdf", order);
			_opt.onCreatePdf.call(this, order);
		}

		this.send = function(){
			var order = this.getOrder();
			Cookies.set("moodboard_order_send", order);
			_opt.onSend.call(this, order);
		}

		this.addImage = function(){
			var order = this.getOrder();
			Cookies.set("moodboard_order_addImage", order);
			_opt.onAddImage.call(this, order);
		}
		// */
		this._init();
		return this;
	}
	
	$.fn.moodboard = function(options){
		$(this).each(function(){
			return new EMA.Moodboard(this, options);
		})
	}
	
	EMA.KitchenBrowser = function(el, options){
		var _opt = {
			cssClasses: {
				dataContainer: '.js-kitchenbrowser-data',
				mainTemplate: "#js-kitchenbrowser-template",
				placeholder: ".js-kitchenbrowser-placeholder",
				big: ".js-kitchenbrowser-big",
				thumb: ".js-kitchenbrowser-thumb",
				full: ".js-kitchenbrowser-full",
				thumbsList: ".js-kitchenbrowser-thumbs",
				thumbsToggler: ".js-kitchenbrowser-toggleThumbs",
				bigList: ".js-kitchenbrowser-biglist",
				embiggen: ".js-kitchenbrowser-embiggen"
			}
		},
		_datas = [],
		_container,
		_placeholder, _toggleThumbs, _bigList, _thumbsList, _embiggen, _prefix = "kitchenbrowser", _nonce = Math.round(Math.random() * 10000000),
		_current = 0;

		$.extend(_opt, options);
		
		var _init = function(){
			
			_container = $(el);
			_placeholder = _container.find(_opt.cssClasses.placeholder);


			var $dataList = _container.find(_opt.cssClasses.dataContainer)
			_datas = (function(datalist){
				var $items = datalist.find("li"),
				datas = [], $item, tmp;

				for(var i = 0; $items.length > i; i++){
					
					$item = $($items[i]);
					tmp = {
						id: _getId(i),
						big: $item.find(_opt.cssClasses.big).html(),
						thumb: $item.find(_opt.cssClasses.thumb).html(),
						full: $item.find(_opt.cssClasses.full).text()
					}

					datas.push(tmp);
				}

				return [{Items: datas}];
				
			})($dataList);
			$dataList.remove();
			delete $dataList;

			
			$(_opt.cssClasses.mainTemplate).tmpl(_datas).appendTo(_placeholder);


			_toggleThumbs = _container.find(_opt.cssClasses.thumbsToggler);
			_thumbsList = _container.find(_opt.cssClasses.thumbsList);
			_bigList = _container.find(_opt.cssClasses.bigList);
			_embiggen = _container.find(_opt.cssClasses.embiggen);
			
			_bigList.width(_bigList.find("li").width() * _datas[0].Items.length);

			_toggleThumbs.bind("click", function(e){
				e.preventDefault();
				_thumbsList.slideToggle();
			});

			_thumbsList.find("a").bind("click", function(e){
				e.preventDefault();
				_goTo($(this).attr("href"));
			})

			_embiggen.bind("click", function(e){
				e.preventDefault();
				Shadowbox.open({
					content: _datas[0].Items[_current].full,
					player: "img"
				})
			})
		},

		_getId = function(id){
			return _prefix + "_" + _nonce + "_" + id
		},

		_goTo = function(id){
			var $nitem = _container.find(id);


			_bigList.animate({
				left: -$nitem[0].offsetLeft
			})

			_current = (id.split("_"))[2]
			
		}



		_init();

		return {}
	};
	$.fn.kitchenBrowser = function(options){
		return $(this).each(function(){
			new EMA.KitchenBrowser(this, options);
		})
	}
	
})(jQuery);


//custom code the reference

function blockJSValidation() {
    /// <summary>Blocks the javascript validation of possible forms on the page</summary>
    $('form').validate().cancelSubmit = true;
}
