var suggest = { arrOptions : [], strLastValue : "", bMadeRequest : false, theTextBox : {}, objLastActive : {}, currentValueSelected : -1, bNoResults : false, isTiming : true, isOpera : (navigator.userAgent.toLowerCase().indexOf("opera")!= -1), countForId : 0, undeStart : "", undeEnd : "", selectSpanStart : "", SetProperties : function (xElem,xHidden,xserverCode, xignoreCase,xmatchAnywhere,xmatchTextBoxWidth, xshowNoMatchMessage,xnoMatchingDataMessage,xuseTimeout, xtheVisibleTime) { var props={ elem: xElem, hidden: xHidden, serverCode: xserverCode, regExFlags: ( (xignoreCase) ? "i" : "" ), regExAny: ( (xmatchAnywhere) ? "" : "^" ), matchAnywhere: xmatchAnywhere, matchTextBoxWidth: xmatchTextBoxWidth, theVisibleTime: xtheVisibleTime, showNoMatchMessage: xshowNoMatchMessage, noMatchingDataMessage: xnoMatchingDataMessage, useTimeout: xuseTimeout }; suggest.AddHandler(xElem); return props; }, AddHandler : function (objText){ objText.onkeyup = suggest.GiveOptions; objText.onblur = function(){ // window.alert(this.obj.theVisibleTime); // window.alert(this.obj.useTimeout); // if(this.obj.useTimeout) suggest.StartTimeout(); // suggest.HideTheBox(); // suggest.StartTimeout(); } if(suggest.isOpera) objText.onkeypress = suggest.GiveOptions; }, GiveOptions : function (e){ var intKey = -1; if(window.event){ intKey = event.keyCode; suggest.theTextBox = event.srcElement; } else{ intKey = e.which; suggest.theTextBox = e.target; } if(suggest.theTextBox.obj.useTimeout){ if(suggest.isTiming) suggest.EraseTimeout(); suggest.StartTimeout(); } if(suggest.theTextBox.value.length == 0 && !suggest.isOpera){ suggest.arrOptions = new Array(); suggest.HideTheBox(); suggest.strLastValue = ""; return false; } if(suggest.objLastActive == suggest.theTextBox){ if(intKey == 13){ suggest.GrabHighlighted(); suggest.theTextBox.focus(); return false; } else if(intKey == 38){ suggest.MoveHighlight(-1); return false; } else if(intKey == 40){ suggest.MoveHighlight(1); return false; } else{} } /// if(suggest.objLastActive != suggest.theTextBox || suggest.theTextBox.value.indexOf(suggest.strLastValue) != 0 || ((suggest.arrOptions.length==0 || suggest.arrOptions.length==15 ) && !suggest.bNoResults) || (suggest.theTextBox.value.length <= suggest.strLastValue.length)){ // window.alert("suggest.objLastActive : " + suggest.objLastActive); // window.alert("suggest.theTextBox.value.length : " + suggest.theTextBox.value.length); // window.alert("suggest.strLastValue.length : " + suggest.strLastValue.length); // if(((suggest.arrOptions.length==0 || suggest.arrOptions.length==15 ) && !suggest.bNoResults) || (suggest.theTextBox.value.length <= suggest.strLastValue.length)){ suggest.objLastActive = suggest.theTextBox; suggest.bMadeRequest = true; suggest.TypeAhead(suggest.theTextBox.value); // } // else if(!suggest.bMadeRequest){ // suggest.BuildList(suggest.theTextBox.value); // } suggest.strLastValue = suggest.theTextBox.value; }, TypeAhead : function (xStrText) { if (xStrText.length < 2) return; new Ajax.Request(suggest.theTextBox.obj.serverCode, { parameters: {'tag_search' : xStrText, 'where' : suggest.theTextBox.obj.matchAnywhere}, onSuccess: function (xmlHttp) { // window.alert(''); var strText = xmlHttp.responseText; eval(strText); suggest.BuildList(suggest.strLastValue); suggest.bMadeRequest = false; } }); }, BuildList : function (theText){ suggest.SetElementPosition(suggest.theTextBox); var theMatches = suggest.MakeMatches(theText); theMatches = theMatches.join().replace(/\,/gi,""); if (theMatches.length > 0) { try { document.getElementById("spanOutput").innerHTML = theMatches; document.getElementById("OptionsList_0").className = "spanHighElement"; suggest.currentValueSelected = -1; suggest.bNoResults = false; } catch (e) {} } else { suggest.currentValueSelected = -1; suggest.bNoResults = true; suggest.HideTheBox(); // if (suggest.theTextBox.obj.showNoMatchMessage) document.getElementById("spanOutput").innerHTML = "" + suggest.theTextBox.obj .noMatchingDataMessage + ""; // else suggest.HideTheBox(); } }, SetElementPosition : function (theTextBoxInt) { var selectedPosX = 0; var selectedPosY = 0; var theElement = theTextBoxInt; if (!theElement) return; var theElemHeight = theElement.offsetHeight; var theElemWidth = theElement.offsetWidth; while (theElement != null) { selectedPosX += theElement.offsetLeft; selectedPosY += theElement.offsetTop; theElement = theElement.offsetParent; } xPosElement = document.getElementById("spanOutput"); xPosElement.style.left = selectedPosX; if (theTextBoxInt.obj.matchTextBoxWidth) { xPosElement.style.width = theElemWidth; xPosElement.style.top = selectedPosY + theElemHeight xPosElement.style.display = "block"; if(theTextBoxInt.obj.useTimeout){ xPosElement.onmouseout = suggest.StartTimeout; xPosElement.onmouseover = suggest.EraseTimeout; } } else { xPosElement.onmouseout = null; xPosElement.onmouseover = null; } }, MakeMatches : function (xCompareStr) { suggest.countForId = 0; var matchArray = new Array(); var regExp = new RegExp(suggest.theTextBox.obj.regExAny + xCompareStr,suggest.theTextBox.obj.regExFlags); for(i=0;i 0) { matchArray[matchArray.length]= "´Ý±â"; } return matchArray; }, CreateUnderline : function (xStr, xTextMatch, xVal) { var selectSpanMid = "onclick='suggest.SetText(" + xVal + ")'" + "id='OptionsList_" + suggest.countForId + "' theArrayNumber='"+ xVal +"'>"; var regExp = new RegExp(suggest.theTextBox.obj.regExAny + xTextMatch,suggest.theTextBox.obj.regExFlags); var aStart = xStr.search(regExp); var matchedText = xStr.substring(aStart, aStart + xTextMatch.length); suggest.countForId++; return suggest.selectSpanStart + selectSpanMid + xStr.replace(regExp,suggest.undeStart + matchedText + suggest.undeEnd) + suggest.selectSpanEnd; }, MoveHighlight : function (xDir) { if (suggest.currentValueSelected >= 0){ newValue = parseInt(suggest.currentValueSelected) + parseInt(xDir); if(newValue > -1 && newValue < suggest.countForId){ suggest.currentValueSelected = newValue; suggest.SetHighColor (null); } } }, SetHighColor : function (theTextBox) { if(theTextBox){ suggest.currentValueSelected = theTextBox.id.slice(theTextBox.id.indexOf("_")+1, theTextBox.id.length); } for(i = 0; i < suggest.countForId; i++){ document.getElementById('OptionsList_' + i).className = 'spanNormalElement'; } document.getElementById('OptionsList_' + suggest.currentValueSelected).className = 'spanHighElement'; }, SetText : function (xVal) { suggest.theTextBox.value = suggest.arrOptions[xVal][0]; //set text value suggest.theTextBox.obj.hidden.value = suggest.arrOptions[xVal][1]; document.getElementById("spanOutput").style.display = "none"; suggest.currentValueSelected = -1; //remove the selected index // suggest.setTag(suggest.arrOptions[xVal][0]); }, GrabHighlighted : function () { if(suggest.currentValueSelected >= 0){ xVal = document.getElementById("OptionsList_" + suggest.currentValueSelected).getAttribute("theArrayNumber"); suggest.SetText(xVal); suggest.HideTheBox(); } }, HideTheBox : function (){ document.getElementById("spanOutput").style.display = "none"; suggest.currentValueSelected = -1; suggest.EraseTimeout(); }, EraseTimeout : function() { clearTimeout(suggest.isTiming); suggest.isTiming = false; }, StartTimeout : function() { suggest.isTiming = setTimeout("suggest.HideTheBox()", suggest.theTextBox.obj.theVisibleTime); }, setTag : function (selectedStandard) { var inserted = false; for (i=1; i<=5; i++) { var objid = "tag" + i; var tag_id = document.getElementById(objid); if (tag_id.value && tag_id.value == selectedStandard) { window.alert("ÅÂ±× \'" + selectedStandard + "\'´Â ÀÌ¹Ì ÀԷµǾî ÀÖ½À´Ï´Ù."); return; } } for (i=1; i<=5; i++) { var objid = "tag" + i; var tag_id = document.getElementById(objid); if (!tag_id.value) { tag_id.value = selectedStandard; inserted = true; break; } } if (!inserted) { window.alert('5°³ÀÇ Å±װ¡ ¸ðµÎ ÀԷµǾî ÀÖ½À´Ï´Ù.'); } else { suggest.theTextBox.value = ''; suggest.theTextBox.focus(); } } }