/**
 * global search main script
 */

/**
 * 스트링 객체 확장 메소드
 * @param i index 
 * @param str 삽입할 string
 * @return 결과 string
 */
String.prototype.insert = function(i, str) {
	return this.substring(0, i) + str + this.substring(i); 
};
//Array Remove - By John Resig (MIT Licensed)
Array.remove = function(array, from, to) {
	var rest = array.slice((to || from) + 1 || array.length);
	if(array.length>0){
		array.length = from < 0 ? array.length + from : from;
		//from < 0 ? array.length + from : from;
	}
	return array.push.apply(array, rest);
};

function gnb_search(config) {
	///////////////////////////////////////////////////////
	// private variables
	///////////////////////////////////////////////////////
	/**
	 * 마스크 여부
	 */
	var isMask = false;
	/**
	 * visual search 검색 결과
	 */
	var visualDataList = null;
	/**
	 * 코드 값
	 */
	var SEARCH_BTN_WATING	= 1;
	var SEARCH_BTN_NOINPUT	= 2;
	var SEARCH_BTN_TYPING	= 3;
	
	/**
	 * 설정
	 */
	var config = config || {};
	config.recommendKeyword = config.recommendKeyword || '';
	config.isRecommendClick = config.recommendKeyword.length > 0;
	config.isSearchReady = true;
	
	///////////////////////////////////////////////////////
	// private functions
	///////////////////////////////////////////////////////
	/**
	 * Visual Search JSON 검색
	 * @param input
	 * @return
	 */
	function getJSONVisualSearch(input) {
		$.getJSON(config.visualSearchUrl + '?query=' + input, function(data) {
			$('.layer_search').show();
			
			var dataList = data.xperVisual;
			if (dataList.length > 0 && !dataList[dataList.length - 1]) {
				Array.remove(dataList, dataList.length - 1);
			}

			if (dataList.length == 0) {
				showNoResults();
			} else if (dataList.length == 1) {
				var visualData = dataList[0];
				showProductMatchView(visualData);
			} else {
				showListView(dataList);
			}
			config.isSearchReady = false;
		});
	}

	/**
	 * 전체 dialog를 닫습니다.
	 * @return
	 */
	function hideDialogAll() {
		// Global Main Search List
		$('#layer_search_list').hide();
		$('#layer_search_list').empty();

		// Product Match View
		$('.match_view').hide();
		$('.match_view div.thumb').empty();

		// Layer Popup Product In Brief
		$('#layer_pop_brief_1').hide();
		$('div.thumb_sec_search').empty();
		
		// No product results found
		$('div.layer_search .no_results').hide();
	}
	
	/**
	 * 결과 없음 layer를 display
	 */
	function showNoResults() {
		hideDialogAll();
		$('div.layer_search .no_results').show();
	}
	
	function fncom_chk_strlength_cut(vn_maxlength, vn_str)
	{
		 var vn_sumlength=0;
		 var vn_restr='';
		 for(var i= 0;i < vn_str.length; i++)
		 {
		  if( escape(vn_str.charAt(i)).length > 3 ) { vn_length = 2; }
		  else if (vn_str.charAt(i) == '<' || vn_str.charAt(i) == '>') { vn_length = 4; }
		  else { vn_length = 1 ; }
		  if ( vn_maxlength < (vn_sumlength + vn_length) ) { break; }
		  vn_sumlength += vn_length;
		  vn_restr += vn_str.charAt(i);
		 }
		 if(vn_str.length>vn_maxlength)vn_restr=vn_restr+"...";
		 return (vn_restr);
	}

	/**
	 * 해당 product의 detail layer를 display
	 * @param visualData product data
	 */
	function showProductMatchView(visualData) {
		var	visualQuery = document.getElementById("input_search").value;	// Omniture Add
		hideDialogAll();
		$('.match_view').show();
		$('.match_view div.thumb')
			.append('<a href="' + visualData.url + '" onclick="visual(\' '+visualQuery+' \' )" ><img src="'+ visualData.img3 +'" onError="this.src=\'/images/common/noimg/noimg_250.gif\'"/></a>')
			.append('<a href="' + visualData.url + '" onclick="visual(\' '+visualQuery+' \' )" ><img src="/images/common/btn/bt_detail_view.gif"/></a>');

		$('.match_view dl.detail')
			.empty()
			.append('<dt>' + visualData.pd_model + '<br /><span>' + visualData.visualkeyword + '</span></dt>');
		
		var dd = $('<dd></dd>').appendTo($('.match_view dl.detail'));
		//var features = visualData.feature.split('\u25B6');
		var features = visualData.feature.split('##');
		for (var i = 0; i < 5; i++) {
			if (features[i]) {
				dd.append('<div class="product_match_features">' + fncom_chk_strlength_cut(50,features[i]) + '</div>');
			} else {
				dd.append('<div style="height:20px"></div>');
			}
		}

		var dd_icon = null;
		for (var i = 1; i <= 10; i++) {
			if (i == 1 || i == 6) {
				dd_icon = $('<dd class="icon"></dd>').appendTo($('.match_view dl.detail'));
			}
			var fimg = visualData['featureimg' + i];
			if (fimg && fimg.length > 0) {
				dd_icon
					.append('<span><img src="' + fimg + '"/><br/>' + visualData['featureimgnm' + i] + '</span>');
			}
		}

		$("div.product_match_features").autoEllipsis();
	}

	/**
	 * 검색된 visual search의 detail view layer를 display
	 * @param visualData product data
	 */
	function showDetailView(visualData) {
		var	visualQuery = document.getElementById("input_search").value;	// Omniture Add
		$('#layer_pop_brief_1').show();
		$('div.thumb_sec_search')
			.empty()
			.append('<div class="thumb_img"><a href="' + visualData.url + '" onclick="visual(\' '+visualQuery+' \' )" ><img src="'+ visualData.img2 +'" title="' + visualData.pd_model + '" title="' + visualData.pd_model  +'" onError="this.src=\'/images/common/noimg/noimg_180.gif\'"/></a></div>')
			.append('<a href="' + visualData.url + '"onclick="visual(\' '+visualQuery+' \' )" ><img src="/images/common/btn/bt_detailview_off.gif" onmouseover="ImageOver(this)" onmouseout="ImageOut(this)" title="VISTA DETALLADA" /></a>');
		
		
		var descript_sec = $('.descript_sec_search dl.descript_txt_search');
		descript_sec
			.empty()
			.append('<dt>' + visualData.pd_model + '<br /><em>' + visualData.visualkeyword + '</em></dt>');
		
		//var features = visualData.feature.split('\u25B6');
		var features = visualData.feature.split('##');
		for (var i = 0; i < 5; i++) {
			if (features[i]) {
				descript_sec
				.append('<dd><div class="product_features">' + fncom_chk_strlength_cut(50,features[i]) + '</div></dd>');
			} else {
				descript_sec
					.append('<dd class="empty_featrues"></dd>');
			}
		}
		
		var featureIcons = $('.descript_sec_search ul.icon_search');
		featureIcons.empty();
		for (var i = 1; i <= 10; i++) {
			var fimg = visualData['featureimg' + i];
			if (fimg && fimg.length > 0) {
				featureIcons
					.append('<li><img src="' + fimg + '" title="' + visualData['featureimgnm' + i] + '" /></li>');
			}
		}
		
		$("div.product_features").autoEllipsis();
	}
	
	/**
	 * visual search 결과를 display
	 * @param dataList 검색된 결과 리스트
	 * @return
	 */
	function showListView(dataList) {
		var	visualQuery = document.getElementById("input_search").value;	// Omniture Add
		visualDataList = dataList;
		hideDialogAll();
		$('#layer_search_list').show();
		for (var i = 0; i < dataList.length; i++) {
			var visualData = dataList[i];
			// var li = $('<li></li>').addClass('productView');
			var li = $('<li></li>');
			if (i % 5 == 0) {
				li.addClass('first');
			}		
			//li.append($('<a href="' + visualData.url + '" onclick="visual(\' '+visualQuery+' \' )" ><span class="thumb"><img src="' + visualData.img + '"/></span><span class="title">' + visualData.pd_model + '</span></a>'));
			li.append($('<span class="thumb"><a href="' + visualData.url + '" onclick="visual(\' '+visualQuery+' \' )" style="display:block; cursor:pointer;"><img src="' + visualData.img + '" onError="this.src=\'/images/common/noimg/noimg_120.gif\'"/></a></span><span class="title"><a href="' + visualData.url + '" onclick="visual(\' '+visualQuery+' \' )" style="display:block; cursor:pointer;">' + visualData.pd_model + '</a></span>'));
			li.append($('<div class="bt_icon"><img id="_in_brief' + i + '" onmousedown="showDetailViewByIndex(' + i + ')" onmouseover="overInbrief(' + i + ')" src="/images/common/btn/ico_brief_on.gif" style="cursor:pointer"/><img id="_support' + i + '" onmousedown="moveSupportPage(' + i + ')" onmouseover="overSupport(' + i + ')" onmouseout="overInbrief(' + i + ')" src="/images/common/btn/ico_support_off.gif" style="cursor:pointer"/></div>'));
			//li.append($('<div class="list_back"><a href="' + visualData.url + '" onclick="visual(\' '+visualQuery+' \' )" ><span class="thumb"><img src="' + visualData.img + '"/></span><span class="title">' + visualData.pd_model + '</span></a><div class="bt_icon"><img id="_in_brief' + i + '" onmousedown="showDetailViewByIndex(' + i + ')" onmouseover="overInbrief(' + i + ')" src="/images/common/btn/ico_brief_on.gif" style="cursor:pointer"/><img id="_support' + i + '" onmousedown="moveSupportPage(' + i + ')" onmouseover="overSupport(' + i + ')" onmouseout="overInbrief(' + i + ')" src="/images/common/btn/ico_support_off.gif" style="cursor:pointer"/></div></div>'));
			
			li.appendTo($('#layer_search_list'));
		}
		for (var i = dataList.length; i < 10; i++) {
			var li = $('<li></li>');
			if (i % 5 == 0) {
				li.addClass('first');
			}
			li.appendTo($('#layer_search_list'));
		}
		
	}
	
	/**
	 * 검색 layer를 제외한 다른 부분 mask.
	 * @return
	 */
	function maskPanel() {
		if (!isMask) {
			if (config.onMaskPanel) config.onMaskPanel();
            $.blockUI({ message: null });
            $("#content").block({ message:null });

			if (config.isAsideBlock) {
				$("#aside").block({message : null});
	            $(".gnb_sec").block({ message:null });
			}
			
			var wmp = document.getElementById("wmp");
			if (wmp && wmp.controls){
				config.wmpPlayState = wmp.playState;
				
				switch (config.wmpPlayState) {
					//Stopped
					case 1: break;
					//Paused
					case 2: break;
					//Playing
					case 3: wmp.controls.pause(); break;
					//Else
					default: wmp.controls.stop(); break;
				}
			}

            $('.layer_search_dialog').hide();
			isMask = true;
			setTimeout( function() { if (config.onUnmaskPanel) config.onUnmaskPanel(); }, 3000);
		}
	}

	/**
	 * unmask 처리
	 * @return
	 */
	function unmaskPanel() {
		if (isMask) {
            $.unblockUI();
            $("#content").unblock();

			if (config.isAsideBlock) {
				$("#aside").unblock();
	            $(".gnb_sec").unblock();
			}
			
			var wmp = document.getElementById("wmp");
			if (wmp && wmp.controls){
				if (config.wmpPlayState == 3) wmp.controls.play();
			}

            $('.layer_search_dialog').hide();
            isMask = false;
		}
		$('.layer_search').hide();
	}

	/**
	 * 검색 textBox를 초기화
	 */
	function textBoxInit() {		
		setRecommendKeyword();		
		if (config.recommendKeyword.length == 0) {
			if ($('#input_search').hasClass('searchbox_focus')) {
				$('#input_search').removeClass('searchbox_focus');
			}
		}
		toggleInputSearchButton(SEARCH_BTN_WATING);
		
		// 자동완성 검색창을 숨김
		$('#input_search')[0].autocompleter.hideResultsNow();
		config.beforeInputValue = '';
	}

	/**
	 * 검색 textBox를 입력상태로 전환
	 */
	function textBoxTyping() {
		if (!$('#input_search').hasClass('searchbox_focus')) {
			$('#input_search').addClass('searchbox_focus');
		}
		if ($('#input_search').val().length == 0) { 
			toggleInputSearchButton(SEARCH_BTN_NOINPUT);
		} else {
			toggleInputSearchButton(SEARCH_BTN_TYPING);
		}
	}
	
	/**
	 * 검색 텍스트 박스 옆의 버튼을 토글합니다.
	 * @param type
	 * @return
	 */
	function toggleInputSearchButton(type) {
		if (type == SEARCH_BTN_WATING) {
			$('#input_search_btn').show();
			$('#input_search_none').hide();
			$('#input_search_clear').hide();
		} else if (type == SEARCH_BTN_NOINPUT) {
			$('#input_search_btn').hide();
			$('#input_search_none').show();
			$('#input_search_clear').hide();
		} else if (type == SEARCH_BTN_TYPING) {
			$('#input_search_btn').hide();
			$('#input_search_none').hide();
			$('#input_search_clear').show();
		}
	}
	
	/**
	 * 추천검색어를 설정합니다.
	 * @return
	 */
	function setRecommendKeyword() {
		if (config.recommendKeyword.length > 0) {
			$('#input_search').val(config.recommendKeyword);
			config.isRecommendClick = true;
			if (!$('#input_search').hasClass('searchbox_focus')) {
				$('#input_search').addClass('searchbox_focus');
			}
		} else {
			$('#input_search').val('');
		}
	}

	///////////////////////////////////////////////////////
	// constructor
	///////////////////////////////////////////////////////		
	$('div.flash_layer').css('float', 'left');
	
	$('.bt_close').click(function(event) {
		$('#input_search').blur();
		unmaskPanel();
		textBoxInit();		
	});
	$('#layer_pop_brief_close').click(function(event) {
		if ($('#layer_search_wrap').css('display') == 'none') {
			unmaskPanel();
			textBoxInit();
		} else {
			$('#layer_pop_brief_1').hide();
		}
	});
	
	$('.layer_search').show();
	var beforeLeft = $('.layer_search', document).offset().left;
	$('.layer_search')
		.css({
			position: 'absolute',
			top: 0,
			zIndex: 1004
		});
	var currentLeft = $('.layer_search', document).offset().left;
	if (currentLeft - beforeLeft > 20) {
		$('.layer_search')
			.css({
				left: beforeLeft
			});
	}
	$('.layer_search').hide();
	
	$('#search_box')
		.show()
		.css({
			position: 'absolute',
			left: 25,
			top: 85,
			zIndex: 1004
		});
	
	$('#input_search')
		.val(config.recommendKeyword)
		.focus(function(event) {
			if (config.isRecommendClick) {
				$(this).val('');
				config.isRecommendClick = false;
			}
			textBoxTyping();
		})
		.blur(function(event) {
			if ($(this).val().length == 0) {
				textBoxInit();
			}
		})
		.keyup( function(event) {
			var input = $(this).val();
			if (input.length == 0) {
				unmaskPanel();
				toggleInputSearchButton(SEARCH_BTN_NOINPUT);
			} else {
				textBoxTyping();
				maskPanel();
			}
			if (config.beforeInputValue != input) {
				config.isSearchReady = true;
			}
			if (input.length >= 3) {
				if (config.beforeInputValue != input || config.isSearchReady) {
					getJSONVisualSearch(input);
				}
				config.beforeInputValue = input;
			} else {
				$('#global_layer_search').hide();
				$('.layer_search_dialog').hide();
				$('#layer_search_list').empty();
			}
		})
		.autocomplete(config.autoCompleteUrl, {
			json: true,
			nocache: true,
			queryParam: 'query',
			rootName: 'xpersearch',
			searchName: 'autokeyword',
			resultWidth: 126,
			zIndex: 1100,
			resultsClass: 'sgr_search_result',
			overClass: 'sgr_search_over',
			onKeyPressEnter: function() {
				if (config.onSearch) config.onSearch($('#input_search').val());
			},
			delay: 10,
			formatItem: function (row, i, num) {
				var keyword = $('#input_search').val().toLowerCase();
				var rowText = row[0];
				var start = rowText.toLowerCase().indexOf(keyword);
				if (start > -1) {
					var end = start + keyword.length;
					return rowText.insert(end, '</span>').insert(start,'<span class="sch_txt_global">');
				}
				return rowText;
			},
			onItemSelect: function (li) {
				if (li == null)
					return;
				var sValue = li.selectValue;
				if (sValue.length >= 3) {
					getJSONVisualSearch(sValue);
				}
				if (config.onSelectValue) config.onSelectValue(sValue);
			}
		});
	
	// 추천검색어를 초기화
	setRecommendKeyword();
	
	$('#input_search_btn')
		.click(function(event) {
			if (config.onSearch) config.onSearch($('#input_search').val());
		});
	
	$('#input_search_clear')
		.hide()
		.click(function(event) {
			$('#input_search').blur();
			unmaskPanel();
			textBoxInit();			
		});
	
	
	this.showDetailViewByIndex = function (index) {
		if (visualDataList != null) {
			showDetailView(visualDataList[index]);
		}
	}
	
	this.moveSupportPage = function (index) {
		if (visualDataList != null) {
			location.href = visualDataList[index].supporturl;
		}
	}
}

