function TDVViewer()
{
	this.__init__ = function()
	{
		this._embedded = false;
		this._parentId = undefined;
		this._baseDir = undefined;
		this._placeDirName = undefined;
		this._skin = undefined;
		this._clearViewerState();		
	}	
	
	this.embed = function(baseDir, placeDirName, skin, parentId)
	{		
		this.remove();
				
		if (baseDir.lastIndexOf("/") != (baseDir.length-1))
			baseDir += "/";
		this._baseDir = baseDir;
		this._placeDirName = placeDirName;
		this._skin = skin;
		this._parentId = parentId; 		
				
		this._embedViewer(this._baseDir, this._placeDirName, this._skin, this._parentId);
	}
	
	this.setSkin = function(skin)
	{
		if (skin != this._skin)
		{
			this._removeViewer();
			this._skin = skin;
			this._embedViewer(this._baseDir, this._placeDirName, skin, this._parentId);
			this._assignViewerState();
		}
	}
		
	this.remove = function()
	{	
		this._removeViewer();
		this._clearViewerState();			
	}		
	
	this.addMovementChangeListener = function(listener)
	{
		tdvViewerAPI.addListener(TDVViewerAPI.MOVEMENT_CHANGE_EVENT, listener);
		this._movementChangeListeners.push(listener);
	} 

	this.removeMovementChangeListener = function(listener)
	{
		tdvViewerAPI.removeListener(TDVViewerAPI.MOVEMENT_CHANGE_EVENT, listener);
		var index = this._movementChangeListeners.indexOf(listener);
		if (index >= 0)
			this._movementChangeListeners.splice(index, 1);		
	}
		
	this.setMediaByIndex = function(index)
	{		
		tdvViewerAPI.setMediaByIndex(index);
		this._mediaIndex = index;
		this._movement = undefined;
	}
	
	this.play = function()
	{
		tdvViewerAPI.play();
		this._playing = true;	
	}
	
	this.stop = function()
	{
		tdvViewerAPI.stop();
		this._playing = false;	
	}	
	
	this.setMovement = function(value)
	{
		tdvViewerAPI.setMovement(value);
		this._movement = value;		
	}	
	
	this.beginZooming = function(value)
	{	
		tdvViewerAPI.beginZooming(value);
	}
	
	this.endZooming = function(value)		
	{	
		tdvViewerAPI.endZooming(value);
	}	
	
	this._embedViewer = function(baseDir, placeDirName, skin, parentId)
	{		
		var skinParams = TDVViewer._SKINS[skin];
						
		var attributes = 
		{
			id: TDVViewer._NAME,			 
			name: TDVViewer._NAME
		};
		
		var embedParams = 
		{		
			quality: "high",
			wmode: "transparent",
			bgcolor: "#ffffff", 
			allowscriptaccess: "true",
			allowfullscreen: "true"
		};		
									
		var flashvars = 
		{
			baseDir: baseDir + placeDirName + "/virtualTour/",
			skinFile: baseDir + skinParams.file,
			skinImagesDir: baseDir + skinParams.imagesDir,
			splashFile: baseDir + "virtualTour/splash/splash.xml",
			splashImagesDir: baseDir + "virtualTour/splash"			
		};				

		var replacement = document.createElement("div");
		replacement.setAttribute("id", TDVViewer._NAME);
		document.getElementById(parentId).appendChild(replacement);				
		
		swfobject.embedSWF(baseDir + "virtualTour/swfs/Viewer.swf", TDVViewer._NAME, skinParams.width.toString(), skinParams.height.toString(), "10.0.0", baseDir + "virtualTour/swfs/expressInstall.swf", flashvars, embedParams, attributes);


		tdvViewerAPI.init(TDVViewer._NAME);
		var self = this;
		tdvViewerAPI.addListener(TDVViewerAPI.MEDIA_INDEX_CHANGE_EVENT, function(index) { self._mediaIndexChanged(index); });
		
		this._embedded = true;
	}
	
	this._removeViewer = function()
	{
		if (this._embedded)
		{
			swfobject.removeSWF(TDVViewer._NAME);
			tdvViewerAPI.finish();
			this._embedded = false;
		}	
	}

	this._clearViewerState = function()
	{		
		this._playing = undefined;
		this._mediaIndex = 0;
		this._movement = undefined;
		this._movementChangeListeners = [];	
	}				
	
	this._assignViewerState = function()
	{
		if (this._mediaIndex != undefined)
			tdvViewerAPI.setMediaByIndex(this._mediaIndex);
			
		if (this._playing != undefined)
		{
			if (this._playing)
				tdvViewerAPI.play();
			else
				tdvViewerAPI.stop();
		}
		
		if (this._movement != undefined)
			tdvViewerAPI.setMovement(this._movement);
			
		for (var i = 0; i < this._movementChangeListeners.length; i++)
			tdvViewerAPI.addListener(TDVViewerAPI.MOVEMENT_CHANGE_EVENT, this._movementChangeListeners[i]);
	}
	
	this._mediaIndexChanged = function(index)
	{
		if (this._mediaIndex != index)
		{
			this._mediaIndex = index;
			this._movement = undefined;
		}
	}	
		
	this.__init__();
};

TDVViewer.SKIN_0 = 0;
TDVViewer.SKIN_1 = 1;

TDVViewer.MOVEMENT_STOP = TDVViewerAPI.MOVEMENT_STOP;
TDVViewer.MOVEMENT_LEFT = TDVViewerAPI.MOVEMENT_LEFT;
TDVViewer.MOVEMENT_RIGHT = TDVViewerAPI.MOVEMENT_RIGHT;
TDVViewer.MOVEMENT_UP = TDVViewerAPI.MOVEMENT_UP;
TDVViewer.MOVEMENT_DOWN = TDVViewerAPI.MOVEMENT_DOWN;

TDVViewer.ZOOMING_IN = TDVViewerAPI.ZOOMING_IN;
TDVViewer.ZOOMING_OUT = TDVViewerAPI.ZOOMING_OUT;


TDVViewer._NAME = "SWFVTViewer";
TDVViewer._SKINS = 
[
	{
		file: "virtualTour/skins/skin0.xml",
		imagesDir: "",
		width: 729,
		height: 223 
	},
	{
		file: "virtualTour/skins/skinFull.xml",
		imagesDir: "",
		width: 829,
		height: 400 
	}
];

tdvViewer = new TDVViewer();
