/**
* $Id: searchBox.js 33621 2010-04-08 11:06:22Z iargent $
* @author Eber Herrera
*
*/

function GSI_Widget_SearchBox(){
	
	this.name = 'searchbox';
	this.loadOrder = 1;
	
	var priceSlider = null;
	var maxPrice = 0;
	var itemBoxTemplate = null;
	var sumaryLineTemplate = null;
	var sumaryTemplate = null;
	
	var allFacetsData = null;
	var _mthis = this;
	
	var loadSteps = 1;
	
	this.getLoadSteps = function(){
		return loadSteps;
	}
	
	var load = function(){
		try{
			if (typeof GSI=="undefined") return false;
			//if ($('#parametric-nav').length !=1) return false;
			if ($('#sku_xxx').length !=1) return false;
			}
			catch(e){
			return false;
			}
		return true;
	};
	
	this.setPriceSlider = function(obj, maxP){
		priceSlider = obj;
		maxPrice = maxP;
	};
	
	this.getMaxPrice = function(maxP){
		return isNaN(maxPrice) ? 0 : maxPrice;	
	};
		
	this.loader = function(on){
		if(on){
			$("#main-col-contents").hide();
			$(".loader", "#main-col").show();
		}
		else{
			$(".loader", "#main-col").hide();
			$("#main-col-contents").fadeIn();
		}
	};
	
	this.refreshParamNavHeight = function(){
		$("#contents").css("height", "auto");		
		$("#main-col-contents").css("height", "auto");
		$("#parametric-nav").css("height", "auto");
		
		var A = $("#main-col").height();
		var B = $("#parametric-nav").height() + $("#rvp").height();
		
		if (A>=B)    { 			
			$("#parametric-nav").height((A + 5));
			$("#main-col-contents").css("height", "auto");
		}    else    {			
			var tHeight1 = $("#main-col").height();
			var tHeight2 = $("#parametric-nav").height();
			var tHeight = tHeight2 > tHeight1 ? tHeight2:tHeight1;
			
			$("#parametric-nav").css("height", tHeight);
		}
	}

	this.refreshGUI = function(){
			if (!GSI.se.loaded) 
			 	return _mthis.search(null,false,false, true);
			if (GSI.widgets.expressitem) GSI.widgets.expressitem.hide();
			_mthis.loader(true);
			$("#main-col-contents").trigger("resizeInterface");
			if (GSI.se.data['error']) {
				drawError();
				drawPagination();
				return false;
			}
			drawResults();
			drawPagination();
			try{
				$(".ajax-rounded-blue").each(showRoundedButton);
			} catch(e){}
			
			drawFacets();
			_mthis.loader(false);
			return true;
	};
	
	this.search = function(callback, onlyRes, queryStr, noHistoric){
		if (!callback) callback = function(){};
		
		var searchFeedback = function(){
			_mthis.loader(false);
			$("#main-col-contents").trigger("resizeInterface");
			
			if (GSI.se.data['error']) {
				drawError();
				drawPagination();
				if (!noHistoric) saveToHistoric();
				callback();
				return false;
			}
			drawResults();
			drawPagination();
			refreshSortParams();
			
			try{
				$(".ajax-rounded-blue").each(showRoundedButton);
			} catch(e){}
			
			
			
			if (!GSI.functions.isset(onlyRes)) drawFacets();

			if (!noHistoric) saveToHistoric();
			callback();
			
			
			
			return true;
		};
		
		if (GSI.widgets.expressitem) GSI.widgets.expressitem.hide();
		if (!GSI.functions.isset(callback)) callback=function(){};
		_mthis.loader(true);
		
		GSI.se.search(searchFeedback, queryStr);
	};
	
	this.getAllFacets = function(callback){
		var getAllFacetsFeedback = function(){
			_mthis.loader(false);
			allFacetsData = GSI.se.data;
			callback();
			return true;
		};
		
		if (!allFacetsData) {
			_mthis.loader(true);
			GSI.se.search(getAllFacetsFeedback, ' ');
		} else callback();
	};
	
	
	var refreshSortParams = function(){
		$("#items-displayed-select").val(GSI.se.pageSize);
		var firstSorter = GSI.functions.getElementFromArray(GSI.se.sorters, 0);
		$("#sort-option").val(firstSorter);
	};
	
	var drawError = function(){
		var getAllFacetsFeedBack = function(){
			drawFacets(allFacetsData, true);
			//GSI.se.resetFacets();
		};
		
		_mthis.getAllFacets(getAllFacetsFeedBack);
		$("#main-col-results-summary").hide();
		var tDOM = $(".no-results:first", "#main-col").clone();
		$('#main-col-contents').empty();
		$('#main-col-contents').append(tDOM);
	};
	
	var drawFacets = function(data, noSummary){
		var data = data ? data : GSI.se.data;
		var drawHeader = function(name, count){
			if (count) {
				var countStr=' ('+data.facet_info[name]+')';
			} else countStr = '';
			if (name == "price") var tClear = (GSI.se.isFacetSet(name+'_from') || GSI.se.isFacetSet(name+'_to')) ? '<a class="clear" name="'+name+'" href="javascript:return false;"><img src="'+GSI_APP_IMG_PATH+'shared/bin.gif" alt="clear" title="clear" /></a>' : '';
			else var tClear = GSI.se.isFacetSet(name) ? '<a class="clear" name="'+name+'" href="javascript:return false;"><img src="'+GSI_APP_IMG_PATH+'shared/bin.gif" alt="clear" title="clear" /></a>' : '';
			var tHeader = '<div class="parametric-nav-title"><h3>'+GSI.dict.getText('category_names',name) + countStr +'</h3>'+tClear+'<br style="clear: both;"/></div>';
			return tHeader;
			};
			
		var drawList = function(name){
			var tStr = '';
			var tCountH = GSI.functions.count(data.facet_counts.facet_fields[name]);
			if (tCountH<=5) var tSize = ' small';
			else if (tCountH>6) var tSize = ' big very-big';
			else var tSize = ' big';

			tStr += '<div class="parametric-nav-area'+tSize+'">';
				tStr += '<ul id="parametric-search-'+cnt+'">';
				for (var aValue in data.facet_counts.facet_fields[name]){
					var tCount = data.facet_counts.facet_fields[name][aValue];
					var tActive = GSI.se.isFacetSet(name,aValue) ? ' active':' inactive';
					tStr += '<li><span style="display: none;">'+aValue+'</span><a rel="nofollow" class="ajax-facet'+tActive+'" name="'+name+'" href="">'+aValue+'</a></li>';// ('+tCount+')
				}
			tStr +="</ul></div>";
			return tStr;
		};
	
		var drawCombo = function(name){
			var tStr = '';
			tStr += '<div class="parametric-nav-area-dropdown">';
				tStr += '<select name="'+name+'" id="parametric-search-'+cnt+'" class="ajax-facet-dropdown"><option value="0">'+GSI.dict.getText('select', 'please choose')+'</option>';
				for (var aValue in data.facet_counts.facet_fields[name]){
					var tCount = data.facet_counts.facet_fields[name][aValue];
					var tActive = GSI.se.isFacetSet(name,aValue) ? 'active" selected="selected"':'inactive"';
					tStr += '<option value="'+aValue+'" class="'+tActive+'>'+aValue+'</option>';// ('+tCount+')
				}
			tStr +="</select></div>";
			return tStr;
		};
		
		var drawColor = function(name){
			var tStr = '';
			if (GSI.functions.count(data.facet_counts.facet_fields[name])<=30) var tSize = ' small'
			else var tSize = ' big';
			tStr += '<div class="parametric-nav-area'+tSize+'">';
				tStr += '<ul id="parametric-search-'+cnt+'">';
				for (var aValue in data.facet_counts.facet_fields[name]){
					var tCount = data.facet_counts.facet_fields[name][aValue];
					var tActive = GSI.se.isFacetSet(name,aValue) ? ' active':' inactive';
					tStr += '<li style="display: inline;"><span style="display: none;">'+aValue+'</span><a rel="nofollow" name="'+name+'" class="ajax-facet-color'+tActive+'" href="#"><img title="" alt="" src="'+GSI_CATALOG_IMG_PATH+'primary_colors/'+aValue+'.jpg"/></a></li>';
				}
			tStr +="</ul></div>";
			
			return tStr;
		};
		
		var refreshPriceSlider = function(){
			maxPrice = Math.abs(data.facet_counts.facet_fields.price.max_value) > maxPrice ? Math.abs(data.facet_counts.facet_fields.price.max_value) : maxPrice;
			var min=GSI.se.facets['price_from'] ? GSI.se.facets['price_from'] : 0;
			var max=GSI.se.facets['price_to'] ? GSI.se.facets['price_to'] : maxPrice;
			if (priceSlider) priceSlider.setValue(parseInt(min*100/maxPrice),parseInt(max*100/maxPrice));
			priceSlider.onChange.fire();
		};
		
		var drawSummary = function(){
			var tStr = sumaryTemplate.replace(/__totalCount__/g, GSI.se.data.response.numFound);
			var tStrLines = '';
			if (GSI.se.isFacetSet('default')) {
				var tBin = '<a class="summary_clear" name="default" href="javascript:return false;"><img src="'+GSI_APP_IMG_PATH+'shared/bin.gif" alt="clear" title="clear" /></a>';
				tStrLines += tBin + ' ' + "<li>"+sumaryLineTemplate.replace(/__aLine__/g, GSI.se.facets["default"])+"</li>";
				}
				
			if (GSI.se.isFacetSet('PRIMARY_COLOR')) {
				var tBin = '<a class="summary_clear" name="PRIMARY_COLOR" href="javascript:return false;"><img src="'+GSI_APP_IMG_PATH+'shared/bin.gif" alt="clear" title="clear" /></a>';
				tStrLines += tBin + ' ' + "<li>"+sumaryLineTemplate.replace(/__aLine__/g, '<img title="" alt="" src="'+GSI_CATALOG_IMG_PATH+'primary_colors/'+GSI.se.facets['PRIMARY_COLOR']+'.jpg"/>')+"</li>";
				}
			
			for (var aFacet in GSI.se.data.facet_counts.facet_fields){
					if (!GSI.se.isFacetSet(aFacet)) continue;
					if (aFacet == 'PRIMARY_COLOR') continue;
					var tBin = '<a class="summary_clear" name="'+aFacet+'" href="javascript:return false;"><img src="'+GSI_APP_IMG_PATH+'shared/bin.gif" alt="clear" title="clear" /></a>';
					tStrLines += "<li>"+sumaryLineTemplate.replace(/__aLine__/g, tBin + ' '+ GSI.se.facets[aFacet])+"</li>";
				}
				
			tBin = (GSI.se.isFacetSet('price_from') || GSI.se.isFacetSet('price_to')) ? '<a class="summary_clear" name="price" href="javascript:return false;"><img src="'+GSI_APP_IMG_PATH+'shared/bin.gif" alt="clear" title="clear" /></a>' : '';
			
			tStr = tStr.replace(/__minPrice__/g, GSI.se.isFacetSet('price_from')? 
					tBin +' '+GSI.functions.moneyFormat(GSI.se.facets['price_from'],GSI.se.data.display_text.currencyid)
					: tBin +' '+GSI.functions.moneyFormat(0,GSI.se.data.display_text.currencyid));
			tStr = tStr.replace(/__maxPrice__/g, GSI.se.isFacetSet('price_to')? 
					GSI.functions.moneyFormat(GSI.se.facets['price_to'],GSI.se.data.display_text.currencyid)
					: GSI.functions.moneyFormat(maxPrice,GSI.se.data.display_text.currencyid));		
			
			$("#main-col-results-summary").empty().append(tStr);	
			$("ul", "#main-col-results-summary").empty().append(tStrLines);
			$(".summary_clear","#main-col-results-summary").click(onClear);
			$("#main-col-results-summary").show();
		};
		
		var cnt = 0;
		var tStr = '';

		if(GSI.se.data.facet_counts.facet_fields['SIZE']){
				cnt++;
				tStr += '<div>';
				tStr += drawHeader('SIZE',true);
				tStr += drawCombo('SIZE');
				tStr += '</div>';
		}
		
		for (var aFacet in data.facet_counts.facet_fields){
			if (data.facet_format[aFacet] == 'dropdown' && aFacet!='SIZE') {
				cnt++;
				tStr += '<div>';
				tStr += drawHeader(aFacet,true);
				tStr += drawCombo(aFacet);
				tStr += '</div>';
			}
		}
				
		for (var aFacet in data.facet_counts.facet_fields){
			if (data.facet_format[aFacet] == 'dropdown' || 
					aFacet=='price' || 
					aFacet == 'SIZE' || 
					aFacet == 'PRIMARY_COLOR') {
				continue;
				}
			cnt++;
			tStr += '<div>';
			tStr += drawHeader(aFacet,true);
			tStr += drawList(aFacet);
			tStr += '</div>';
		}
		
		if(data.facet_counts.facet_fields['PRIMARY_COLOR']){
				cnt++;
				tStr += '<div>';
				tStr += drawHeader('PRIMARY_COLOR',true);
				tStr += drawColor('PRIMARY_COLOR');
				tStr += '</div>';
		}

		tStr += drawHeader('price');
		_mthis.refreshBanner();
		refreshPriceSlider();
		
		
	$('.content', '#parametric-nav').html(tStr);	
	$(".ajax-facet").click(onClick);
	$(".ajax-facet-dropdown").change(onChange);
	$(".ajax-facet-color").click(onClick);
	$(".clear").click(onClear);
	
	if (!noSummary) drawSummary();
	_mthis.refreshParamNavHeight();
	};
	
	this.refreshBanner = function (){
		try{
			var section = GSI.se.isFacetSet('brand') ? GSI.se.facets['brand'] : 
				GSI.se.isFacetSet('subcategory') ? GSI.se.facets['subcategory'] : 
				GSI.se.isFacetSet('category') ? GSI.se.facets['category'] : false;
			
			var tFound = false;
			if(section){
					for (var i = 0; i < _mthis['metadata'].length; i++) {
						if (_mthis['metadata'][i]['secName'] == section) {
							$("#banner img").attr("src", _mthis['metadata'][i]['banner']);
							tFound = true;
							break;
						}
					}
			}
			if (!tFound) $("#banner img").attr("src", _mthis['metadata'][0]['banner']);
		} catch(e) {
			GSI.setError("Banner structures are not in the DOM", "ERROR");
		}
	};
	var drawResults = function(){
		var initItemBox = function(item){
			try{
				var tBox = itemBoxTemplate.clone();
				var sku = item.getData('id');
				var currencyid = item.getData('currencyid');
				var offrPrice = item.getData('offrprice');
				var orgPrice = item.getData('orgprice');
				var Img = item.getImage('small');
				var name = item.getData('name');

				
				$('.item-box',tBox).attr('id','sku_'+sku);
				$('.item-box-image-href', tBox).attr('href', 'item?sku='+sku);
				$('.item-box-contents-text-href', tBox).attr('href', 'item?sku='+sku).html(name);
				
				if (offrPrice) {
					$('.item-box-contents-price-offer', tBox).html(GSI.functions.moneyFormat(offrPrice, currencyid));
					$('.item-box-contents-price', tBox).html(GSI.functions.moneyFormat(orgPrice, currencyid)).addClass('originalprice');
					$('.offer-percentage', tBox).css("display","block");
				} else {
					$('.item-box-contents-price-offer', tBox).hide();
					$('.item-box-contents-price', tBox).html(GSI.functions.moneyFormat(orgPrice, currencyid));
					$('.offer-percentage', tBox).css("display","none");
				}
				
				$('.item-box-image-img', tBox).attr('src', Img);
				
				$('.ajax-rounded-blue', tBox).attr('id','btn_'+sku);
				/*$('.ajax-rounded-blue', tBox).click(function(){
					showExpressItem(sku);
				});*/
				
				
			tBox.appendTo("#main-col-contents");
			}
			catch(e){
				$('.ajax-rounded-blue', tBox).remove();
				tBox.appendTo("#main-col-contents");
				_mthis.setError('initItemBox drawing item : '+sku+'\n'+e.message,'ERROR');
			}
		};
		
		$("#main-col-contents").empty();
		for (var anItem in GSI.se.items){
			initItemBox(GSI.se.items[anItem]);
		}
	};
	
	var drawPagination = function(){

		var pagHtml = '';
		var tPagDOM = $('.pagination').empty();
		if (tPagDOM.length<=0) $('.sort-pagination').append('<div class="pagination"></div>');
		if (!GSI.se.data['pagination']) return;
		
		var tPages = $("<span class='pages'></span>");
		
		for (var aPage in GSI.se.data.pagination.links){
			if (aPage=='indexOf') continue;
			if (aPage=='next') {
				if (GSI.se.data.pagination.links[aPage]!='disabled'){
					var tNext = $('<a href="#"><img class="right-arrow" alt="" title="" src="'+GSI_APP_IMG_PATH+'cm/arrow-right.png"/></a>').click(goNext);
					continue;
				}
				var tNext=false;
				continue;
			}
			if (aPage=='previous') {
				if (GSI.se.data.pagination.links[aPage]!='disabled'){
					var tPrev = $('<a href="#"><img class="right-arrow" alt="" title="" src="'+GSI_APP_IMG_PATH+'cm/arrow-left.png"/></a>').click(goPrev);
					continue;
				}
				var tPrev = false;
				continue;
			}
			if (aPage=='many_pages' || aPage=='many_pages_back') {
				pagHtml = $('<span>'+GSI.se.data.pagination.links[aPage]+'</span>');
				tPages.append(pagHtml);
				continue;
			}
			
			if (GSI.se.data.pagination.links[aPage]!='current') {
				pagHtml = $('<a href="#">'+aPage+'</a>');
				pagHtml.click(goPage); 
			} else {
				pagHtml = $('<span class="current-page">'+aPage+'</span>');
			}
			tPages.append(pagHtml);
		} 
		$('.pagination').append(tPages);
		if (tPrev!=false) $('.pagination').prepend(tPrev);
		if (tNext!=false) $('.pagination').append(tNext);
	};	
	
	var saveToHistoric = function(){
		if (GSI.hasHistoric) {
			var tSts = new GSI_Application_State();
			GSI.historic.add(tSts, GSI.se.getQueryString());
		}
	};
	
	var goPage = function(){
		GSI.se.page = $(this).text();
		_mthis.search(undefined, true);
		return false;
	};
	
	var goPrev = function(){
		GSI.se.page = parseInt(GSI.se.page) - 1;
		_mthis.search(undefined, true);
		return false;
	};
	
	var goNext = function(){
		GSI.se.page = parseInt(GSI.se.page)+ 1;
		_mthis.search(undefined, true);
		return false;
	};
	
	var onClick = function(){
		if (this.name=="category" || this.name=="subcategory"){
			if (GSI.se.isFacetSet('default')) GSI.se.removeFacet('default');
		}
		if ($(this).hasClass('active')){
				$(this).removeClass('active').addClass('inactive');
				GSI.se.removeFacet(this.name, $(this).prev().text());
			} else {
				$(this).addClass('active').removeClass('inactive');
				GSI.se.removeFacet(this.name);
				GSI.se.addFacet(this.name, $(this).prev().text());
			}
			
			var searchFb=function(){};

			GSI.se.page = 1;
			_mthis.search(searchFb);
			return false;
	};
	
	var onChange = function(){
		if ($(this).hasClass('active')){
				$(this).removeClass('active').addClass('inactive');
				GSI.se.removeFacet(this.name, this.value);
			} else {
				$(this).addClass('active').removeClass('inactive');
				GSI.se.removeFacet(this.name);
				GSI.se.addFacet(this.name, this.value);
			}
			
			var searchFb=function(){};
			
			GSI.se.page = 1;
			_mthis.search(searchFb);
			return false;
	};
	
	var onClear = function(){
			var searchFb=function(){};
			
			if (this.name=="price"){
				GSI.se.removeFacet(this.name+"_from");
				GSI.se.removeFacet(this.name+"_to");
			}
			else GSI.se.removeFacet(this.name);
			_mthis.search(searchFb);
			return false;
	};
	
	var onSort = function(){
			var searchFb=function(){};
			
			GSI.se.resetSorters();
			var normalizedSorter = this.value.replace(/_(asc|desc)/g, ':$1');
			var tSorter = normalizedSorter.split(':',2);
			GSI.se.addSorter(tSorter[0], (tSorter[1]=='asc') ? true: false);
			_mthis.search(searchFb, true);
			return false;
	};
	
	var onPageSize = function(){
			var searchFb=function(){};
			
			if (this.value == 0) GSI.se.pageSize = null;
			else GSI.se.pageSize = this.value;
			_mthis.search(searchFb, true);
			return false;
	};
	
	var onSearchSku = function(aSku){
		GSI.se.resetFacets();
		GSI.se.addFacet('default', aSku);
		_mthis.search(null, false);
		return false;
	}; 
	
	this.init = function(){
		if (!load()) {
			GSI.updateProgressBar(_mthis.name +" "+ GSI.dict.getText('JSAPI', 'widget_initiation_error'));
			return false;
		}		
		$('#parametric-nav .content').empty();
		var urlArray = document.location.href.split('#'); // document.location.href
		if (GSI.functions.count(urlArray) >=2) var landingStr = decodeURIComponent(urlArray.pop());
		else landingStr = urlArray.pop();
		GSI.se.resetFacets();
		GSI.se.setQueryString(landingStr);
		$(".ajax-facet").click(onClick);
		$(".ajax-facet-dropdown").change(onChange);
		$(".ajax-facet-color").click(onClick);
		$(".clear").click(onClear);
		$("img.right-arrow", ".pagination").click(goNext).parent().attr("href", "#");
		$("img.left-arrow", ".pagination").click(goPrev).parent().attr("href", "#");
		$("a", ".pages").click(goPage).attr("href", "#");
		$("#sort-option").change(onSort);
		$("#items-displayed-select").change(onPageSize);
		$("select", ".parametric-nav-area-dropdown").change(onChange);
		$('#input_search_sku').keypress(function( e, keyCode ){
		    keyCode = keyCode || e.keyCode;
			if (keyCode==13) onSearchSku(this.value);
		}); 
		$('#search-link').click(function(){
			onSearchSku($('#input_search_sku').val());
		});
		
		if (_mthis['lastSearch']){
			GSI.se.resetFacets();
			GSI.se.setQueryString(_mthis.lastSearch);
			_mthis.search(null,false);
		} else {
			$('.clear').each(function(){if(!GSI.se.isFacetSet($(this).attr('name'))) $(this).remove();});
		}
		
		itemBoxTemplate = $(".item-box-wrapper#sku_xxx").clone().removeAttr('id');
		sumaryLineTemplate = $("#main-col-results-summary-line-template").remove().removeAttr('id').html();
		sumaryTemplate = $("#main-col-results-summary").html();
		_mthis.loaded = true;
		
		var lastQueryStr = false;
		
		var onBackButton = function(){
			//GSI.historic.put('lastSearch', GSI.se.getQueryString());
			
			var landingStr = decodeURIComponent(document.location.href.split('#').pop()); // document.location.href
			GSI.se.resetFacets();
			if (GSI.se.setQueryString(landingStr)) _mthis.search(endSearch, null, null, true);
		};
		if (GSI.hasHistoric) $(GSI).bind("historyback", onBackButton);

		var endSearch = function(){
			//_mthis.refreshBanner();
			//_mthis.refreshParamNavHeight();
			_mthis.loader(false);
			GSI.updateProgressBar(_mthis.name +" "+ GSI.dict.getText('JSAPI', 'widget_initiated'));
		};
		
		_mthis.search(endSearch, null, null, true);
		return true;
	};
	
}
GSI_Widget_SearchBox.prototype=new GSI_Widget();

var tW = new GSI_Widget_SearchBox();
GSI.widgets.loadWidget(tW);
