/*
Coppenrath & Wiese JS Methods
by http://www.comspace.de
Dependencies: 
    Mootools Core 1.2.3+
        - * (recheck before optimizing)
    Mootools More
        -Slider (mooflow)
        -Assets (mooflow)
        -Fx.Accordion
        - (recheck before optimizing)
*/

/*
* InputToggle: convenience Class to clear Inputs on Focus/hover
* @author jgi@comspace.de
*/
var InputToggle = new Class({
    Implements:[Options, Events],
    options:{
        'selector': 'input.toggle',
        'focus': true,    //toggle on focus/unfocus
        'hover':false,    //toggle on hover
        'select':true    //select value on toggle
    },
    initialize: function(options){
        this.setOptions(options);
        var elements = document.id(document.body).getElements(this.options.selector);
        if(!elements || (!this.options.focus && !this.options.hover)){
            return;
        }        
        this.prepareElements(elements);
    },
    prepareElements: function(elements){
        elements.each(function(element){
            element.store('originalValue', element.get('value'));
            if(this.options.focus){
                element.addEvents({
                    'focus': this.onToggle.bind(this),
                    'blur': this.onUnToggle
                });
            }
            if(this.options.hover){
                element.addEvents({
                    'mouseenter': this.onToggle.bind(this),
                    'mouseleave': this.onUnToggle
                }); 
            }
        }.bind(this));
    },
    onToggle: function(event){
        var element = document.id(event.target);
        if(element.get('value') === element.retrieve('originalValue')){
            element.set('value', '');
        } else if(this.options.select) {
            element.select();
        }
    },
    onUnToggle: function(event){
        var element = document.id(event.target);
        if(element.get('value') === ""){
            element.set('value', element.retrieve('originalValue'));
        }
    }
});

/*
    Image.changeSrc(src), Image.resetSrc() - convenience method for cms-friendly src-replacement
    Author: jgi@comspace.de
    Requires:
        - Core
        -  Element (store, retrieve)
*/
    
Element.implement({
    changeSrc: function(src) {
        if(!src){return this;}
        if(!this.retrieve('orgsrc')){this.store('orgsrc', this.src);}
        this.src=src;
        return this;
    },
    resetSrc: function() {
        if(!this.retrieve('orgsrc')){return this;}
        this.src=this.retrieve('orgsrc');
        return this;
    }
});


/*
    showSearch - animated search-form for coppenrath&wiese
    Author: jgi@comspace.de
    Requires:
        - Core
        - Element (store, retrieve, ...)
        - Event
        - Function (delay)
        - Fx.Morph
*/

var showSearch = new Class({
    Implements:[Options],
    options:{
        'trigger':'li.n5',
        'content':'.vSearchWrapper',
        'mouseout':'#frame_nav',
        'delay':1000
    },
    initialize:function(options){
        this.locked = false;
        this.focuslocked = false;
        this.shown = true;
        this.setOptions(options);
        
        this.contentEl = $$(this.options.content)[0];
        this.triggerEl = $$(this.options.trigger)[0];
        this.mouseoutEl = $$(this.options.mouseout)[0];
        if(!this.contentEl || !this.triggerEl || !this.mouseoutEl){
            return;
        }
        
        this.showFx = new Fx.Morph(this.contentEl, {duration:1000, transition:Fx.Transitions.Bounce.easeOut});
        this.hideFx = this.showFx;
        
        
        this.setupEvents();
        if(!document.body.hasClass('start')){//nofx on init, except for start
        
            this.shown = false;
            this.contentEl.setStyles({'top':'-40px', 'opacity': 0}); 
        }
        else {
            this.hide(0);
        }
    },
    setupEvents:function(){
        this.triggerEl.addEvents({'mouseenter': this.show.bind(this), 'click':function(ev){ev.stop(); this.contentEl.getElement('input').focus();}.bind(this)});
        this.mouseoutEl.addEvents({
            'mouseleave': this.hide.bind(this)
        });
        this.contentEl.addEvents({
            'mouseenter':this.lock.bind(this),
            'mouseleave':function(){this.unlock(); this.hide();}.bind(this)
        });
        this.contentEl.getElements('input').addEvents({
            'focus': function(){this.focuslock(); this.lock();}.bind(this),
            'blur':function(){this.focusunlock();this.unlock(); this.hide();}.bind(this)
        });
    },
    show:function(options){
        if(options.stop){
            options.stop();
        }
        if(this.shown){return;}
        this.shown = true;
        this.showFx.start({'top':['-40', 0], 'opacity':[0,1]});
    },
    hide:function(options){
        var delay = (options)?options:this.options.delay;
        if(this.locked || this.focuslocked || !this.shown){
            return;
        }
        /* if(delay === 0){
            this.contentEl.setStyles({'top':'-40px', 'opacity':0});
            this.shown = false;
            return;
        } */
        (function(){
            if(this.locked || this.focuslocked || !this.shown){
                return;
            }
            this.shown = false;
            this.showFx.start({'top':[0, '-40'], 'opacity':[1, 0]});
        }.bind(this)).delay(delay);
    },
    lock:function(){
        this.locked = true;
    },
    unlock:function(){
        this.locked = false;
    },
    focuslock:function(){
        this.focuslocked = true;
    },
    focusunlock:function(){
        this.focuslocked = false;
    }
});




