var deskJS;
var minz;
var mainScroller;

//IE6-/Mobile Abfrage
if(window.location.href.contains('test')){
	alert(Browser.Platform.name)
}
if (window.location.href.contains('test') || (Browser.Engine.name == "trident" && Browser.Engine.version < 5 && window.location.href.indexOf('iefollow') == -1) || ((Browser.Platform.name == 'iOS' || Browser.Platform.name == 'android' || Browser.Platform.name == 'ipod') && window.location.href.indexOf('iefollow') == -1)) {
	var browserErr = true;
}else{
	var browserErr = false;
	var wWidth = window.getSize().x;
}

//Testing Mobile // nur für chk tauglichkeit
if (window.location.href.contains('&chk')) {
	var browserErr = false;
	var wWidth = window.getSize().x;
}
window.addEvent('domready',function(){
	
	if (DOMAIN.indexOf('192.') != -1) {
		ROOT = DOMAIN;
	}

	if(browserErr == true){
		ieError();
	}else{
		deskJS = new deskJS();
	}
});

/**
* deskJS-Functions
*
*  Parameters:
*    verzDebug: Debugstatus für den JSON-Output (bolean)
*    verzLocal: Request auf lokale/externe Daten (bolean)
*    verzUser: DBName des Benutzer (string)
*
*  Methods:
*    _loadStatus: Aufruf bei jeder Interaktion - Load, Request, usw (bereich, json-aktion)
*    _directLink: Aufruf durch direktlink Verz-Verz und Internen Seiten (mode = verz/site)
*    _afterRendering: Aufruf nach Einbindung der Plugins und Rendering des Templates
*/

deskJS = new Class({
	
	// Implements
	Implements: addDeskJS
	
	// options
	,options: {
		verzDebug: 1,
		verzLocal: 0,
		verzUser: 'minz',
		nameVal: []
	}
	
	// initialization
	,initialize: function(options){

		//set options
		this.setOptions(options);
		
		// pluginload
		this._jsPreload({
			templating: true,
			historymanager: false,
			menu: false,
			scroller: true,
			slider: true,
			scrollspy: false,
			popup: false,
			sortOn: false
		});
		
		
		// Historymanager
		HistoryManager = new HistoryManager();
		
		this.history = HistoryManager.register('verz', [''], function(values){
		
			if (values.length > 1) {
				this._directLink('verz', values[0], values[1], values[2]);
			}
			
		}.bind(this)
		, function(values){
			return 'verz(' + values[0] + '_' + values[1] + '_' + values[2] + ')';
		}.bind(this)
		, /verz\((.*)_(.*)_(.*)\)/);
		HistoryManager.start();
		
	}
	
	// Ladestatus der Plugins oder des Request
	,_loadStatus: function(part, action){
		
	}
	
	// Aufruf durch Verzeichnisverlinkung
	,_directLink: function(mode, DBstr, lrID, ldID){

			if(minz.allImagesLoaded == true){
			
				HistoryManager.setState(mode + '(' + DBstr + '_' + lrID + '_' + ldID + ')');
				
				
				(function(){
					minz.actualRub = lrID;
					
					minz.scrollAction($('slide_'+lrID+'_'+ldID));
				}).delay(100)
				
				
				return false;
			}else{
				this._directLink.delay(500,this,[mode, DBstr, lrID, ldID])
			}

	}
	
	,_afterRendering: function(){
		minz = new minz();
		
		//Anpassungen ScrollerClass
		$(document.body).removeEvents();

		scroller.implement({
			
			makeScrollbar: function(){

				var t = this.options;
				var stepCount = this.getSteps();
				this.slider = new Slider(t.scrollbar, t.handle, {
					steps: stepCount,
					mode: (t.horizontal ? 'horizontal' : 'vertical'),
					onChange: function(step){
							if(step < 20){
								$('arrow_back').setStyle('display','none')
							}else{
								$('arrow_back').setStyle('display','block')
							}
							
							try{
								if (minz.scrollLock == false) {
									
									x = (t.horizontal ? step : 0);
									y = (t.horizontal ? 0 : step);

									if(this.clickEvent != true){
										minz.setActualSlide(x);
										mainScroller.slider.set(x);
										new Fx.Scroll(t.content.scrollTo(x,y));
									}
									
									this.clickEvent = false;
								
								}
								
								
							}catch(e){}
						
					}.bind(this)
				})
				
				this.wheelAction();
			}
			
			,wheelAction: function(){
				
					$$(t.content, t.scrollbar).removeEvents('mousewheel');
				
					// Scroll the content element when the mousewheel is used within the 
					// content or the scrollbar element.
					$$(t.content, t.scrollbar).addEvent('mousewheel', function(e){	
					
						if (minz.scrollLock == false) {
							e = new Event(e).stop();
			
							//Ergänzung Scrollgeschwindigkeit
							f = Browser.Engine.name == 'webkit' ? 5 : 60;
							
							var step = this.slider.step - e.wheel * f;
							this.slider.set(step);
							if (this.moveArr.length > 0) 
								this.ieFix("2");
						}
					}.bind(this));
			}
			
		});
		
	}
		
});

