var ajaxComplete = 0;
var mode = '';

( function ( ) {

$.fn.gui = function ( settings ) {

	/**
	 * KONFIGURATION
	 */
	var options = $.extend({
	    clickCounter: 0,
		section: 'section',
		label: 'label',
		duration: 750,
		easing: 'swing',
		callback: null,
		selected: '#produkte',
		lang: 'ger',  
		curHash: null
	}, settings );

	var height = 0;
	var width = $(this).width( );
	var labelWidth = $('.' + options.label).width( );
	var children = $(this).children( '.' + options.section );
	var free = width - ( labelWidth * children.length );
	var navigationLinkCounter = 1;
	var curClickObj = null;
	var isAnim = false;
        var isHistoryBack = true;

        //var lang = options.lang;

	/**
	 * SEITE INITIIEREN
	 */
		var init = function () {

			//$('#loading').show();
			//console.log('function gui->init()->defaultPage: ' + defaultPage);
			var curURL   = location.href;				
			var urlParts = curURL.split("#"); 
			
			if ( urlParts.length == 1 ) {
				hash = defaultPage; 
			} else {
				hash = urlParts[1];
			}

                        // Welche Sprache?
                        var parts = urlParts[0].split("_");
                        lang = parts[2].split(".");
                        lang = lang[0]; 

			$('a#poifinder').bind('click', openModalWindow );
		
			$('a.navLink').each( function ( i ) { 				// Links manipulieren			

				$(this).attr({
					declurl: 	getValidURL( $(this).attr('href') ),
					id: 		'link_id_' + $(this).attr('zmsID'),        //'link_id_' + navigationLinkCounter,
					href: 		'#' +  $(this).attr('zmsID'),                              //'#' + navigationLinkCounter,
					rel: 		'history'
				});
				
				if ( hash == null && $(this).hasClass('isHome') ) {
					
					//hash = navigationLinkCounter;
                                        hash = defaultPage;
					$(this).addClass('selected');
					curClickObj = $(this); 
					
				} else {	
				
					//if ( navigationLinkCounter == hash ) {
                                        if ( $(this).attr('zmsID') == hash ) {
					
						$(this).addClass('selected');
						curClickObj = $(this); 
					}
				} 
		
				$(this).bind('click', setClickFunctions);
				
				navigationLinkCounter++; 
				
			}).focus( function() { $(this).blur() }); 

			
			if ( $('.subNav a[id]').length < $('.subNav a').length ) { 
				setTimeout(800);
			}    
                      
                        // Höhe des Nav.-Overlays reduzieren: Bei Klick auf einen Link wird der Flashfilm nicht mehr gezeigt, 
                        // die Höhe wäre zu groß
                        $('#produkte .subNav a').bind('click', function() { $('#produkte .level03').css('height','295px'); });           
			
			curClickObj = $('#link_id_' + hash);

			// History initiieren
			

				location.href = urlParts[0] + "#" +  hash;	
				
				$('link[rel="shortcut icon"]').remove();
				$('head').append('<link href="http://paschen.stage.xmachina.de/zope/paschen/common/scripts/common/favicon.ico" type="image/x-icon" rel="shortcut icon">');

			setSubNavFunctions();						// Design-Effekte für Subnavi hinzufügen
			//setTopNavFunctions();   					// Topmenu Funktionen hinzufügen
			setFooterNavFunctions(0); 					// Footermenu Funktionen hinzufügen

                       // langswitcher initiieren
                        /*
		           $('#langSwitcher > img').bind('click', function() {
                               lang = $(this).attr('id');
                               setLang(lang);
		           });
                         */

                      // Labels für Poifinder-Menu setzen
                          $('#poifinder_Title').html(langLabels[lang]['poifinder_Title']);
                          $('#poifinder_Deutschland').html(langLabels[lang]['poifinder_Deutschland']);

                          //setLabels();
                        
			
			// Rahmen laden abgeschlossen, nächster Schritt content laden 
				//$('#loading').hide();
				$.history.init(getContent);
		};




		// footerlinks
			var setFooterNavFunctions = function( callCounter ) {

				$('a.footerLink').each( function( i ) {
                   
					curLink = $(this);
					declurl = getValidURL($(this).attr('href') ); 
					
					if ( $('#pageNav').find('a.navLink[declurl="' + declurl + '"]').length > 0 ) { // Navigationslinks suchen, die die gleiche url haben
						
						hash = $('#pageNav').find('a.navLink[declurl="' + declurl + '"]:last').attr('href').replace(/^.*#/, ''); // wenn ja, dann diesen Hash für den Link verwenden ...

						curLink.attr({
							declurl: declurl,
							id:      'link_id_' + hash,
							href:    '#' + hash,
							rel:     'history'
						});

						curLink.bind('click', setClickFunctions);
										
					} else {
					
						curLink.attr({declurl: declurl});
						$(this).bind('click', openModalWindow ); // Link in modalWindow öffnen				
					 
					}                    
			   });

			};

        /**
         * Sprache setzen
         */
         var setLang = function( lang ) {

             //lang = $(this).attr('id');
    
	     location.href = "index_ajax_" + lang + ".html#1";
         };

		
	/**
	 * ModalWindow
	 */
        var openModalWindow = function( evt ) {

            evt.preventDefault();
            var dialog = $('#dialog');
            
            if ( $(this).attr('loadingType') == 'extern' ) {
  
                var url = $(this).attr('href'); 
                var html = '<iframe src="' + url + '" width="100%" height="100%" border="0" frameborder="0"></iframe>';

                dialog.html(html);

            } else {
 
                var url = $(this).attr('declurl'); 
                url += 'index_fragment_' + lang + '.html';	

                $('#dialog').load(
                    url, 
                    {},
                    function (responseText, textStatus, XMLHttpRequest) {
                        //console.debug(textStatus);
                    }
                );
            }

            try {
                $('#dialog').dialog({ 
                                        title: $(this).text(),
                                        closeText: '[x]',
                                        width: 850, 
                                        height: 700, 
                                        minWidth: 800, 
                                        minHeight: 600, 
                                        modal: true, 
                                        resizable: true, 
                                        zIndex: 3999 
                                    });
                
            } catch(err) { }
			
            return false; 
        }; 
	


	/**
	 * SEITENEFFEKTE
	 */
	// 1:
		var changePages = function(newPageID) {

			if ( $('#pageNav > .selected').length > 0 && $('#pageNav > .selected').attr('id') != newPageID ) {  // wird nur ausgeführt wenn es schon eine zuvor selektierte Seite gibt, also nicht bei Reload
			
				if ( $('.selected .addShadow').length > 0 ) $('.selected .addShadow').removeClass('addShadow');
				
				$('#pageNav > .selected').find('.page').fadeOut('slow', function() {  

					$('#pageNav > .selected').find('.labelText').fadeIn('fast'); 
					
					$('.selected').each( function() { if (mode != 'noTabHighlight' || (mode == 'noTabHighlight' && !$(this).hasClass('subNavItem'))) $(this).removeClass('selected'); });
					mode = '';
					
					$(this).children('.contentWrapper').html("");
					
					activate($('#' + newPageID));
				});
		

			} else {
				activate($('#' + newPageID));		 
			}
		};
		
	// 2:
		var activate = function ( section ) {

			var pos = getPosition( section );
			
			if ( section.length > 0 && !window.accordionExpanding ) {
			
				window.accordionExpanding = true;
				window.accordionSections = children.length;
				window.sectionsFinished = 0;
				
				var hit = false;
					
				$(children).each( function ( i ) {
					
					var tmp = this;
						
					if ( !hit ) {
							var leftPos = i * labelWidth;
					} else {
							var leftPos = (i * labelWidth ) + $(this).width( ) - labelWidth;
					}
			
					$(this).animate({ 
						left: leftPos}, 
						options.duration, 
						options.easing, 
						function ( ) { 
						
							window.sectionsFinished ++; 
							
							if ( window.sectionsFinished == window.accordionSections ) { 
								window.accordionExpanding = false; 
							} 
							
							if ( typeof options.callback == 'function' ) { 
								options.callback.call( tmp ); 	                             						
							} 
								
							if ( this == section[0] ) { showPageEffects(this); }                             	
						}
					);

					if ( this == section[0] ) {
						hit = true;
					}
				});
			}
		};
	// 3:
var showPageEffects = function(selectedSection) {

	$(selectedSection).find('.labelText').fadeOut('fast', function() {  
	
		$(selectedSection).find('.page').fadeIn('slow', function() {  
			$(selectedSection).addClass('selected');
			if ($(selectedSection).find('.subNavItem.selected').size() < 1 && $(selectedSection).attr('id') != 'produkte') $(selectedSection).find('.subNavItem:first').addClass('selected');
			isAnim = false;
		});
	});

	$(this).prev('.section').addClass('addShadow');	
};

		
	/**
	 * A-TAGS MIT FUNKTIONEN AUSSTATTEN
	 */
		 
		ajaxComplete = 0;
		 
		var setClickFunctions = function( event ) { 

			event.preventDefault();	

                        if ( $(this).attr('ctf') == '1' ) {
                             
                        } else {	
			

                        }

                        curClickObj = $(this);
                        isHistoryBack = false;

			var hash = this.href;
			hash = hash.replace(/^.*#/, '');
			
			$.history.load(hash);	
		};	
		 
		var setSubNavFunctions = function() {
		
			$('.subNavItem').bind('mouseenter mouseleave', function( evt ) {  
			
				$(this).toggleClass('showSubMenu');
			});
		
			$('.subNavItem a').bind('click mouseenter mouseleave', function( evt ) {  

				switch(evt.type) {
					// Subnavigationsbuttons mouseover- und click-function hinzufügen	
					case "mouseenter":
					case "mouseleave":
						$(evt.currentTarget).toggleClass('buttonHighlight');
						break;
						
					// Click-Event einbauen
					case "click":
								var clickObj = $(evt.currentTarget);	
                                                                curClickObj  = $(evt.currentTarget);
								break;
				}	
			});
		};
		
		var setTopNavFunctions = function() {
		
							
			/* Search deactivated
				$('input#searchField ').bind('focus', function() { $(this).attr('value',''); });	
				$('#topSearch > .textLabel').bind('mouseenter mouseleave', function() { $(this).toggleClass('buttonHighlight'); });						
				$('#topSearch > .textLabel').bind('click', function() { $('#topSearchForm').animate({height: 55+'px'}, 'swing'); });			
				$('#closeButton').bind('click', function() { $('#topSearchForm').animate({height: 0}, 'swing'); });		
			
                        
			$('#langSwitcher > img').bind('click', function() {
				location.href = "index_ajax_" + $(this).attr('id') + ".html#1";
			});
                        */

			$('a.topNavItem').each( function( ) {
                   
				curLink = $(this);
				declurl = getValidURL($(this).attr('href') ); 

                                curLink.bind('mouseenter mouseleave', function() { $(this).toggleClass('buttonHighlight'); });	
					
				if ( $('#pageNav').find('a.navLink[declurl="' + declurl + '"]').length > 0 ) { // Navigationslinks suchen, die die gleiche url haben
						
					hash = $('#pageNav').find('a.navLink[declurl="' + declurl + '"]:last').attr('href').replace(/^.*#/, ''); // wenn ja, dann diesen Hash für den Link verwenden ...

					curLink.attr({
						declurl: declurl,
						id:      'link_id_' + hash,
						href:    '#' + hash,
						rel:     'history'
					});

					curLink.bind('click', setClickFunctions);
										
				} else {
					
					curLink.attr({declurl: declurl});
					$(this).bind('click', openModalWindow ); // Link in modalWindow öffnen				
					 
				}                    
			});
		};

		var getValidURL = function( curURL )  {	
			
			if (curURL.indexOf('?') > -1) {
					
				return curURL.substr(0, (curURL.lastIndexOf('/')+1));

			} else {
			
				var urlParts = curURL.split("index_"); 
			
				return urlParts[0]; 
			}	
		};
		
	/**
	 * CONTENT LADEN
	 *
	 */	
		var getContent = function( hash ) { 
			
			if (!isAnim) {
				
				isAnim = true;
			        
				clickObj = ( curClickObj != null ) ? curClickObj : $("#link_id_" + hash); 				// Das eben geklickte Objekt
                                
                                if ( isHistoryBack ) {

                                    clickObj = $("#link_id_" + hash); 

                                }
                                isHistoryBack = true;     // wird wieder auf true gestellt -> wird in der Nav. geklickt, wird isHistoryBack false
				
				var url      = clickObj.attr('declurl'); 							// Ziel-URL 
				var ctf      = clickObj.attr('ctf');
      
				var linkType = "mainNavLink";
				
				if ( $(clickObj).parents('.content').length > 0 ) linkType = "contentLink";
				if ( $(clickObj).hasClass('footerLink') ) linkType = "footerLink";

				// Wenn Footer- oder Content-Link, dann das tiefste Seitennavigations-Element finden
				if ( linkType == "footerLink" || (linkType == "contentLink" && ctf != "1" ) ) {

					if ( $('#pageNav').find('a.navLink[declurl="' + url + '"]').size() > 0 ) {   // gibt es im Content einen Link mit der selben url?
							
						clickObj = $('#pageNav').find('a.navLink[declurl="' + url + '"]:last');
						clickObj.parent().addClass('selected');
						
					}
				}
			
				// 1. HERAUSFINDEN, WOHIN DER CONTENT GELADEN WERDEN SOLL
				//------------------------------------------------------------------------------------
					var targetObj = null;										// Zielcontainer
					var contentType = "pageNav";

					if ( clickObj.parent().hasClass('footerNav') ) {
						
					} else {
						var pageID = clickObj.parents('.section').attr('id');	// ....  Seiten-ID herausfinden ....
					}
					
					targetObj = $('#' + pageID).find('.contentWrapper');	// ... und dann den Zielcontainer wählen

					targetObj.addClass('loading');								// Zielcontainer erhält Ladeanimation

				// 2. SEITE ANIMIEREN , FALLS IN ANDERER SEITE
				//------------------------------------------------------------------------------------
					
					if ( $('#window').css('opacity') > 10 ) $('#window').fadeOut('fast');
					
					if ( $('#' + pageID).hasClass('selected') ) { 			// Entweder gewählter Content ist in der bereits geöffneten Seite ....
							var sameSection = true;
							$('.selected').removeClass('selected');
					} else {
							var sameSection = false;
							mode = 'noTabHighlight';
							changePages(pageID);								// ... oder die alte Seite muss zurückgesetzt und die neue geladen werden	
					}
						
				// 3. SELECTED-CLASS AN DIE BETROFFENEN ELEMENTE VERGEBEN
				
					clickObj.addClass('selected');
					
					// Alle Kindelemente mit der selben URL müssen auch selektiert sein
					$('[declurl="' + url + '"]').each( function(){ $(this).addClass('selected'); });
					
					// Alle Elternobjekte erhalten die Klasse selected, aber nur innerhalb des Accordions
					var end = false;
					clickObj.parents().each( function() { 
						
						if ( $(this).attr('id') == "pageNav" ) end = true;
						if (!end) $(this).addClass('selected'); 
					});		

				
				// 4. CONTENT HOLEN UND IN CONTAINER LADEN
				//------------------------------------------------------------------------------------	
                                        
					//if (  clickObj.attr('tfname') != undefined && clickObj.attr('tfname') != "undefined" && clickObj.attr('tfname') != "" ) {
                                        if (  clickObj.attr('ctf') == "1" ) {
					
						url += clickObj.attr('tfname') + '_fragment_' + lang + '.html';
						
					} else { 
							
						url += 'index_fragment_' + lang + '.html';	
					}
                                        //console.log('\n->getContent: 4.3. URL wird geholt: ' + url);
					$.ajax({
						url: url,
						cache: false,
						datatype: 'html',
						context: targetObj,

						success: function(data, textStatus){
							options.curHash = hash;
							
							$(this).html(data.toString().replace(/^.*<\/html>/, ''));
											
							// Titletag ändern
							if ( $.browser.msie ) {  
								document.title = $(clickObj).parents('#pageNav > .selected').find('h1.title').text();
							} else { 
								$('title').html($(clickObj).parents('#pageNav > .selected').find('h1.title').text()); 
							}
							
							if (sameSection) isAnim = false;
						},
						
						error: function(xhr, textStatus, errorThrown) {
							//console.debug(xhr);
							var htmlcode = '<div id="errorMsg" class="cblock cb_variant2"><div class="cb_item">' + xhr.responseText + '</div></div>';		
							$(this).html(htmlcode);
							isAnim = false;
						},
							
						complete: manipulateContent		
					});
					
					options.clickCounter++;	
			}
			
		};
		
	
	var manipulateContent = function() { // Inhalt einblenden und Links anpassen
		
		container = $(this).find('#fragment_content'); 

		$(this).removeClass('loading');

		$(this).fadeIn(800, function () { 
		
			$(this).find('h2').first().css('padding-top','0px');

                        $('.show_downloadform').bind('click', function(e) { 
                            e.preventDefault();
                                        
                            $(this).colorbox({innerWidth:'500px',innerHeight:'750px',inline:true,href:'#download'});
                        });
		
			$(this).find('a').each( function ( i ) {
					
				if ($(this).hasClass('zoom')) {
								
					if ($(this).attr('rel') !== undefined) {
						$(this).attr('href','');
                                                targetID = $(this).attr('rel'); 
                                                $(this).colorbox({inline:true, href:targetID});

						/*$(this).overlay({
							effect: 'drop',
							mask: '#789'
						});*/
					} else {
						$(this).click(function(event) {
							event.preventDefault();
						});
					}

				} else if ( $(this).hasClass('no_gui') ) {


				} else if ( $(this).attr("target") == "_blank" ) {
							
						
				} else if ( $(this).attr('href') !== undefined ) {  

					curURL = $(this).attr('href');
						
					// Falls ein Link einen Querystring hat, muss er anders behandelt werden
					if ( curURL.indexOf("?") > -1 ) {
		
						urlParts = curURL.split("?"); 
								
						qString = urlParts[1];
								
						qStringParts = qString.split('&amp;');
							
						if ( qStringParts.length == 1 ) qStringParts = qString.split('&');
		
						for ( y = 0; y < qStringParts.length; y++ ) {
									
							parameterParts = qStringParts[y].split('=');
									
							$(this).attr(parameterParts[0], parameterParts[1]);
						}	
					} 
						
					var declurl = getValidURL($(this).attr('href'));	
					var hash = 0;
								
					if ( $('body').find('a.navLink[declurl="' + declurl + '"]').length > 0 ) { // In den Navigationslinks suchen, ob einer die gleiche url hat
															
						hash = $('body').find('a.navLink[declurl="' + declurl + '"]:last').attr('href').replace(/^.*#/, ''); // wenn ja, dann diesen Hash für den Link verwenden ...
									
					} else {
							hash = (i + navigationLinkCounter); // ...sonst bekommt der Link eine eigene Nummer, der Zielcontent wird in den gleichen Container geladen 
					}
			
					$(this).attr({
						declurl: 	declurl,
						id: 		'link_id_' + hash,
						href: 		'#' + hash,
						rel: 		'history'
					})
					.bind('click', setClickFunctions);  
				}	
			});
		});
			
		options.clickCounter++;	

		
		ajaxComplete = 1;
	};	
	
	/**
	 * Accordion-Funktionen 
	 */
		var getPosition = function ( section ) {
			var i = 0, pos = 0;
			$(children).each( function ( ) {
				if ( this == section[0] ) { pos = i;}
				i ++;
			} );
			return pos;
		};
		
		$(children).each( function ( i ) {

			$(this).css( {
				left: i === 0 ? 0 : ( free + ( i * labelWidth ) ),
				top: 0,
				width: free + labelWidth
			});
			
			$(this).children( '.page' ).css({
				'float': 'left',
				width: free - labelWidth - ( $('.section ').css( 'padding-left' ).replace( /px/, '' ) * 2 )
			});

			$(this).children('.label').focus( function () { $(this)[0].blur( ); });
		});
		
		init();
};
} )(jQuery);
