function fixPNG() {
    if (Browser.Engine.trident && Browser.Engine.version <= 4 && $$('pngsource').length <= 0) {
        new Asset.javascript(jsDir+'pwf/iepngfix_tilebg.js', {
            'id': 'pngsource',
            'onload' : function(){
                
            }
        });
    }
}

function addMaps() {
        $$('div.map').each(function(i) {

                var options = null;

                try {
                        var data = Base64.decode(i.get('title'));
                        options = JSON.decode(data);
                } catch (e) {
                        return;
                }

                i.erase('title');

                var map = new GMap2(i);
                map.setMapType(G_HYBRID_MAP);

                // Links oben Pfeile und "+" und "-" Tasten
                map.addControl(new GSmallMapControl());

                // Rechts oben Tasten "Karte", "Satellit", "Hybrid"
                map.addControl(new GMapTypeControl());

                // Mittelpunkt setzen
                var center = new GLatLng(options.latitude, options.longitude);
                map.setCenter(center, options.zoom);

                options.markers.each(function(m){
                        var marker = new GMarker(new GLatLng(m.latitude, m.longitude));
                        
                        marker.info = m.html;
                        marker.openInfo = function() {
                                this.openInfoWindowHtml(this.info);
                        }

                        map.addOverlay(marker);
                        //marker.openInfo();
                        GEvent.addListener(marker, "click", function() {marker.openInfo()});
                });

        });
}

function googleapiloaded() {
    google.load("maps", "2", {
        'callback' : (function(){
            addMaps();
        })
    });
}

function loadGoogleAPI() {
    var maps = $$('div.map');

    if (maps.length > 0 && googleMapKey != '' && $$('gmapsJS').length <= 0) {
        new Asset.javascript('http://www.google.com/jsapi?callback=googleapiloaded&key='+googleMapKey, {
            'id': 'gmapsJS'
        });
    }
}

function addFlash() {
	/*if ($$('div.flash').length > 0) {
		
	}*/
	
	$$('div.flash').each(function(i) {

		var options = null;
		
		try {
			var data = Base64.decode(i.get('title'));
			options = JSON.decode(data);
		} catch (e) {
			return;
		}
		
		i.erase('title');
		
		var min = options.min;
		var msg = options.msg;
		
		if (min) {
			if (Browser.Plugins.Flash.version < min[0] || (Browser.Plugins.Flash.version == min[0] && Browser.Plugins.Flash.build < min[2])) {
				alert(msg);
				return;
			}
		}
		
		var obj = new Swiff(options.file, {
			id: 'flash'+i.get('id'),
			params: options.params,
			vars: options.vars
		}).inject(i);
	});
}

var mooScroll = null;

function refreshMooScrolls() {
    if (!$('scrollsource')) {
        if ($$('.scroll').length <= 0) {
            return;
        }
        addScrollScript();
        return;
    }

    if (mooScroll) {

        $$('.scroll').each(function(item,index){
            for(var i=0; i<this.mooScrollAreas.length; i++){
                var msa = this.mooScrollAreas[i];

                if (msa.parentEl == item) {
                    return;
                }
            }

            var scrollArea = new MooScrollArea(this.options, item,this.windowFxScroll);
            this.mooScrollAreas.include(scrollArea);
            if(this.options.smoothMooScroll.toAnchor || this.options.smoothMooScroll.toMooScrollArea){
                this.smoothMooScroll = new SmoothMooScroll({toAnchor:this.options.smoothMooScroll.toAnchor,toMooScrollArea:this.options.smoothMooScroll.toMooScrollArea},scrollArea.contentEl,this.windowFxScroll);
            }
        }.bind(mooScroll));

        mooScroll.refresh();
    }
}

function addScrollScript() {

       new Asset.javascript(jsDir+'pwf/MooScroll_0.59.js', {
            'id': 'scrollsource',
            'onload' : function(){
                if (!mooScroll) {
                    mooScroll = new MooScroll({handleActiveOpacity:1});
                }
                refreshMooScrolls();
            }
        });
}

