var YPDGame = new Class ({
	options: {
		debug: false,
		DCRPath: '/fileadmin/biont3d/Biont3D.dcr',
		DIRProxySWFPath: '/fileadmin/s3/gears/javascript/dirproxy/JavaScriptDirectorGateway.swf',
		HUDconfigfile: 'fileadmin/flash/test_config.js',
		HUDFlashPath: '/fileadmin/flash/flashHUD.swf',
		emergencyUpdateInterval: 15000,
		emergencyFileUrl: '/fileadmin/s3/gears/emergencynotify/emergencymessage.txt',
		webdomain: 'http://www.ypdpeople.com',
		initialLoadConfig: '',
		gameWidth: 800,
		gameHeight: 450
	},
	initialize: function(el,options){
		if (!el) return;
		this.setOptions(options);
		var wehaveConsole = false;
		if(typeof(console) !== 'undefined' && console != null) { wehaveConsole = true;}
		if (this.options.debug && wehaveConsole==false) {this.options.debug = false;}
		if (!this.options.debug){this.options.debug = false;}
		// Dirproxy Erzeugen
		this.dirproxyID = new Date().getTime();
		this.myDirProxy = new DirProxy(this.dirproxyID, this.options.DIRProxySWFPath);
		// Request Objekte erzeugen
		this.CollectBackpackItemRequest = new Request.JSON({url: "index.php", method: "get",
			onComplete: function(returner){
				this.debugMessage('StoreBackPackitem',returner);}.bind(this),
			onFailure: function(xhr){
				this.debugMessage('ERROR: StoreBackPackitem',xhr);}.bind(this)
		});
		this.TellMeWhatToDoRequest = new Request.JSON({
			url: "index.php", 
			method: "get",
			onSuccess: function(returner, responseText){
				//alert(responseText);
				this.debugMessage('Answer from Server',returner);
				var delay = 0;
				if (returner) {
					if(responseText!='[]'){
					returner.each(function(item, index){
					// Reagieren auf die Action die übergeben wird
						this.executeAction(item);
						}.bind(this)); // end each
					}
					else {
						 // Wenn das Array leer ist Biont Bescheid sagen
						this.Biont3dSendOrder('biontEmptyRequest',[]);
					}
				
				}
				}.bind(this),
			onFailure: function(xhr){
				this.debugMessage('ERROR: Tellmewhattodo',xhr);}.bind(this)

		});
		
		// BackpackItem Klickerich einrichten
		if ($('backpackitem-inactive')){
			
			this.BPItemInactive = $('backpackitem-inactive');
			this.BPItemActive = $('backpackitem-active');
			this.BPItemInactive.addEvent('click', function(){
				var BiontData = {'type':'showbackpackitems','data':{'URL':this.options.webdomain+'/index.php?eID=getbackpacklist','title':'Deine Rucksackitems','datadomain':this.options.webdomain},'configfile':this.options.HUDconfigfile};
				this.Biont3dSendOrder('biontOpenHUD',BiontData);
			}.bind(this));
			this.BPItemActive.addEvent('click', function(){
				var BiontData = {'type':'showbackpackitems','data':{'URL':this.options.webdomain+'/index.php?eID=getbackpacklist','title':'Deine Rucksackitems','datadomain':this.options.webdomain},'configfile':this.options.HUDconfigfile};
				this.Biont3dSendOrder('biontOpenHUD',BiontData);
				this.BPItemActive.hide();
				this.BPItemInactive.show();
			}.bind(this));
			this.BPItemInactive.show();
		}
		// Emergencupdate einrichten:
		if ($('emergencyMessageActive')) {
			this.emergencyActive = $('emergencyMessageActive').hide();
			this.emergencyInactive = $('emergencyMessageInactive').show();
			this.emergencyInactive.addEvent('click', function(){
				var BiontData = {'type':'multimedia','data':{'text':this.emergencyMessageText,'title':'Nachricht vom YPD Kommittee'},'configfile':this.options.HUDconfigfile};
				this.Biont3dSendOrder('biontOpenHUD',BiontData);
			}.bind(this));
			this.emergencyActive.addEvent('click', function(){
				var BiontData = {'type':'multimedia','data':{'text':this.emergencyMessageText,'title':'Nachricht vom YPD Kommittee'},'configfile':this.options.HUDconfigfile};
				this.Biont3dSendOrder('biontOpenHUD',BiontData);
			}.bind(this));
		
		this.myEmergencyRequest = new Request.HTML({
				'method': 'post',
				'url': this.options.emergencyFileUrl,
				'onSuccess': function(responseTree, responseElements, responseHTML, responseJavaScript){
					if (responseHTML!=''){
						// Neue Nachricht vorhanden
						this.emergencyMessageText = responseHTML;
						this.emergencyActive.show();
						this.emergencyInactive.hide();
					}
					else {
						// Keine Nachricht vorhanden
						this.emergencyMessageText = responseHTML;
						this.emergencyActive.hide();
						this.emergencyInactive.show();
					}
					
				}.bind(this)
				});
		this.myEmergencyRequest.send({data: 'randnumber='+new Date().getTime()});
		(function(){this.myEmergencyRequest.send({data: 'randnumber='+new Date().getTime()});}).periodical(this.options.emergencyUpdateInterval,this);
		}
		this.showYPDGame(el);
		
	},
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//  Führ übergebene Actions aus
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
	executeAction: function(actionObject){
		var action = actionObject['action'];
		var delay = 0;
		if (actionObject['delay']){delay = actionObject['delay'].toInt();}
		if (actionObject['klicktracker']){clickTracker(actionObject['klicktracker']);}
		this.debugMessage('Executing Action (Delay:'+delay+'ms)',action);
		(function(){
			switch(action) {
						
						case "hudvideo":
							this.openHUDMultimedia(actionObject);
						break;
						case "challengecounter":
							this.changeChallengecounter(actionObject['counterdata']);
						break;
						case "loadmap":
							this.options.initialLoadConfig = actionObject.biontarray;
							this.loadMap(actionObject.biontarray);
						break;
						case "switcher":
							this.changeSwitcher(actionObject.switcherID, actionObject.switcherTargetState,actionObject.switcherType);
						break;
						case "debugMessage":
							this.debugMessage('Debug: ', actionObject['data']);
						break;
						case "missingBackpack":
							this.debugMessage('Du brauchst noch folgende Rucksackitems: ', actionObject['data']);
						break;
						case "error":
							this.debugMessage('Error: ', actionObject.message);
						break;
						case "question":
							this.renderQuestion(actionObject.questionData);
						break;						
						case "backtogame":
							this.closeHUD()
						break;
						case "videoswitch":
							this.videoSwitch(actionObject['swf_file'],actionObject['flv_file']);
						break;
						case "changewarper":
							if (this.options.debug == 1) {
							$('challengewarperselect').value = actionObject.target.toInt();
							}
						break;
						case "link":
							this.Biont3dSendOrder('biontReleaseWindow',[]);
							if (actionObject.linktarget == "_blank"){
								window.open(actionObject.linkurl);
							}
							else {
								document.location.href = actionObject.linkurl;
							}
						break;
						default:
							this.Biont3dSendOrder('biontEmptyRequest',[]);
							this.debugMessage('Unbekannte Action: ', actionObject.action);
						break;
						}}.bind(this)).delay(delay);
	},
	debugMessage: function(message, data) {
		if (this.options.debug == 1) {
		console.log('JS Debug: '+message,data);
		}
	},
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//  Anzeigen des Games je nach Browser
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
	showYPDGame: function(element){
		var objectTagIE = '<object classid="clsid:233C1507-6A77-46A4-9443-F871F945D258"'+
			'	 codebase="http://download.macromedia.com/pub/shockwave/cabs/director/sw.cab#version=11,5,6,606"'+
			' id="biont3d" width="'+this.options.gameWidth+'" height="'+this.options.gameHeight+'">'+
			'<param name="src" value="'+this.options.DCRPath+'">'+
			'<param name="swStretchStyle" value="stage">'+
			'<param name="playerVersion" value="11" /> '+
			'<param name="sw1" value="'+this.dirproxyID+'" /> '+
			'<param name="swRemote" value="swSaveEnabled=\'true\' swVolume=\'true\' swRestart=\'true\' swPausePlay=\'true\' swFastForward=\'true\' swContextMenu=\'false\' ">'+
			'</object>';
		var embedTagFF = '<embed sw1="'+this.dirproxyID+'" id="biont3d" src="'+this.options.DCRPath+'" width="'+this.options.gameWidth+'" height="'+this.options.gameHeight+'" swremote="swSaveEnabled=\'true\' swVolume=\'true\' swRestart=\'true\' swPausePlay=\'true\' swFastForward=\'true\' swContextMenu=\'false\'" swstretchstyle="stage" type="application/x-director" playerVersion="11" pluginspage="http://www.macromedia.com/shockwave/download/"></embed>';
		if (Browser.Engine.trident){
			element.set('html',objectTagIE);
		}
		else {
			element.set('html',embedTagFF);
		}
	},
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Switcher umstellen
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
	changeSwitcher: function(switcherID, switcherTargetState,switcherType){
		this.debugMessage('Change Switcher', switcherID+'->'+switcherTargetState);
		switch (switcherType){
		case "2":
		// Keyframe
		var BiontData = [switcherID,switcherTargetState, 1];
		var BiontOrder = 'biontKeyframeTrigger';		
		break;
		case "5":
		// Shader
		var BiontData = [switcherID,switcherTargetState];
		var BiontOrder = 'biontModelSwitch';	
		break;
		case "6":
		// Texturswitcher
		var BiontData = [switcherID,switcherTargetState];		
		var BiontOrder = 'biontShaderSwitch';	
		break;
		
		}
		this.Biont3dSendOrder(BiontOrder,BiontData);
		
	},							
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Befehl an Biont3d senden
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
	Biont3dSendOrder: function(order, data){
		var BiontData = {"#command":order,"#data":data,"#path":this.options.HUDFlashPath};
		this.myDirProxy.call('biontDoThis',JSON.encode(BiontData));	
		this.debugMessage('Biont3dSendOrder: '+order, BiontData);	
	},
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//  VideoSwitch
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
	videoSwitch: function(swfFile, flvFile){
		this.debugMessage('videoSwitch: ',swfFile+' ' +flvFile);	
		this.Biont3dSendOrder('biontVideoSwitch',[swfFile]);
	},
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//  HUD Multimedia öffnen
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
	openHUDMultimedia: function(multimediaObject){
		var dataobject =  {'type':'multimedia',data:{'text':multimediaObject.text,'multimedia':multimediaObject.multimedia,'title':multimediaObject.title,'media':multimediaObject.media},'configfile':this.options.HUDconfigfile};
		this.debugMessage('openHUDMultimedia: ',dataobject);	
		this.Biont3dSendOrder('biontOpenHUD',dataobject);
	},
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Funktion um eine neue Map zu laden
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
	loadMap: function(Config){
		this.Biont3dSendOrder('biontLoadNextMap',['',Config]);
	},
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Hud Schliessen
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
	closeHUD: function(){
		this.Biont3dSendOrder('biontCloseHUD',{});
	 },
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Einsammeln von Rucksackitems
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
	Biont3dCollectBackPackItem: function(item){
		this.debugMessage('BackPackItem COLLECT:',item);
		this.TellMeWhatToDoRequest.send({data: 'eID=collectbackpackitem&collectBackPackItem='+encodeURIComponent(item)});
		this.BPItemActive.show();
		this.BPItemInactive.hide();
	},
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Klicken auf ein Objekt
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
	Biont3dClickItem: function(item){
		this.debugMessage('Klick auf ITEM:',item);
		this.TellMeWhatToDoRequest.send({data: 'eID=tellmewhattodo&clickedObject='+encodeURIComponent(item)});
	},
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Beim Auslösen eines Events
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
	Biont3dCollisionEvent: function(item){
		this.debugMessage('Biont3dCollisionEvent:',item);
		this.TellMeWhatToDoRequest.send({data: 'eID=tellmewhattodo&clickedObject='+encodeURIComponent(item)});
	},
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//  Übergibt die #filestoload bei initialen Laden
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
	Biont3dGetInitialLoadconfig: function(item){
		this.loadMap(JSON.decode(this.options.initialLoadConfig));
	},
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//  Übernimmt die Sceneinfos
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
	Biont3dGetSceneInfos: function(item){
		// Wird getriggert durch Aufruf von: myYPDGame.myDirProxy.call(getsceneinfos)
		this.debugMessage('Biont3dGetSceneInfos:',item);
		if ($type(decompileMe)=="function"){
		decompileMe(JSON.decode(item));
		}
	},
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//  Dosenitems eingesammelt
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
	Biont3dAllItemsCollected: function(item){
		this.debugMessage('Biont3dallItemsCollected:',item);
		item = JSON.decode(item);
		this.debugMessage('Biont3dallItemsCollected:',item);
		this.TellMeWhatToDoRequest.send({data: 'eID=collectitems&sumitems='+encodeURIComponent(item.sumItems)+'&collecteditems='+encodeURIComponent(item.collectedItems)+'&time='+encodeURIComponent(item.time)});
	},		
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//  Speicher die Antowrt der Frage ab
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
	storeAnswer: function(questionID,answerID,answerText){
		this.debugMessage('storeAnswer: Speichere Antwort'+answerID+' '+answerText+' für Frage ID:'+answerID);
		this.TellMeWhatToDoRequest.send({'data': 'eID=storeanswer&answerText='+answerText+'&questionID='+questionID+'&answerID='+answerID});
	},	
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//  Setzen des Challengefortschritts
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
	changeChallengecounter: function(actionObject){
		var myStep = actionObject.mystep;
		var totalStep = actionObject.total;
		var Textmessage = 'Du bist bei Frage '+myStep+' von '+totalStep;
		$('challengestepcounter').setProperty('text',Textmessage);
		this.debugMessage(Textmessage);
	},		
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//  Zeigt die Frage an (temporär wird durch HUD ersetzt
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
	renderQuestion: function(data){
		this.debugMessage('Rendere Frage:',JSON.encode(data));
	var BiontData = {'type':'question','data':data,'configfile':this.options.HUDconfigfile};
	this.Biont3dSendOrder('biontOpenHUD',BiontData);
	}		
	
	
});


YPDGame.implement(new Options);
YPDGame.implement(new Events);

// Etracker Klicktracker Code

var toSleep = true; function stopTimer(){toSleep=false;}
function clickTracker(LinkName){var secureID="qPK8B9";
var redirectUrl="http://www.etracker.de/skin/de.def/img/1px.gif";
etrackerSink=new Image(1,1);toSleep=true;
etrackerSink.src="http://www.etracker.de/lnkcnt.php?et="+secureID+"&url="+
redirectUrl+"&lnkname="+LinkName;etrackerSink.onload=stopTimer;if(toSleep==true)
{maxDelay(500);}return true;}function maxDelay(gap){var then,now;then=new
Date().getTime();now=then; while( toSleep==true&&(now-then)<gap){now=new Date().
getTime();}}


