
var TBK = {};

$(document).ready(function() { 
	//$.preloadCssImages();
	TBK.init();
});

(function($) {
  var cache = [];
  // Arguments are image paths relative to the current page.
  $.preLoadImages = function() {
    var args_len = arguments.length;
    for (var i = args_len; i--;) {
      var cacheImage = document.createElement('img');
      cacheImage.src = arguments[i];
      cache.push(cacheImage);
    }
  }
})(jQuery)

TBK.init = function() {

	$.preLoadImages("/images/showroomBg.gif","/images/overviewBg.gif","/images/retailBg.jpg","/images/workshopBg.jpg","/images/reachBg.jpg","/images/accoladesBg.jpg","/images/promoTile.gif","/images/promoTile_exp.png","/images/productDialogBG.gif");
	// Code from firebug lite to provide a console object to browsers without one
	if (! ("console" in window) || !("firebug" in console)) {
		var names = ["log", "debug", "info", "warn", "error", "assert", "dir", "dirxml", "group", "groupEnd", "time", "timeEnd", "count", "trace", "profile", "profileEnd"];
		window.console = {};
		for (var i = 0; i <names.length; ++i) window.console[names[i]] = function() {};
	}
	// Add a replaceWith function to the top level jquery object
	$.fn.replaceWith = function(html) { return this.after(html).remove(); };


	$(".container").center();
	// Position the footer
//	var _top_margin = parseInt($(".container").css("margin-top"));
//	TBK.debug("top margin is:" + _top_margin);
//	if(_top_margin > 40)
//	{
//		$(".copyright").css("top","");
//		$(".copyright").css("bottom","0px");
//	}
//	else
//	{
//		$(".copyright").css("bottom","");
//		$(".copyright").css("top","560px");
//	}
	$(".copyright").css("display","block");
	
	$("#promoTile").click( function(e) {
		TBK.killEvent(e);
		$("#promoTile").blur();
		$("#promoTile_exp").css("position","absolute");
		$("#promoTile_exp").css("top",$("#promoTile").offset()['top'] - $("#promoTile_exp").outerHeight() + $("#promoTile").outerHeight());
		$("#promoTile_exp").css("left",$("#promoTile").offset()['left'] - 38);
		$("#promoTile_exp").css("zIndex","1000");
		$("#promoTile_exp").css("display","block");

	});
	$("#promoTile_close").click( function(e) {
		TBK.killEvent(e);
		$("#promoTile_close").blur();
		$("#promoTile_exp").css("display","none");
	});

	$("#promoPager").click( function(e) {
		TBK.homeSlideShow = false;
		window.clearInterval(TBK.homeSlideShowInterval);
		TBK.homeSlideShowAction();
		TBK.killEvent(e);
		
		


	});

	if($("#promoPager").length > 0)
	{
		TBK.homeSlideShowInterval = window.setInterval(function() {
			TBK.homeSlideShowAction();
			}, 8000);	
	}
	$("a.closeDialog").click( function(e) {
		TBK.killEvent(e);
		$(".displayWindow").css("display","none");
	});

	// Past projects

	$("#viewPastProjects").click( function(e) {
		TBK.killEvent(e);
		TBK.debug($(".ppNavTriggerID").length);
		var _item = $(".ppNavTriggerID")[0];
		
		var _pp_id = $(_item).find("span").html();
		TBK.showPastProject(_pp_id);
		
	});


	$(".ppImgTrigger").live( "click", function(e) {
		TBK.killEvent(e);
		_src = $(this).find("span.imgPath").html();
		TBK.debug("updating past project image from thumb: " + _src);
		var _totalH = 535;
		var _h = parseInt($(this).find("span.imgH").html(), 10);
		if(_h > 535) {
			_h = 535;
		}
		var _hT = (_totalH - _h)/2;
		_ht = Math.ceil(_hT);
		var _hB = _totalH - _h - _hT;
			
		$(".projectImgWrapTop").css("height", _hT + "px");
		$(".projectImgWrapMiddle").css("height", _h + "px");
		$(".projectImgWrapBottom").css("height", _hB + "px");
				
		$("#ppLargeImg").attr("src", _src);
	});

	$(".ppNavTrigger").click( function(e) {
		TBK.killEvent(e);
		$(this).blur();
		var pp_id = $(this).find("span").html();
		$(".ppNavTrigger").removeClass("active");
		TBK.showPastProject(pp_id);
		

	});

	// Product showroom
	$("#results li div.thumbContainer").click( function(e) {
		TBK.killEvent(e);
		TBK.debug("Showing product detail");
		TBK.showProduct(_id = $(this).find("em.hide").html());
	});

	$(".prodImgTrigger").live( "click", function(e) {
		TBK.killEvent(e);
		$(this).blur();
		_src = $(this).find("span").html();
		TBK.debug("updating product image from thumb: " + _src);

		$("#prodLargeImg").attr("src", _src);
	});
	
	$("#fixtureType").click( function(e) {
		TBK.killEvent(e);
		$("#fixtureType").blur();
		TBK.debug("showing main categories");
		if(!$("#mainCategories").hasClass("hide"))
		{
			$("#mainCategories").addClass("hide");
		}
		else { TBK.positionDropDown( "#fixtureType", "#mainCategories", "#subCategories" ); }
	});

	$("#search").click( function(e) {
		TBK.killEvent(e);
		$("#fixtureType").html("ALL FIXTURES");
		$("#priceRange").html("ALL STYLES");
		$("#subCategories li").remove();
		TBK.doSearch();
		
	});
	
	$("#mainCategories li").click( function(e) {
		TBK.killEvent(e);
		$(this).blur();
		TBK.hoverDDItem( this, "tan", "grey", "inactive" );
		$("#fixtureType").html($(this).html());
		$("#mainCategories").addClass("hide");
		$("#priceRange").html("All Styles");
		$("#subCategories li").remove();
		_id = $(this).html();
		_id = _id.replace(/\s/g, "");
		_id = _id.toLowerCase();
		$.getJSON("/endpoints/ProductSubcategories.php?id=" + _id, function(subcategories) { 
			var _ct = 0;
			for(var subcategory in subcategories)
			{ 
				$("#subCategories ul").append("<li>"+subcategory+"<span class=\"hide\">"+subcategories[subcategory]+"</span></li>");
				_ct++;
			}
			$("#subCategories ul.ddList li").mouseout(function() { TBK.hoverDDItem( this, "tan", "grey", "inactive" ); });
			$("#subCategories ul.ddList li").mouseover(function() { TBK.hoverDDItem( this, "tan", "grey", "active" ); });
			TBK.debug("SUBS: " + _ct);
			if(_ct > 0)
			{
				$("#priceRange").removeClass("halfOpacity");
			}
			else { $("#priceRange").addClass("halfOpacity"); } 
			TBK.doSearch();
		});
	});

	$("#mainCategories").hoverIntent( {    
		sensitivity: 1, // number = sensitivity threshold (must be 1 or higher)    
		interval: 10, // number = milliseconds for onMouseOver polling interval    
		over: function() {$("#mainCategories").removeClass("hide");}, // function = onMouseOver callback (REQUIRED)    
		timeout: 300, // number = milliseconds delay before onMouseOut    
		out: function() {$("#mainCategories").addClass("hide");} // function = onMouseOut callback (REQUIRED)    
	});
	$("#priceRange").click( function(e) {
		TBK.killEvent(e);
		$("#priceRange").blur();
		if(!$("#subCategories").hasClass("hide"))
		{
			$("#subCategories").addClass("hide");
		}
		else 
		{ 
			if($("#subCategories li").length > 0)
			{
				TBK.debug("showing sub categories");
				TBK.positionDropDown( "#priceRange", "#subCategories", "#mainCategories" );
	
			}
		}
	});

	$("#subCategories li").live( "click", function(e) {
		TBK.killEvent(e);
		TBK.hoverDDItem( this, "tan", "grey", "inactive" );

		$(this).blur();
		$("#priceRange").html($(this).html());
		$("#subCategories").addClass("hide");
		TBK.doSearch();
		
	});
	
	$("ul.ddList li").mouseout(function() { TBK.hoverDDItem( this, "tan", "grey", "inactive" ); });
	$("ul.ddList li").mouseover(function() { TBK.hoverDDItem( this, "tan", "grey", "active" ); });

	$("#subCategories").hoverIntent( {    
		sensitivity: 1, // number = sensitivity threshold (must be 1 or higher)    
		interval: 10, // number = milliseconds for onMouseOver polling interval    
		over: function() {$("#subCategories").removeClass("hide");}, // function = onMouseOver callback (REQUIRED)    
		timeout: 300, // number = milliseconds delay before onMouseOut    
		out: function() {$("#subCategories").addClass("hide");} // function = onMouseOut callback (REQUIRED)    
	});

	
	
	if($("#prevNextMap").html() != null)
	{
		TBK.productNavList = JSON.parse($("#prevNextMap").html());
	}
	$(".prodNavTrigger").click( function(e) {
		TBK.killEvent(e);
		$(this).blur();
		_id = $(this).find("span").html();
		TBK.debug("updating product data: " + _id);
		TBK.showProduct(_id);
	});
	
	TBK.makeSlider();  
	if($.address.value().length > 0)
	{
		var _addr = $.address.value();
		if(_addr.indexOf("/?pid=") == 0 )
		{
			var _pid = _addr.substr(6);
			TBK.debug("PID: " + _pid);
			TBK.showProduct(_pid);
		}
		else if(_addr.indexOf("/?pp_id=") == 0 )
		{
			var _pid = _addr.substr(8);
			TBK.debug("PID: " + _pid);
			TBK.showPastProject(_pid);
		}
	}
	
	$("#videoLink").click( function(e) {
		TBK.killEvent(e);
		$(this).blur();
		$("#videoDialog").css("position","absolute");
		var _pos = $("div.main").offset();
		$("#videoDialog").css("top",(_pos["top"] - 60) + "px");
		$("#videoDialog").css("left",(_pos["left"] + 46) + "px");
		$("#videoDialog").show();
		//$(selector).fadeIn(2000);
		//$("#videoDialog").animate( { top: _pos["top"] - 1 }, 500, "linear" );
		$("#videoDialog").animate( 
			{ 
				top: [ _pos["top"]- 1, "swing" ],
				opacity:[ "1.0" , "swing" ]
			}, 400, "linear"
		);
	});
	
	$("div.scrollable").scrollable( {  size: 1  }).circular(); 
	$(".moreLink").click( function(e) {TBK.killEvent(e);} );
	
	$(window).resize(function() {
		
		$(".container").center();
		// Position the footer
//		var _top_margin = parseInt($(".container").css("margin-top"));
//		TBK.debug("top margin is:" + _top_margin);
//		if(_top_margin > 40)
//		{
//			$(".copyright").css("top","");
//			$(".copyright").css("bottom","0px");
//		}
//		else
//		{
//			$(".copyright").css("bottom","");
//			$(".copyright").css("top","560px");
//		}
		var _selector = $("#projectDialog").length > 0 ? "#projectDialog" : "#productDialog";
		if($(_selector).css("display") == "block")
		{
			$(_selector).css("position","absolute");
			var _pos = $("div.main").offset();
			$(_selector).css("top",(_pos["top"] - 45) + "px");
			$(_selector).css("left",(_pos["left"] - 5) + "px");
		}
		$("#mainCategories").addClass("hide");
		$("#subCategories").addClass("hide");
		if($("#videoDialog").css("display") == "block")
		{
			var _pos = $("div.main").offset();
			$("#videoDialog").css("top",(_pos["top"] - 1) + "px");
			$("#videoDialog").css("left",(_pos["left"] + 46) + "px");
			
		}
		if($("#promoTile_exp").css("display") == "block")
		{
			$("#promoTile_exp").css("top",$("#promoTile").offset()['top'] - $("#promoTile_exp").outerHeight() + $("#promoTile").outerHeight());
			$("#promoTile_exp").css("left",$("#promoTile").offset()['left'] - 38);
		}
	});
	$(".prev_inactive").click( function(e) {  TBK.killEvent(e); });
	$(".next_inactive").click( function(e) {  TBK.killEvent(e); });
}
TBK.makeSlider = function(){
	$(".sliderWrap").addClass("hide");
	var _num_cols = $("#results li").length
	if(_num_cols >= 5)
	{
		$(".sliderWrap").removeClass("hide");
		$("#slider").remove();
		$(".sliderWrap .slider").append('<div id="slider"></div>');
		//config  
		
		var sliderOpts = {  
				animate: true,
				max: $("#results li").length - 4,  
				slide: function(e, ui) { 
					var _w = ui.value * 102;
					TBK.debug("UI value: " + ui.value);
					TBK.debug("Slide value: " + _w);
					$("#sliderContent").css("left", "-" + _w + "px");  
				} 
		};  
		//create slider  
		$("#slider").slider(sliderOpts);
	}
};


