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)},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)}},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(b){var a=(this.ie?this.curSel:0);if(b.length>this.numRowsForScroll){this.dropdown.scrollTop=this.curSel*53+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(b){switch(b.length){case 0:this.closeDropdown();break;case 1:this.closeDropdown();break;case 2:this.searchStr=b;if(this.REQUESTING==false){if(b!=this.requestStr.substr(0,2)||(this.responseError&&b!=this.requestStr&&this.requestStr.indexOf(b)<0)){this.requestStr=b;this.searchStr=b;this.sendSearchRequest(this.requestStr,this.onResponse)}else{if(b.length<this.requestStr.length){this.closeDropdown()}else{if(this.responseError){this.paintError()}else{this.collapseList(this.paint(this.searchLocal(b)))}}}}break;default:this.searchStr=b;if(this.REQUESTING==false){var a=Math.min(b.length,this.requestStr.length);if(b.substr(0,a)!=this.requestStr.substr(0,a)||(this.responseError&&b!=this.requestStr&&this.requestStr.indexOf(b)<0)||this.requestStr==""){this.requestStr=b;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"}},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.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(",")}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}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),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(j){var a=new Element("div",{"class":"drop-item"});var k=document.createElement("table");k.width="100%";var c=document.createElement("tbody");var h=document.createElement("tr");var e=document.createElement("td");var b=document.createElement("td");h.appendChild(e);h.setAttribute("height","44");h.appendChild(b);c.appendChild(h);k.appendChild(c);var d=document.createElement("img");d.style.verticalAlign="middle";d.src=LOADING_ANIMATION_GIF;e.appendChild(d);var g=this;var i=function(){d.onload=null;$(d).hide();if(j.path==""){var m=new Element("span");m.style.verticalAlign="middle";e.appendChild(m);m.innerHTML=(j.isAlive?UNKNOWN_SILHOUETTE:UNKNOWN_SILHOUETTE_DECEASED);if(j.gender=="M"){m.innerHTML=(j.isAlive?MALE_SILHOUETTE:MALE_SILHOUETTE_DECEASED)}if(j.gender=="F"){m.innerHTML=(j.isAlive?FEMALE_SILHOUETTE:FEMALE_SILHOUETTE_DECEASED)}}else{var m=new Element("img");m.className="autocomplete-image";m.style.verticalAlign="middle";m.src=j.path;if(j.isAlive){e.appendChild(m)}else{var n=new Element("div");n.style.position="relative";var l=new Element("div");l.innerHTML=DECEASD_RIBBON;l.appendChild(m);n.appendChild(l);e.appendChild(n)}}};if((Prototype.Browser.IE||Prototype.Browser.Opera)&&d.complete){i()}else{d.onload=i}e.setAttribute("width","40");var f=new Element("div",{"class":"autocomplete-name"});j.displayName=j.name;if(j.relationship!=""){j.displayName+="<br><span class='FL_LabelDimmedSmall'>"+j.relationship+"</span>"}if(j.familyTreeTitle!=""){j.displayName+="<br>"+FAMILY_TREE_ICON+"<span class='ReducedSizeTextGreyLabel'>"+j.familyTreeTitle+"</span>"}if(this.onBeforeShowItem){this.onBeforeShowItem(j,this.id)}f.innerHTML=j.displayName;a.id=j.id;a.object=j;b.appendChild(f);k.setAttribute("cellPadding","0");k.setAttribute("cellSpacing","0");a.appendChild(k);return a},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.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){showAllSelectComponentsOnIE6()}},collapseList:function(b){if(b!=0){var a=0;if(b>=this.numRowsForScroll){if(this.ie){a=2+this.numRowsForScroll-1}this.dropdown.style.height=(this.numRowsForScroll*53+a)+"px"}else{if(this.ie){a=2+b}this.dropdown.style.height=(b*53+a)+"px"}}if(this.ie6){hideAllSelectComponentsOnIE6(getRelTop(this.dropdown),getRelLeft(this.dropdown),this.dropdown.offsetWidth,this.dropdown.style.height,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)}};
