/**
 * Startseite
 *
 */
/**
 * Configuration options:
 *
 * activeElement  string    The default element.
 * elements       array     List of all elements.
 * activeCss      string
 * inactiveCss    string
 */
 
(function($){
    
	$.fn.meravisSearch = function(options) {
    
    var cookieValue = $.cookie('meravisSearch');
    var activeTab = options.activeElement;
    
    function _setActiveTab(element) {
        if(!$(element).is(':visible')) {
            for(var i = 0; i < options.elements.length; i++) {
                $(options.elements[i]).hide();
            }
            
            for(var i = 0; i < options.elements.length; i++) {
                var elements = $('[rel="'+ options.elements[i] +'"]');
                elements.parent().attr('class', options.inactiveCss[0]);
                elements.attr('class', options.inactiveCss[1]);
            }
                    
            $(element).show();
            $('[rel="' + element + '"]').attr('class', options.activeCss[1]);
            $('[rel="' + element + '"]').parent().attr('class', options.activeCss[0]);
            
            activeTab = element;
        }
    }
    
    function _setCookie() {
         var cookieValue = '';
                
        $(options.elements[i]).find('input, select, textarea').each(function() {
            if($(this).val() != '' && $(this).attr('id'))
        	   cookieValue += $(this).attr('id') + '=' + $(this).val() + ';';
		});
        
        $.cookie('meravisSearch', cookieValue + 'activeTab=' + activeTab);
    }
    
    for(var i = 0; i < options.elements.length; i++) {
            $(options.elements[i]).find('form').submit(function() {
               _setCookie();
            });
                                              
            $('[rel="'+ options.elements[i] +'"]').click(function() {
                _setActiveTab($(this).attr('rel'));
                return false;
            });
    }
    
    if(cookieValue) {
        var cookieValues = cookieValue.split(';');
        
        for(var i = 0; i < cookieValues.length; i++) {
            var pair = cookieValues[i].split('=');
            
            if(pair[0] == 'activeTab')
                _setActiveTab(pair[1]);
            //else
                //$('#' + pair[0]).val(pair[1]);
        }
    }
    else {
        _setActiveTab(options.activeElement);
    }
    
    this.setActiveTab = _setActiveTab;
    this.submit = function() { $(activeTab).find('form').submit();};
    
    return this;
}})(jQuery);

(function($) {
    
    $.fn.meravisAccordion = function(options) {
        $(this).each(function($options) {_meravisAccordion($options, $(this));});
    }
    
    function _meravisAccordion($options, $self) {
        var parent = $self;
        var panels = parent.children();
        
        parent.show();
        
        var disabled = panels.not('.enabled').not(':first');
        var disabledParts = disabled.children().not('.accordion-inactive');
        var headings = panels.children().filter('.accordion-inactive, .accordion-active');
        var first = panels.filter(':first');
        var firstHeading = first.find('.accordion-inactive');
            
        first.show();
        first.addClass('enabled'); 
        firstHeading.removeClass('accordion-inactive');
        firstHeading.addClass('accordion-active');
        disabledParts.hide();
        
        headings.click(function() {
            var lastEnabled = panels.filter('.enabled');          
            
            var lastEnabledHeading = lastEnabled.find('.accordion-active');
            
            lastEnabledHeading.removeClass('accordion-active');
            lastEnabledHeading.addClass('accordion-inactive');
            
            lastEnabled.removeClass('enabled');
            
            $(this).parent().prevAll().slideUp('slow', function() {
                $(this).children().not('.accordion-inactive').hide();
                $(this).show();
                parent.append($(this));
            });
            
            $(this).parent().addClass('enabled');
            $(this).removeClass('accordion-inactive');
            $(this).addClass('accordion-active');
            $(this).parent().children().slideDown('slow');
            
            return false;
        });
    }
    
})(jQuery);

(function($) {
    
    $.fn.clearOnEnter = function(options) {
        
    var tag = $(this).get(0).tagName;
    
            
    if(tag == 'INPUT' || tag == 'TEXTAREA')
        $('#' + $(this).get(0).id).focus(function(){ $(this).val(''); });
    else
        $(this).find('input[type=text], input[type=password], textarea').focus(function(){ $(this).val('') });
        
    }
    
})(jQuery);

