// TODO:
// 1. Some things still more complicated than they need to be.
// 2. Could skip PHP if I find equivalent to intval().
// 3. Possibly to many lastSilde/Tab = activeSlide/Tab
// 4. Could combine internal/back-link functions for less code
//
// Setting global variable accessible to all functions

var currentSlide;
var gotoFirstslide;
var overrideFlag = true;
var activeTab = PHPget_tab;
var lastTab = activeTab;
var activeSlide = PHPget_slide;
var lastSlide = activeSlide;

window.addEvent('domready', function() {

	var AccordionObject = new Accordion($$('.toggler'), $$('.element'), {
		duration: 300,
		wait: true,
		transition: 'sine:out',
		link: 'ignore', // Bugg. Doesn't seem to work
		fps: 60,
		display: PHPget_tab,
		height : true,
		width : false,
		opacity: false,
		fixedHeight: 380,
		fixedWidth: false,
		alwaysHide: false,

		//this will fire when you toggle open an element
		//will pass the toggle control element
		//and the content element that is opening
		onActive: function(toggler, element) {
            
            if(!overrideFlag) {
                lastTab = activeTab;
                activeTab = parseInt(toggler.id);    // Sets the active tab to the one being displayed
                lastSlide = activeSlide;
                activeSlide=0;
            } else {
                overrideFlag = false;
            }

            // Fade color of active tab
			toggler.set('tween', {duration: 300}).tween('background-color', '#00457a');

            // Fade color of content background and then show content
            element.set('tween', {duration: 500, onComplete: showContent.bind(element,toggler)}).tween('background-color','#000','#fff');
		},

		//this will fire when an element starts to hide and will
		//run for all the none-active tabs
		onBackground: function(toggler, element) {
            // Fades tab and background back to inactive state color
			toggler.set('tween', {duration: 300}).tween('background-color', '#002440');
			element.set('tween', {duration: 200}).tween('background-color', '#000');

            // Hides the content of hidden tabs
			element.getElement('.element-content').setStyle('display','none');
            toggler.removeEvent('click', gotoFirstslide); // Prevents stacking of events and prevents internal links from triggering this.
		}
	});
});

var showContent = function(toggler) {
            // 'this' refers to the element object
   			var content = new Fx.Morph(this.getElement('.element-content'));
			if(content) {
                content.set({'display':'block'});
                init(this,toggler)
            }
}

// Runs every time tab content is shown
function init(element,toggler) {

    var scrollwrapper = element.getElement('.scroll-wrapper');

	if(scrollwrapper) {
		var scroll = new Fx.Scroll(scrollwrapper, {
			link: 'ignore',
			fps: 60,
			duration: 600,
			wait: false,
			wheelStops: false,
			offset: {'x': 0, 'y': 0},
			transition: Fx.Transitions.Quad.easeInOut
		});

        // Get all the slides
		var contents = element.getElements('.scrolling-content');
		
		// Robert: Sparar contents i en global var (currentSlide)
		currentSlide = (contents);

        // Slide to the slide marked as active
        if(activeSlide) // Om activeSlide inte är 0, dvs inte första
            scroll.toElement(contents[activeSlide]);    // Scrolla till activeSlide
        else {
            scroll.set(0,0) // Annars sätts positionen direkt till första
        }        

        // Adds functionality get to the first slide when the currently active tab is clicked.
        gotoFirstslide = function() {
            lastTab=activeTab;
            lastSlide=activeSlide;
            activeSlide = 0;
            scroll.toElement(contents[activeSlide]);
        }
        toggler.addEvent('click', gotoFirstslide);

        // Adds functionality to internal links
        var internal_links = element.getElements('a.internal');

        if(internal_links) {
            internal_links.each(function(item) {
                var linkTab = getURLVar("tab", item.href);
                var linkSlide = getURLVar("slide", item.href);

                item.removeEvents('click'); // Prevents stacking of events
                item.addEvent('click',function(event) {
                    event.stop();    //  Stops default behaviour of link
                    lastSlide = activeSlide;
                    activeSlide = linkSlide;
                    lastTab = activeTab;

                    if(linkTab == activeTab) { // If link to slide on same tab..
                        scroll.toElement(contents[activeSlide]); // ...just scroll
                    } else {
                        activeTab = linkTab;
                        overrideFlag=true;
                        $$('.toggler')[linkTab].fireEvent('click');
                    }

                });
            });
        }

        // Adds functionality to back-links with class="back"
        var back_links = element.getElements('a.back');

        if(back_links) {
            back_links.each(function(item) {
                item.removeEvents('click'); // Prevents stacking of events
                item.addEvent('click',function(event) {
                    event.stop();    //  Stops default behaviour of link

                    activeSlide = lastSlide;

                    if(lastTab == activeTab) { // If link to slide on same tab..
                        scroll.toElement(contents[activeSlide]); // ...just scroll
                    } else {
                        activeTab = lastTab;
                        overrideFlag=true;
                        $$('.toggler')[lastTab].fireEvent('click');
                    }
                });
            });
        }

        // Adds functionality to links with scrolling-link class.
        var scrolling_links = element.getElements('.scrolling-link');

		if(scrolling_links.length == contents.length) {
            scrolling_links.each(function(link,i) {
                link.index = i;
                link.scrollto = contents[i]
                link.removeEvents(); // Prevents stacking of events

                link.addEvent('click', function(event) {
                    lastTab = activeTab;
                    lastSlide = activeSlide;
					activeSlide = this.index;
					event.stop();   // Prevents default behaviour of link
					scroll.toElement(this.scrollto);
				});
            })
        }

        // Adds functionality to medarbetarsidan
        var medarbetare = $('nav_wrap');
        var medarbetarlankar = medarbetare.getElements('a');
        var medarbetarlista = medarbetare.getElements('li');

        if(medarbetarlankar) {
            medarbetarlankar.each(function(link,i) {
                link.index = i;
                link.removeEvents(); // Prevents stacking of events

                link.addEvent('click', function(event) {
                    event.stop();   // Prevents default behaviour of link
                    medarbetare.getElementById('active_nav').removeProperty('id');
                    medarbetarlista[this.index].setProperty('id','active_nav');
                    changeMedarbetare(this.index);
				});
            });
        }

        // Function for changing the Medarbetare in view
        var medarbetarinfo = element.getElements('.viewer');
        var viewer = element.getElementById('viewer_wrap');

        function changeMedarbetare(index) {
            viewer.set('tween', {duration: 300, link:'chain', onComplete: function() {
                    var last = $('active_view')
                    last.removeProperty('id');
                    last.setStyle('display','none');
                    medarbetarinfo[index].setStyle('display','block')
                    medarbetarinfo[index].setProperty('id','active_view')
                }
            }).tween('opacity','0').tween('opacity','1')
        }

        // Left scroll button
		var scrollLeft = $('scrollLeft');
		scrollLeft.removeEvents(); // Prevents stacking of events
		scrollLeft.addEvent('click', function() {
			if(activeSlide!=0) {
                lastTab = activeTab;
                lastSlide = activeSlide;
                activeSlide--;
				scroll.toElement(contents[activeSlide]);
			}
		});

        // Right scroll button
		var scrollRight = $('scrollRight');
		scrollRight.removeEvents(); // Prevents stacking of events
		scrollRight.addEvent('click', function() {
			if(activeSlide!=contents.length) {
                lastTab = activeTab;
                lastSlide = activeSlide;
                activeSlide++;
				scroll.toElement(contents[activeSlide]);

			}
		});
	}
}

