function autoCompleteDB()
 {
    this.aNames=new Array();
 }
 
 autoCompleteDB.prototype.assignArray=function(aList)
 {
    this.aNames=aList;
 };
 
 autoCompleteDB.prototype.getMatches=function(str,aList,maxSize)
 {
    /* debug */ //alert(maxSize+"ok getmatches");
    var ctr=0;
    for(var i in this.aNames)
    {
         if(this.aNames[i].toLowerCase().indexOf(str.toLowerCase())==0) /*looking for case insensitive matches */
       {
          aList.push(this.aNames[i]);
          ctr++;
       }
       if(ctr==(maxSize-1)) /* counter to limit no of matches to maxSize */
          break;
    }
 };
 
 function autoComplete(aNames,oText,oDiv,maxSize)
 {
 
    this.oText=oText;
    this.oDiv=oDiv;
    this.maxSize=maxSize;
    this.cur=-1;
 
    
    /*debug here */
    //alert(oText+","+this.oDiv);
    
    this.db=new autoCompleteDB();
    this.db.assignArray(aNames);
    
    oText.onkeyup=this.keyUp;
    oText.onkeydown=this.keyDown;
    oText.autoComplete=this;
    oText.onblur=this.hideSuggest;
 }
 
 autoComplete.prototype.hideSuggest=function()
 {
    this.autoComplete.oDiv.style.visibility="hidden";
 };
 
 autoComplete.prototype.selectText=function(iStart,iEnd)
 {
    if(this.oText.createTextRange) /* For IE */
    {
       var oRange=this.oText.createTextRange();
       oRange.moveStart("character",iStart);
       oRange.moveEnd("character",iEnd-this.oText.value.length);
       oRange.select();
    }
    else if(this.oText.setSelectionRange) /* For Mozilla */
    {
       this.oText.setSelectionRange(iStart,iEnd);
    }
    this.oText.focus();
 };
 
 autoComplete.prototype.textComplete=function(sFirstMatch)
 {
    if(this.oText.createTextRange || this.oText.setSelectionRange)
    {
       var iStart=this.oText.value.length;
       this.oText.value=sFirstMatch;
       this.selectText(iStart,sFirstMatch.length);
    }
 };
 
 autoComplete.prototype.keyDown=function(oEvent)
 {
    oEvent=window.event || oEvent;
    iKeyCode=oEvent.keyCode;
 
    switch(iKeyCode)
    {
       case 38: //up arrow
          this.autoComplete.moveUp();
          break;
       case 40: //down arrow
          this.autoComplete.moveDown();
          break;
       case 13: //return key
          window.focus();
          break;
    }
 };
 
 autoComplete.prototype.moveDown=function()
 {
    if(this.oDiv.childNodes.length>0 && this.cur<(this.oDiv.childNodes.length-1))
    {
       ++this.cur;
       for(var i=0;i<this.oDiv.childNodes.length;i++)
       {
          if(i==this.cur)
          {
             this.oDiv.childNodes[i].className="over";
             this.oText.value=this.oDiv.childNodes[i].innerHTML;
          }
          else
          {
             this.oDiv.childNodes[i].className="";
          }
       }
    }
 };
 
 autoComplete.prototype.moveUp=function()
 {
    if(this.oDiv.childNodes.length>0 && this.cur>0)
    {
       --this.cur;
       for(var i=0;i<this.oDiv.childNodes.length;i++)
       {
          if(i==this.cur)
          {
             this.oDiv.childNodes[i].className="over";
             this.oText.value=this.oDiv.childNodes[i].innerHTML;
          }
          else
          {
             this.oDiv.childNodes[i].className="";
          }
       }
    }
 };
 
 autoComplete.prototype.keyUp=function(oEvent)
 {
    oEvent=oEvent || window.event;
    var iKeyCode=oEvent.keyCode;
    if(iKeyCode==8 || iKeyCode==46)
    {
       this.autoComplete.onTextChange(false); /* without autocomplete */
    }
 else if (iKeyCode < 32 || (iKeyCode >= 33 && iKeyCode <= 46) || (iKeyCode >= 112 && iKeyCode <= 123))
    {
       //ignore
    }
    else
    {
       this.autoComplete.onTextChange(true); /* with autocomplete */
    }
 };
 
 autoComplete.prototype.positionSuggest=function() /* to calculate the appropriate poistion of the dropdown */
 {
    var oNode=this.oText;
    var x=0,y=oNode.offsetHeight;
 
    while(oNode.offsetParent && oNode.offsetParent.tagName.toUpperCase() != 'BODY')
    {
       x+=oNode.offsetLeft;
       y+=oNode.offsetTop;
       oNode=oNode.offsetParent;
    }
 
    x+=oNode.offsetLeft;
    y+=oNode.offsetTop;
 
    this.oDiv.style.top=y+"px";
    this.oDiv.style.left=x+"px";
 }
 
 autoComplete.prototype.onTextChange=function(bTextComplete)
 {
    var txt=this.oText.value;
    var oThis=this;
    this.cur=-1;
    
    if(txt.length>0)
    {
       while(this.oDiv.hasChildNodes())
          this.oDiv.removeChild(this.oDiv.firstChild);
       
       var aStr=new Array();
       this.db.getMatches(txt,aStr,this.maxSize);
       if(!aStr.length) {this.hideSuggest ;return}
       if(bTextComplete) this.textComplete(aStr[0]);
       this.positionSuggest();
       
       for(i in aStr)
       {
          var oNew=document.createElement('div');
          this.oDiv.appendChild(oNew);
          oNew.onmouseover=
          oNew.onmouseout=
          oNew.onmousedown=function(oEvent)
          {
             oEvent=window.event || oEvent;
             oSrcDiv=oEvent.target || oEvent.srcElement;
 
             //debug :window.status=oEvent.type;
             if(oEvent.type=="mousedown")
             {
                oThis.oText.value=this.innerHTML;
             }
             else if(oEvent.type=="mouseover")
             {
                this.className="over";
             }
             else if(oEvent.type=="mouseout")
             {
                this.className="";
             }
             else
             {
                this.oText.focus();
             }
          };
          oNew.innerHTML=aStr[i];
       }
       
       this.oDiv.style.visibility="visible";
    }
    else
    {
       this.oDiv.innerHTML="";
       this.oDiv.style.visibility="hidden";
    }
 };
 
 function createAutoComplete()
 {
 var aNames =
    [
    "Ansal Plaza",
"Arawali Hills",
"Ardee City",
"Central Park - 1",
"Central Park - 2",
"DLF Mall",
"DLF City Phase-I",
"DLF City Phase-II",
"DLF City Phase-III",
"DLF City Phase-IV",
"DLF City Phase-V",
"Electronic City",
"Golf Cource Road",
"Greenwood City-45",
"Greenwood City-46",
"Gurgaon Faridabad Road",
"Haritage City",
"IMT Manesar",
"M. G. Road",
"Malibu Town",
"Mayfield Garden-47",
"Mayfield Garden-50",
"Mayfield Garden-51",
"Mayfield Garden-57",
"NH-8",
"Nirvana Country",
"Omaxe Plaza",
"Orchid Petals",
"Pace City - 1",
"Pace City - 2",
"Palam Vihar",
"Rail Vihar-15",
"Rail Vihar-47",
"Rail Vihar-57",
"Rosewood City",
"Saraswati Vihar",
"Sun City",
"Sushant Lok-1",
"Sushant Lok-2",
"Sushant Lok-3",
"Sushant Lok-4",
"South City-1",
"South City-2",
"Southend Floors",
"Sector-1",
"Sector-2",
"Sector-3",
"Sector-4",
"Sector-5",
"Sector-6",
"Sector-7",
"Sector-8",
"Sector-9",
"Sector-10",
"Sector-11",
"Sector-12",
"Sector-13",
"Sector-14",
"Sector-15",
"Sector-16",
"Sector-17",
"Sector-18",
"Sector-19",
"Sector-20",
"Sector-21",
"Sector-22",
"Sector-23",
"Sector-24",
"Sector-25",
"Sector-26",
"Sector-27",
"Sector-28",
"Sector-29",
"Sector-30",
"Sector-31",
"Sector-32",
"Sector-33",
"Sector-34",
"Sector-35",
"Sector-36",
"Sector-37",
"Sector-38",
"Sector-39",
"Sector-40",
"Sector-41",
"Sector-42",
"Sector-43",
"Sector-44",
"Sector-45",
"Sector-46",
"Sector-47",
"Sector-48",
"Sector-49",
"Sector-50",
"Sector-51",
"Sector-52",
"Sector-53",
"Sector-54",
"Sector-55",
"Sector-56",
"Sector-57",
"Sector-58",
"Sector-59",
"Sector-50",
"Sector-51",
"Sector-52",
"Sector-53",
"Sector-54",
"Sector-55",
"Sector-56",
"Sector-57",
"Sector-58",
"Sector-59",
"Sector-60",
"Sector-61",
"Sector-62",
"Sector-63",
"Sector-64",
"Sector-65",
"Sector-66",
"Sector-67",
"Sector-68",
"Sector-69",
"Sector-70",
"Sector-71",
"Sector-72",
"Sector-73",
"Sector-74",
"Sector-75",
"Sector-76",
"Sector-77",
"Sector-78",
"Sector-79",
"Sector-80",
"Sector-81",
"Sector-82",
"Sector-83",
"Sector-84",
"Sector-85",
"Sector-86",
"Sector-87",
"Sector-88",
"Sector-89",
"Sector-90",
"Sector-91",
"Sector-92",
"Sector-93",
"Sector-94",
"Sector-95",
"Sector-96",
"Sector-97",
"Sector-98",
"Sector-99",
"Sector-100",
"Sector-101",
"Sector-102",
"Sector-103",
"Sector-104",
"Sector-105",
"Sector-106",
"Sector-107",
"Sector-108",
"Sector-109",
"Sector-110",
"Sector-111",
"Sector-112",
"Sector-113",
"Sector-114",
"Sector-115",
"Udyog Vihar",
"Uppal's Southend",
"Vatika City",
"Vipul World",
"Woodstock-49",
"Woodstock-50",

    ];
 
 new autoComplete(aNames,document.getElementById('txt'),document.getElementById('suggest'),25);
 }
