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();
}
}
}