/**
* MINZ-Functions
*
*  Parameters:
*	dummy: request Dummy
*
*
*  Methods:
*    initialize:Initialisierung der Klasse
*    reqIntro: Request auf Verzeichnisrubrik HOME für Erstellung Intro
*    setIntro: Aufbaui Intro und ausfaden
*    initNav: Navigationselemente initialisieren
*    activateMainNav: Hauptnavigation aktivieren / Events zu weisen
*    resetMainNav: Hauptnavi alle deaktivieren
*    reqSlide: Requests auf Arbeiten, Agentur, Kontakt
*    buildSlides: Aufbau Slidestrukturen / Aufbau Subnavigation
*    placeBistro: Wenn Rubrik Bistro aktiv, dann Platzierung Element
*    getImages: Bilder für Slides vorladen und nachträglich platzieren
*    setGoogleMap: GoogleMap integrieren beim letzten Slide
*    initSubNav: Subnavigation initialisieren 
*    initScroller: Scroller initialisieren
*    scrollAction: Action bei klick auf Menupunkt -> Übergabe an Scroller
*    setActualSlide: aktuelles Slide aktivieren und an Navi senden (changeNav)
*    changeNav: highlighting Navigationselemente
*/

minz = new Class({
	
	Implements: deskJS,
	
	//Temporäre Abfragenavi setzen
	options:{
		
		tmpSlide: 'home'
		
	}
	
	//Initialisierung
	,initialize: function(){
		
		this.allImagesLoaded = false;
		this.scrollLock = false;
		this.clickEvent = false;
		this.actualSlideNo = 0;
		this.actualRub = 0;
		
		this.reqdummy = {
			type: 'all'
			,user: this.options.verzUser
			,table: {
				listings: 'l'
				,listingdatas: 'ld'
				,listingrows: 'lr'
			}
			,condition:{
				
			}
			,fields: 'lr.id,ld.*'
			,order: 'lr.id, ld.neu DESC, ld.sort ASC'
		}
		
		this.reqIntro();

		this.initNav();
		
	}
	
	
	//Request auf Home-Rubrik für Einlesung Introdaten
	,reqIntro: function(){
		
		//if(cookie!=1){
		if(cookie!=31){
			reqOver = {
				condition:{
					'lr.id': 1
				}
				,fields: 'ld.bilder'
			};
		
			this._verzReqStr = this._verReqChange(this.reqdummy, reqOver);
			
			this._verzReq('setIntro');
			
		}else{
			$('intro').destroy();
			this.reqSlide();
		}
		
	}
	
	//Random Intro zusammenbauen und faden
	,setIntro: function(res){

		bgArr = [];

		res.result[0].ld.bilder.media.each(function(bild,key){
			
			bgArr.push(bild.name);
			
		})
		
		bgArr.shuffle();

		new Asset.images('http://www.minz.ch/upload/1500x_verz_'+bgArr[0], {
			onComplete: function(){
				$('intro_loader').set('html','')
				$('intro_bg').src = 'http://www.minz.ch/upload/1500x_verz_'+bgArr[0];
				$('intro_overlay').setStyle('background-image', 'url("'+ROOT+'images/einfallsreich.png")');
				
				(function(){
					t = new Fx.Morph($('intro'), {
						duration: 900
						,onComplete:function(){
							$('intro').destroy();
						}
					}).start({
						'opacity':0
					});
				
				}).delay(2400)
				
			}
		})
		
		this.reqSlide();
		
	}
	
	
	//Main Nav Events zuweisen -> Verknüpfung mit Slider Index
	,initNav: function(){
		
		this.allMain = $$('#mainNav li img');

		var _self = this;
		
		//Menupunkt Arbeiten aktivieren zu Beginn
		this.activateMainNav($('mainNav_0'));
		
		//Events den Hauptnavipunkten zuordnenf
		this.allMain.addEvents({
			
			click: function(){
				
				if(this.scrollLock == false){
					_self.activateMainNav(_self.btn);
				
				
					key = _self.btn.id.split('_');
					key = key[1];
					
					
					if(key == 0){
						this.actualSlideNo = 0;
					}else{
						this.actualSlideNo = _self.countRub[key-1];
					}
	
					this.actualRub = key;
					
					x = $$('.slide')[this.actualSlideNo];
					this.scrollAction(x);
					
					return false;
				
				}
				
			}.bind(this),
			
			mouseover: function(){
				_self.btn = this;
			
				
				if(!this.hasClass('activeMain'))this.set('src',this.src.replace('.png','_a.png'));
			},
			
			mouseleave: function(){
				if(!this.hasClass('activeMain'))this.set('src',this.src.replace('_a',''));
			}
		})
		
	}
	
	//Aktivierung Hauptnavi -> parameter Element zur Aktivierung
	,activateMainNav: function(hnav){

			this.resetMainNav();
			
			hnav.set('src',hnav.src.replace('.png','_a.png'));
			hnav.addClass('activeMain');
	}
	
	//alle Hauptnavipunkte zurücksetzen
	,resetMainNav: function(){
		
		this.allMain.removeClass('activeMain');
		
		this.allMain.each(function(mainNav){
			mainNav.set('src',mainNav.src.replace('_a',''));
		})
	}
	
	//Request der Slider 
	,reqSlide: function(){
		
		this._verzReqStr = this.reqdummy;
		
		reqOver = {
			condition:{

			}
			,fields: 'lr.id,ld.*'
		};
		
		reqOver.condition['lr.id > 1 AND lr.id <'] = 6;
		
		this._verzReqStr = this._verReqChange(this.reqdummy, reqOver);
		
		this._verzReq('buildSlides');
			
	}
	
	//BuildSlides und Verweisung zu FadeOut Intro
	,buildSlides: function(res){

		this.res = res;
		this.bistro = false;
		
		
		res.result.each(function(itm){
			
			if(itm.lr.id > 4){
				this.bistro = itm;
				
				this.res.result.erase(itm);
			}
			
		},this)
		
		this.res.count = this.res.result.length;
		
		
		//Bistro anzeigen
		if(this.bistro != false) this.placeBistro();
		
		this.slideCounter = 0;
		this.picCounter = 0;
		
		this.countRub = [0, 0, 0];
		this.actualRub = 0;
		
		//Total Einträge in den Rubriken zählen
		this.res.result.each(function(itm,key){
			if(itm.lr.id>1){
				this.countRub[itm.lr.id-2]++;
			}
		},this)
		
		this.countRub[1] = this.countRub[1] + this.countRub[0];
		this.countRub[2] = this.countRub[2] + this.countRub[0] + this.countRub[1];
		
		
		//template slides
		new deskJS_template({
			autoLoad: true,
			target: $('slide_body'),
			tpl: $('tpl_slides'),
			data: res.result,
			afterRendering: function(){

				this.res.result.each(function(itm,resKey){
					
					if(itm.ld.bilder != ''){
						itm.ld.bilder.media.each(function(bild,picKey){
						
							if(picKey < itm.ld.bilder.media.length-1){
								
								$$('.slide_pic')[resKey].setStyle('width',bild.format.x450.width.toInt());

							}
							
						},this)
					}
					
				},this)
				
				this.getImages();
				this.initScroller();
				
			}.bind(this)
		});
		
		//template subnav
		new deskJS_template({
			autoLoad: true,
			target: $('subNav'),
			tpl: $('tpl_subNav'),
			data: res.result,
			afterRendering: function(){
				
				this.initSubNav();
				$$('.sub_1')[0].setStyle('border','none');
				$$('.sub_2')[0].setStyle('border','none');
			}.bind(this)
		});
		
	}
	
	//Bistro anzeigen wenn Eintrag aktiv
	,placeBistro: function(){
		
		$('bistro').set('html','<a href="http://www.minz.ch/upload/'+this.bistro.ld.bilder.media[1].name+'"><img src="http://www.minz.ch/upload/x52_verz_'+this.bistro.ld.bilder.media[0].name+'" border="0" /></a>');
		
	}
	
	//Bilder vorladen
	,getImages: function(){
		
		if(this.res.result[this.slideCounter].ld.bilder != ''){
			
			var picarr = [];
			
			//alle Bilder (ausser Titel welche zum aktuellen Slide gehören in Array sammeln)
			for(i=0;i<this.res.result[this.slideCounter].ld.bilder.media.length-1;i++){
				
				picarr.push('http://www.minz.ch/upload/x450_verz_'+this.res.result[this.slideCounter].ld.bilder.media[i].name);
			}
			
			new Asset.images(picarr, {
				onComplete: function(){
					
					
					picarr.each(function(itm,key){
						$$('.slide_pic')[this.picCounter].set('html','<img src="'+itm+'" />');

						if(this.res.result[this.slideCounter].ld.neu != '' && key == 0){
							fap = '<div class="frisch"></div>'.toDOM();
							fap.inject($('slide_pic_'+this.res.result[this.slideCounter].ld.id+'_1'));
						}
						
						this.picCounter++;
					},this)

					this.slideCounter ++;
					
					if(this.slideCounter < this.res.count-1)this.getImages();
					
					if(this.slideCounter == this.res.count-1)this.setGoogleMap();
					

				}.bind(this)
				
			},this)
			
			
		}else{
			this.slideCounter++;
			this.getImages();
		}
		
	}
	
	,setGoogleMap: function(){
		
		$$('.slide_pic')[this.picCounter].setStyle('width',612);
		
		this.allImagesLoaded = true;
		
		var myLatlng = new google.maps.LatLng(47.0577746,8.2890326);
		var myOptions = {
			zoom: 14,
			center: myLatlng,
			navigationControl: true,
    		scaleControl: true
			,mapTypeId: google.maps.MapTypeId.TERRAIN
			//,mapTypeId: google.maps.MapTypeId.ROADMAP
		};
		
   		var map = new google.maps.Map($$('.slide_pic')[this.picCounter], myOptions);
		
		map.scrollwheel = false;
		
		var contentString = '<div style="overflow:hidden;font-size:11px;font-family:arial;color:#000"><br/><b>Minz</b>, Agentur f&uuml;r visuelle Kommunikation<br/>St.Karli-Strasse 70 | Postfach | 6000 Luzern 7<br/>Telefon 041 310 48 49 | <a style="font-size:11px;font-family:arial;color:#000;text-decoration:none;" href="mailto:info@minz.ch">info@minz.ch</a></div>';
        
	    var infowindow = new google.maps.InfoWindow({
	        content: contentString
	    });
	
	    var marker = new google.maps.Marker({
	        position: myLatlng,
	        map: map,
	        title: 'minz'
	    });

		$$('.slide_pic')[this.picCounter].removeProperty('-webkit-transform')

	    infowindow.open(map,marker);

	}
	
	//Aufbau Unternavi
	,initSubNav: function(){
		
		lastFrisch = $$('.subFrisch');

		if(lastFrisch != ''){

			bez = '<span style="margin:0 5px 0 0;padding: 0 5px 0 0;border-right:1px solid #A3A599;color:#000 !important">Frisch ab Presse</span>';
			bez = bez.toDOM();
			
			bez. inject($$('.subFrisch')[0],'top');
			
			
			lastFrisch[lastFrisch.length-1].getNext().setStyles({
				'border': 'none'
				,'padding-left': 0
			})
			
			bez = '<span style="margin:0 5px 0 0;padding: 0 5px 0 0;border-right:1px solid #A3A599;color:#000 !important">Referenzarbeiten</span>';
			bez = bez.toDOM();
			
			bez. inject(lastFrisch[lastFrisch.length-1].getNext(),'top');
			
			trenner = '<div style="height:10px;width:100%;clear:both" class="trenner"></div>';
			
			trenner = trenner.toDOM();
			trenner.injectAfter(lastFrisch[lastFrisch.length-1]);
			
		}
			
		//allen SubNavis den Click Event zuweisen / vertical line entfernen wenn neue Zeile
		var allSub = $$('#subNav div li');		
		allSub.each(function(sub,key){
			
			// Elemente am Zeilenafang bei Arbeit keine Border/Paddings
			if(sub.getPosition().x == 30){
				sub.setStyles({
					'border': 'none'
					,'padding-left': 0
				})
			}
			
			//Scrollaction to SubNav
			sub.addEvents({
				'click': function(){
					x = $$('.slide')[key];
					this.scrollAction(x);
				}.bind(this)
			})
		},this)
		
	}
	
	//Scroller initialisieren
	,initScroller: function(){

		$('scroll_body').setStyle('width',document.getSize().x);

		this.totalWidth = 0;

		this.res.result.each(function(itm,resKey){
			
			this.totalWidth += 740;
			this.totalWidth += 30;
			
			if(itm.ld.bilder != ''){
				itm.ld.bilder.media.each(function(bild,picKey){
				
					if(picKey < itm.ld.bilder.media.length-1){
						//c(bild.format.x450.width.toInt())
						this.totalWidth += (bild.format.x450.width.toInt() +10);
					}
					
				},this)
			}
			
		},this)
		
		$('slide_body').setStyle('width',this.totalWidth);
		
		mainScroller = new scroller({
			content: $('scroll_body')
			,scrollbar: $('track')
			,handle: $('thumb')
			,horizontal: true
		});
		
		this.timer;
		var _self= this;
		
		//Pfeil event zum vorwärsblätern
		$$('#arrow, #arrow_back').addEvents({
			'mousedown':function(){
				
				var dir = this.id.contains('back') ? -60 : 60;
				
				_self.timer = (function(){
				
					$('thumb').setStyle('background-color','#a7a7a7');
			
					mainScroller.slider.step = mainScroller.slider.step +dir;
					
					if(mainScroller.slider.step< 20){
							$('arrow_back').setStyle('display','none')
							$('thumb').setStyle('background-color','#525254');
			
							$clear(_self.timer);
					}else{
						$('arrow_back').setStyle('display','block')
					}
					
					_self.setActualSlide(mainScroller.slider.step);
					mainScroller.slider.set(mainScroller.slider.step);
					new Fx.Scroll($('scroll_body').scrollTo(mainScroller.slider.step,0));
		
				}).periodical(50,_self);
			}
			,'mouseup':function(e){
				e.stop();
				$('thumb').setStyle('background-color','#525254');
			
				$clear(this.timer);
		
			
			}.bind(this)
		});
		
		//Homelink
		$('logo').addEvent('click',function(){
			this.actualSlideNo = 0;
			this.actualRub = 0;
			this.scrollAction($$('.slide')[0]);
				
		}.bind(this));
		
	}
	
	//Aktion die auf den Scroller ausgeführt wird
	,scrollAction: function(x){

		if(this.scrollLock == false){
			
			this.scrollLock = true;
			
			this.clickEvent = true;
		
			mainScroller.slider.step = x.getPosition($('slide_body')).x;
			
			tw = (($('track').getStyle('width').toInt()) / this.totalWidth) * x.getPosition($('slide_body')).x;
			
			new Fx.Morph($('thumb'), {
				duration: 300
				,wait:true
			}).start({
				'background-color':'#a7a7a7'
			});
		
			new Fx.Morph($('thumb'), {
				duration: 900
				,wait:true
				,onComplete: function(){
					new Fx.Morph($('thumb'), {
						duration: 200
						,wait:true
					}).start({
						'background-color':'#525254'
					});
					this.scrollLock = false;
				}.bind(this)
			}).start({
				'left':tw
			});
				
				
			var myFx = new Fx.Scroll($('scroll_body'), {
				onComplete: function(){
						this.setActualSlide(x.getPosition($('slide_body')).x);
				}.bind(this)
			}).toElement(x)
			
		}

	}
	
	//aktuelles Slide berechnen und Navigation anpassen
	,setActualSlide: function(e){

		slideEl = $$('.slide');
		var eachDone;
		
		slideEl.each(function(items, key){
			
			if(($(items.id).getPosition().x < window.getSize().x/2+200 && $(items.id).getPosition().x > -30) && !eachDone){

				this.actualSlideNo = key;
				eachDone = true;
			}
		}, this);
		
		if(this.actualSlideNo > this.res.count-1) this.actualSlideNo = this.res.count-1;
		
		if(e<400)this.actualSlideNo=0;
		
		this.changeNav();
	}
	
	
	//Navigations Higlighting aufgrund von actRub und Und actSlide
	,changeNav: function(){
		
		//Nur Anpassen wenn nicht scho aktiv
		if (this.options.tmpSlide != this.actualSlideNo) {

			this.options.tmpSlide = this.actualSlideNo;
			
			if (this.actualSlideNo > this.countRub[this.actualRub] - 1) {
				this.actualRub++;
			}
			
			if (this.actualSlideNo < this.countRub[this.actualRub - 1]) {
				this.actualRub--;
			}
			
			if (this.actualRub == 0) {
				$$('.trenner').setStyle('display', 'block');
			}
			else {
				$$('.trenner').setStyle('display', 'none');
			}
			
			if (this.actualSlideNo == 0) 
				this.actualRub = 0;
			
			
			//Subnavi		
			$$('#subNav li').removeClass('activeSub');
			
			$$('#subNav li').setStyle('display', 'none');
			
			$$('.sub_' + this.actualRub).setStyle('display', 'block');
			
			$$('#subNav li')[this.actualSlideNo].addClass('activeSub');
			
			lrID = $$('#subNav li')[this.actualSlideNo].id.split('_');
			ldID = lrID[2];
			lrID = lrID[1];
			

			HistoryManager.setState('verz' + '(' + '' + '_' + lrID + '_' + ldID + ')');

			//Hauptnavi
			this.resetMainNav();
			this.activateMainNav($('mainNav_' + this.actualRub));
			
		}
		
	}
	
	,checkResize: function(){
		if (browserErr == false && !window.location.href.contains('&chk')) {
			if(wWidth - window.getSize().x > 30 || wWidth - window.getSize().x < -30)setTimeout('window.location.reload()',0)
		}		
	}
	
	,openPopUp: function(id){

		$('overlay').setStyle('display','block');
		$('popup').setStyle('display','block');
		
		
		$('popCont').set('html','lade Inhalt');
		
		new Request({
			url: ROOT+'index.php',
			method: 'post',
			data: 'mode=ajax&id='+id+'&reqCol=text',
			noCache:true,
			onComplete: function(response){
				txt = JSON.decode(response);	
				$('popCont').set('html', txt.text);
				
			}.bind(this)
		}).send();
		
		$('popup').setStyles({opacity: 0})
		$('overlay').setStyles({
			height: window.getScrollHeight()
			,width: window.getScrollWidth()
			,opacity: 0
		})

		this.blend($('overlay'),0.8,150,Fx.Transitions.Linear);
		
		this.blend($('popup'),1,250,Fx.Transitions.Linear);
	}
	
	,closePopUp: function(){
		
		$('popup').removeEvents('mouseleave');
		
		
		onFinish = function(){$('overlay').setStyle('display','none');}
		this.blend($('overlay'),0,150,Fx.Transitions.Linear,onFinish);
		
		onFinish = function(){$('popup').setStyle('display','none');}
		this.blend($('popup'),0,250,Fx.Transitions.Linear,onFinish);
	}

	//Ein- Ausblend FX
	,blend: function(mE,op,t,trans,onFinish){
		mO = new Fx.Morph(mE, {
			duration: t
			,transition: trans
			,onComplete:function(){
				if(onFinish)onFinish();
			}
		}).start({
			'opacity': op
		});
	}
	
});

//Bei Mobile / IE-Error (IE6-Abfrage)
function ieError(){
	
	randImg = $random(1,4);
	
	$(document.body).set('html','<map name="links"><area shape="rect" coords="415,277,534,306" href="http://www.mozilla.org/" alt="" title="" /><area shape="rect" coords="188,497,307,526" href="mailto:info@minz.ch" alt="" title="" /></map><div style="position:absolute;width:100%;height:450px;background-color:#A5A79A;top:110px;z-index:1"></div><img usemap="#links" style="position:absolute;top:0px;z-index:2" border="0" src="'+DOMAIN+'images/landing'+randImg+'.jpg" />');
}

