/*
 * Regio MapCat Components
 * Copyright Regio AS
 * http://mapcat.regio.ee
 */
/*
 * Build: Fri Oct 9 13:22:05 EEST 2009
 * api/Namespace.js
 * api/Listener.js (ver 1.0)
 * api/Listeners.js (ver 1.5.5)
 * api/Log.js
 * api/Component.js (ver 2.9.1)
 */
if(typeof (Regio)=="undefined"){Regio={}}(function($){window.MapCat={Version:"2.x"};MapCat.Listener=function(listeners,callback,contest){this.callback=callback;this.contest=contest;this.call=function(){return callback.apply(contest,arguments)};this.remove=function(){listeners.removeByFunction(callback)}};MapCat.Listeners=function(){this.list={}};MapCat.Listeners.prototype={add:function(eventName,callback,contest){var events=eventName.split(" ");for(var i=0;i<events.length;i++){this.addEx.call(this,events[i],callback,contest)}return this},eventAdded:undefined,addEx:function(eventName,callback,contest){if(this.eventAdded){this.eventAdded(eventName)}var me=this;var rec=new MapCat.Listener(this,callback,contest);if(this.list[eventName]){this.list[eventName].push(rec)}else{this.list[eventName]=[rec]}return rec},removeByFunction:function(func){for(var a in this.list){var arr=this.list[a];for(var i=arr.length-1;i>=0;i--){var rec=arr[i];if(rec.callback==func){arr.splice(i,1)}}if(arr.length==0){delete this.list[a]}}return this},broadcast:function(){var args=[undefined];for(var i=0;i<arguments.length;i++){args.push(arguments[i])}return this.broadcastEx.apply(this,args)},eventsFilter:undefined,broadcastEx:function(filter,eventName){var result,l,args;if(this.eventsFilter&&!this.eventsFilter(eventName)){return null}function processQueue(l,args){for(var i=0;i<l.length;i++){var rec=l[i];if(filter&&!filter(rec)){continue}var r=rec.call.apply(rec,args);if(typeof (r)!="undefined"&&(r!=null)){result=r}}}args=[];for(var i=1;i<arguments.length;i++){args.push(arguments[i])}if(l=this.list["*"]){processQueue(l,args)}args.shift();if(l=this.list[eventName]){processQueue(l,args)}return result},call:function(){return this.broadcast.apply(this,arguments)}};MapCat.Log={add:function(str){}};MapCat.Component=function(){var result=this.initialization.apply(this,arguments);return result};MapCat._getTagHTML=function(cfg){cfg.id=cfg.id?cfg.id:"";cfg.vars=cfg.vars?cfg.vars:"";cfg.src=cfg.src?cfg.src:"map.swf";cfg.width=typeof (cfg.width)=="undefined"?"100%":cfg.width;cfg.height=typeof (cfg.height)=="undefined"?"100%":cfg.height;cfg.wmode=typeof (cfg.wmode)=="undefined"?"window":cfg.wmode;cfg.bgcolor=typeof (cfg.bgcolor)=="undefined"?"738aa0":cfg.bgcolor;cfg.scale=typeof (cfg.scale)=="undefined"?"noscale":cfg.scale;cfg.quality=typeof (cfg.quality)=="undefined"?"high":cfg.quality;if(typeof (cfg.protocol)=="undefined"){cfg.protocol=(""+window.location).match("^https://")?"https":"http"}if((cfg.protocol!="https")&&(cfg.protocol!="http")){cfg.protocol="http"}with(cfg){var html='<object codebase="'+cfg.protocol+'://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" width="'+width+'" height="'+height+'"classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" id="'+cfg.id+'"><param name="quality" value="'+quality+'" /> <param name="scale" value="'+scale+'" /> <param name="allowScriptAccess" value="always" /> <param name="bgcolor" value="'+bgcolor+'" /> <param name="flashvars" value="jsApiID='+apiID+"&"+vars+'" /> <param name="movie" value="'+src+'" /> <param name="wmode" value="'+wmode+'" /> <embed quality="'+quality+'" scale="'+scale+'" width="'+width+'" height="'+height+'"allowscriptaccess="always" bgcolor="'+bgcolor+'" flashvars="jsApiID='+apiID+"&"+vars+'" pluginspage="'+cfg.protocol+'://www.macromedia.com/go/getflashplayer" src="'+src+'" wmode="'+wmode+'" type="application/x-shockwave-flash" id="'+cfg.id+'" ></embed></object>'}return html};MapCat._apiList={};MapCat._apiList.register=function(api){MapCat._apiList[api.id]=api};MapCat._flashGateway=function(apiID,func,args){if(MapCat&&MapCat._apiList){var api=MapCat._apiList[apiID];if(api){return api[func].apply(api,args)}}return null};MapCat.Component.prototype={initialization:function(divid,cfg,listeners){cfg=cfg||{};this.jsSubscribed={"get-js-subscribed":true,"js-subscribe":true,"flash-subscribe":true};this.flashSubscribed={"js-subscribe":true,"flash-subscribe":true};this.id="mapcat_api_"+Math.random().toString().split(".")[1];cfg.apiID=this.id;if(!cfg.id){cfg.id=this.id}MapCat._apiList.register(this);if(!listeners){this.listeners=new MapCat.Listeners();var self=this;var listeners=this.listeners;listeners.add("flash-subscribe",function(eventName){self.flashSubscribed[eventName]=true});listeners.add("js-subscribe",function(eventName){self.jsSubscribed[eventName]=true});listeners.add("get-js-subscribed",function(){return self.jsSubscribed});listeners.eventsFilter=function(eventName){return self.jsSubscribed[eventName]||self.flashSubscribed[eventName]};listeners.eventAdded=function(eventName){listeners.broadcast("js-subscribe",eventName)}}else{this.listeners=listeners}var flashListener=this.listeners.addEx("*",function(){if(this.flashSubscribed[arguments[0]]){return this._callFlash.apply(this,arguments)}else{return }},this);this._flashListenerFilter=function(listener){return(listener!=flashListener)};var div=false;if(typeof divid=="string"){div=document.getElementById(divid)}else{div=divid}this.div=div;this.cfg=cfg;if(navigator.userAgent.match(/safari/i)||(cfg.wmode||"").match(/opaque|transparent/i)){this.initMouseWheel()}this.stack=[];this.addCallback(cfg.loadedEvent?cfg.loadedEvent:"mapcat.loaded",this._flashLoadedEvent,this);return this.restart()},initMouseWheel:function(){var me=this;function addEvent(el,eType,fn,uC){if(el.addEventListener){el.addEventListener(eType,fn,uC);return true}else{if(el.attachEvent){return el.attachEvent("on"+eType,fn)}else{el["on"+eType]=fn}}}function cancelEvent(e){e=e?e:window.event;if(e.stopPropagation){e.stopPropagation()}if(e.preventDefault){e.preventDefault()}e.cancelBubble=true;e.cancel=true;e.returnValue=false;return false}function wheelCallback(e){e=e?e:window.event;var wheelData=(e.detail?e.detail*-1:e.wheelDelta/40)/3;var x=typeof e.offsetX!="undefined"?e.offsetX:e.layerX;var y=typeof e.offsetY!="undefined"?e.offsetY:e.layerY;me.ready(function(){me.broadcast(me.cfg.mouseWheelEvent?me.cfg.mouseWheelEvent:"map.zoom",{x:x,y:y,delta:wheelData})});return cancelEvent(e)}addEvent(this.div,"DOMMouseScroll",wheelCallback,false);addEvent(this.div,"mousewheel",wheelCallback,false)},restart:function(){this.flashLoaded=false;var div=this.div,cfg=this.cfg;var result=false;if(div){div.innerHTML=MapCat._getTagHTML(cfg);var embeds=div.getElementsByTagName("embed");if(!embeds||embeds.length==0){embeds=div.getElementsByTagName("object")}result=embeds.length>0;if(result){this.flash=embeds[0]}if(this.flash){window[cfg.id]=this.flash}}else{result=false}return result},addCallback:function(eventName,callback,me){this.listeners.add(eventName,callback,me)},broadcast:function(){this.call.apply(this,arguments)},broadcastOnReady:function(){var args=arguments,self=this;this.ready(function(){self.broadcast.apply(self,args)})},call:function(){var res=this.listeners.broadcast.apply(this.listeners,arguments);return res},ready:function(func){if(this.flashLoaded){func.apply(func)}else{this.stack.push(func)}},_flashListener:undefined,_flashListener:undefined,_callLocal:function(){var args=[this._flashListenerFilter];for(var i=0;i<arguments.length;i++){args.push(arguments[i])}return this.listeners.broadcastEx.apply(this.listeners,args)},_callFlash:function(){if(this.flash&&this.flash._javascriptGateway){var args=[];for(var i=0;i<arguments.length;i++){args.push(arguments[i])}var flashresult=null;try{flashresult=this.flash._javascriptGateway(this.id,"callLocal",args)}catch(e){MapCat.Log.add("Exception while calling Flash callback: "+e,MapCat.Log.ERROR)}return flashresult}return null},_flashLoadedEvent:function(){this.flashLoaded=true;while(this.stack.length>0){var f=this.stack.shift();f.apply(f)}}}})(window.jQuery);
