/**
* Copyright (c) 2008, Impact Proximity
* All rights reserved.
* @author Jerome Conde <j.conde@impactbbdo.ae>
*/


$(function(){
	var isIE = $.browser.msie;
	var isIE6 = isIE && ($.browser.version == 6.0);

	//scroll page down to view bottom part of page
	var scrollLimit = $(document).height() - $(window).height();
	var scrollMax = 0;
	var scrollPageDown = function(){
		setTimeout(function(){
			var top = $(window).scrollTop();
			scrollMax++;
			if(top >= scrollLimit || scrollMax > 6000) return;
			$(window).scrollTop(top+10);
			scrollPageDown();
		},10);
	}
	
	var popUpExternal = function(){
		// External links
		$("a.External,a.external,a[rel=external]").attr("target","_blank");
		
		// Popup Links
		$("a[rel=popup],a[rel=Popup]").each(function(){
			var winDim = {width:670,height:600}
			var url = this.href;
			var winName = 'Popup';
			$(this).unbind().bind('click',function(){
				if(url.toLowerCase().indexOf('comparator') > -1) {
					winName = 'Comparator';
					winDim={width:765,height:800}
				}
				if(url.toLowerCase().indexOf('locator') > -1) {
					winName = 'Locator';
					winDim={width:765,height:800}
				}
				if(url.toLowerCase().indexOf('performance') > -1) {
					winName = 'Performance';
					winDim={width:500,height:460}
				}
				popUp(url,winDim,winName);
				return false;
			});
		});	
	}
	popUpExternal();
	
	/*Products handler*/
	$("ul.Products li").each(function(){
		var $t = $(this);
		var $ul = $t.find("ul");
		$ul.css({display:'none'});
		$t.find("> a").removeClass('Expanded');
		//assign click handler
		$t.find("> a").toggle(
			function(){
				if($(this).hasClass('Expanded')) {$(this).trigger('click');return false;};
				$(this).addClass("Expanded");
				$ul.slideDown(300);
				scrollMax = 0;
				scrollPageDown();
				return false;
			},
			function(){
				$(this).removeClass("Expanded");
				$ul.slideUp(300);
				scrollLimit = $(document).height() - $(window).height();
				return false;
			}
		);
	});
	//make it sure intended category is open
	$("ul.Products li ul").each(function(){
		var cid = parseInt($.qString({id:'cid'},location));
		var id = parseInt($.qString({id:'id'},location));
		var $me = $(this), n = $("ul.Products li ul").index(this)+1;
		if(cid == n || (id && ($("input:checkbox[value="+id+"]",$me).length))) {
			$me.parent("li").find("> a").addClass('Expanded');
			$me.css({display:'block'});
		};
	});
	
	/*handler for Label - textbox overlap*/
	$(".Customer,.Vacancy").each(function(){
		var $c = $(this),$yes = $('input:radio:first',$c),$no = $('input:radio:eq(1)',$c),$overlap = $('.Overlap',$c),
			$txt = $(".Textbox",$overlap), $lbl = $("label",$overlap);
			
		if(!$yes.is(':checked')) $overlap.css({display:'none'});
		$yes.bind('click',function(){$overlap.show()});
		$no.bind('click',function(){$overlap.hide()});
		
		if($txt.val() != "") $lbl.css({display:'none'});
		
		$overlap.bind('click',function(){
			$lbl.css({display:'none'});
			$txt.focus();
		});
		$txt.bind('blur',function(){
			if($txt.val() == "") $lbl.css({display:'block'});
		});
		
	});
	
	// Location Map handler
	$('.NBKLocator').each(function(){
		var $loc = $(this);
		var $LIs = $('.ResultList li',$loc);
		var $locMap = $("div.LocationMap",$loc);
		if(!$LIs.length) $locMap.hide();
		else $locMap.show();
		$(".ResultList li",$loc).each(function(){
			var $t = $(this);
			$(".Legend3 a",$t).bind('click',function(){
				var top = $t.position().top, n=$LIs.index($t);
				$locMap.animate({top:top},200);
				$(".GMap",$locMap).css({display:'none'});
				$(".GMap",$locMap).eq(n).css({display:'block'});
				return false;
			});
		});
		// hide all maps but first
		$(".LocationMap .GMap",$loc).not(':first').css({display:'none'});
	});
	
	// Product Comparator handler
	var comparator = function(){
		var dragAndDrop = function(){
			$("div.Comparator .Box").draggable({
				revert:'invalid',
				helper:'original',
				snapMode:'inner',
				zIndex:10,
				containment:"div.Content",
				stop:function(e,ui){
				}
			});
			$("div.Comparator .Bin").droppable({
				accept:function(ui){
					var $t = $(this);
					// if dropped on the table bins
					if($t.parents(".DataTable").length) {
						return true;
					}
					// if occupied
					if($t.find(".Box").length){
						return false;
					}
					// if empty
					if($(ui).hasClass('Box')) return true;
					return false;
				},
				drop:function(e,ui){
					var $t = $(this);
					var $box = $t.find(".Box");
					
					// if occupied swap boxes (content)
					if($box.length){
						//if required, animate swap before append
						var $prevParent = $(ui.draggable).parent();
						$box.css({display:'none'});
						setTimeout(function(){
							$box.appendTo($prevParent);
							$box.css({display:'block'});
						},200);
					}
					$t.append($(ui.draggable).css({left:0,top:0}));
					
					// invoke sorting
					setTimeout(function(){fillTable(getHeaders(),arrRows,tableToObject());},300);
				}
			});
		}
		
		// convert table data into Object
		var tableToObject = function(){
			var $table = $("div.DataTable table.OrigTable");
			var obj = {};
			var $headers = $table.find("th");
			var $rows = $table.find("tr:gt(0)");
			$headers.each(function(){
				var $thatTH = $(this);
				var key = $("img",$thatTH).attr("alt").replace(" ","");
				var i = $headers.index($thatTH);
				obj[key] = [];
				$rows.each(function(){
					var j = $rows.index(this);
					obj[key][j] = $(this).find("td").eq(i).html();
				});
			});
			return obj;
		}
		
		// initial visible rows
		var arrRows = [];
		
		// initialize data table
		var initComparator = function(){
			var $table = $("div.DataTable table.OrigTable");
			var $clone= $table.clone();
			// prepare display table
			$clone.removeClass('OrigTable').addClass('CloneTable').find("tr:first").remove();
			$clone.insertBefore($table);
			$clone.find("tr").each(function(){
				$(this).find("td:gt(4)").remove();
				$(this).find("td:first").addClass("FirstTD");
				$(this).find("td").wrapInner("<span />");
			});
			
			// generate grid
			var $bins = $table.find("th:gt(0)");
			var $grid = $("div.Grid");
			var $gridUL = $("<ul class='BoxWrap' />").prependTo($grid);
			$bins.each(function(){
				$gridUL.append("<li class='Bin'><div class='Box'>"+$(this).html()+"</div></li>");
			});
			
			// generate column headers
			var $colHeader = $("<ul class='ColumnHeader' />").append("<li>"+$("th:first",$table).html()+"</li>");
			$colHeader.prependTo("div.DataTable");
			for(var i=0;i<4;i++){
				$colHeader.append("<li class='Bin' />");
			}
			if(isIE6) $colHeader.find("li:first").addClass("FirstChild");
			
			// load initial account data
			var $boxes = $("img.Load",$gridUL);
			if($boxes.length){
				$boxes.each(function(){
					var i = $boxes.index(this);
					if(i >= 4) return;
					$(this).parent().appendTo($colHeader.find("LI").eq(i+1));
				});
			}
			//enable below to autoload four features on page load
			/*else{
				$boxes = $(".Box",$gridUL);
				$boxes.each(function(){
					var i = $boxes.index(this);
					if(i >= 4) return;
					$(this).appendTo($colHeader.find("LI").eq(i+1));
				});
			}*/
			
			// generate feature selector
			var $rows = $table.find("tr:gt(0)");
			var $filtersWrap = $(".Comparator .Filters");
			var $compare = $(".Comparator .Features .Pane .Button");
			var $expand = $(".Comparator .Features .Expand");
			var featureHeader = $table.find("th:first img").attr("alt");
			var features = tableToObject()[featureHeader];
			$rows.each(function(){
				var i = $rows.index(this);
				arrRows[i] = i;
				if(i >= features.length-1) return;
				//populate checkboxes & labels
				$filtersWrap.append('<div><input id="feat'+i+'" type="checkbox" checked="checked" /><label for="feat'+i+'">'+features[i]+'</label></div>');
			});
			// assign click handler to 'Compare' button
			$compare.bind('click',function(){
				$f = $filtersWrap.find("input");
				arrRows = [];
				$f.each(function(){
					var i = $f.index(this);
					if($(this).is(":checked")) arrRows.push(i);
				});
				arrRows.push(features.length-1);
				
				fillTable(getHeaders(),arrRows,tableToObject());
				$expand.trigger('click');
				return false;
			});
			$compare.css({display:'none'});
			$expand.css({display:'none'});
			$filtersWrap.find(":checkbox").bind('click',function(){
				$compare.trigger('click');
			});
			
			// apply drag & drop effect
			dragAndDrop();
			
			// fill the data table
			fillTable(getHeaders(),arrRows,tableToObject());
		}

		var getHeaders = function(){
			var $colHeader = $(".Comparator .ColumnHeader");
			var $bins = $colHeader.find("li");
			var headers = [];
			$bins.each(function(){
				var i= $bins.index(this);
				headers[i] = $("img",this).attr("alt") ? $("img",this).attr("alt").replace(" ","") : "";
			});
			return headers;
		}
		var fillTable = function(aHeaders,aRows,oData){
			$table = $(".Comparator .CloneTable");
			$rows = $table.find("tr");
			$rows.each(function(){
				var i = $rows.index(this);
				var $td = $(this).find("td");
				
				// hide unnecessary rows
				if(jQuery.inArray(i,aRows) < 0){
					$td.css({display:'none'});
				}
				else $td.css({display:''});
				
				// fill cells
				$td.each(function(){
					var j=$td.index(this);
					if(!oData[aHeaders[j]]) {
						$(this).find("span").html("");
						return;
					}
					$(this).find("span").html(oData[aHeaders[j]][i] ? oData[aHeaders[j]][i] : "");
				});
			});
		}
		// initialize comparator
		initComparator();
	}
	if($("div.Comparator").length) comparator();
	
	
	// Reset button handler
	$("input[alt=Reset]").bind('click',function(){
		window.location = window.location;
		return false;
	});
	
	
});

//Query String jQuery extension
(function($){$.qString=function(options){defaults={defaultvalue:"null"};options=$.extend(defaults,options);if(options.theURL){qs=options.theURL.split("?")[1];}else{qs=location.search.substring(1,location.search.length);}if(qs.length==0)return options.defaultvalue;qs=qs.replace(/\+/g,' ');var args=qs.split('&');for(var i=0;i<args.length;i++){var value;var pair=args[i].split('=');var name=unescape(pair[0]);if(pair.length==2){value=unescape(pair[1]);}else{value=name;}if(name==options.id||i==options.id-1){return value;}}return options.defaultvalue};})(jQuery);