function addRemooz(element) {

    if (element || $$('.remooz').length > 0) {

        var loaded = (function(){

            (element ? [element] : $$('.remooz')).each(function(i) {
                
                new ReMooz(i, {
                    centered: true, // Zoom the center of the screen
                    origin: i.getElement('img') // Take the image inside as origin for the zooming element
                });

            });

        }).bind({
            element: element
        });

        if (!$('remoozsource')) {

            new Asset.javascript(jsDir+'pwf/ReMooz.js', {
                'id': 'remoozsource',
                'onload' : loaded
            });

        } else {
            loaded.call();
        }
    }
}

function loadSqueezeBox(loadedFunction) {
    if (!$('squeezesource')) {
        new Asset.javascript(jsDir+'pwf/SqueezeBox.js', {
            'id': 'squeezesource',
            'onload' : (function(){
                
                if (!SqueezeBox.parsers.swf) {
                    SqueezeBox.parsers.swf = function(preset) {
                            return (preset || this.url.test(/\.swf/)) ? this.url : false;
                    };
                }

                if (!SqueezeBox.handlers.swf) {
                    SqueezeBox.handlers.swf = function(url) {
                            var size = this.options.size;
                            return new Swiff(url, {
                                    id: 'sbox-swf',
                                    width: size.x,
                                    height: size.y
                            });
                    };
                }

                if (this.loadedFunction) {
                    this.loadedFunction.call();
                }
            }).bind({
                loadedFunction: loadedFunction
            })
                
        });
    
    } else if (loadedFunction) {
        loadedFunction.call();
    }
}

function addSqueezeBox(element) {

    if (element || $$('.squeeze').length > 0) {

        var loaded = (function(){

            (element ? [element] : $$('.squeeze')).each(function(i) {
                
                SqueezeBox.assign(i, {
                    parse: 'rel'
                });

            });

        }).bind({
            element: element
        });

        loadSqueezeBox(loaded);
        
    }
}

var mooFlows = [];
var mooFlowOptions = new Hash({});
function registerMooFlowOptions(elementClass, options) {
    mooFlowOptions.set(elementClass, options);
}

function addFlow() {

       if (!$('flowsource') && $$('.flow').length > 0) {

           new Asset.javascript(jsDir+'pwf/MooFlow.js', {
                'id': 'flowsource',
                'onload' : function(){
                    $$('.flow').each(function(i){
                        if (!i.hasClass('mf')) {

                            var options = null;
                            i.get('class').split(" ").each(function(c){
                                if (!options && mooFlowOptions[c]) {
                                    options = mooFlowOptions[c];
                                }
                            });
                            if (!options) {
                                options = {
                                    useSlider: true,
                                    useAutoPlay: false,
                                    useCaption: true,
                                    useResize: true,
                                    useWindowResize: false,
                                    useMouseWheel: true,
                                    useKeyInput: true,
                                    useViewer: true,
                                    useDetails: false
                                };
                            }

                            if (!options.height) {
                                options.height = i.getParent().getStyle('height').toInt();
                            }

                            var mf = new MooFlow(i, options);

                            mooFlows.push(mf);
                        }
                    });
                }
           });
       }
}

function addColorPicker() {
        var loaded = function(){

                    $$('.colorpicker input').each(function(i){

                        if (i.colorpicker) {
                            i.colorpicker.destroy();
                        }

                        i.colorpicker = new MooRainbow(i, {
                            'id': i.get('id')+'rain',
                            'startColor': new Color(i.get('value')),
                            'imgPath': imgDir,
                            'onChange': (function(color) {
                                this.set('value', color.hex);
                            }).bind(i)
                        });
                    });

                };

       if ($$('.colorpicker').length > 0) {

           if (!$('colorsource')) {

               new Asset.javascript(jsDir+'pwf/mooRainbow.1.2b2.js', {
                    'id': 'colorsource',
                    'onload' : loaded
                });
           } else {
               loaded.call();
           }
       }
}

window.addEvent('domready', function() {
        fixPNG();
	loadGoogleAPI();
	addFlash();
	refreshMooScrolls();
	addFlow();
	addColorPicker();
        addRemooz();
        addSqueezeBox();
});

window.addEvent('ajaxready', function() {
        fixPNG();
	loadGoogleAPI();
	addFlash();
	refreshMooScrolls();
	addFlow();
	addColorPicker();
        addRemooz();
        addSqueezeBox();
});