function showDetailViewByIndex(index) {
	gnbSearch.showDetailViewByIndex(index);
}

function moveSupportPage(index) {
	gnbSearch.moveSupportPage(index);
}

function overInbrief(i) {
	$('#_in_brief' + i).attr('src', '/images/common/btn/ico_brief_on.gif');
	$('#_support' + i).attr('src', '/images/common/btn/ico_support_off.gif');
}

function overSupport(i) {
	$('#_in_brief' + i).attr('src', '/images/common/btn/ico_brief_off.gif');
	$('#_support' + i).attr('src', '/images/common/btn/ico_support_on.gif');
}

function flash_goto(url, target)
{
	alert("url : " + url + "\n" + "target : " + target);
}

////////////////////////////////////////////////////////////////
// onLoad
////////////////////////////////////////////////////////////////
var gnbSearch = null; 
$(function() {	
	gnbSearch = new gnb_search({
		autoCompleteUrl: '/lamp/autoComplete.do',//'/servlet/autoComplete.do',
		visualSearchUrl: '/lamp/visualSearch.do',//'/servlet/visualSearch.do',
		recommendKeyword: window.recommendKeyword || '',
        isAsideBlock: false,
		onSelectValue: function(value) {
			// select auto_complement
		},
		onSearch: function(value) {
			if(document.getElementById("focusval").value=="Y"){
				if (value.length == 0) {
					alert('Por favor, introduzca palabras clave!');
					return;
				}
			}
			var searchQ=value;
			searchQ=searchQ.replace(new RegExp("\"", "gi"), "&#34;");  
			searchQ=searchQ.replace(new RegExp("'", "gi"), "&#39;");
			document.gSearch.query.value=searchQ;
			document.gSearch.submit();
		}
	});	
	
	if (window.isGnbInsideVisualSearch) {
		// $('#global_layer_search').css({ top:0, left: -796 });
		$('#global_layer_search').css({ top:0, left: 0 });
	}else{
		$('#global_layer_search').css({ top:0, left: 0 });
	}
		
});