/**
 * @author Kris
 */


	/** 
	 * eventBroadcaster notifies listeners of a change in the model
	 * example:
	 * 	 flashEventTransmition.addListener(
	 *       'randomID',
	 *	     method-to-call,
	 *	     scope-to-call-method-in
	 *    )
	 */
	
//flashEventTransmition = new Broadcaster();


function CoverView(xmlLocation){


	var swfAddress = '/Flash/iBelongCoverView.swf';
	var bgColor = '#333333';

	var xmlUrl = xmlLocation;
	var cameraZ = -1000;
	var cameraFocus = 200;
	var cameraZoom = 5;
	var scrollbarScale = 1;
	
	var flashWidth;
	var flashHeight;
	var flashDivId;
	this.thisInstanceName =""
	var flashInstanceName;
	
	var isReady = false;
	var currentImageArray;
	
	var eventBroadcaster = new EventBroadcaster();
	
	var embedInForm = false;
	var formNumber = false;
	var guidToSendonStart = '';
	
	this.flashPreferences = function(width, height, divId){
		flashWidth = width;
		flashHeight = height;
		flashDivId = divId;
		flashInstanceName = 'flashCoverview' +divId;
		//flashInstanceName = 'somethingWhackyabc'
	}
	
	this.setEmbedInForm = function(num){
		embedInForm = true;
		formNumber = num;
	}
	
	this.setImageArray = function(arr, guid){
		currentImageArray = arr;
		if (isReady) {
			//	alert('sending image array to flash');
			var imageCommand = {
				'array': arr,
				'guid': guid
			}
			this.getFlashObject().setImageArray(imageCommand);
		}else {
			guidToSendonStart = guid;
		}
	}
	
	this.setCameraZ = function(cameraZaxis){
		cameraZ = cameraZaxis;
	}
	
	this.setScrollScale = function(scale){
		scrollbarScale = scale;
	}
	
	this.setInstanceName = function (name){
		instanceName= name;
	}
	
	this.init = function(){
	//	alert('initing instanceName');
	//	alert(this.thisInstanceName);
		var so = new SWFObject(swfAddress, flashInstanceName, flashWidth, flashHeight, "9", bgColor);
		so.addParam("salign", "b");
		so.addParam("scale", "noscale");
		so.addParam('allowScriptAccess', 'always');
		so.addParam('wmode','opaque'); // this is set to allow menu to show on top of the flash control
		so.addVariable("xmlUrl", xmlUrl);
		so.addVariable("scrollbarScale", scrollbarScale);
		so.addVariable("bgColor", bgColor);
		so.addVariable("cameraZ", cameraZ);
		so.addVariable("cameraZoom", cameraZoom);
		so.addVariable("cameraFocus", cameraFocus);
		so.addVariable('instanceName' , this.thisInstanceName)	
		so.addVariable('passedWidth' , flashWidth)		
		so.addVariable('passedHeight' , flashHeight)		
   		so.write(flashDivId);
	}
	
	this.getFlashObject = function(){
		if (navigator.appName.indexOf("Microsoft") != -1) {
			if (embedInForm) {
				return document.forms[0][flashInstanceName];
			}			
			else {
				//alert('finding js object = '+ window[flashInstanceName] );
				return window[flashInstanceName];
			}
		}
		else {
			//alert('finding js object = '+ document[flashInstanceName] );
			return document[flashInstanceName];
		}
	}
	
	this.flashIsReady = function(bool){
		//alert('flashisready called');
		if (isReady != bool) {
			isReady = bool;
			if (isReady && (currentImageArray != undefined)) {
				//alert('next call would be setImageArray');
				
				var imageCommand = {
					'array': currentImageArray,
					'guid': guidToSendonStart			
				}
				this.getFlashObject().setImageArray(imageCommand);
			}
		}
	}
	
	this.guidSelectedEvent = function(guidFromFlash){
		
		var e ={
			type : 'EVENT_ITEM_SELECTED',
			docId :guidFromFlash
		}
		
		eventBroadcaster.fireEvent('EVENT_ITEM_SELECTED', e);
	}
	
	this.guidDoubleClickEvent = function(guidFromFlash){
		
		var e ={
			type : 'EVENT_DOUBLE_CLICK',
			docId :guidFromFlash		}
		
		eventBroadcaster.fireEvent('EVENT_DOUBLE_CLICK', e);
	}
	
	this.addEventListener = function(type, func){
		eventBroadcaster.addListener(type,func);		
	}
	
	this.selectItem = function(guidToFlash) {
	    var flashObj = this.getFlashObject();
		    if (flashObj != null)
		    {
	            if (typeof flashObj.guidSelected == 'function')
                {
			        flashObj.guidSelected(guidToFlash);	
			    }
			}
	}
}