if(typeof wxtools == 'undefined') {
	var wxtools = {};
	// rudimentary logging - we should improve this A LOT
	wxtools.log = function(message) {
		document.getElementById('log_target').innerHTML = message + '<br />' + document.getElementById('log_target').innerHTML;
	}
	var wxTools = wxtools;
}

wxtools.FlashMap_SWF = 'http://image.weather.com/web/flash/FMMain.swf';

wxtools.FlashMap_instances = {};

wxtools.FlashMapPan = function(id, latitude, longitude) { wxtools.FlashMap_instances[id].onPan(latitude, longitude); };
wxtools.FlashMapZoom = function(id, level) { wxtools.FlashMap_instances[id].onZoom(level); };
wxtools.FlashMapSetLayer = function(id, type, layer) { wxtools.FlashMap_instances[id].onSetLayer(type, layer); };
wxtools.FlashMapSetTrans = function(id, transparency) { wxtools.FlashMap_instances[id].onSetTransparency(transparency); };
wxtools.FlashMapPopUpMsg = function(id, message) { wxtools.FlashMap_instances[id].onPopUp(message); };
wxtools.FlashMapAnimate = function(id) { wxtools.FlashMap_instances[id].onAnimate(); };
wxtools.stopAnimate = function(id) { wxtools.FlashMap_instances[id].stopAnimate(); };
wxtools.animateStepBackward = function(id) { wxtools.FlashMap_instances[id].animateStepBackward(); };
wxtools.animateStepForward = function(id) { wxtools.FlashMap_instances[id].animateStepForward(); };
wxtools.animateOnToStart = function(id) { wxtools.FlashMap_instances[id].animateOnToStart(); };
wxtools.animateOnToEnd = function(id) { wxtools.FlashMap_instances[id].animateOnToEnd(); };


wxtools.FlashMap = function(targetID, latitude, longitude, level, config) {
	wxtools.FlashMap_instances[targetID] = this;
	
	this.targetID = targetID;
	this.targetElement = document.getElementById(this.targetID);	
	this.latitude = latitude;
	this.longitude = longitude;
	this.level = level;
	
	this.layers = {basemap:'hybrid', wxlayer:'radar'};
	this.transparency = null;
	this.lastMessage = '';
	this.animated = false;
	
	this.swfObj = this.loadSwf(config);
	
	EventBroadcaster.initialize(this);
};
wxtools.FlashMap.prototype = {
	broadcastMessage:function() {},
	addListener:function() {},
	removeListener:function() {},
	
	getTargetID:function() { return this.targetID; },
	getCenter:function() { return {latitude:this.latitude, longitude:this.longitude}; },
	getZoom:function() { return this.level; },
	getLayers:function() { return this.layers; },
	getTransparency:function() { return this.transparency; },
	getLastMessage:function() { return this.lastMessage; },
	getAnimated:function() { return this.animated; },
	
	loadSwf:function(config) {
		//var target = this.targetElement;
		var width = this.targetElement.style.width.substr(0, this.targetElement.style.width.indexOf('px'));
		var height = this.targetElement.style.height.substr(0, this.targetElement.style.height.indexOf('px'));
		
		var so = new SWFObject(wxtools.FlashMap_SWF, this.targetID + '_obj', width, height, '8', '#FFFFFF', true);
		so.addParam('quality', 'high');
		so.addParam('wmode', 'opaque');
		so.addParam('allowScriptAccess', 'always');
		so.addParam('scale', 'noscale');
		
		so.addVariable('instanceID', this.targetID);		
		so.addVariable('lat', this.latitude);
		so.addVariable('long', this.longitude);		
		so.addVariable('initialZoomLevel', this.level);		
		
		so.addVariable('panFrameAlpha', '60');
		so.addVariable('config', config);
		return so;		
	},
	
	showMap:function(){
		this.swfObj.write(this.targetElement);			
		this.targetElement = document.getElementById(this.targetID + '_obj');	
	},
	
	addConfigVariable:function(varName, varVal){
		this.swfObj.addVariable(varName, varVal);
	},
	
	setLayer:function(type, layer){
		this.layers[type] = layer;
	},
	
	onPan:function(latitude, longitude) {
		this.latitude = latitude;
		this.longitude = longitude;		
	   	this.broadcastMessage("onPan", latitude, longitude);
	},
	onZoom:function(level) {
		this.level = level;
		this.broadcastMessage("onZoom", level);
	},
	onSetLayer:function(type, layer) {
		this.layers[type] = layer;
		this.broadcastMessage("onSetLayer", type, layer);
	},
	onSetTransparency:function(transparency) {
		this.transparency = transparency;
		this.broadcastMessage("onSetTransparency", transparency);
	},
	onPopUp:function(message) {
		this.lastMessage = message;
		this.broadcastMessage("onPopUp", message);
	},
	onAnimate:function() {
		this.animated = true;
		this.broadcastMessage("onAnimate");
	},
	stopAnimate:function() {
		this.animated = false;
		this.broadcastMessage("stopAnimate");
	},
	animateStepBackward:function() {
		this.broadcastMessage("animateStepBackward");
	},
	animateStepForward:function() {
		this.broadcastMessage("animateStepForward");
	},
	animateOnToStart:function() {
		this.broadcastMessage("animateOnToStart");
	},
	animateOnToEnd:function() {
		this.broadcastMessage("animateOnToEnd");
	}
	
};
var FlashMap = wxtools.FlashMap;
