//enable jQuery noconflict mode
$.noConflict();

//various helpers
var crc = {

    prevText : 'zur&uuml;ck',
    nextText : 'weiter',
    
    initMap : function(divid, point) {
        jQuery(document).ready(function() {
            if (GBrowserIsCompatible()) {
                var map = new GMap2(document.getElementById(divid));
                map.setCenter(point, 12);
                map.addOverlay(new GMarker(point));
                //map.setMapType(G_HYBRID_MAP);
                map.setUIToDefault();
            }
        });
    },
    
    initBackground : function(url) {
        jQuery.backstretch(url, {hideUntilReady:true});
    },
    
    initSlider : function(divId, options) {
        var settings = {
            nextId: 'nextBtn',
            prevId: 'prevBtn',
            prevText: crc.prevText,
            nextText: crc.nextText,
            firstShow: false,
            lastShow: false,
            vertical: false, 
            numeric: true,
            continuous: true,
            pause: 9000,
            controlsBefore: '<div id="sliderControls">',
            controlsAfter: '<' + '/div>',
            onAnimate : function(cur, clicked) {
                if (cur) {
                    location.hash = cur;
                } else {
                    location.hash = '';
                }
            },
            container: '<div class="sliderpage"/>',
            pageheader: ''
        };
        if(options && typeof options == "object") {
            jQuery.extend(settings, options);
        }
        
        //wrap pages in element with class sliderpage 
        var container = settings.container;
        var elements = jQuery(divId).find(".twostep-component");
        var page = [];
        var count = 0;
        for (var i = 0; i < elements.length; i++) {
            var current = elements[i];
            jQuery(current).css('float', 'left');
            if (jQuery(current).hasClass('1_4')) {
                count += 0.25;
            } else if (jQuery(current).hasClass('1_3')) {
                count += 0.33;
            } else if (jQuery(current).hasClass('2_3')) {
                count += 0.67;
            } else {
                count += 1;
            }
            page.push(current);
            if (count >= 1) {
                var nextpage = [];
                if (count > 1) {
                    //prevent pages from overflowing
                    nextpage.push(page.pop());
                    count -= 1; //not zero. have to remember overflow width!
                } else {
                    count = 0;
                }
                jQuery(page).wrapAll(container).parent().prepend(settings.pageheader);
                page = nextpage;
            }
        }
        jQuery(page).wrapAll(container).parent().prepend(settings.pageheader);
        //init slider
        var showControls = jQuery('.sliderpage').size() > 1;
        try {
            showControls = showControls || twostep.lang !== '';
        } catch (err) {}
        if (showControls) {
            jQuery(divId).easySlider(settings);
            jQuery(window).hashchange(function() {
                var h = parseInt(location.hash.substring(1) || 0);
                jQuery(divId).easySlideTo(h);
            });
            jQuery(window).hashchange();
        }
    },
    
    findLabels : function(divId) {
        var allLabels = jQuery(divId).find(".box_2 h1");
        return allLabels.map(function() { 
            return jQuery.trim(jQuery(this).text()).split(" ", 2)[1] || jQuery(this).text(); 
        }).get();
    },
    
    adjustLabels : function(labels) {
        jQuery("#sliderControls #controls a").each(function(ix) { jQuery(this).text(labels[ix]); });
    },
    
    patchTwostep : function(divId, reduce) {
        var requestSuccess = function(url, parameters) {
            if (url.indexOf('add') >= 0 || url.indexOf('remove') >= 0) {
                window.location.reload();
            }
        };
		twostep.requestSuccess = requestSuccess;
		
		var addModeBak = twostep.addMode;
		twostep.addMode = function() {
		    addModeBak();
		    jQuery("#controls").append(jQuery("<li>").append(jQuery(divId + " div.twostep-add")));
		};
		
		var sortModeBak = twostep.sortMode;
		var smplReduce = function() {
			var self = jQuery(this);
			self.text(self.text());
		};
		twostep.sortMode = function() {
		    sortModeBak();
		    jQuery("a.boxlink").hide();
		    Sortable.destroy(jQuery(divId).attr('id'));
            jQuery(divId + " .twostep-component").click(function(){ crc.showSort(divId, reduce || smplReduce); });
		};
		
		var undoSortModeBak = twostep.undoSortMode;
		twostep.undoSortMode = function() {
		    undoSortModeBak();
		    jQuery("a.boxlink").show();
		    jQuery(divId + " .twostep-component").unbind();
		};
		
		var editModeBak = twostep.editMode;
		twostep.editMode = function() {
		    editModeBak();
		    jQuery("a.boxlink").hide();
		};
		
		var undoEditModeBak = twostep.undoEditMode;
		twostep.undoEditMode = function() {
		    undoEditModeBak();
		    jQuery("a.boxlink").show();
		};
		
    },
    
    toggle : function(divId) {
        var el = jQuery(divId); 
        if (el.is(':visible')) {
            el.hide();
        } else {
            el.show();
        }
    },
    
    showSort : function(divId, reduce) {
        var init = function() {
            jQuery('#twostepOk').click(function() {
                var list = jQuery(divId)[0];
                var pageId = twostep._attr(list, 'page_id');
                var slot = twostep._attr(list, 'slot');
                var order = twostep._serialize('sortlist');
                var update = function() {
                    twostep._actionRequest(twostep._actionUrl('LIST', 'sort'), {page_id:pageId, slot:slot, order:order}, function() { document.location.reload(); });
                };
                Modalbox.hide({afterHide:update}); 
            });
            jQuery('#twostepCancel').click(function() { Modalbox.hide(); });
            Sortable.create('sortlist', {
                tag:'div',
                constraint:'vertical',
                onChange:function() {
                    var order = twostep._serialize('sortlist');
                    jQuery('#sortstatus').text('New Order: ' + order);
                }
            });
        };
        var elements = jQuery(divId + ' .twostep-component[id]')
                            .clone()
                            .removeClass()
                            .removeAttr('style')
                            .addClass('sortitem')
                            .each(function(ix) {
                                var self = jQuery(this);
                                self.attr('id', 'sort_' + self.attr('id'));
                            })
                            .each(reduce);
        var list = jQuery('<div/>')
                            .attr('id', 'sortlist')
                            .append(elements);
        var form = jQuery('<p />')
                        .addClass('twostep-form')
                        .append(jQuery('<button />')
                                    .attr('id', 'twostepOk')
                                    .css({margin:'0 10px 0 0'})
                                    .text('OK'))
                        .append(jQuery('<button />')
                                    .attr('id', 'twostepCancel')
                                    .text('Cancel'));
        var markup = jQuery('<div/>')
                            .append('<div id="sortstatus">New Order:</div>')
                            .append(list)
                            .append(form)
                            .html();
        twostep._showDialog(markup, {title:'Sort', afterLoad:init});
    }
    
};