// Get's an URL variable
function getURLVar(urlVarName,href) {
    //divide the URL in half at the '?'
    var urlHalves = String(href).split('?');
    var urlVarValue = '';

    if(urlHalves[1]){

        //load all the name/value pairs into an array
        var urlVars = urlHalves[1].split('&');

        //loop over the list, and find the specified url variable
        for(i=0; i<=(urlVars.length); i++){
            if(urlVars[i]){
                //load the name/value pair into an array
                var urlVarPair = urlVars[i].split('=');
                if (urlVarPair[0] && urlVarPair[0] == urlVarName) {
                    //I found a variable that matches, load it's value into the return variable
                    urlVarValue = urlVarPair[1];
                }
            }
        }
    }
    return urlVarValue;
}

var navArrowSlider = function(navWrap, navElementsArray, activeID, arrowX, leftOffset) {
	var youAreHere = new Fx.Tween($(navWrap), { 
		duration: 200,
		transition: Fx.Transitions.Quad.easeOut
	});

	$$(navElementsArray).each(function(item){  
		item.addEvent('mouseenter', function() { 
			var thisPos = item.getPosition(navWrap).y  + item.getSize().y - leftOffset; 
			youAreHere.cancel();
			youAreHere.start('background-position', arrowX + 'px ' + thisPos  + 'px'); 
		});
	});
	
	var currentArrow = function() {
		youAreHere.cancel();
		var activePos = $(activeID).getPosition(navWrap).y  + $(activeID).getSize().y - leftOffset; 
		youAreHere.start('background-position', arrowX + 'px ' + activePos + 'px');      
	};
	
	//correct IE rendering problem (without this, it wont go to the active nav onload)
	var activePos = $(activeID).getPosition(navWrap).y  + $(activeID).getSize().y - leftOffset; 
	$(navWrap).setStyle('background-position', arrowX + 'px ' + activePos + 'px');       
	
	//works to set image to starting position in other browsers
	currentArrow(); 
	
	$(navWrap).addEvent('mouseleave', currentArrow);	
}; 
	
window.addEvent('domready', function() {
	navArrowSlider(
		'nav_wrap', // ID of nav wrap
		'#nav_wrap ul li', // Array selector of nav elements 
		'active_nav', // ID of current nav element
		'0px', //  Background position x of background image
		'20' //  INT ONLY - How far left from the right edge of the nav element that the image settles
	); 	
});

	// pc or mac
		var mac_css='body{font: 12.4px helvetica; word-spacing: 0px; letter-spacing: 0px; } .pcmac { color: blue }'
		var pc_css='body{font: 12px arial; word-spacing: 0px; letter-spacing: 0px; } .pcmac { color: red }'
		var mactest=navigator.userAgent.indexOf("Mac")!=-1
		document.write('<style type="text/css">')
		if (mactest)
		document.write(mac_css)
		else
		document.write(pc_css)
		document.write('</style>')