TBK.productNavList = {};
TBK.doSearch = function() {
		$("#search").blur();
		_id = $("#fixtureType").html();
		_id = _id.replace(/\s/g, "");
		_id = _id.toLowerCase();
		_sid = $("#priceRange span").html();
		_endpoint = "/endpoints/ProductSearch.php?id=" + _id;
		if(_sid != null && _sid != "-1")
		{
			_endpoint = _endpoint + "&sid=" + _sid
		}
		$.getJSON(_endpoint , function(searchResult) { 
			$(".resultText").html(searchResult.totalCount + " found");
			//$(".fixturesTitle").html($("#fixtureType").html());
			if( parseInt(searchResult.totalCount) <= 8)
			{
				$(".scrollLegend").css("visibility","hidden");
			}
			else { $(".scrollLegend").css("visibility","visible"); }
			if( parseInt(searchResult.totalCount) > 0)
			{
				$(".clickThumb").css("visibility","visible");
			}
			else { $(".clickThumb").css("visibility","hidden"); }
			TBK.searchNavList = searchResult.navList;
			$("#sliderContent").css("left", "0px");
			$("ul.productList li").remove();
			var _i = 0;
			var _li_content = "";
			$.each(searchResult.products, function( index, product ) {
				_li_content = _li_content + '<div class="thumbContainer"><em class="hide">'+product.id+'</em><div><img src="'+product.thumb.path+'" height="'+product.thumb.height+'" width="'+product.thumb.width+'" alt="'+product.reference+'" title="'+product.reference+'"/></div><span>'+product.reference+'</span></div>';
				if(_i == 1)
				{
					$("#results").append("<li>" + _li_content + "</li>");
					_li_content = "";
					_i = 0;
				}
				else
				{
					_i++;
				}
			});
			if(_li_content.length > 0)
			{
				$("#results").append("<li>" + _li_content + "</li>");
			}
			$("#results li div.thumbContainer").click( function(e) {
				TBK.killEvent(e);
				TBK.debug("Showing product detail");
				TBK.showProduct($(this).find("em.hide").html());
			});
			TBK.productNavList = searchResult.navList;
			TBK.makeSlider(); 
		});

		
}



