if(typeof(Meetup.LocPicker)=="undefined"){Meetup.LocPicker={}}Meetup.LocPicker.Location={country:null,zip:null,set:function(co,zip){this.country=co;this.zip=zip},hasPostalCodes:function(){return(this.country=="us"||this.country=="ca"||this.country=="gb")},hasStates:function(){return(this.country=="it")},getZipLabel:function(){if(this.country=="us"){return Meetup.Copy.locPickerZipCode}else{if(this.country=="ca"){return Meetup.Copy.locPickerPostalCode}else{if(this.country=="gb"){return Meetup.Copy.locPickerPostcode}else{return Meetup.Copy.locPickerCity}}}},getLocZip:function(){return this.zip},getLocCountry:function(){return this.country}};Meetup.LocPicker.Menu={CONTAINER_ID:"locMenu",COUNTRY_MENU_ID:"co",ZIP_FIELD_ID:"zip",ZIP_LABEL_ID:"zipLabel",READY_ID:"ready",REF_FIELD_ID:"locationPickerRef",INVALID_ID:"NOTME",POST_DOM:null,PROV_DOM:null,CITY_DOM:null,MAIN_EL_ID:"locPicker",ELEM_TAG:"",ELEM_CLS:"",DOM_ASSOC:{it:this.PROV_DOM,us:this.POST_DOM,ca:this.POST_DOM,gb:this.POST_DOM},setWaiting:function(){document.getElementById(this.CONTAINER_ID).style.cursor="wait";document.getElementById(this.ZIP_LABEL_ID).innerHTML=Meetup.Copy.locPickerloadingCities},setReady:function(){document.getElementById(this.CONTAINER_ID).style.cursor="";document.getElementById(this.ZIP_LABEL_ID).innerHTML=Meetup.LocPicker.Location.getZipLabel();Meetup.LocPicker.doLocPickerReadyCallback()},showZipField:function(){var mainEl=document.getElementById(this.MAIN_EL_ID);mainEl.innerHTML="";var clonedEl=mainEl.appendChild(this.POST_DOM.cloneNode(true));Meetup.LocPicker.Events.findConnectibles();if(typeof(MochiKit)!="undefined"){signal(mainEl,"fieldshow")}},showCityMenu:function(){var mainEl=document.getElementById(this.MAIN_EL_ID);mainEl.innerHTML="";var clonedEl=mainEl.appendChild(this.CITY_DOM.cloneNode(true));Meetup.LocPicker.Events.findConnectibles();if(typeof(MochiKit)!="undefined"){signal(mainEl,"fieldshow")}},showStateMenu:function(){var mainEl=document.getElementById(this.MAIN_EL_ID);mainEl.innerHTML="";var clonedEl=mainEl.appendChild(this.PROV_DOM.cloneNode(true));Meetup.LocPicker.Events.findConnectibles();if(typeof(MochiKit)!="undefined"){signal(mainEl,"fieldshow")}},rebuildCityMenu:function(cities){var P=Meetup.LocPicker;this.showCityMenu();var citySel=document.getElementById("locSwitchable").getElementsByTagName("select")[0];for(var i=0;i<cities.length;i++){if(cities[i].code!=null){var newOpt=citySel.appendChild(document.createElement("option"));newOpt.setAttribute("value",cities[i].code);if(cities[i].code==Meetup.LocPicker.initialZip){newOpt.selected="selected";newOpt.setAttribute("selected","selected");P.initialZip=""}newOpt.innerHTML=cities[i].name}}this.setReady();citySel.onchange=Meetup.LocPicker.updateZip;Meetup.LocPicker.updateZip()},rebuildStatesMenu:function(states){this.showStateMenu();var provSel=document.getElementById("locSwitchable").getElementsByTagName("select")[0];var provCitySel=document.getElementById("locSwitchable").getElementsByTagName("select")[1];var newOpt=provSel.appendChild(document.createElement("option"));newOpt.setAttribute("value",Meetup.LocPicker.Menu.INVALID_ID);newOpt.innerHTML=Meetup.Copy.locPickerSelectProvince;for(var i=0;i<states.length;i++){if(states[i].code!=null){var newOpt=provSel.appendChild(document.createElement("option"));newOpt.setAttribute("value",states[i].code);if(states[i].code==Meetup.LocPicker.initialState){newOpt.selected="selected";newOpt.setAttribute("selected","selected")}newOpt.innerHTML=states[i].name}}provSel.onchange=Meetup.LocPicker.switchState;this.setReady();if(Meetup.LocPicker.initialState.length>0){Meetup.LocPicker.initialState="";Meetup.LocPicker.switchState()}},rebuildStateCitiesMenu:function(cities){var P=Meetup.LocPicker;var zipEl=document.getElementById("locSwitchable").getElementsByTagName("select")[1];var citySel=zipEl.cloneNode(true);Meetup.LocPicker.Events.makeConnectible(citySel);citySel.innerHTML="";var newOpt=citySel.appendChild(document.createElement("option"));newOpt.setAttribute("value",Meetup.LocPicker.Menu.INVALID_ID);newOpt.innerHTML=Meetup.Copy.locPickerSelectCity;for(var i=0;i<cities.length;i++){if(cities[i].code!=null){var newOpt=document.createElement("option");newOpt.setAttribute("value",cities[i].code);if(cities[i].code==Meetup.LocPicker.initialZip){newOpt.selected="selected";newOpt.setAttribute("selected","selected");P.initialZip=""}newOpt.innerHTML=cities[i].name;citySel.appendChild(newOpt)}}zipEl.parentNode.replaceChild(citySel,zipEl);this.setReady();citySel.onchange=Meetup.LocPicker.updateZip;Meetup.LocPicker.updateZip()},getCountry:function(){var menu=document.getElementById(this.COUNTRY_MENU_ID);return menu[menu.selectedIndex].value},getZip:function(){var zipField;if((zipField=document.getElementById(this.ZIP_FIELD_ID))!=null){return zipField.value}else{return Meetup.LocPicker.Location.zip}},getLocationDOM:function(){if(this.getCountry()=="us"){return A({href:""},this.getZip())}else{return A({href:""},this.getZip(),", ",this.getCountry())}},setZip:function(z){document.getElementById(this.ZIP_FIELD_ID).value=String(z)},addClass:function(clsNm,el){if(el==null){return}el.className=el.className+" "+String(clsNm)},removeClass:function(clsNm,el){if(typeof(el)=="string"){el=document.getElementById(el)}if(el==null){return}var classes=el.className.split(" ");var newCls="";for(var i in classes){if(classes[i].length>0&&classes[i]!=clsNm){newCls+=classes[i]+" "}}el.className=newCls},init:function(){if(this.ELEM_TAG.length<1){return}var mc=Meetup.Copy;var html;var initZip=Meetup.LocPicker.initialZip;this.POST_DOM=document.createElement(this.ELEM_TAG);this.POST_DOM.setAttribute("id","locSwitchable");html='<span class="label"><label for="zip" id="'+this.ZIP_LABEL_ID+'">'+mc.locPickerCity+"</label></span>";html+='<span class="input"><input type="text" id="zip" name="zip" value="'+((initZip.indexOf("meetup")>-1)?"":initZip)+'" class="locNameUpdateZip"  /></span>';this.POST_DOM.innerHTML=html;this.PROV_DOM=document.createElement(this.ELEM_TAG);this.PROV_DOM.setAttribute("id","locSwitchable");html='<div class="pickerUnit"><span class="label"><label for="state">'+mc.locPickerProvince+"</label></span>";html+='<span class="input"><select name="state" id="stateSel" class="locNameUpdateState"></select></span></div>';html+='<div class="pickerUnit"><span class="label"><label for="city" id="'+this.ZIP_LABEL_ID+'">'+mc.locPickerCity+"</label></span>";html+='<span class="input"><select name="zip" id="zip" class="locNameUpdateZip locNameUpdateCity"></select></span></div>';this.PROV_DOM.innerHTML=html;this.CITY_DOM=document.createElement(this.ELEM_TAG);this.CITY_DOM.setAttribute("id","locSwitchable");html='<span class="label"><label for="zip" id="'+this.ZIP_LABEL_ID+'">'+mc.locPickerCity+"</label></span>";html+='<span class="input"><select name="zip" id="zip" class="locNameUpdateZip locNameUpdateCity"></select></span>';this.CITY_DOM.innerHTML=html}};Meetup.LocPicker.doLocPickerReadyCallback=function(){};Meetup.LocPicker.Events={evTypes:{onblur:[],onfocus:[]},connect:function(obj,ev,func){if(typeof this.evTypes[ev]=="undefined"){return false}this.evTypes[ev].push({obj:obj,func:func})},makeConnectible:function(el){scope=this;el.onblur=this.blur;el.onfocus=this.focus},findConnectibles:function(el){obj=this;var connectThese=function(els){for(i in els){obj.makeConnectible(els[i])}};connectThese(document.getElementById("locSwitchable").getElementsByTagName("select"));connectThese(document.getElementById("locSwitchable").getElementsByTagName("input"))},blur:function(){for(f in scope.evTypes.onblur){scope.evTypes.onblur[f].func.call(scope.evTypes.onblur[f].obj)}},focus:function(){for(f in scope.evTypes.onfocus){scope.evTypes.onfocus[f].func.call(scope.evTypes.onfocus[f].obj)}}};Meetup.LocPicker.DataGetter={doRemote:function(obj,url,success,error){if(window.XMLHttpRequest){req=new XMLHttpRequest()}else{if(window.ActiveXObject){req=new ActiveXObject("Microsoft.XMLHTTP")}}try{req.onreadystatechange=function(){if(req.readyState==4){if(req.status==200){success.call(obj,req)}else{error.call(obj,req)}}};req.open("GET",url,true);req.send(null)}catch(e){}}};Meetup.LocPicker.CityObjectDataGetter={cache:{},callbacks:[],userActivityHandler:function(){var P=Meetup.LocPicker;if(this.callbacks.length>0&&P.Location.country){this.getCityObj(P.Location.country,P.Location.zip)}},parseZip:function(co,zip){var z=""+zip;if(co=="us"){if(z.length>=5){z=z.substring(0,5)}else{return false}}else{if(co=="ca"){z=z.replace(/\s/,"");if(z.length==6&&z.indexOf(" ")==-1){z=z.substring(0,3)+" "+z.substring(3)}else{return false}}else{if(co=="gb"){z=z.replace(/\s/g,"");if((z.length==6||z.length==7)&&z.indexOf(" ")==-1){z=z.substring(0,z.length-3)+" "+z.substring(z.length-3)}else{return false}}else{if(co=="it"){if(z=="NOTME"){return false}}}}}return z},addCallback:function(obj,func){this.callbacks.push({obj:obj,func:func})},getCityObj:function(co,zip){if(this.cache[zip]){Meetup.LocPicker.Menu.rebuildCityMenu(this.cache[co]);return}var P=Meetup.LocPicker;var co=co;var zip=this.parseZip(co,zip);var url="/api/?method=getCityName&arg_country="+co+"&arg_zip="+zip;var success=function(req){var city;if(req.responseText&&(city=eval("("+req.responseText+")"))){P.LocaleDataGetter.cache[zip]=city;for(c in this.callbacks){this.callbacks[c].func.call(this.callbacks[c].obj,city)}}else{}};var error=function(req){};if(co&&zip){Meetup.LocPicker.DataGetter.doRemote(this,url,success,error)}else{if(co){var req="{'country':"+co+"}";success(req)}else{}}}};Meetup.LocPicker.LocaleDataGetter={cache:{},deserialize:function(str){var cis=str.split("||");var retArray=new Array();for(var i=0;i<cis.length;i++){var iCi=cis[i].split("::");if(iCi[0]&&iCi[1]){retArray[retArray.length]={name:iCi[0].replace(/^\s*|\s*$/g,""),code:iCi[1].replace(/^\s*|\s*$/g,"")}}}return retArray},getCities:function(co){if(this.cache[co]){Meetup.LocPicker.Menu.rebuildCityMenu(this.cache[co]);return}var P=Meetup.LocPicker;var co=co;var url="/get-loc-data.jsp?co="+co;var success=function(req){if(req.responseText){var locs=req.responseText;if(locs.length<1){}else{var cities=P.LocaleDataGetter.deserialize(locs);P.LocaleDataGetter.cache[co]=cities;P.Menu.rebuildCityMenu(cities);P.Menu.setReady()}}else{}P.Menu.setReady()};var error=function(req){P.Menu.setReady()};Meetup.LocPicker.DataGetter.doRemote(this,url,success,error)},getStates:function(co){var P=Meetup.LocPicker;var co=co;var url="/get-loc-data.jsp?co="+co;var success=function(req){if(req.responseText){var locs=req.responseText;if(locs.length<1){}else{if(P.TESTING){var states=[{code:"1",name:"Albequerque"},{code:"1",name:"Heavens to Betsy"},{code:"1",name:"Gilgamesh"}]}else{var states=P.LocaleDataGetter.deserialize(locs)}P.LocaleDataGetter.cache[co]=states;P.Menu.rebuildStatesMenu(states);P.Menu.setReady()}}else{}P.Menu.setReady()};var error=function(req){P.Menu.setReady()};Meetup.LocPicker.DataGetter.doRemote(this,url,success,error)},getStateCities:function(){var P=Meetup.LocPicker;var co=P.Menu.getCountry();var provSel=document.getElementById("locSwitchable").getElementsByTagName("select")[0];var stateName=provSel.options[provSel.selectedIndex].value;var url="/get-loc-data.jsp?co="+co+"&st="+stateName;var success=function(req){if(req.responseText){var locs=req.responseText;if(locs.length<1){}else{var cities=P.LocaleDataGetter.deserialize(locs);P.LocaleDataGetter.cache[co]=cities;P.Menu.rebuildStateCitiesMenu(cities);P.Menu.setReady()}}else{}P.Menu.setReady()};var error=function(req){P.Menu.setReady()};Meetup.LocPicker.DataGetter.doRemote(this,url,success,error)}};Meetup.LocPicker.switchCountry=function(){var P=Meetup.LocPicker;if(P.Location.hasPostalCodes()){P.Menu.showZipField();P.Menu.removeClass("doWrap","locMenu");if(P.initialZip&&P.initialZip.length>0){if((P.Location.country=="us"&&!isNaN(P.initialZip))||(P.Location.country=="ca"&&P.initialZip.replace(/[ ]*/g,"").length==6&&!(/[^0-9a-zA-Z ]/g.test(P.initialZip)))||(P.Location.country=="gb"&&(P.initialZip.replace(/[ ]*/g,"").length==6||P.initialZip.replace(/[ ]*/g,"").length==7)&&!(/[^0-9a-zA-Z ]/g.test(P.initialZip)))){P.Menu.setZip(P.initialZip)}P.initialZip=""}var zipEl=document.getElementById("locSwitchable").getElementsByTagName("input")[0];zipEl.onkeyup=Meetup.LocPicker.updateZip;P.Menu.setReady()}else{if(P.Location.hasStates()){P.Menu.showStateMenu();P.Menu.setWaiting();P.Menu.addClass("doWrap","locMenu");P.LocaleDataGetter.getStates(P.Location.country)}else{P.Menu.showCityMenu();P.Menu.setWaiting();P.Menu.removeClass("doWrap","locMenu");P.LocaleDataGetter.getCities(P.Location.country)}}};Meetup.LocPicker.switchState=function(){var P=Meetup.LocPicker;P.LocaleDataGetter.getStateCities()};Meetup.LocPicker.updateZip=function(){var P=Meetup.LocPicker;P.Location.set(P.Menu.getCountry(),P.Menu.getZip());P.CityObjectDataGetter.userActivityHandler()};Meetup.LocPicker.__init__=function(){var P=Meetup.LocPicker;P.Menu.init();P.Location.set(P.initialCountry,P.initialZip);var co=document.getElementById("co");if(Meetup.UserAgent&&Meetup.UserAgent.isSafari()&&co!=undefined){for(var i in co.options){if(co.options[i].value==P.Location.country){co.options[i].selected="selected"}else{co.options[i].selected=""}}}P.initialCountry="";var countryMenu=document.getElementById(P.Menu.COUNTRY_MENU_ID);Meetup.LocPicker.Events.makeConnectible(countryMenu);countryMenu.onchange=function(){var P=Meetup.LocPicker;P.Location.set(P.Menu.getCountry(),P.Menu.getZip());P.switchCountry()};P.switchCountry()};
