function UnknownItemTypeException(a){this.message=a;this.name="UnknownItemTypeException";this.toString=function(){return this.name+": "+this.message}}var DataFilter=new function(){var c;var a;var e=null;var d=null;var g={};this.DATA_TYPE_BUILDINGS=1;this.DATA_TYPE_NEWS=2;this.init=function(){a=this;c=$("selectMapDataType");for(var h in gBuildings){gBuildings[h].roofheight=parseFloat(gBuildings[h].roofheight)}};this.getFilteredData=function(){d=null;if(typeof gStartBuilding=="number"){var h=gBuildings["b"+gStartBuilding];if(h){h.dataType=DataFilter.DATA_TYPE_BUILDINGS;c.value=DataFilter.DATA_TYPE_BUILDINGS;e={lat:h.lat,lng:h.lng};h=[h]}else{h=[]}g={b:gStartBuilding};gStartBuilding=null;return h}if(typeof gStartNews=="number"){var h=gNews["n"+gStartNews];if(h){h.dataType=DataFilter.DATA_TYPE_NEWS;c.value=DataFilter.DATA_TYPE_NEWS;e={lat:h.lat,lng:h.lng};h=[h]}else{h=[]}g={n:gStartNews};gStartNews=null;return h}var i=c.getValue();g={dataType:i};if(i==this.DATA_TYPE_BUILDINGS){d="roofheight";return f()}else{if(i==this.DATA_TYPE_NEWS){return b()}else{throw new UnknownItemTypeException("Unknown data type selected")}}};function b(){var h=[];for(var j in gNews){var i=gNews[j];i.dataType=DataFilter.DATA_TYPE_NEWS;h.push(i)}return h}function f(){var k={};var D=0;var v=gFilter.status||$("inputStatus").value;if(v){g.status=v;v.split(";").forEach(function(i){D++;k[i]=true})}var y={};var n=0;var r=gFilter.type||$("inputType").value;if(r){g.type=r;r.split(";").forEach(function(i){n++;y[i]=true})}var t={};var C=0;var s=gFilter.completion||$("inputCompletion").value.trim();if(s){g.completion=s;s.split(";").forEach(function(i){C++;t[i]=true})}var E=[];var F=gFilter.nameAddr||$("inputNameAddress").value.trim().toLowerCase();if(F){g.nameAddr=F;E=F.split(";")}var l=[];var m=gFilter.city||$("inputCity").value.trim().toLowerCase();if(m){g.city=m;l=m.split(";")}var p=gFilter.postCode||$("inputPostCode").value.trim().toLowerCase();g.postCode=p;gFilter={};var B=[];for(var G in gBuildings){var h=gBuildings[G];if(h.status&&D!=0&&k[h.status]!==true){continue}if(h.primary_use&&n!=0&&y[h.primary_use]!==true){continue}var x=parseInt(h.completiondate);if(x&&C!=0&&t[h.completiondate]!==true){continue}if(E.length!=0){var u=false;var o=["formalname","nickname","formername","address"];for(var A=0;A<o.length;A++){var q=h[o[A]].toLowerCase();if(!q){continue}for(var z=0;z<E.length;z++){if(q.indexOf(E[z])!==-1){u=true;break}}if(u){break}}if(!u){continue}}if(l.length!=0){var w=h.city.toLowerCase();var u=false;for(var A=0;A<l.length;A++){if(w.indexOf(l[A])!==-1){u=true;break}}if(!u){continue}}if(p&&h.postcode.toLowerCase().indexOf(p)==-1){continue}h.dataType=DataFilter.DATA_TYPE_BUILDINGS;B.push(h)}return B}this.getCenterItem=function(){var h=null;if(e){h=e;e=null}return h};this.getSortField=function(){return d};this.getCurrentCriteria=function(){return g}};var InfoWindowFactory=new function(){this.getInfoWindow=function(d){if(d.dataType==DataFilter.DATA_TYPE_BUILDINGS){return c(d)}else{if(d.dataType==DataFilter.DATA_TYPE_NEWS){return a(d)}else{throw new UnknownItemTypeException("InfoWindowFactory: unknown data type")}}};function a(g){var f=document.createElement("div");f.className="infoWindow infoWindowNews";var e=document.createElement("a");e.className="boldred";e.href="http://www.skyscrapernews.com/news.php?ref="+g.news_id;e.appendChild(document.createTextNode(g.articletitle));var d=document.createElement("p");d.className="infoWindowTitle";d.appendChild(e);f.appendChild(d);var h=document.createElement("p");h.appendChild(document.createTextNode(g.mandate));f.appendChild(h);return f}function c(d){var g=document.createElement("div");g.className="infoWindow";var f=document.createElement("a");f.className="boldred";f.href="http://www.skyscrapernews.com/buildings.php?id="+d.building_id;f.appendChild(document.createTextNode(d.formalname));var j=document.createElement("p");j.className="infoWindowTitle";j.appendChild(f);g.appendChild(j);var i=document.createElement("tr");var k=document.createElement("td");k.appendChild(b(d));i.appendChild(k);var e=document.createElement("tbody");e.appendChild(i);var h=document.createElement("table");h.appendChild(e);g.appendChild(h);return g}function b(d){var f=document.createElement("div");f.className="infoWindowDataBox";var e=$(document.createElement("div"));if(parseInt(d.roofheight)){e.appendText("Height: "+d.roofheight+" m");f.appendChild(e)}if(parseInt(d.floors)){e=e.cloneNode(false);e.appendText("Floors: "+d.floors);f.appendChild(e)}if(d.status){e=e.cloneNode(false);e.appendText("Status: "+d.status);f.appendChild(e)}if(d.primary_use){e=e.cloneNode(false);e.appendText("Primary Use: "+d.primary_use);f.appendChild(e)}if(d.secondary_use&&d.secondary_use!="None"){e=e.cloneNode(false);e.appendText("Secondary Use: "+d.secondary_use);f.appendChild(e)}if(parseInt(d.sqmetres)){e=e.cloneNode(false);e.appendText("Sq. Metres: "+d.sqmetres);f.appendChild(e)}if(parseInt(d.flats)){e=e.cloneNode(false);e.appendText("Flats: "+d.flats);f.appendChild(e)}if(parseInt(d.hotelrooms)){e=e.cloneNode(false);e.appendText("Hotel Rooms: "+d.hotelrooms);f.appendChild(e)}return f}};var ItemDataFormatter=new function(){this.getListLink=function(a){var b=$(document.createElement("a"));if(a.dataType==DataFilter.DATA_TYPE_BUILDINGS){b.href="buildings.php?id="+a.building_id;b.setText(a.formalname)}else{if(a.dataType==DataFilter.DATA_TYPE_NEWS){b.href="news.php?ref="+a.news_id;b.setText(a.mandate+" > "+a.articletitle)}else{throw new UnknownItemTypeException("ItemTextFactory: unknown data type")}}return b}};var MarkerIconFactory=new function(){this.getItemIcon=function(c){var b=new GIcon();b.iconSize=new GSize(32,32);b.iconAnchor=new GPoint(16,32);b.infoWindowAnchor=new GPoint(16,8);var a=["height_0-49.png","height_50-99.png","height_100-149.png","height_150-199.png","height_200-249.png","height_250-299.png","height_300+.png"];var d=[-1,49,99,149,199,249,299];this.getItemIcon=function(h){if("roofheight" in h){var e=parseInt(h.roofheight);var j="";var f=0;while(e>d[f]){j=a[f];f++}var g=new GIcon(b);g.image="http://www.skyscrapernews.com/images/"+j;g.printImage=g.mozPrintImage=g.image;return g}else{return G_DEFAULT_ICON}};return this.getItemIcon(c)}};var MarkerManager=function(n){var f=n.map;var d=[];var m=[];var b=$("listBox");var c=n.maxMarkers;var l=n.itemZoom;var i=0;var h=[];var k=null;var g=null;GEvent.addListener(f,"moveend",(function(){this.refresh.delay(i)}).bind(this));_createItemLinks=function(){var o=document.createElement("ol");d.forEach(function(q){if(!q.point){q.point=new GLatLng(q.lat,q.lng)}q.link=$(ItemDataFormatter.getListLink(q));q.link.className="roll";q.linkClick=function(s){(new Event(s)).stop();if(!q.displayed){j(q)}k=q.marker;f.panTo(q.point);if(f.getZoom()<l){f.setZoom(l)}var r=InfoWindowFactory.getInfoWindow(q);q.marker.openInfoWindow(r)};q.link.addEvent("click",q.linkClick);var p=document.createElement("li");p.appendChild(q.link);o.appendChild(p)});if(o.childNodes.length>0){b.appendChild(o)}};_createItemMarker=function(o){o.marker=new GMarker(o.point,{title:o.formalname||o.articletitle,icon:MarkerIconFactory.getItemIcon(o)});o.markerClick=GEvent.addListener(o.marker,"click",function(){k=o.marker;var p=InfoWindowFactory.getInfoWindow(o);o.marker.openInfoWindow(p)})};this.setData=function(q,o){if(d.length){this.clear()}d=q;m=[];for(var p=0;p<d.length;p++){m.push(p)}if(o){e(o)}_createItemLinks()};this.setRefreshCallback=function(o){g=o};this.clear=function(){d.forEach(function(o){if(o.link){o.link.removeEvents();o.linkClick=null;o.link=null}if(o.marker){GEvent.removeListener(o.markerClick);o.markerClick=null;o.marker=null}o.displayed=false});if(b.firstChild){b.removeChild(b.firstChild)}d=[];m=[];h=[];f.clearOverlays()};function a(){var o=f.getBounds();var p=0;h=h.filter(function(q){if(o.containsLatLng(q.point)){return true}else{if(q.marker!=k){f.removeOverlay(q.marker);q.displayed=false;p++;return false}}})}function j(o){if(!o.displayed){if(!o.marker){_createItemMarker(o)}f.addOverlay(o.marker);o.displayed=true;h.push(o)}}this.refresh=function(){a();var r=f.getBounds();var p=0;var s=0;var o=m.length;while(h.length<c&&p<o){var q=d[m[p]];if(!q.displayed&&r.containsLatLng(q.point)){j(q);s++}p++}if(g){g()}};function e(u){var w=[3280,1093,364,121,40,13,4,1];var t=w.length;var v=m.length;for(var o=0;o<t;o++){var r=w[o];for(var q=r;q<v;q++){var s=m[q];var p=q;while((p>=r)&&d[m[p-r]][u]<d[s][u]){m[p]=m[p-r];p-=r}m[p]=s}}}};var MapController=new function(){var b;var m=14;var a=15;var q;var p;var l;var j;var g;var c=500;function e(){b=new GMap2(document.getElementById("map"));b.addControl(new GLargeMapControl());b.addControl(new GScaleControl());b.addControl(new GMapTypeControl());b.addControl(new GOverviewMapControl());b.setCenter(new GLatLng(51.514,-0.098),m);g=new MarkerManager({map:b,maxMarkers:c,itemZoom:a});g.setRefreshCallback(f)}function k(){$$(".multiSelectInput").forEach(multiFocus);$("filterForm").addEvent("submit",function(s){(new Event(s)).stop();n()});$("selectMapDataType").addEvent("change",function(){n()});p=$("loaderBox");DataFilter.init()}this.load=function(){l=true;q=$("listBox");j=$("linkThisPage");e();k();n()};function i(){p.setStyle("visibility","visible")}function o(){p.setStyle("visibility","hidden")}function r(){var s=$("firstLoadMsg");if(s){s.setStyle("visibility","visible")}}function d(){var s=$("firstLoadMsg");if(s){s.setStyle("visibility","hidden")}}function f(){var u=window.location.protocol+"//"+window.location.hostname+window.location.pathname;var w=DataFilter.getCurrentCriteria();var s=[];for(var v in w){if(w[v]){s.push(v+"="+encodeURIComponent(w[v]))}}var t=b.getCenter();s.push("lat="+t.lat());s.push("lng="+t.lng());s.push("zoom="+b.getZoom());u+="?"+s.join("&");j.href=u}function n(){i();var s=function(){filteredData=DataFilter.getFilteredData();var t=DataFilter.getCenterItem();if(t){b.setCenter(new GLatLng(t.lat,t.lng),a)}else{if(gMapState.lat&&gMapState.lng){b.setCenter(new GLatLng(gMapState.lat,gMapState.lng),gMapState.zoom);gMapState={}}}g.setData(filteredData,DataFilter.getSortField());g.refresh();h();o();if(l){r()}else{d()}l=false};s.delay(250)}function h(){var s=function(u){if(u instanceof GLatLng){b.setCenter(u)}};var t=new GClientGeocoder();h=function(){var v=DataFilter.getCurrentCriteria();if(v.city){var u=v.city.split(";")[0];t.getLatLng(u+", UK",s)}};h()}};window.addEvent("domready",MapController.load);window.addEvent("unload",GUnload);
