/**
 * Global functions that are available on every page
 **/
var PIGlobal = new Class({
    /**
     * Constructor
     **/
    initialize: function() {
        // Things that shall happen after page readyness
        this.loadAssets();
        
        if (Page.isIndividualArchive === false && Page.isSearch === false) {
            this.hideExtendedEntryBodies();
        }
        
        this.initExternalLinks();
        this.initScrollToTopLinks();
        this.initGoogleMapsForm();
        // this.initSearchForm();
    },
    
    loadAssets: function() {
        // Load additional assets
        
        var jsPINavigator = new Asset.javascript(Base.blogUrl + "js/PINavigator.js");
        var jsPISlideshow = new Asset.javascript(Base.blogUrl + "js/PISlideshow.js");
        
        if (Browser.Engine.trident) {
            // var jsFirebugLite = new Asset.javascript('http://getfirebug.com/releases/lite/1.2/firebug-lite-compressed.js');
        }
    },
    
    initScrollToTopLinks: function() {
        var links = $$('#content .module .footer a.nav-to-top');
        
        links.each(function(item) {
            item.addEvent('click', function (evt) {
                evt.stop();
                var myFx = new Fx.Scroll(window, {
                    'duration': 'normal'
                });
                myFx.toTop();
            });
        });
    },
    
    initSearchForm: function() {
        // Prevent the form of being submitted if nothing has been entered
        var elForm = $('search');
        elForm.addEvent('submit', this.checkSearchForm.bind(elForm));
        
        
    },
    
    checkSearchForm: function(evt) {
        var elQ = this.getElement('.q');
        if (elQ.value.trim() === '') {
            return false;
        }
        
        return true;
    },
    
    initExternalLinks: function() {
        var links = $$('#content a.external');
        
        links.each(function (item) {
            item.addEvent('click', function(evt) {
                evt.stop();
                var elLink = $(evt.target);
                var tgt = elLink.getAttribute('href');
                window.open(tgt, '');
            });
        });
    },
    
    hideExtendedEntryBodies: function() {
        var modules = $$('#content .module');
        
        modules.each(function(item, index) {
            var extendedBody = item.getElement('.second-part') ;
            
            if (!extendedBody) {
                return;
            }
            
            var sidebar = item.getElement('.sidebar');
            
            sidebar = null;
            
            if (sidebar) {
                var slideSidebar = new Fx.Slide(sidebar, {duration: 0});
                slideSidebar.hide();
            }
            
            extendedBody.setStyle('margin-bottom', '0');
            
            var slideBody = new Fx.Slide(extendedBody, {duration: 0});
            slideBody.hide();
            
            var elMetaUL = item.getElement('.meta ul');
                       
            // Add the "Show more/less" link            
            if (!elMetaUL) {
                var elMetaUL = new Element('ul');
                var elMeta = item.getElement('.meta');
                elMetaUL.inject(elMeta, 'top');
            }
            
            var elA = new Element('a', {
                'text': 'mehr Informationen',
                'href': '#'
            });
            
            elA.addEvent('click', this.toggleEntryContent.bind(item));
            
            var elLi = new Element('li', {
                'class': 'toggle-extended toggle-extended-more'
            });
            
            elA.inject(elLi);
            elLi.inject(elMetaUL, 'top');
            
            // Hide all subsequent links, if available
            elMetaUL.getElements('li').each(function(item, index){
                // The first item is the toggle link
                if (index > 0) {
                    item.setStyle('display', 'none');
                }
            });
            
            // Store a FXSlide into the extended body
            var mySlide = new Fx.Slide(extendedBody);
            extendedBody.store('slide_extended_body', mySlide);
            
            if (sidebar) {
                mySlide = new Fx.Slide(sidebar);
                extendedBody.store('slide_sidebar', mySlide);
            }
        }, this);
    },
    
    toggleEntryContent: function(evt) {
        evt.stop();
        var elLink = $(evt.target);
        var elLI = elLink.getParent('li');
        var elUL = elLI.getParent('ul');
        var elModule = elUL.getParent('.module');
        var elSidebar = elModule.getElement('.sidebar');
        var extendedBody = elModule.getElement('.second-part');
        
        if (extendedBody) {
            var mySlideBody = extendedBody.retrieve('slide_extended_body');
            mySlideBody.toggle();
        }
        
        elSidebar = null;
        
        if (elSidebar) {
            var mySlideSidebar = extendedBody.retrieve('slide_sidebar');
            mySlideSidebar.toggle();
        }
        
        elLI.toggleClass('toggle-extended-more');
        elLI.toggleClass('toggle-extended-less');

        if (elLI.hasClass('toggle-extended-more')) {
            elLink.set('text', 'mehr Informationen');
            extendedBody.setStyle('margin-bottom', '0');
            elLink.setStyle('margin-top', '0');
        } else {
            elLink.set('text', 'weniger Informationen');
            elLink.setStyle('margin-top', '1em');
            extendedBody.setStyle('margin-bottom', '1.313em');
        }
        
        elUL.getElements('li').each(function(item, index){
            // The first item is the toggle link
            if (index > 0) {
                if (item.getStyle('display') === 'none') {
                    item.setStyle('display', 'block');
                } else {
                    item.setStyle('display', 'none');
                }
            }
        });
    },
    
    initGoogleMapsForm: function() {
        var frm = $('googlemaps');
        
        if (!frm) {
            return;
        }
        
        var defaultAddress = 'Straße, Ort';
        
        var elInputAddress = frm.getElement('input.saddr');
        elInputAddress.value = defaultAddress;
        
        elInputAddress.addEvent('focus', function() {
           if (this.value.trim() === defaultAddress) {
               this.value = '';
           }
        });
        
        elInputAddress.addEvent('blur', function() {
           if (this.value.trim() === '') {
               this.value = defaultAddress;
           }
        });
        
        var elASubmit = frm.getElement('a');
        
        elASubmit.addEvent('click', function(evt) {
            evt.stop();
            this.submit();
        }.bind(frm));
    }
});

PIGlobal.instance = null;
PIGlobal.sharedInstance = function() {
    if (PIGlobal.instance === null) {
        PIGlobal.instance = new PIGlobal();
    }
    return PIGlobal.instance;
};

if (Browser.Engine.trident) {
    window.addEvent('load', function() {
        window.objPIGlobal = PIGlobal.sharedInstance();
    });
} else {
    window.addEvent('domready', function() {
        window.objPIGlobal = PIGlobal.sharedInstance();
    });
}

 