//Copyright 2010 Noritaka Horio<holy.shared.design@gmail.com> all rights reserved.
//Licence The MIT Licence
(function(b){var a=this.MMap={};a.version="0.2.1";a.MVCObject=new Class({initialize:function(){}});a.MVCObject.prototype=new google.maps.MVCObject()}(document.id));(function(b){var a=(this.MMap||{});a.Options=new Class({setOptions:function(c){var f=Object.clone(this.options);var c=Object.append(f,c);for(var d in c){var e=c[d];if(d=="map"){this.setMap(e);delete c[d]}else{if(instanceOf(e,Function)&&(/^on[A-Z]/).test(d)){this.addEvent(d,e);delete c[d]}}}this.options=c;return this}})}(document.id));(function(e){var d=(this.MMap||{});var c=function(f){return f.replace(/^on([A-Z])/,function(g,h){return h.toLowerCase()})};var b=function(f){var g=/(Changed)$/;return f.replace(g,"_$1").toLowerCase()};var a=function(f){return b(c(f))};d.Events=new Class({_events:{},_handles:{},addEvent:function(g,f){var h=null;g=a(g);h=google.maps.event.addListener(this,g,f);this._handles[g]=(this._handles[g]||[]).include(f);this._events[g]=(this._events[g]||[]).include(h);return this},addEvents:function(g){for(var f in g){this.addEvent(f,g[f])}return this},removeEvent:function(h,g){h=a(h);var j=this._handles[h].contains(g);if(j){var f=this._handles[h].indexOf(g);var i=this._events[h][f];google.maps.event.removeListener(i);this._events[h].erase(i);this._handles[h].erase(g)}return this},removeEvents:function(h){if(!h){google.maps.event.clearInstanceListeners(this);return this}else{if(typeOf(h)=="object"){for(type in h){this.removeEvent(type,h[type])}return this}}for(type in this._events){if(h&&h!=type){continue}var g=this._events[type];for(var f=g.length;f--;){this.removeEvent(type,g[f])}}return this},fireEvent:function(k,h){k=a(k);if(!this._events[k]){return this}var g=[this,k];if(Type.isArray(h)){var f=h.length;for(var j=0;j<f;j++){g.push(h[j])}}else{g.push(h)}google.maps.event.trigger.apply(this,g);return this}})}(document.id));(function(b){var a=(this.MMap||{});a.Container=new Class({Extends:a.MVCObject,initialize:function(){var c=Array.from(arguments).link({items:Type.isArray});this.setItems(c.items||[]);this.setCurrent(0)},isValid:function(){var c=this.get("index");return this.hasItem(c)},getItem:function(d){if(!this.hasItem(d)){return}var c=this.getItems();return c[d]},getItems:function(){return this.get("items")},getCurrent:function(){var c=this.getItems();var d=this.get("index");return c[d]},setItems:function(c){if(!Type.isArray(c)){return}this.set("items",c);return this},setCurrent:function(c){if(!Type.isNumber(c)){return}this.set("index",c);return this},addItem:function(d){if(this.hasItem(d)){return}var c=this.getItems();c.push(d);return this},hasItem:function(d){var c=this.getItems();if(Type.isNumber(d)){return(c[d])?true:false}else{return(c.contains(d))?true:false}},count:function(){return this.getItems().length},removeItem:function(d){if(!this.hasItem(d)){return}var c=this.get("items");c.erase(d);return this},next:function(){var e=this.get("index");var d=this.getItems();var c=e+1;this.setCurrent(c);if(this.isValid()){return d[c]}return false},rewind:function(){this.setCurrent(0);return this},empty:function(){var c=this.getItems();this.rewind();c.empty()},find:function(c,e){while(this.isValid()){var d=this.getCurrent();if(d[c]==e){return d}this.next()}return false},findAll:function(c,e){var f=[];while(this.isValid()){var d=this.getCurrent();if(d[c]==e){f.push(d)}this.next()}return(f.length<=0)?false:f}})}(document.id));(function(b){var a=(this.MMap||{});a.OverlayView=new Class({Implements:[a.Events,a.Options],options:{map:null,zIndex:0,visible:true,active:false},initialize:function(e){var c=this;c=Object.append(new google.maps.OverlayView(),c);for(var d in c){this[d]=c[d]}this.instance=this._getInstance();this.setOptions(e);this._added=false;this._init()},build:function(){var c=this.getPanes().overlayImage;this.body=this._setup(this._getInstance());this._getInstance().inject(c);this._setupListeners();this._added=true;this.fireEvent("add")},_getInstance:function(){if(!this.instance){this.instance=new Element("div",{"class":"ovarlayView"})}return this.instance},_setup:function(c){},_setupListeners:function(){},_init:function(){},draw:function(){},onAdd:function(){this.build()},onRemove:function(){this.removeEvents();this.unbindAll();this.instance.destroy();delete this.instance;this._added=false},getVisible:function(){return this.get("visible")},isAdded:function(){return this._added},isVisible:function(){return this.get("visible")},isActive:function(){return this.get("active")},setVisible:function(d){if(!Type.isBoolean(d)){new TypeError("The data type is not an boolean.")}this.set("visible",d);var c=this._getInstance();if(d){c.setStyle("display","")}else{c.setStyle("display","none")}return this},setActive:function(c){}})}(document.id));(function(b){var a=(this.MMap||{});a.Marker=(this.MMap.Marker||{});a.Marker.Core=new Class({Extends:a.OverlayView,options:{map:null,className:"marker markerDefault",position:"",zIndex:null,visible:true,active:false},initialize:function(c){this.parent(c)},_init:function(){var c=this;var d=["position","zIndex","visible","active"];d.each(function(e){var f=c.options[e];c.set(e,f);delete c.options[e]})},_updateVisibleState:function(){this.setZIndex(this.get("zIndex")).setVisible(this.get("visible"))},_update:function(){},setDefaultZIndex:function(){var f=this.get("zIndex");if(!f){var d=this.getProjection();var c=this.get("position");var e=d.fromLatLngToDivPixel(c);this.setZIndex(e.y)}else{this.setZIndex(f)}},draw:function(){if(!this.isAdded()){return}this.refresh();var d=this.getProjection();var c=this.get("position");var e=this.instance.getSize();var g=d.fromLatLngToDivPixel(c);var f={position:"absolute",left:g.x-(e.x/2),top:g.y-e.y};this.instance.setStyles(f)},refresh:function(){if(!this.isAdded()){return}this._updateVisibleState();this._update()},getZIndex:function(){return this.get("zIndex")},setZIndex:function(d){if(!Type.isNumber(d)){new TypeError("The data type is not an integer.")}this.set("zIndex",d);var c=this._getInstance();if(!this.isActive()){c.setStyle("z-index",d)}return this},getPosition:function(){return this.get("position")},setPosition:function(c){if(!instanceOf(c,google.maps.LatLng)){new TypeError("The data type is not an Latlng.")}this.set("position",c);this.draw();return this},setActive:function(d){if(!Type.isBoolean(d)){new TypeError("The data type is not an boolean.")}this.set("active",d);var c=this._getInstance();if(d){this.fireEvent("active");c.setStyle("z-index",10000);c.addClass("active")}else{c.setStyle("z-index",this.getZIndex());c.removeClass("active")}return this}});a.Marker.HTML=new Class({Extends:a.Marker.Core,options:{map:null,className:"marker markerDefault",title:"",content:"",position:"",zIndex:null,visible:true},initialize:function(c){this.parent(c)},_setup:function(d){this.setDefaultZIndex();var e=this.options.className;d.addClass(e);var c=new Element("div",{"class":"inner"});var g=new Element("div",{"class":"hd"});var f=new Element("div",{"class":"bd"});var h=new Element("div",{"class":"ft"});c.adopt([g,f,h]);this._title=new Element("p",{"class":"title"});this._content=new Element("div",{"class":"content"});c.inject(d);this._title.inject(g);this._content.inject(f);return c},_setupListeners:function(){var d=this;var c=this._getInstance();var f=function(g){g.target=d;d.fireEvent(g.type,g)};var e=["click","dblclick","mouseover","mouseout","mouseup","mousedown"];e.each(function(g){c.addEvent(g,f)})},_init:function(){this.parent();var c=this;var d=["title","content"];d.each(function(e){c.set(e,c.options[e]);delete c.options[e]})},_update:function(){this._title.set("html",this.get("title"));this._content.set("html",this.get("content"))},getTitle:function(){return this.get("title")},setTitle:function(c){if(!Type.isString(c)){new TypeError("The data type is not a character string.")}this.set("title",c);this.draw();return this},getContent:function(){return this.get("content")},setContent:function(c){if(!Type.isString(c)||!Type.isElement(c)){new TypeError("The data type is a character string or not an element.")}this.set("content",c);this.draw();return this}})}(document.id));(function(b){var a=(this.MMap||{});a.Marker=(this.MMap.Marker||{});a.Marker.Image=this.MMap.Marker.Image=new Class({Extends:a.Marker.Core,options:{map:null,className:"marker image imageDefault",title:"",image:"",url:"",position:null,zIndex:0,visible:true},initialize:function(c){this.parent(c)},_setup:function(c){this.setDefaultZIndex();var e=this.options.className;c.addClass(e);var d=new Element("p",{"class":"photo"});this._anchor=new Element("a",{title:this.get("title"),href:this.get("url")});this._image=new Element("img",{src:this.get("image")});d.inject(c);this._anchor.inject(d);this._image.inject(this._anchor);return d},_setupListeners:function(){var d=this;var c=this._getInstance();var f=function(g){g.target=d;d.fireEvent(g.type,g)};var e=["click","dblclick","mouseover","mouseout","mouseup","mousedown"];e.each(function(g){c.addEvent(g,f)})},_init:function(){this.parent();var c=this;var d=["title","image","url"];d.each(function(e){c.set(e,c.options[e]);delete c.options[e]})},_update:function(){this._anchor.set({title:this.get("title"),href:this.get("url")});this._image.set({title:this.get("title"),image:this.get("image")})},getTitle:function(){return this.get("title")},getImage:function(){return this.get("image")},getURL:function(){return this.get("url")},setTitle:function(c){this.set("title",c);this.draw();return this},setImage:function(c){this.set("image",c);this.draw();return this},setURL:function(c){this.set("url",c);this.draw();return this}})}(document.id));(function(b){var a=(this.MMap||{});a.Marker=(this.MMap.Marker||{});a.Marker.Images=this.MMap.Marker.Images=new Class({Extends:a.Marker.Core,options:{map:null,className:"marker image imagesDefault",images:[],defaultIndex:0,interval:2000,duration:2000,autoplay:true,zIndex:0,position:null,visible:true},initialize:function(c){this.parent(c);this._elements=[];this._stack=[];this._index=0;this._start=false;this._mouseovered=false},_setup:function(d){this.setDefaultZIndex();this.addEvent("add",this._onPrepare.bind(this));var e=this.options.className;d.addClass(e);this._photos=new Element("ul",{"class":"photos"});this._photos.inject(d);var c=this.get("images");if(c&&Type.isArray(c)){this.addImages(c)}return this._photos},_setupListeners:function(){var d=this;var c=this._getInstance();var f=function(g){g.target=d;d.fireEvent(g.type,g)};var e=["click","dblclick","mouseup","mousedown"];e.each(function(g){c.addEvent(g,f)});c.addEvent("mouseout",this._mouseout.bind(this))},_init:function(){this.parent();this.set("images",this.options.images);delete this.options.images},_onPrepare:function(){var c=this._stack.length;for(var e=0;e<c;e++){var f=this._stack[e];f.inject(this._photos)}delete this._stack;var d=this.options.defaultIndex;this.setCurrent(d);if(this.options.autoplay){this._timerID=this._next.delay(this.options.interval,this);this._start=true}},_next:function(){var c=this;var e=this._elements[this._index];e.setStyle("z-index",1);this._index=(this._index+1<this._elements.length)?this._index+1:0;var e=this._elements[this._index];e.setStyle("z-index",2);var d=e.get("tween");d.start("opacity",0,1)},_buildElement:function(g){var c=new Element("li");var d=new Element("a",{href:g.url,title:g.title});var f=new Element("img",{src:g.image,title:g.title});f.inject(d);d.inject(c);var e=this;c.set("tween",{duration:this.options.duration,onComplete:function(){if(e.isStart()){e.setCurrent(e._index);e._timerID=e._next.delay(this.options.interval,e)}}});c.addEvent("mouseover",e._mouseover.bind(this));return c},_mouseover:function(c){if(this._mouseovered){return false}c.target=this;this.fireEvent(c.type,c);this._mouseovered=true},_mouseout:function(c){if(!(c.target==this._photos||c.target==this._getInstance())){return false}if(!this._mouseovered){return false}c.target=this;this.fireEvent(c.type,c);this._mouseovered=false},setCurrent:function(c){var d=0,f=this._elements.length,g=null,e={};for(d=0;d<f;d++){g=this._elements[d];e=(d==c)?{"z-index":1,opacity:1}:{"z-index":0,opacity:0};g.setStyles(e)}this._index=c},getImages:function(){return this.get("images")},setImages:function(c){clearTimeout(this._timerID);this._elements=[];this._index=0;if(this.isAdded()){this._photos.dispose()}this.set("images",c);this.addImages(c);return this},addImage:function(e){var d=this._buildElement(e);var c=this.get("images");if(!c.contains(e)){c.push(e)}if(!this.isAdded()){this._stack.push(d)}else{d.inject(this._photos)}this._elements.push(d);return this},addImages:function(c){var d=0,e=c.length;for(d=0;d<e;d++){this.addImage(c[d])}},removeImage:function(f){var c=this.get("images");var d=c.indexOf(f);if(d>=0){var e=this._elements[d];this._elements.erase(e);if(this._stack&&this._stack.contains(e)){this._stack.erase(e)}c.erase(f);e.destroy()}},removeImages:function(){var d=this;var c=Array.from(arguments);c.each(function(e){d.removeImage(e)})},isStart:function(){return(this._start)?true:false},start:function(){if(this.isStart()){return}this._timerID=this._next.delay(this.options.interval,this);this._start=true},stop:function(){clearTimeout(this._timerID);this._start=false}})}(document.id));(function(b){var a=(this.MMap||{});a.MarkerManager=new Class({Extends:a.MVCObject,Implements:[a.Events,a.Options],options:{map:null,markers:[]},initialize:function(c){this._container=new a.Container();this.setOptions(c);this._setup()},_setup:function(){var c={visibles:[],hiddens:[],actives:[],deactives:[]};this.addMarkers(this.options.markers);this.set("state",c);delete this.options.markers},setMap:function(d){var e=this.getContainer().rewind();this.set("map",d);while(e.isValid()){var c=e.getCurrent();c.setMap(d);e.next()}},getMap:function(){return this.get("map")},addMarker:function(d){var c=this.getContainer();c.addItem(d);d.setMap(this.getMap())},addMarkers:function(d){for(var c=0;l=d.length,c<l;c++){this.addMarker(d[c])}},removeMarker:function(d){var c=this.getContainer();c.removeItem(d);d.setMap(null)},removeMarkers:function(){var c=null,e=[],d=Array.from(arguments);if((d.length<=0)){d=this.getContainer().getItems()}while(d.length>0){e.push(d.shift())}e=e.flatten();while(e.length>0){c=e.shift();this.removeMarker(c)}},getContainer:function(){return this._container},getMarkers:function(){return this.getContainer().getItems()},setMarkers:function(f){var c=f.length,d=[];for(var e=0;e<c;e++){d.push(f[e])}this.getContainer().empty();this.addMarkers(d);this._displayMarkerChange()},getState:function(){var c=this.get("state");return c},_displayMarkerChange:function(){var h=this.getContainer().rewind();var g=[],f=[],c=[],e=[];while(h.isValid()){var d=h.getCurrent();(d.isVisible())?g.push(d):f.push(d);(d.isActive())?c.push(d):e.push(d);h.next()}var h={visibles:g,hiddens:f,actives:c,deactives:e};return this.set("state",h)},hasMarker:function(d){var c=false;var e=this.getContainer().rewind();while(e.isValid()){if(d==e.getCurrent()){c=true}e.next()}return c},visible:function(c){var d=function(e){return(c==e)?true:false};this._visibleMarkers.apply(this,[d]);this._displayMarkerChange()},visibleAll:function(){var d=this.getContainer().rewind();while(d.isValid()){var c=d.getCurrent();c.setVisible(true);d.next()}this._displayMarkerChange()},visibleByBounds:function(d){var c=function(e){return d.contains(e.getPosition())};this._visibleMarkers.apply(this,[c]);this._displayMarkerChange()},active:function(c){var d=function(e){return(c==e)?true:false};this._activeMarkers.apply(this,[d]);this._displayMarkerChange()},activeAll:function(){var d=this.getContainer().rewind();while(d.isValid()){var c=d.getCurrent();c.setActive(true);d.next()}this._displayMarkerChange()},activeByBounds:function(d){var c=function(e){return d.contains(e.getPosition())};this._activeMarkers.apply(this,[c]);this._displayMarkerChange()},_activeMarkers:function(e){var d=this.getContainer().rewind();while(d.isValid()){var c=d.getCurrent();c.setActive(e(c));d.next()}},_visibleMarkers:function(e){var d=this.getContainer().rewind();while(d.isValid()){var c=d.getCurrent();c.setVisible(e(c));d.next()}}})}(document.id));(function(b){var a=(this.MMap||{});a.MarkerLoader=new Class({Implements:[a.Events,a.Options],options:{format:"array"},initialize:function(c){this.setOptions(c)},load:function(e){var d=this;if(e){if(Type.isArray(e)){Object.merge(this.options,{markers:e})}else{Object.merge(this.options,e)}}var f=this.options.format;var c=a.MarkerLoader.factory(f);c.addEvents({onPreload:function(){d.fireEvent("preload")},onFailure:function(){var g=Array.from(arguments);d.fireEvent("failure",g)},onComplete:function(g){d.fireEvent("complete",[g])},onLoad:function(g){d.fireEvent("load",[d.build(g)])}});c.load(this.options)},build:function(f){var j=[],h=f.length;for(var e=0;e<h;e++){var d=f[e];var g=d.type||"html";g=(g=="html")?"HTML":g.capitalize();delete d.type;if(!a.Marker[g]){throw TypeError('Specified marker type "'+g+'" is not found.')}var c=new a.Marker[g](d);j.push(c)}return j}});a.MarkerLoader.factory=function(d){var c=null;switch(d){case"array":c=new a.MarkerLoader.Context();break;case"kml":break;case"json":default:c=new a.MarkerLoader.JSON();break}return c};a.MarkerLoader.Parser=new Class({Implements:[Events],parse:function(g){var c=[];var e=g.length;for(var f=0;f<e;f++){var d=g[f];var h=d.position;delete d.position;d.position=new google.maps.LatLng(h.latitude,h.longitude);c.push(d)}return c}});a.MarkerLoader.Context=new Class({Extends:a.MarkerLoader.Parser,load:function(d){this.fireEvent("preload");try{this.fireEvent("complete",[d.markers]);var e=this.parse(d.markers);this.fireEvent("load",[e])}catch(c){this.fireEvent("failure",[c])}}});a.MarkerLoader.JSON=new Class({Extends:a.MarkerLoader.Parser,_onRequest:function(){this.fireEvent("preload")},_onFailure:function(c){this.fireEvent("failure",[c])},_onSuccess:function(e,g){this.fireEvent("complete",[e]);var f=e.markers;var c=f.length;var d=this.parse(f);this.fireEvent("load",[d])},getRequest:function(e){if(this.request){this.request.setOptions(e);return this.request}var c=this;var d=["_onRequest","_onFailure","_onSuccess"];this.request=new Request.JSON(e);d.each(function(h){var g=c[h].bind(c);var f=h.replace("_","");c.request.addEvent(f,g);delete c[h]});return this.request},load:function(c){this.getRequest(c).send()}})}(document.id));(function(c){var a=(this.MMap||{});var b=15;a.Window=new Class({Extends:a.OverlayView,options:{className:"window windowDefault",title:"",content:"",position:"",zIndex:0,visible:true,active:false},initialize:function(d){this.parent(d)},_setup:function(d){var i=this.options.className;d.addClass(i);var j=this.get("zIndex");d.setStyle("z-index",j);var g=new Element("div",{"class":"inner"});var f=new Element("div",{"class":"hd"});var h=new Element("div",{"class":"bd"});var e=new Element("div",{"class":"ft"});g.adopt([f,h,e]);g.inject(d);var m=new Element("div",{"class":"hdgroup"});m.inject(f);var k=new Element("p",{"class":"close"});this._title=new Element("p",{"class":"title"});m.adopt([this._title,k]);this._closeButton=new Element("a",{title:"Close",href:"#",html:"Close"});this._closeButton.inject(k);this._content=new Element("div",{"class":"content"});this._content.inject(h);return g},_setupListeners:function(){var d=this;var e=this._getInstance();this._closeButton.addEvent("click",function(f){d.close();d.fireEvent("close")})},_init:function(){var d=this;var e=["title","content","position","zIndex","visible","active"];e.each(function(f){d.set(f,d.options[f])})},draw:function(){if(!this.isAdded()||!this.isOpen()){return this}this.refresh();var j=0;if(this._anchor){var g=this._anchor;var n=g.instance;j=n.getSize().y}var i=this.getProjection();var h=this.get("position");var q=this.instance.getSize();var p=i.fromLatLngToDivPixel(h);var k=p.y-q.y-j;var e=p.x-(q.x/2);var o={position:"absolute",left:e,top:k};this.instance.setStyles(o);var f=0;if(k<b&&k>=0){f=b-k}else{if(k<=0){f=Math.abs(k)+b}}var m=new google.maps.Point(p.x,p.y-f);var d=i.fromDivPixelToLatLng(m);this.getMap().panTo(d)},refresh:function(){if(!this.isAdded()){return this}this._updateVisibleState();this._update()},_updateVisibleState:function(){this.setZIndex(this.get("zIndex")).setVisible(this.get("visible"))},_update:function(){this._title.set("html",this.get("title"));this._content.set("html",this.get("content"))},open:function(e,d){this._anchor=d;this.setPosition(d.getPosition());if(this.isOpen()){return}this.setMap(e);this.fireEvent("open");this._opened=true},close:function(){this._opened=false;this.fireEvent("close");this.setMap(null)},isOpen:function(){return(this._opened)?true:false},getZIndex:function(){return this.get("zIndex")},setZIndex:function(e){if(!Type.isNumber(e)){new TypeError("The data type is not an integer.")}this.set("zIndex",e);var d=this._getInstance();d.setStyle("z-index",e);return this},getPosition:function(){return this.get("position")},setPosition:function(d){if(!instanceOf(d,google.maps.LatLng)){new TypeError("The data type is not an Latlng.")}this.set("position",d);this.draw();return this},getTitle:function(){return this.get("title")},setTitle:function(d){if(!Type.isString(d)){new TypeError("The data type is not a character string.")}this.set("title",d);this.draw();return this},getContent:function(){return this.get("content")},setContent:function(d){if(!Type.isString(d)||!Type.isElement(d)){new TypeError("The data type is a character string or not an element.")}this.set("content",d);this.draw();return this},setActive:function(e){if(!Type.isBoolean(e)){new TypeError("The data type is not an boolean.")}this.set("active",e);var d=this._getInstance();if(e){this.fireEvent("active");d.addClass("active")}else{d.removeClass("active")}return this}})}(document.id));