//switch to 
/*
    showSearch - initialize coverflow: mooflow when flash is unavailable, or flash version (for coppenrath&wiese)
    Author: jgi@comspace.de
    Requires:
        - Core
        - Element (store, retrieve, ...)
        - Event
        - Function (delay)
        - Fx.Morph
*/




var cfSwitch = new Class({
    Implements:[Options],
    options:{
        minFlash:9,
        startIndex:3
    },
    initialize:function(options){
        if(!options.el){return;}
        this.setOptions(options);
        var optEl = document.id('cfactive');
        if(!window.cfSwitchIndex && optEl && optEl.get('class')){
            this.options.startIndex = optEl.get('class');
        }
        if(window.cfSwitchIndex){
            this.options.startIndex = window.cfSwitchIndex;
        }
        
        //if(this.options.startIndex < 3){this.options.startIndex = 3;}
        if(Browser.Plugins.Flash.version && Browser.Plugins.Flash.version >= this.options.minFlash){
            this._startFlashFlow();
        }else {
            this._startMooFlow();
        }
    },
    _startMooFlow:function(){ //TODO: remove std-values
        this.options.el.removeClass('noimgs');
        //if(this.options.startIndex < 4){this.options.startIndex = 4;}
        this.mf = new MooFlow(this.options.el, {
            bgColor:'transparent', 
            useMouseWheel: false,
            heightRatio: 0.304, 
            offsetY:-45, 
            useCaption: true, 
            startIndex: parseInt(this.options.startIndex - 1, 10), 
            factor: 98,
            reflection: 0,
            useViewer:true,
            onClickView: function(obj){
                //alert('der Link des Bildes '+obj.title+'\n zeigt auf '+obj.href);
                if(!obj.href){return false;}
                window.location=obj.href;
            }
        });
        this.options.el.addClass('ieload');
        this.mf.addEvent('glideToI', function(index){
            var plusminus = 4;
            var outid0 = index - plusminus;
            var outid1 = index + plusminus;
            //console.log('glide ', mf, index, mf.loadedImages[outid]);
            
            var imgs = this.loadedImages.length;
            
            for(var i = 0; i<imgs; i++){
                this.loadedImages[i].set('morph', {'duration':300});
                if(i != outid0 && i != outid1){
                    this.loadedImages[i].style.visibility = 'visible';
                    this.loadedImages[i].style.marginTop = 0;
                    this.loadedImages[i].morph({'opacity':1});
                }
            }
            
            if(this.loadedImages[outid0]){
                $(this.loadedImages[outid0]).morph({'opacity':[1,0], 'margin-top':[0,-10]});
            }
            
            if(this.loadedImages[outid1]){
                $(this.loadedImages[outid1]).morph({'opacity':[1,0], 'margin-top':[0,-10]});
            }
            
        });
        
        document.id('moofll').addEvent('click', function(ev){ev.stop();this.mf.prev(); }.bind(this));
        document.id('mooflr').addEvent('click', function(ev){ev.stop();this.mf.next(); }.bind(this));
        
        
    },
    _startFlashFlow:function(){
        var target = '/eventparse.php?.xml';
        var index = this.options.startIndex - 1;
        //console.log('flash startindex', index);
        if(window.cfXML) target = window.cfXML;
var cfSwiff = new Swiff('/flash/CwCoverflow.swf', {

            container:this.options.el,
            width: 560,
            height: 172,
            params:{
                wmode:'transparent',
                allowFullscreen: 'true',
                allowNetworking: 'all'
            },
            vars:{
                xmlpath:target,
                startindex:index
            }
        });
        $$('div.box_cf div.flowControl').setStyle('display', 'none');
    }
});