(function($) {
    
    $.fn.uoImageZoom = function(options) {
        
        options	= $.extend({}, $.fn.uoImageZoom.defaults, options);
        var parent = $(this);
                        
        function _zoom() {
            
            if(!options.image)
                options.image = $(this).attr('rel');
            if(!options.image)
                options.image = $(this).attr('src');
                        
            var div = $('<div></div>)').appendTo('body');
            var img = $('<img src="'+ options.image +'" />').appendTo(div);
                        
            img.load(function() {
                var w = { width: $(window).width(), height: $(window).height(), left: $(document).scrollLeft(), top: $(document).scrollTop() };
                var currentSize = { width: parent.parent().width(), height: parent.parent().height() };
                var origPos = { top: parent.offset().top, left: parent.offset().left };
                var origSize = { width: options.width ? options.width : img.width(), height: options.height ? options.height : img.height() };
                var targetPos = { top: (origSize.height > w.height ? w.top : w.top + Math.round((w.height - origSize.height) * 0.5)),
                                  left: (origSize.width > w.width ? w.left : w.left + Math.round((w.width - origSize.width) * 0.5)) };
                
                div.css('opacity', 0.5);
                div.css('position', 'absolute');
                div.css('width', currentSize.width);
                div.css('height', currentSize.height);
                div.css('top', origPos.top +  'px');
                div.css('left', origPos.left +  'px');
                div.css('z-index', 1001);
                                                
                var shadow = $('<div id="uoImageZoom_bg"><div class="uoImageZoom_bg" id="uoImageZoom_bg_n"></div><div class="uoImageZoom_bg" id="uoImageZoom_bg_ne"></div><div class="uoImageZoom_bg" id="uoImageZoom_bg_e"></div><div class="uoImageZoom_bg" id="uoImageZoom_bg_se"></div><div class="uoImageZoom_bg" id="uoImageZoom_bg_s"></div><div class="uoImageZoom_bg" id="uoImageZoom_bg_sw"></div><div class="uoImageZoom_bg" id="uoImageZoom_bg_w"></div><div class="uoImageZoom_bg" id="uoImageZoom_bg_nw"></div></div>').appendTo('body');
                shadow.css('opacity', 1.0);
                shadow.css('width', currentSize.width+20);
                shadow.css('height', currentSize.height+20);
                shadow.css('top', origPos.top-10 +  'px');
                shadow.css('left', origPos.left-10 +  'px');
                shadow.css('border', 'solid 1px #ddd');
                shadow.css('z-index', 1000);
                
                var closeButton = $('<img src="/fileadmin/templates/js/uoImageZoom/uoImageZoom_closebox.png" />').appendTo(div);
                closeButton.css('z-index', 1001);              
                closeButton.css('position', 'absolute');
                closeButton.css('top', '0');
                closeButton.css('left', origSize.width-30 + 'px');         
                              
                div.click(function() {
                    $(this).animate({width: currentSize.width + 'px', height: currentSize.height + 'px', left: origPos.left, top: origPos.top, opacity: 0.0 }, options.zoomSpeedOut, 'linear',
                        function() { $(this).remove(); });
                    shadow.animate({width: currentSize.width + 'px', height: currentSize.height + 'px', left: origPos.left, top: origPos.top, opacity: 0.0 }, options.zoomSpeedOut, 'linear',
                        function() { $(this).remove(); });
                        
                    if(options.enableEventBindung)
                        parent.click(_zoom);
                });
                
                shadow.animate({width: origSize.width+20 + 'px', height: origSize.height+20 + 'px', left: targetPos.left-10, top: targetPos.top-10, opacity: 1.0 }, { queue: false, duration: options.zoomSpeedIn });
                img.animate({width: origSize.width + 'px', height: origSize.height + 'px', left: targetPos.left, top: targetPos.top, opacity: 1.0 }, { queue: false, duration: options.zoomSpeedIn });
                div.animate({width: origSize.width + 'px', height: origSize.height + 'px', left: targetPos.left, top: targetPos.top, opacity: 1.0 }, { queue: false, duration: options.zoomSpeedIn });
                $(this).unbind('click');
            });
        }

        if(options.enableEventBinding)
            $(this).click(_zoom);

        this.zoom = _zoom;
        
        return this;
    }
    
    $.fn.uoImageZoom.defaults = {
            enableEventBinding: true,
            zoomSpeedIn : 500,
            zoomSpeedOut : 500,
            width : 0,
            height : 0,
            image :  ''
    };
    
})(jQuery);

