var AutoComplete=Class.create();AutoComplete.prototype={INDIVIDUAL_LOOKUP_ERROR_NO_ERROR:0,INDIVIDUAL_LOOKUP_ERROR_BAD_REQUEST:100,INDIVIDUAL_LOOKUP_ERROR_DATABASE_ERROR:101,INDIVIDUAL_LOOKUP_ERROR_TOO_MANY_INDIVIDUALS:102,DROPDOWN_TYPE_ERROR:0,DROPDOWN_TYPE_SEARCHING:1,DROPDOWN_TYPE_SELECTION:2,EXPANDED:false,REQUESTING:false,initialize:function(a,c,b){this.siteID=a;this.id=c;this.fld=$(c);this.pathToScript="/FP/API/individual-lookup.php";this.searchStr="";this.requestStr="";this.responseError=false;this.responseErrorCode=this.INDIVIDUAL_LOOKUP_ERROR_NO_ERROR;this.selectedIndividualObj=null;this.dropdown=$(b);this.curSel=-1;this.numRowsForScroll=DEFAULT_SCROLL_ROWS;this.setEvents();this.ie=!!(window.attachEvent&&!window.opera);this.ie6=(navigator.userAgent.toLowerCase().indexOf("msie 6.")!=-1);this.isHideComboBoxesEnabled=true},fetchInitialIndividualSearch:function(){if(this.fld.value.length>=2){this.sendSearchRequest(this.fld.value.substr(0,2),this.onInitialFetchResponse)}},setEvents:function(){this.fld.onkeydown=this.onKeyDown.bindAsEventListener(this);this.fld.onkeyup=this.onKeyUp.bindAsEventListener(this);this.fld.onchange=this.onChange.bindAsEventListener(this);this.fld.observe("focus",this.onFocus.bind(this));Event.observe(document.body,"click",this.onBlur.bind(this))},onChange:function(){if(this.selectedIndividualObj!=null&&this.fld.value!=this.selectedIndividualObj.name){this.selectedIndividualObj=null}},onFocus:function(){this.getString(this.fld.value)},setNumRowsForScroll:function(a){this.numRowsForScroll=a},_onSelected:function(a){a.object.name=a.object.name.stripTags();this.fld.value=a.object.name;this.selectedIndividualObj=a.object;this.hideError();if(this.onSelect){this.onSelect(a.object,this.id)}},clearSelectedIndividual:function(){this.selectedIndividualObj=null},getSelectedIndividual:function(){return this.selectedIndividualObj},setRootIndividual:function(a){this.fld.value=this.currentUserIndividualObj.name;this.fld.className=a;this.selectedIndividualObj=this.currentUserIndividualObj;this.fetchInitialIndividualSearch();this.hideError();if(this.onPickMe){this.onPickMe(this.id,this.selectedIndividualObj)}},onKeyDown:function(b){if(!b){b=window.event}var a=b.keyCode?b.keyCode:b.charCode;switch(a){case Event.KEY_RETURN:if(this.isListCollapsed()){if(this.onApply){this.onApply(b,this.id)}}else{if(this.curSel!=-1){this._onSelected(this.dropdown.childNodes[this.curSel]);this.closeDropdown()}}break;case Event.KEY_ESC:if(this.isListCollapsed()){if(this.onCancel){this.onCancel(b,this.id)}}else{this.closeDropdown()}Event.stop(b);break;case Event.KEY_UP:if(this.dropdownType==this.DROPDOWN_TYPE_SELECTION){this.moveSelectionUp(this.dropdown.childNodes);this.doScroll(this.dropdown.childNodes)}Event.stop(b);break;case Event.KEY_DOWN:if(this.dropdownType==this.DROPDOWN_TYPE_SELECTION){this.moveSelectionDown(this.dropdown.childNodes);this.doScroll(this.dropdown.childNodes)}Event.stop(b);break;case Event.KEY_END:if(this.dropdownType==this.DROPDOWN_TYPE_SELECTION){this.moveSelectionEnd(this.dropdown.childNodes);this.doScroll(this.dropdown.childNodes)}break;case Event.KEY_HOME:if(this.dropdownType==this.DROPDOWN_TYPE_SELECTION){this.moveSelectionHome(this.dropdown.childNodes);this.doScroll(this.dropdown.childNodes)}break;default:if(this.onChange){this.onChange(a,this.id)}this.curSel=-1;break}},onKeyPress:function(a){},moveSelectionDown:function(a){if(this.dropdown.style.display!="none"){if(this.curSel!=-1&&this.curSel!=a.length-1){a[this.curSel].className="drop-item"}if(this.curSel==a.length-1){return}else{this.curSel++;a[this.curSel].className+=" sel"}}},moveSelectionUp:function(a){if(this.dropdown.style.display!="none"){if(this.curSel!=-1&&this.curSel!=0){a[this.curSel].className="drop-item"}if(this.curSel==-1){return}if(this.curSel==0){return}else{this.curSel--;a[this.curSel].className+=" sel"}}},moveSelectionHome:function(a){this.moveSelection(a,0)},moveSelectionEnd:function(a){this.moveSelection(a,a.length-1)},moveSelection:function(b,a){if(this.dropdown.style.display!="none"){if(this.curSel!=-1){b[this.curSel].className="drop-item"}b[a].className+=" sel";this.curSel=a}},doScroll:function(c){var a=(this.ie?this.curSel:0);if(c.length>this.numRowsForScroll){var b=Math.min(this.minRowHeight,this.maxRowHeight);this.dropdown.scrollTop=this.curSel*b+a}},onBlur:function(a){if(typeof a!="undefined"){if($(Event.element(a)).readAttribute("isIndividualsCombo")){return}}this.closeDropdown()},doSearch:function(b){if(!b){b=window.event}var a=b.keyCode||b.wich;switch(a){case Event.KEY_ESC:case Event.KEY_UP:case Event.KEY_DOWN:case Event.KEY_END:case Event.KEY_HOME:case Event.KEY_RETURN:return false;break}return true},onKeyUp:function(a){if(this.doSearch(a)){this.getString(this.fld.value)}if(this.onAfterChange){this.onAfterChange(this.id)}},getString:function(c){switch(c.length){case 0:this.closeDropdown();break;case 1:this.closeDropdown();break;case 2:this.searchStr=c;if(this.REQUESTING==false){if(c!=this.requestStr.substr(0,2)||(this.responseError&&c!=this.requestStr&&this.requestStr.indexOf(c)<0)){this.requestStr=c;this.searchStr=c;this.sendSearchRequest(this.requestStr,this.onResponse)}else{if(c.length<this.requestStr.length){this.closeDropdown()}else{if(this.responseError){this.paintError()}else{this.collapseList(this.paint(this.searchLocal(c)))}}}}break;default:this.searchStr=c;if(this.REQUESTING==false){var a=Math.min(c.length,this.requestStr.length);var b=c.toLowerCase();var d=this.requestStr.toLowerCase();if(this.requestStr.length==0||b.substr(0,a)!=d.substr(0,a)||(this.responseError&&b!=d&&d.indexOf(b)<0)||this.requestStr==""){this.requestStr=c;this.sendSearchRequest(this.requestStr,this.onResponse)}else{if(this.searchStr.length<this.requestStr.length){this.closeDropdown()}else{if(this.responseError){this.paintError()}else{this.collapseList(this.paint(this.searchLocal(this.searchStr)))}}}}break}},searchLocal:function(d){var e=new Array();var c=new Array();var b=new Array();if(this.json){if(this.onServerResponse){this.onServerResponse(this.json,this.id)}this.json.each(function(h){h.name=h.name.replace(/<b>/g,"");h.name=h.name.replace(/<\/b>/g,"");var f=h.name.toLowerCase().indexOf(d.toLowerCase());if(f==0){e.push(h)}if(f!=-1&&f!=0){b=this.getLastName(h);for(var g=1;g<b.length;g++){if(b[g].toLowerCase().indexOf(d.toLowerCase())==0){c.push(h);break}}}}.bind(this))}var a=e.concat(c);return a},boldMatched:function(a,e){var d=this.getRightString(e);var b=new RegExp(d.replace(/[.*+?^${}()|[\]\/\\]/g,"\\$0"),"ig");for(var c=0;c<a.length;c++){a[c].name=a[c].name.replace(b,"<b>"+d+"</b>")}return a},getRightString:function(d){var b=d.split(" ");var a=new String();for(var c=0;c<b.length;c++){if(c!=0){a+=" "}a+=b[c].toLowerCase().capitalize()}return a},getLastName:function(c){var a=new Array();a=c.name.split(" ");if(c.gender.toLowerCase()=="f"){var b=a[a.length-1];if(b.charAt(0)=="("&&b.charAt(b.length-1)==")"){a[a.length-1]=b.substr(1,b.length-2)}}return a},setErrorMessage:function(){this.errorMessage=$(this.errorMessageId)},showError:function(){if(this.errorMessageId!=""&&this.errorMessage==null){this.setErrorMessage()}if(this.errorMessage!=null){this.errorMessage.style.display="block";this.errorMessage.style.visibility="visible"}},hideError:function(){if(this.errorMessageId!=""&&this.errorMessage==null){this.setErrorMessage()}if(this.errorMessage!=null){this.errorMessage.style.display="none";this.errorMessage.style.visibility="hidden"}},setIsHideComboBoxesEnabled:function(a){this.isHideComboBoxesEnabled=a},sendSearchRequest:function(c,d){this.paintSearching();var b="siteID="+this.siteID+"&query="+encodeURIComponent(c)+"&thumbnailType=2";b+="&displayLang="+LANG;var a=new Array();if(this.shouldFilterDeceased){a[a.length]=FILTER_DECEASED_PEOPLE}if(this.shouldFilterLiving){a[a.length]=FILTER_LIVING_PEOPLE}if(this.shouldFilterTagshotIndividuals){a[a.length]=FILTER_TAGSHOT_FAMILY_TREES}if(this.shouldFilterMales){a[a.length]=FILTER_GENDER_MALE}if(this.shouldFilterFemales){a[a.length]=FILTER_GENDER_FEMALE}if(a.length>0){b+="&filter="+a.join(",")}if(this.familyTreeID!=null){b+="&familyTreeID="+this.familyTreeID}if(this.shouldRespectPrivacyLevel){b+="&rpl=1"}this.REQUESTING=true;new Ajax.Request(this.pathToScript,{method:"get",parameters:b,onSuccess:d.bindAsEventListener(this),onFailure:this.OnRequestFailure.bindAsEventListener(this)})},parseResponseXml:function(b){try{this.json=new Array();if(b.responseXML.documentElement!=null){if(b.responseXML.documentElement.tagName=="error"){this.responseError=true;this.responseErrorCode=b.responseXML.documentElement.getAttribute("code")}else{this.responseError=false;this.responseErrorCode=this.INDIVIDUAL_LOOKUP_ERROR_NO_ERROR}this.numOfTreesInSite=1;if(b.responseXML.documentElement.tagName=="individuals"){this.numOfTreesInSite=parseInt(b.responseXML.documentElement.getAttribute("numOfFamilyTresInSite"),10);if(isNaN(this.numOfTreesInSite)||this.numOfTreesInSite<0){this.numOfTreesInSite=1}}if(!this.responseError){var e=b.responseXML.documentElement.getElementsByTagName("individual");if(e!=null){var d,a=e.length,f;for(d=0;d<a;d++){f=e[d];this.json[d]={id:f.getAttribute("id"),birthDate:f.getAttribute("birthDate"),deathDate:f.getAttribute("deathDate"),gender:f.getAttribute("gender"),isAlive:(f.getAttribute("isAlive").toLowerCase()=="yes"?true:false),familyTreeTitle:f.getAttribute("familyTreeTitle"),name:this.safeGetNodeValue(f.getElementsByTagName("fullName")[0].firstChild),firstName:this.safeGetNodeValue(f.getElementsByTagName("firstName")[0].firstChild),path:this.safeGetNodeValue(f.getElementsByTagName("image")[0].firstChild),relationship:this.safeGetNodeValue(f.getElementsByTagName("relationship")[0].firstChild)}}}}}if(this.onServerResponse){this.onServerResponse(this.json,this.id)}}catch(c){alert(c)}},onInitialFetchResponse:function(a){this.REQUESTING=false;this.parseResponseXml(a);if(this.responseErrorCode==this.INDIVIDUAL_LOOKUP_ERROR_TOO_MANY_INDIVIDUALS&&this.requestStr!=this.fld.value){this.requestStr=this.fld.value;this.searchStr=this.fld.value;this.sendSearchRequest(this.fld.value.substr(0,this.requestStr.length+1),this.onInitialFetchResponse);return}this.closeDropdown()},onResponse:function(a){this.REQUESTING=false;this.parseResponseXml(a);if(this.responseError){if(this.responseErrorCode==this.INDIVIDUAL_LOOKUP_ERROR_TOO_MANY_INDIVIDUALS&&this.requestStr!=this.fld.value){this.requestStr=this.fld.value;this.searchStr=this.fld.value;this.sendSearchRequest(this.requestStr,this.onResponse);return}this.paintError();return}try{var c=this.json;if(this.searchStr.length!=2){c=this.searchLocal(this.searchStr)}this.collapseList(this.paint(c));this.bindEventsToDropdownListElements(this.dropdown)}catch(b){alert(b)}},safeGetNodeValue:function(a){if(a!=null){return a.nodeValue}else{return""}},OnRequestFailure:function(a){this.REQUESTING=false;this.closeDropdown()},bindEventsToDropdownListElements:function(a){a.onmouseover=this.onmouseover.bindAsEventListener(this);a.onclick=this.onclick.bindAsEventListener(this)},getProperSelectedItem:function(d){if(d.hasClassName("drop-item")){return d}var c=d.ancestors();var b,a=c.length;for(b=0;b<a;b++){if(c[b].hasClassName("drop-item")){return c[b]}}return null},onclick:function(b){var c=Event.element(b);var a=this.getProperSelectedItem(c);if(a){Event.stop(b);this.closeDropdown();this._onSelected(a)}},onmouseover:function(a){var c=Event.element(a);var b=this.getProperSelectedItem(c);if(b){if(b!=this.curCelebItem){if((this.curSel!=-1)&&$(this.celebArray[this.curSel].id)){Element.removeClassName($(this.celebArray[this.curSel].id),"sel")}this.curCelebItem=b;Element.addClassName(this.curCelebItem,"sel");this.getCurSel()}}},getCurSel:function(){if(this.curCelebItem){for(var a=0;a<this.celebArray.length;a++){if(this.celebArray[a].id==this.curCelebItem.id){this.curSel=a}}}else{this.curSel=-1}},createDiv:function(o){var c=new Element("div",{"class":"drop-item"});var p=document.createElement("table");p.width="100%";var f=document.createElement("tbody");var k=document.createElement("tr");var h=new Element("td");var d=document.createElement("td");k.appendChild(h);k.setAttribute("height","44");k.appendChild(d);f.appendChild(k);p.appendChild(f);var g=document.createElement("img");g.style.verticalAlign="middle";g.src=LOADING_ANIMATION_GIF;h.appendChild(g);var j=this;var l=function(){g.onload=null;$(g).hide();if(o.path==""){var s=new Element("span");s.style.verticalAlign="middle";h.appendChild(s);s.innerHTML=(o.isAlive?UNKNOWN_SILHOUETTE:UNKNOWN_SILHOUETTE_DECEASED);if(o.gender=="M"){s.innerHTML=(o.isAlive?MALE_SILHOUETTE:MALE_SILHOUETTE_DECEASED)}if(o.gender=="F"){s.innerHTML=(o.isAlive?FEMALE_SILHOUETTE:FEMALE_SILHOUETTE_DECEASED)}}else{var s=new Element("img");s.className="autocomplete-image";s.style.verticalAlign="middle";s.src=o.path;if(o.isAlive){h.appendChild(s)}else{var t=new Element("div");t.style.position="relative";var r=new Element("div");r.innerHTML=DECEASD_RIBBON;r.appendChild(s);t.appendChild(r);h.appendChild(t)}}};if((Prototype.Browser.IE||Prototype.Browser.Opera)&&g.complete){l()}else{g.onload=l}h.setAttribute("width","40");h.setAttribute("valign","top");h.setStyle({paddingTop:"2px"});var i=new Element("div",{"class":"autocomplete-name"});var n=0;var b=0;o.displayName=o.name;n++;if(o.birthDate!=""||(!o.isAlive&&o.deathDate!="")){var m="";var q="?";var e="?";if(o.birthDate!=""&&o.birthDate.length==9){q=o.birthDate.substr(0,4)}if(!o.isAlive&&o.deathDate!=""&&o.deathDate.length==9){e=o.deathDate.substr(0,4)}m+=q;if(!o.isAlive){m+=" - "+e}o.displayName+="<br><span class='FL_LabelDimmedSmall'>"+m+"</span>";n++}if(o.relationship!=""){o.displayName+="<br><span class='FL_LabelDimmedSmall'>"+o.relationship+"</span>";n++}if(o.familyTreeTitle!=""){if(o.familyTreeTitle=="Tagshot"){o.displayName+="<br><span class='ReducedSizeTextGreyLabel'>"+INDIVIDUAL_LOOKUP_NOT_IN_TREE_TEXT+"</span>";n++}else{if(this.numOfTreesInSite>1&&this.familyTreeID==null){o.displayName+="<br>"+FAMILY_TREE_ICON+"<span class='ReducedSizeTextGreyLabel'>"+o.familyTreeTitle+"</span>";b++}}}if(this.onBeforeShowItem){this.onBeforeShowItem(o,this.id)}var a=n*15+b*16+7;a=Math.max(a,53);if(a>53&&this.ie){c.setStyle({height:"auto"})}this.minRowHeight=Math.min(this.minRowHeight,a);this.maxRowHeight=Math.max(this.maxRowHeight,a);i.innerHTML=o.displayName;c.id=o.id;c.object=o;d.appendChild(i);p.setAttribute("cellPadding","0");p.setAttribute("cellSpacing","0");c.appendChild(p);return c},moveDropdownToTextfield:function(){var d=this.dropdown.up();var c=this.fld.up(1);if(d!=null&&c!=null&&d!=c){this.dropdown.remove();c.insert(this.dropdown);if(this.ie){var b=this.dropdown.ancestors();for(var a=0;a<b.length;a++){b[a].style.zIndex=parseInt(this.dropdown.style.zIndex)+a+101}}}},getErrorMessage:function(){var a="";switch(parseInt(this.responseErrorCode)){case this.INDIVIDUAL_LOOKUP_ERROR_BAD_REQUEST:a=INDIVIDUAL_LOOKUP_ERROR_BAD_REQUEST_MESSAGE;break;case this.INDIVIDUAL_LOOKUP_ERROR_DATABASE_ERROR:a=INDIVIDUAL_LOOKUP_ERROR_DATABASE_ERROR_MESSAGE;break;case this.INDIVIDUAL_LOOKUP_ERROR_TOO_MANY_INDIVIDUALS:a=INDIVIDUAL_LOOKUP_ERROR_TOO_MANY_INDIVIDUALS_MESSAGE;break}return a},createErrorDiv:function(){var a="";a+='<div style="padding:5px;">';a+="<table>";a+="<tr>";a+="<td>";a+='<img src="'+AssetManager.R_IMG("/FP/Images/spacer.gif")+'" class="NotificationIcon NotificationIconInfoOverWhite"></img>';a+="</td>";a+="<td>";a+='<div style="padding:0px 4px 0px 4px;">'+this.getErrorMessage()+"</div>";a+="</td>";a+="</tr>";a+="</table>";a+="</div>";return a},paintError:function(){this.dropdown.innerHTML="";this.dropdown.innerHTML=this.createErrorDiv();this.moveDropdownToTextfield();this.dropdown.style.display="block";this.dropdown.style.height="auto";this.dropdownType=this.DROPDOWN_TYPE_ERROR;if(this.ie6){hideAllSelectComponentsOnIE6(getRelTop(this.dropdown),getRelLeft(this.dropdown),this.dropdown.offsetWidth,this.dropdown.clientHeight,true)}},createSearchingDiv:function(){var a="";a+='<div style="padding:5px;">';a+="<table>";a+="<tr>";a+='<td valign="top">';a+='<img src="'+AssetManager.R_IMG("/FP/Assets/Images/Misc/Loading-2.gif")+'"></img>';a+="</td>";a+="<td>";a+='<div style="padding:0px 4px 0px 4px;">'+searchingText+"</div>";a+="</td>";a+="</tr>";a+="</table>";a+="</div>";return a},paintSearching:function(){this.dropdown.innerHTML="";this.dropdown.innerHTML=this.createSearchingDiv();this.moveDropdownToTextfield();this.dropdown.style.display="block";this.dropdown.style.height="auto";this.dropdownType=this.DROPDOWN_TYPE_SEARCHING;if(this.ie6){hideAllSelectComponentsOnIE6(getRelTop(this.dropdown),getRelLeft(this.dropdown),this.dropdown.offsetWidth,this.dropdown.clientHeight,true)}},createNoResultsFoundDiv:function(){var a="";a+='<div style="padding:5px;">';a+="<table>";a+="<tr>";a+='<td valign="top">';a+='<img src="'+AssetManager.R_IMG("/FP/Images/spacer.gif")+'" class="NotificationIcon NotificationIconInfoOverWhite"></img>';a+="</td>";a+="<td>";a+='<div style="padding:0px 4px 0px 4px;">'+noResultsFoundText+"</div>";a+="</td>";a+="</tr>";a+="</table>";a+="</div>";return a},paintNoResultsFound:function(){this.dropdown.innerHTML="";this.dropdown.innerHTML=this.createNoResultsFoundDiv();this.moveDropdownToTextfield();this.dropdown.style.display="block";this.dropdown.style.height="auto";this.dropdownType=this.DROPDOWN_TYPE_SEARCHING;if(this.ie6){hideAllSelectComponentsOnIE6(getRelTop(this.dropdown),getRelLeft(this.dropdown),this.dropdown.offsetWidth,this.dropdown.clientHeight,true)}},paint:function(b){this.celebArray=b;this.dropdown.innerHTML="";this.minRowHeight=53;this.maxRowHeight=0;this.boldMatched(b,this.fld.value);if(b){for(var a=0;a<b.length;a++){var c=this.createDiv(b[a]);this.dropdown.appendChild(c)}}this.moveDropdownToTextfield();this.dropdown.style.display="block";this.dropdown.style.height="";this.dropdownType=this.DROPDOWN_TYPE_SELECTION;if(this.dropdown.childNodes.length>0){this.moveSelectionHome(this.dropdown.childNodes);this.doScroll(this.dropdown.childNodes);this.hideError()}else{this.paintNoResultsFound()}this.bindEventsToDropdownListElements(this.dropdown);return b?b.length:0},closeDropdown:function(){this.curSel=-1;this.dropdown.style.height="0px";this.dropdown.hide();if(this.ie6&&this.isHideComboBoxesEnabled){showAllSelectComponentsOnIE6()}},collapseList:function(b){if(b!=0){var a=0;if(b>this.numRowsForScroll){if(this.ie){a=2+this.numRowsForScroll}this.dropdown.style.height=(this.numRowsForScroll*this.maxRowHeight+a)+"px"}else{this.dropdown.style.height="auto"}}if(this.ie6){hideAllSelectComponentsOnIE6(getRelTop(this.dropdown),getRelLeft(this.dropdown),this.dropdown.offsetWidth,this.dropdown.clientHeight,true)}this.scrollDropdownIntoView()},isListCollapsed:function(){return this.dropdown.getHeight()==0||this.dropdown.style.display=="none"},scrollDropdownIntoView:function(){if(this.dropdown==null){return}var a=this.dropdown.offsetHeight;if(a<=0){return}var b=getRelTop(this.dropdown);var d=document.body.scrollTop+document.body.clientHeight;var e=b+a;if(e<d){return}var c=e-d;setTimeout("bottomSmoothScrollBy("+(c)+", 20)",30)}};