TBK.showDialog = function( selector ) {
	if($(selector).css("display") != "block")
	{
		$(selector).css("position","absolute");
		var _pos = $("div.main").offset();
		$(selector).css("top",(_pos["top"] - 100) + "px");
		$(selector).css("left",(_pos["left"] - 5) + "px");
		//$(selector).fadeIn(2000);
		$(selector).css("opacity","0");
		$(selector).css("display","block");
		$(selector).animate( 
			{ 
				top: [ _pos["top"]- 45, "swing" ],
				opacity:[ "1.0" , "swing" ]
			}, 400, "linear"
		);
		//	{ duration: 400, easing: "easeInQuad" }
		//);
		
	}


	//$(selector).css("display","block");
}

TBK.showPastProject = function( id ) {
	if(!id){ return false; }
	var _pp_id = id;
	TBK.debug("updating past project data: " + _pp_id);
		
	$.getJSON("/endpoints/PastProject.php?id=" + _pp_id, function(project) { 
		//$(".ppImgTrigger").css("visibility", "hidden");
		$(".ppNavTriggerID").addClass("tan");
		$(".ppNavTriggerID").removeClass("white");
		$("#ppNav" + _pp_id).addClass("white");
		$("#ppNav" + _pp_id).removeClass("tan");
		$("#ppDesc").html(project.description);
		var _triggers = $("#projectDialog .otherImages ul li");
		$("#ppLargeImg").attr("src", "/images/s.gif");
		$("#ppImg1 img").attr("src", "/images/s.gif");
		$("#ppImg2 img").attr("src", "/images/s.gif");
		$("#ppImg3 img").attr("src", "/images/s.gif");
		if(project.images.length > 0)
		{
			_triggers.css("display", "none");
		
			for(var _id = 0; _id < project.images.length; _id++) {
				$("#ppImg" + (_id + 1)).addClass("loader");
				$("#ppImg" + (_id + 1)).css("display","block");
			}
			var _totalH = 535;
			var _h = parseInt(project.images[0].image.height, 10);
			if(_h > 535) {
				_h = 535;
			}
			var _hT = (_totalH - _h)/2;
			_ht = Math.ceil(_hT);
			var _hB = _totalH - _h - _hT;
			
			$(".projectImgWrapTop").css("height", _hT + "px");
			$(".projectImgWrapMiddle").css("height", _h + "px");
			$(".projectImgWrapBottom").css("height", _hB + "px");
			$("#ppLargeImg").attr("src", project.images[0].image.path);
			var _id = 0;
			$.each(project.images, function( index, imgSet ) {
				_id = index + 1;
				if(imgSet.thumb.path == "/content/projects/") {
					// Skip
				} else {
					$("#ppImg" + _id + " img").attr("src", imgSet.thumb.path);
					$("#ppImg" + _id + " span.imgPath").html(imgSet.image.path);
					$("#ppImg" + _id + " span.imgH").html(imgSet.image.height);
					$("#ppImg" + _id).css("display", "block");
				}
			});
			
		}
		_triggers.removeClass("loader");
		
		if(project.prev)
		{
			$(".prevNext .prev_inactive").css("display","none");
			$(".prevNext .prev").css("display","block");
			
			$(".prevNext a.prev  span").html(project.prev);
		}
		else
		{
			$(".prevNext .prev").css("display","none");
			$(".prevNext .prev_inactive").css("display","block");
		}
		if(project.next)
		{
			$(".prevNext a.next").css("display","block");
			$(".prevNext a.next_inactive").css("display","none");
			$(".prevNext a.next  span").html(project.next);
		}
		else
		{
			$(".prevNext a.next").css("display","none");
			$(".prevNext a.next_inactive").css("display","block");
		}
		TBK.debug("updating past project data: " + _pp_id);
		$(".dyn").css("opacity", "0");
		$(".dyn").animate( 
				{ opacity: "1.0" }, 
				{ duration: 1000 }
			);
		TBK.showDialog("#projectDialog");
		$.address.value("?pp_id=" + _pp_id);
	});
}


