// written by Dean Edwards, 2005
// with input from Tino Zijdel, Matthias Miller, Diego Perini
// http://dean.edwards.name/weblog/2005/10/add-event/
// 2007-07-10 TKO - Removed check for body in schedule because of problems with Firefox 2.0

function addEvent(element, type, handler) {
	// Modification by Tanny O'Haley, http://tanny.ica.com to add the
	// DOMContentLoaded for all browsers.
	if (type == "DOMContentLoaded" || type == "domload") {
		addDOMLoadEvent(handler);
		return;
	}
	
	if (element.addEventListener) {
		element.addEventListener(type, handler, false);
	} else {
		// assign each event handler a unique ID
		if (!handler.$$guid) handler.$$guid = addEvent.guid++;
		// create a hash table of event types for the element
		if (!element.events) element.events = {};
		// create a hash table of event handlers for each element/event pair
		var handlers = element.events[type];
		if (!handlers) {
			handlers = element.events[type] = {};
			// store the existing event handler (if there is one)
			if (element["on" + type]) {
				handlers[0] = element["on" + type];
			}
		}
		// store the event handler in the hash table
		handlers[handler.$$guid] = handler;
		// assign a global event handler to do all the work
		element["on" + type] = handleEvent;
	}
};
// a counter used to create unique IDs
addEvent.guid = 1;

function removeEvent(element, type, handler) {
	if (element.removeEventListener) {
		element.removeEventListener(type, handler, false);
	} else {
		// delete the event handler from the hash table
		if (element.events && element.events[type]) {
			delete element.events[type][handler.$$guid];
		}
	}
};

function handleEvent(event) {
	var returnValue = true;
	// grab the event object (IE uses a global event object)
	event = event || fixEvent(((this.ownerDocument || this.document || this).parentWindow || window).event);
	// get a reference to the hash table of event handlers
	var handlers = this.events[event.type];
	// execute each event handler
	for (var i in handlers) {
		this.$$handleEvent = handlers[i];
		if (this.$$handleEvent(event) === false) {
			returnValue = false;
		}
	}
	return returnValue;
};

function fixEvent(event) {
	// add W3C standard event methods
	event.preventDefault = fixEvent.preventDefault;
	event.stopPropagation = fixEvent.stopPropagation;
	return event;
};
fixEvent.preventDefault = function() {
	this.returnValue = false;
};
fixEvent.stopPropagation = function() {
	this.cancelBubble = true;
};

// End Dean Edwards addEvent.

// Tino Zijdel - crisp@xs4all.nl This little snippet fixes the problem that the onload attribute on 
// the body-element will overwrite previous attached events on the window object for the onload event.
if (!window.addEventListener) {
	document.onreadystatechange = function(){
		if (window.onload && window.onload != handleEvent) {
			addEvent(window, 'load', window.onload);
			window.onload = handleEvent;
		}
	}
}

// Here are my functions for adding the DOMContentLoaded event to browsers other
// than Mozilla.

// Array of DOMContentLoaded event handlers.
window.onDOMLoadEvents = new Array();
window.DOMContentLoadedInitDone = false;

// Function that adds DOMContentLoaded listeners to the array.
function addDOMLoadEvent(listener) {
	// If the DOMContentLoaded event has happened, run the function.
	if(window.DOMContentLoadedInitDone){
		listener();
		return;
	}

	window.onDOMLoadEvents[window.onDOMLoadEvents.length]=listener;
}

// Function to process the DOMContentLoaded events array.
function DOMContentLoadedInit() {
	// quit if this function has already been called
	if (window.DOMContentLoadedInitDone) return;

	// flag this function so we don't do the same thing twice
	window.DOMContentLoadedInitDone = true;

	// iterates through array of registered functions 
	for (var i=0; i<window.onDOMLoadEvents.length; i++) {
		var func = window.onDOMLoadEvents[i];
		func();
	}
}