(function($) {
    
    $.fn.uoGoogleMaps = function(options) {
    
        options	= $.extend({}, $.fn.uoGoogleMaps.defaults, options);

        var parent = $(this);
        var infoWindowHtml = $('<div><h1 /><p /><input type="text" name="uoGoogleMapsTarget" id="uoGoogleMapsTarget" /><br/><button id="uoGoogleMapsButton" type="submit">Berechnen</button>');
        
        $(this).css('width', options.width);
        $(this).css('height', options.height);
        
        var geocoder = new GClientGeocoder();
                
        function _loadPreview(address) {
            _doGeoCoding(address, null, _loadPreviewCallback);
        }
        
        function _loadMap(address, targetAddress) { 
            _doGeoCoding(address, targetAddress, _loadMapCallback);
        }
    
        function _loadMapCallback(address, targetAddress, point) {
            var map = new GMap2(parent.get(0));
            var route = new GDirections(map, $(options.route).get(0));
            var marker = new GMarker(point);
            
            var heading = infoWindowHtml.find('h1')
            var text = infoWindowHtml.find('p')
            var input = infoWindowHtml.find('input');
            var button = infoWindowHtml.find('button');
            
            if(options.toolTipClas) {
                infoWindowHtml.addClass(options.toolTipClass);
            }
            else {
                heading.css('font-weight', 'bold');
                heading.css('font-size', '11px');
                heading.css('margin', '0');
                heading.css('padding', '0');
                heading.css('line-height', 'normal');
                
                text.css('font-size', '10px');
                text.css('margin', '0 0 5px 0');
                text.css('padding', '0');
                
                input.css('font-size', '10px');
                input.css('padding', '1px 2px 2px 2px');
                input.css('width', '180px');
                
                button.css('font-size', '10px');
                button.css('margin', '10px 0 0 0');
            }
            
            if(!options.enableRoute) {
                input.remove();
                button.remove();
            }
            
            heading.html(options.title);
            text.html(address)
               
            if(!targetAddress)
                marker.openInfoWindowHtml(infoWindowHtml.html());
               
            if(options.blowup)
                marker.showMapBlowup(point);
                
            /*button.live('click', function() {
                    _computeRoute($('#uoGoogleMapsTarget').val());
                    return false;
                });*/
                
            $('#uoGoogleMapsButton').livequery('click', function() {
                  _computeRoute($('#uoGoogleMapsTarget').val());
                  document.location.hash = options.jumpAnchor;
                  return false;
            });
            
            map.addOverlay(marker);
            switch(options.mapType){
              case 1: map.setMapType(G_NORMAL_MAP);break;
              case 2: map.setMapType(G_SATELLITE_MAP);break;
              case 3: map.setMapType(G_HYBRID_MAP);break;
            }
            //map.setMapType(options.mapType);
            //map.setMapType(G_HYBRID_MAP);
            map.setCenter(point, options.zoom);
            map.addControl(new GLargeMapControl());
            map.addControl(new GMapTypeControl());
            route.loadFromWaypoints(point)
            
            if(targetAddress)
                route.load('from: ' + address + ' to: '+ targetAddress, { 'locale' : 'de_de' });
        }
    
        function _loadPreviewCallback(address, targetAddress, point) {
            parent.append('<img src="http://maps.google.com/staticmap?center='+ point.lat() +','+ point.lng() +'&markers='+ point.lat() +','+ point.lng() 
                +',midyellow&zoom='+ options.zoom +'&size='+ options.width +'x'+ options.height 
                +'&key='+ options.key +'" alt="'
                + address +'" title="'+ address +'" />')
        }
    
        function _doGeoCoding(address, targetAddress, callback) {
             geocoder.getLatLng(address, function(point) {
                    if (!point) {
                        alert(address + " not found");
                    } 
                    else {
                        callback(address, targetAddress, point);
                    }
            });
        }
    
        function _computeRoute(targetAddress) {
            _doGeoCoding(options.address, targetAddress, _loadMapCallback);
        }
        
        this.computeRoute = _computeRoute;
        this.preview = _loadPreview;
        this.map = _loadMap;
         
        if(options.preview)
            _loadPreview(options.address)
        else 
            _loadMap(options.address);
        
        return this;
    }
    
    $.fn.uoGoogleMaps.defaults = {
        width: 640,
        height: 480,
        preview: true,
        blowup: false,
        enableRoute: true,
        mapType:1,
        zoom: 15,
        route: '#route',
        address: '',
        jumpAnchor: 'uoGoogleMaps', 
        title: 'Route berechnen',
        toolTipClass: '',
        key: 'ABQIAAAAeuDGJ4R1DmfsU2ho6ieQPBQjtZ-WX9I1GDXX_Hz98OJTiUtBJRSYmFrmo9GFIxF3olMwkcrRLrCSOg'
    }
    
})(jQuery);