//todo: classify more.
var CPMenuFade = new Class({
    
    initialize:function(ul){
        if(!ul||!ul.get||ul.get('tag')!='ul'){
            return;
        }
    //menu hover animations add-on
        ul.getChildren().each(function(menu){
            var sub = menu.getElement('div');
            if(!sub){
                return;
            }
            var mod;
            if(Browser.Engine.trident){ //sorry, render bug prevents normal usage in IE
                mod = sub.getElements('span.wavelet, div.bg');
                mod[0].get('tween').addEvent('complete', function(ev){
                    this.element.getParent('li').reoveClass('animating');
                    if(document.body.hasClass('ie6')){
                    
                        //this.element.setStyle('opacity', 1);
                    }
                    else {
                        this.element.setStyle('opacity', 1);
                    }
                    
                });
                
            }else{
                mod = sub;
            }
            var morph = new Fx.Morph(sub, {duration:1000, transition:Fx.Transitions.Bounce.easeOut});
            mod.setStyle('opacity', 0);
            //mod.set('tween', {onComplete:function(var, var2){console.log(this, var, var2);}});
            
            
            menu.addEvents({
                mouseenter:function(event){
                    this.addClass('animating');
                    if(Browser.Engine.trident){
                        mod.setStyles({'display': 'block', 'visibility':'visible', 'opacity':0}).tween('opacity', [0,1]).getParent('li').addClass('animating');
                        if(document.body.hasClass('ie7')) {
                            menu.getElements('div>div>ul>li').each(function(el){
                                if(el.getElement('li')){
                                    el.addEvents({
                                    'mouseenter':function(ev){
                                        if(el.getPrevious()){
                                            el.style.marginBottom = '-3px';
                                        }
                                        el.getElements('ul').each(function(ul){ul.style.display = 'block';});
                                    },
                                    'mouseleave':function(ev){
                                        el.style.marginBottom = '0px';
                                        el.getElements('ul').each(function(ul){ul.style.display = 'none';});
                                    }});
                                }
                            });
                        }
                    }
                    else {
                        mod.setStyles({'display': 'block', 'visibility':'visible', 'opacity':0}).tween('opacity', [0,0.98]).getParent('li').addClass('animating');
                    }
                    morph.start({'top':['5px', '38px']});
                },
                mouseleave:function(){
                    morph.cancel();
                    //mod.get('tween').cancel();
                    mod.setStyles({'display': 'none', 'opacity':0, 'visibility':'hidden'});
                }
                
            });
        });
    
    }
});
 

function popGeneric(url) {
    newwindow=window.open(url,'cwWin',"width=800,height=600,location=no,menubar=no,resizable=yes,status=yes,toolbar=no,top="+((screen.height-300)/2)+",left="+((screen.width-500)/2));
    if (window.focus) {newwindow.focus()}
    return false;
}
function popGenericScroll(url) {
    newwindow=window.open(url,'cwWin',"width=800,height=600,location=no,menubar=no,resizable=yes,status=yes,scrollbars=1,toolbar=no,top="+((screen.height-300)/2)+",left="+((screen.width-500)/2));
    if (window.focus) {newwindow.focus()}
    return false;
}
// AUTOLOAD CODE BLOCK
// AUTOLOAD CODE BLOCK
window.addEvent('domready', function(){
if( window.Mediabox){
    Mediabox.scanPage = function() {
//    $$('#mb_').each(function(hide) { hide.set('display', 'none'); });
    var links = $$("a").filter(function(el) {
        return el.rel && el.rel.test(/^lightbox/i);
    });
    
    $$(links).addEvent('click', function(ev){ev.stop();}).mediabox({fullscreenNum: '0',    fullscreen: 'false',NBloop: 'false', NBpath: '/assets/js/NonverBlaster.swf'}, null, function(el) {
        var rel0 = this.rel.replace(/[[]|]/gi," ");
        var relsize = rel0.split(" ");
        return (this == el) || ((this.rel.length > 8) && el.rel.match(relsize[1]));
    });
    }
}});