function DOMContentLoadedScheduler() {
	// quit if the init function has already been called
	if (window.DOMContentLoadedInitDone) return true;
	
	// First, check for Safari or KHTML.
	// Second, check for IE.
	//if DOM methods are supported, and the body element exists
	//(using a double-check including document.body, for the benefit of older moz builds [eg ns7.1] 
	//in which getElementsByTagName('body')[0] is undefined, unless this script is in the body section)
	if(/KHTML|WebKit/i.test(navigator.userAgent)) {
		if(/loaded|complete/.test(document.readyState)) {
			DOMContentLoadedInit();
		} else {
			// Not ready yet, wait a little more.
			setTimeout("DOMContentLoadedScheduler()", 250);
		}
	} else if(document.getElementById("__ie_onload")) {
		return true;
	}

	// Check for custom developer provided function.
	if(typeof DOMContentLoadedCustom == "function") {
		if(typeof document.getElementsByTagName != 'undefined' && (document.getElementsByTagName('body')[0] != null || document.body != null)) {
			// Call custom function.
			if(DOMContentLoadedCustom()) {
				DOMContentLoadedInit();
			} else {
				// Not ready yet, wait a little more.
				setTimeout("DOMContentLoadedScheduler()", 250);
			}
		}
	}

	return true;
}

// Schedule to run the init function.
setTimeout("DOMContentLoadedScheduler()", 250);

// Just in case window.onload happens first, add it there too.
addEvent(window, "load", DOMContentLoadedInit);

// If addEventListener supports the DOMContentLoaded event.
if(document.addEventListener)
	document.addEventListener("DOMContentLoaded", DOMContentLoadedInit, false);

/* for Internet Explorer */
/*@cc_on @*/
/*@if (@_win32)
	document.write("<script id=__ie_onload defer src=\"//:\"><\/script>");
	var script = document.getElementById("__ie_onload");
	script.onreadystatechange = function() {
		if (this.readyState == "complete") {
			DOMContentLoadedInit(); // call the onload handler
		}
	};
/*@end @*/

/*****************************************************************
 *
 * lazierLoad 0.2 - by Bramus! - http://www.bram.us/
 * inspired upon http://www.appelsiini.net/projects/lazyload/
 *
 * v 0.2 - 2007.09.12 - added options: treshold, replaceImage, loadingImage
 * v 0.1 - 2007.09.11 - initial release
 *
 * Licensed under the Creative Commons Attribution 2.5 License - http://creativecommons.org/licenses/by/2.5/
 *
 * Adapted original script to hide all images untill page load
 *****************************************************************/
 
    if (!JS_BRAMUS) { var JS_BRAMUS = new Object(); }

    JS_BRAMUS.lazierLoad                    = Class.create();
    JS_BRAMUS.lazierLoad.prototype      = {
        options             : null,
        initialize          : function(options) {           
            // find all images and lazyLoad 'm              
            $$('.caseLink img').each(function(image) {
                new JS_BRAMUS.lazierLoadImage(image, (options || {}));  
            });
        }       
        
    }


    JS_BRAMUS.lazierLoadImage           = Class.create();
    JS_BRAMUS.lazierLoadImage.prototype     = {
        
        options             : null,         // options
        element             : null,         // the img element
        loading             : false,        // loading
        loaded              : false,        // loaded
        initialize          : function(image, options) {
    
            // set the options
            this.options                = options || {};
            this.options.loadingImage   = this.options.loadingImage || "/img/loading.gif";
        
            // calculate position of image
            this.element            = image;
            originalWidth           = this.element.width;
            originalHeight          = this.element.height;
            
            // set loading image
            this.element.origSrc    = this.element.src;
            this.element.src        = this.options.loadingImage;

            replacementWidth        = this.element.width;
            replacementHeight       = this.element.height;
            
            posLeft             = (originalWidth-16)/2;
            posTop              = (originalHeight-16)/2;
//        this.element.setStyle({position:'relative', left:posLeft, top:posTop});
                
            this.lazyScroller = this.lazyScroll.bindAsEventListener(this);
            Event.observe(window, 'load', this.lazyScroller.bind(this), false);   
        },
        
        lazyScroll          : function() {
            // image not loaded and not loading
            if ((this.loaded != true) && (this.loading != true)) {
                this.loading    = true;
                
                // load in the new image
                var newImage    = null;
                newImage        = new Image();
                newImage.src    = this.element.origSrc;

                // image is in cache (IE6 & IE7 ... Firefox can handle the onload well even file was in cache);
                if (newImage.complete) {
                        this.element.src    = newImage.src;
                        this.loaded         = true;
                        
                // image not in cache
                } else {
                    newImage.onload = function() {
                        this.element.src    = newImage.src;
                        this.loaded         = true;
                    }.bind(this);
                }
            }
        }
    }
    
    function initLazierLoad() { myLL = new JS_BRAMUS.lazierLoad(); }
    
/////////////////////////////////////////////////////////////////////
// SPECIFIEKE FUNCTIES VIJE SLIDER
/////////////////////////////////////////////////////////////////////
var slider = {
                  container_width:617,

                  effectInterval:15,
                  moveX:2,
                  effectDuration:1
              };