TBK.showProduct = function( id ) {
	if(!id){ return false; }
	_endpoint = "/endpoints/ProductFull.php?id=" + id;
	$.getJSON(_endpoint , function(product) { 
		$(".productInfo .productName").html(product.name);
		$(".productInfo .refNum").html(product.reference);
		$(".productInfo .dimensions").html(product.dimensions);
		$(".productInfo .price").html(product.cost);
		$(".productInfo .desc").html(product.description);
		$(".prevNext span").html("");
		if(TBK.productNavList[id].prev != null)
		{
			$(".prevNext .prev_inactive").css("display","none");
			$(".prevNext .prev").css("display","block");
			$(".prevNext .prev span").html(TBK.productNavList[id].prev);
			
		}
		else
		{
			$(".prevNext .prev").css("display","none");
			$(".prevNext .prev_inactive").css("display","block");
		}
		if(TBK.productNavList[id].next != null)
		{
			$(".prevNext .next_inactive").css("display","none");
			$(".prevNext .next span").html(TBK.productNavList[id].next);
			$(".prevNext .next").css("display","block");
		}
		else 
		{
			$(".prevNext .next").css("display","none");
			$(".prevNext .next_inactive").css("display","block");
		}
		$("#prodLargeImg").attr("src", "/images/s.gif");
		$("#prodImg1" ).css("display","none");
		$("#prodImg1 img").attr("src", "/images/s.gif");
		$("#prodImg2" ).css("display","none");
		$("#prodImg2 img").attr("src", "/images/s.gif");
		$("#prodImg3" ).css("display","none");
		$("#prodImg3 img").attr("src", "/images/s.gif");
		if(product.images.length > 0)
		{
			$("#prodLargeImg").attr("src", product.images[0].image.path);
			
			$.each(product.images, function( index, imgSet ) {
				_id = index + 1;
				$("#prodImg" + _id + " img").attr("src", imgSet.thumb.path);
				$("#prodImg" + _id + " span").html(imgSet.image.path);
				$("#prodImg" + _id).css("display", "block");
			});
		}
		$.address.value("?pid=" + id);
		$(".dyn").css("opacity", "0");
		$(".dyn").animate( 
				{ opacity: "1.0" }, 
				{ duration: 1000 }
			);
		TBK.showDialog("#productDialog");
		
	});
}
TBK.positionDropDown = function( buttonElem, listElem, otherElem )
{
	$(listElem).css("position","absolute");
	$(listElem).css("top",$(buttonElem).offset()['top'] + $(buttonElem).outerHeight());
	$(listElem).css("left",$(buttonElem).offset()['left'] + 12);
	$(listElem).css("zIndex","1000");
	$(otherElem).addClass("hide");
	$(listElem).removeClass("hide");	
}
TBK.hoverDDItem = function( elem, overClass, outClass, state )
{
	var _rClass = outClass;
	var _aClass = overClass;
	if(state == "active")
	{
		_rClass = overClass;
		_aClass = outClass;

	}
	$(elem).removeClass(_rClass);
	$(elem).addClass(_aClass);	
}
TBK.homeFeatureCount = 5;
TBK.homeSlideShow = true;
TBK.homeSlideShowInterval = null;



