﻿/* MainSearch ver 1.0 
 * @author : bluesky
 * last update: 2010.08.11
 * required jQuery 1.3
 * external parameter : service_keywords Object include service_keyword Array {name, updown, rank}
 * from service_keyword_aion_utf8.js
 * external parameter : promotionKeywords {view_type, view_content, color, target,href}
 * from promotion_keyword_aion_utf8.js
 * external parameter : live_keywords
 * (c) 2010 ncsoft Web Development 1 Team */


/*
 * 0. ncweb_search_popkwd 호출
 * 1. live_keywords 랭킹 표시
 * 2. promotionKeywords input box 표시
 */
(function($){
	var AionMainSearch = function() {
		var configSearchUrlInputBoxArea = {
			plaync : "#playncSearchUrl"
			, powerbook : "#powerbookSearchUrl"
			, qna : "#qnaSearchUrl"
			, aion : "#aionSearchUrl"
		}
		var configPopKwdJSArea = "#searchPopkwdJS";
		

		var getPromotionLinkByContent = function(keyword) {
			try {
				if (promotionKeywords && promotionKeywords.length > 0) {
					for (var i=0 ; i< promotionKeywords.length ; i++) {
						if (promotionKeywords[i].view_content == keyword) return promotionKeywords[i].href;
					}
				}
			} catch(e) {}
			return "";
		}
		return {
			config : {
				searchArea : ".search"
				, searchSelectArea : ".search .select"
				, ncwebSearchPopkwdJS : "http://static.plaync.co.kr/search/popkwd/live_keyword_aion.js"
				, searchKind : {
					plaync : {
						formArea : "#form_total"
						, searchUrl : "http://search.plaync.co.kr"
						, parameters : { site : "aion", pos : "lnb", where : "aionweb^tsearch" }
						, searchKey : "query"
						, emptyKeyword : "검색어를 입력해 주세요."
					}
					, character : {
						formArea : "#form_char"
						, searchUrl : "http://search.plaync.co.kr/aion"
						, parameters : { site : "aion", pos : "lnb", where : "aionweb^user" }
						, searchKey : "query"
						, emptyKeyword : "찾고 싶은 캐릭터 명을 입력해 주세요."
					}
					, legion : {
						formArea : "#form_default"
						, searchUrl : "http://search.plaync.co.kr/aion"
						, parameters : { site : "aion", pos : "lnb", where : "aionweb^legion" }
						, searchKey : "query"
						, emptyKeyword : "찾고 싶은 레기온 명을 입력해 주세요."
					}
					, powerbook : {
						formArea : "#form_default"
						, searchUrl : "http://power.plaync.co.kr/aion"
						, parameters : {}
						, searchKey : "kw"
						, emptyKeyword : "아이온에 대해 궁금한 단어를 입력하세요."
					}
					, qna : {
						formArea : "#form_default"
						, searchUrl : "http://qna.plaync.co.kr/aion"
						, parameters : {}
						, searchKey : "query"
						, emptyKeyword : "아이온에 대해 궁금한 단어를 입력하세요."
					}
					, aion : {
						formArea : "#form_default"
						, searchUrl : "http://search.plaync.co.kr/aion/index.jsp"
						, parameters : {}
						, searchKey : "query"
						, emptyKeyword : "검색어를 입력해 주세요."
					}
					, vendor : {
						formArea : "#form_vendor"
						, searchUrl : "/live/vendor/serverSelect"
						, parameters : {}
						, searchKey : "name"
						, emptyKeyword : "찾고 싶은 아이템 명을 입력하세요."
						, initKeyword : "아이템 이름을 입력하세요"
					}
				}
			}
			, data : {
				searchKind : ""
				, preSearchKind : ""
			}
			// 최초 호출 function
			, init : function() {
				this.initParameter();
				this.initSubmit();
				this.initInputBoxEvent();
				this.displayLiveKeyword();
			}
			//config 값을 설정함.
			, initParameter : function() {
				var searchArea = this.config.searchArea;
				for (var key in configSearchUrlInputBoxArea) {
					var value = $(searchArea).find(configSearchUrlInputBoxArea[key]).val();
					if (value) {
						this.config.searchKind[key].searchUrl = value;
					}
				}
				var jsValue = $(searchArea).find(configPopKwdJSArea).val();
				if (jsValue) this.config.ncwebSearchPopkwdJS = jsValue;
			}
			, initInputBoxEvent : function() {
				for (var key in this.config.searchKind) {
					$(this.config.searchKind[key].formArea).find("input[type=text]").live("click", function() {
						if (AionMainSearch.checkInitKeyword() || AionMainSearch.checkPromotionKeyword()) {
							$(this).val("");
						}
					});
				}
			}
			//submit 액션을 설정함
			, initSubmit : function() {
				for (var key in this.config.searchKind) {
					$(this.config.searchKind[key].formArea).find("input[type=button]").live("click", function() {
						//AionMainSearch.searchAction();	suggest로 위임
					});
				}
			}
			, displayLiveKeyword : function() {
				var cutKeyword = function(str) {
					var l = 0;
					for (var i=0; i<str.length ; i++) {
						l += (str.charCodeAt(i) > 128) ? 2 : 1;
						if (l>22) return str.substring(0, i) + "...";
					}
					return str;
				}
				
				try {
					if (live_keywords && live_keywords.count > 0) {
						for (var i=0; i < live_keywords.count; i++) {
							var rank = (live_keywords.item[i].updown != 'same' && live_keywords.item[i].updown != 'new') ? live_keywords.item[i].rank : "&nbsp;";
							$(this.config.searchArea).find("#scrollRanking").append(
								$("<li>").addClass("num"+ (i+1)).append(
									$("<a>").text(cutKeyword(live_keywords.item[i].name))
								).append(
									$("<span>").addClass(live_keywords.item[i].updown).html(rank)
								)
							)
						}
						aionRanking=new scrollFunc("scrollRanking", 20);
						addLoadEvent(showRanking);
					} else {
						$("realTime_area").hide();
					}
				} catch(e) {}
			}
			, displaySearchSelectForm : function(searchKind) {
				if (!this.checkSearchKind(searchKind) || this.data.searchKind == searchKind) return;
				var preSelectedSearchKind = this.config.searchKind[this.data.searchKind];
				this.data.preSearchKind = this.data.searchKind;
				this.data.searchKind = searchKind;
				var displayArea = "";
				
				//choice display form
				for (var key in this.config.searchKind) {
					if (searchKind == key) displayArea = $(this.config.searchKind[key].formArea);
					else $(this.config.searchKind[key].formArea).hide();
				}
				// display searchKind
				$(this.config.searchArea + " .select").find("li").each(function() {
					var area = $(this).find("a");
					if(area.attr("rel") == "aionSearchKind[" + searchKind + "]") area.addClass("on");
					else area.removeClass("on");
				});
				this.initKeyword();
				this.displayPromotionKeyword();
				displayArea.show();
			}
			, checkSearchKind : function(searchKind) {
				for (var key in this.config.searchKind) {
					if (searchKind == key) return true;
				}
				return false;
			}
			, checkInitKeyword : function() {
				var selectedSearchKind = this.config.searchKind[this.data.searchKind];
				if ($(selectedSearchKind.formArea).find("input[type=text]").val() == (selectedSearchKind.initKeyword ? selectedSearchKind.initKeyword : "")) return true;
				return false;
			}
			, checkPromotionKeyword : function(keyword) {
				if (!keyword) keyword = $(this.config.searchKind[this.data.searchKind].formArea).find("input[type=text]").val();
				
				try {
					if (promotionKeywords && promotionKeywords.length > 0) {
						for (var i=0 ; i< promotionKeywords.length ; i++) {
							if (promotionKeywords[i].view_type == "text" && promotionKeywords[i].view_content == keyword) return true;
						}
					}
				} catch(e) {}
				return false;
			}
			// searchKind가 plaync 인 경우만 설정
			, displayPromotionKeyword : function() {
				if (this.data.searchKind != "plaync") return;
				var selectedSearchKind = this.config.searchKind[this.data.searchKind];
				if ($(selectedSearchKind.formArea).find("input[type=text]").val() != "") return;
				try {
					if (promotionKeywords && promotionKeywords.length > 0) {
						var selectedIndex = Math.floor(Math.random() * promotionKeywords.length);
						var selectedKeyword = promotionKeywords[selectedIndex];
						if (selectedKeyword.view_type == "text") {
							$(selectedSearchKind.formArea).find("input[type=text]").css({color : selectedKeyword.color}).val(selectedKeyword.view_content);
						}
						/* image type은 사용하지 않기로 함.
						else if (selectedKeyword.view_type == "image") {
							$(selectedSearchKind.formArea).find("input[type=text]").css({
								backgroundRepeat : "no-repeat"
								, backgroundPosition : "center left"
								, backgroundImage : "url('" + selectedKeyword.view_content + "')"
							});
						}
						*/
					}
				} catch(e) {}
			}

			, initKeyword : function() {
				var selectedSearchKind = this.config.searchKind[this.data.searchKind];
				
				var initKeyword = "";
				if (this.data.preSearchKind != "") {
					var preSelectedSearchKind = this.config.searchKind[this.data.preSearchKind];
					var preSelectedKeyword = $(preSelectedSearchKind.formArea).find("input[type=text]").val();
					if (preSelectedKeyword != "" && preSelectedKeyword != preSelectedSearchKind.initKeyword && !this.checkPromotionKeyword(preSelectedKeyword)) {
						initKeyword = preSelectedKeyword;
					}
				}
				
				if (initKeyword == "" && selectedSearchKind.initKeyword){
					initKeyword = selectedSearchKind.initKeyword;
				}
				
				$(selectedSearchKind.formArea).find("input[type=text]")
					.css({
						color : ""
						, backgroundRepeat : ""
						, backgroundPosition : ""
						, backgroundImage : "none"
					})
					.val(initKeyword);
			}

			, searchAction : function(searchKeyword) {
				var searchKind = this.data.searchKind;
				if (!searchKind || searchKind == "") return;
				var selectedSearchKind = this.config.searchKind[searchKind];
				var tempKeyword;
				if (searchKeyword != null) {
					tempKeyword = searchKeyword;
				} else {
					tempKeyword = $(selectedSearchKind.formArea).find("input[type=text]").val();
				}
				if (!tempKeyword || tempKeyword == "" || this.checkInitKeyword()) {
					alert(selectedSearchKind.emptyKeyword);
					return;
				}
				// check promotion keyword
				var parameters = selectedSearchKind.parameters;
				
				if(this.checkPromotionKeyword(tempKeyword)) {
					var promotionLink = getPromotionLinkByContent(tempKeyword);
					if (promotionLink != "") location.href = promotionLink;
				} else {
					parameters[selectedSearchKind.searchKey] = tempKeyword;
					location.href = selectedSearchKind.searchUrl + "?" + $.param(parameters);
				}
			}
		}
	}();
	
	
	function aionSearchKindLink(actionArray, event) {
		AionMainSearch.displaySearchSelectForm(actionArray[0]);
	}
	$.link("aionSearchKind", aionSearchKindLink);
	
	$.aionMainSearchAction = function() {
		AionMainSearch.searchAction();
	}
	/* (s) onload event listener */
	$(document).ready(function() {
		AionMainSearch.init();
		AionMainSearch.displaySearchSelectForm("plaync");
	});
	/* (e) onload event listener */
})(jQuery);