slider.attachSlideHandler = function() {
    var event;
    var items = $$('.filter_slider');                           // make list of element that have have class 'filter_slider'
    if (items && items.length > 0) {                            // item(s) found
        items.each(function(itemMember){                        // loop thru the item array
            var slideContainer = $(itemMember);                 // the placeholder for the Slider

            if(slider.CalculateContentWidth(slideContainer) > slider.container_width){
                var Nr = items.indexOf(slideContainer);
    
                slider.attachSlideControls(slideContainer, Nr);
    
                Event.observe($('filter_slide_left_' +Nr),  'mouseover', slider.slide.bindAsEventListener(event));
                Event.observe($('filter_slide_right_'+Nr), 'mouseover', slider.slide.bindAsEventListener(event));
            }
        });
    }
}
slider.CalculateContentWidth = function(element) {
    var slideContentWidth = 4;
    $(element).childElements().each(function(childElement){
        slideContentWidth += parseInt(childElement.getWidth());
        }
    );
    return slideContentWidth;
}

slider.attachSlideControls = function(element, Nr) {
        
    var insertHere = element.parentNode;
    slideContentWidth = slider.CalculateContentWidth(element);
    $(element).removeClassName('filter_slider');
    $(element).setAttribute('id', 'slide_container_'+Nr);
    $(element).setStyle({left: '0px', width:slideContentWidth,display:'block',height:'100px', overflow:'hidden'});

    var containerElement = document.createElement('div');
        $(containerElement).setStyle({overflow: 'hidden', width:slider.container_width, position: 'relative',display:'block', float:'left'});
        containerElement.appendChild(element.remove());
    
    var rightElement = document.createElement('a');
        rightElement.setAttribute('id', 'filter_slide_right_'+Nr);
        $(rightElement).setStyle({cursor: 'pointer', position: 'relative',display:'block', float: 'right', "border-left":'1px solid #FFF'});
        rightElement.appendChild(document.createTextNode('<'));
    //prototype 1.6 => var rightElement = new Element('a', { 'id': 'filter_slide_right_'+Nr}).update('>');
    
    var leftElement = document.createElement('a');
        leftElement.setAttribute('id', 'filter_slide_left_'+Nr);
        $(leftElement).setStyle({cursor: 'pointer', position: 'relative',display:'block', float: 'right'});
        leftElement.appendChild(document.createTextNode('>'));
    //prototype 1.6 => var leftElement = new Element('a', { 'id': 'filter_slide_left_'+Nr}).update('<');
    
    var slidesElement = document.createElement('div');
        $(slidesElement).addClassName('filter_slider');
        $(slidesElement).setStyle({position: 'absolute', display:'block',left:'50'});

        slidesElement.appendChild(leftElement);
        slidesElement.appendChild(rightElement);
        slidesElement.appendChild(containerElement);
    
        $(insertHere).insertBefore(slidesElement, insertHere.firstDescendant());
}

slider.slide = function(event){
    element           = Event.element(event);
    idParts           = element.id.split('_');
    slideDirection    = idParts[2];
    Nr                = idParts[3];
    slideContainer    = 'slide_container_'+Nr;
    slideContentWidth = $(slideContainer).getWidth()
	
                var int = window.setInterval(function(){
                    if(slideDirection == 'right'){
                        if(parseInt($(slideContainer).getStyle('left')) < -slider.moveX){
                            window.slideEffect = new Effect.MoveBy($(slideContainer), 0, slider.moveX, {duration:slider.effectDuration/1000});
                        }
                    }else{//slideDirection == left
                        
                        containerLeftOffset = parseInt($(slideContainer).getStyle('left'))*-1;
                        if(!containerLeftOffset){containerLeftOffset=0;}//Opera fix
                        if(containerLeftOffset <= slideContentWidth-$(slideContainer).parentNode.getWidth()){
                            window.slideEffect = new Effect.MoveBy($(slideContainer), 0, -slider.moveX, {duration:slider.effectDuration/1000});
                        }
                    }
                },slider.effectInterval);

                Event.observe($(element.id), 'mouseout', function(){
                    window.int = window.clearInterval(int);
                    if(window.slideEffect){window.slideEffect.cancel();}//else{alert('no effect found');}
                    }
                );
}

///////////////////////////////////////////
// ONLOAD HANDLERS
///////////////////////////////////////////
addEvent(window, 'DOMContentLoaded', initLazierLoad);
addEvent(window, 'DOMContentLoaded', slider.attachSlideHandler);