TBK.homeSlideShowAction = function() {
	var _current = parseInt($("#currentPromo").html());
	var _prev = _current;
	var _promo_count = parseInt($("#promoCount").html());
	TBK.debug("Current promo: " + _current);

	//$("#promo" + _current).css("display","none");
	$("#promo" + _current).parent().css("z-index","89");
	$("#promoDetail" + _current).css("display","none");
	$("#promoPager").removeClass("pager" + _current);
	if(_current < _promo_count)
	{
		_current++;
	}
	else
	{
		_current = 1;
	}
	$("#promoPager").addClass("pager" + _current);
	TBK.debug(_current + " of " + _promo_count);
	//$("#promo" + _current).css("display","block");
	$("#promo" + _current).parent().css("z-index","90");
	$("#promo" + _current).fadeIn();
	$("#promo" + _prev).fadeOut();
	$("#promoDetail" + _current).css("display","block");

	$("#currentPromo").html(_current);
}
$(".featureLink").click( function(e) {
	var _id = "#" + $(this).attr("id").split("_")[0];
	TBK.homeSlideShowAction(_id, e);
	return TBK.killEvent(e);
});

/* Common function to prevent event propagation */
TBK.killEvent = function( e ) {
	e.stopPropagation();
	e.preventDefault();
	return false;
}

TBK.debug = function(msg) { 
	//DEBUGGING_ON
	if(false && console && console.debug)
	{
		console.debug(msg);
	}
}


jQuery.fn.center = function(params) {

	var options = {

		vertical: true,
		horizontal: true

	};
	op = jQuery.extend(options, params);

	return this.each(function(){

		var _window_h = $(window).height();
		var _c_h = $(this).height();
		var _c_margin_top = $(this).css("margin-top");
		var _new_margin_top = _window_h - _c_h;
		if(_new_margin_top > 80)
		{
			_new_margin_top = parseInt(_new_margin_top/2);
		}
		else
		{
			_new_margin_top = 40;
		}
		if(_new_margin_top != _c_margin_top)
		{
			$(this).css("margin-top", _new_margin_top + "px");
			TBK.debug("MOving : " + _window_h + " - " + _c_h + " - " + _c_margin_top + " - " + _new_margin_top);
			
		}
		
	});

};