﻿if (!DR) { DR = {}; }
if (!DR.Ung ) { DR.Ung = {}; } 

DR.Ung.SearchField = {
    init: function() {
        var searchLI = $$('.search');
        var field = $('search');     
        var valueString = field.get('value');
        var valueText = valueString;
        field.addEvents({
            'focus': function(){
                if(field.get('value') === valueText) {
                    field.set('value','');
                    searchLI.addClass('hasFocus');
                }
            },
            'blur': function(){
                if( field.get('value') === "" ){ 
                    field.set('value',valueText);
                    searchLI.removeClass('hasFocus');
                }
            }
        }); 

		/* AUTOCOMPLETE...
		searchLI.getElement('form').addEvent('submit', function () {
			field.set('value', field.get('value').trim());
		});
	     
    	(new Autocompleter.Request.JSON(field, ROOT + 'uplayer/api/json/search/autocomplete', {
		    'indicatorClass': 'autocompleter-loading'
		    ,'ajaxOptions': {'method':'get'}
	    }));
	    */
    }
};

DR.Ung.SiteLinks =
{
    captureByRel: function(attrVal, parent) {
        this.capture((parent || document).getElements('a[rel^=' + attrVal + ']'));
    }
	, capture: function(el) {
	    el.each(function(link) {
	        link.addEvent('click', function(ee) {
	            ee.preventDefault();
	            DR.Ung.SiteLinks.processLink(link);
	        });
	    });
	}
	, processLink: function(link) {
	    var rel = link.getProperty('rel');
	    // Process external links
	    if (rel.match(/^external/)) { DR.Ung.SiteLinks.openExternalLink(link); }	   
	}
	, openExternalLink: function(link) {
	    var url = link.getProperty('href');
	    open(url);
	}
};

DR.Ung.Gallery = new Class({
    Implements: [Options, Events]

    , options: {
        largeImageID: 'topImage'
        , selectedImageClass: 'selected'
        , captionClass: 'caption'
        , creditsClass: 'credits'
    }
    , initialize: function(wrapper, options) {
        this.setOptions(options);
        this.wrapper = document.id(wrapper);
        this.largeImageSrc = this.$largeImage().get('src');
        this.largeImageSrcArray = this.largeImageSrc.split('/');
        this.largeImageWidth = this.largeImageSrcArray[this.largeImageSrcArray.length - 3];
        this.largeImageHeight = this.largeImageSrcArray[this.largeImageSrcArray.length - 2];

        this.wrapper.getElements('li').each(function(listitem, index) {
            listitem.getElement('a').addEvent('click', function(e) {
                this.selectImage(listitem, $(e.target));
            } .bind(this));
        }, this);

        this.wrapper.addEvent('keydown', this.keyHandler.bind(this));
        this.$largeImage().addEvent('keydown', this.keyHandler.bind(this));

        this.scroller = this.makeScroller();

        var match = document.location.hash.match(/#(\d+)$/);
        if (match) {
            var idx = Number(match[1]) - 1;
            var listitem = this.wrapper.getElements('li')[idx];
            var image = listitem.getElement('img');
            this.selectImage(listitem, image);
        }
    }
    , selectImage: function(listitem, image) {
        this.listHandler();
        var credits = listitem.getElement('a').get('rel');
        this.clickHandler(image, credits);
        listitem.addClass(this.options.selectedImageClass);

        var left = this.wrapper.getScrollLeft();
        var right = this.wrapper.getWidth() + left;
        var pos = listitem.getPosition(this.wrapper).x;

        if (pos < left) {
            this.wrapper.scrollTo(pos - 15);
            this.temporallyDetachScroller();
        }
        if (pos + image.getWidth() > right) {
            this.wrapper.scrollTo((pos + image.getWidth() + 15) - this.wrapper.getWidth());
            this.temporallyDetachScroller();
        }
    }
    , clickHandler: function(image, credits) {
        var src = image.get('src');
        var alt = image.get('alt');
        var srcArray = src.split('/');
        var arrayLength = srcArray.length;

        var imageId = srcArray[srcArray.length - 4];
        var imageWidth = srcArray[srcArray.length - 3];
        var imageHeight = srcArray[srcArray.length - 2];
        var imageName = srcArray[srcArray.length - 1];

        this.largeImageSrcArray.splice((srcArray.length - 4), 4, imageId, this.largeImageWidth, this.largeImageHeight, imageName);
        var newImageSrc = this.largeImageSrcArray.join('/');
        this.$largeImage().set('src', newImageSrc);
        this.$caption().set('text', alt || "");
        if (credits) {
            this.$credits().set('text', "Foto: " + credits);
        } else {
            this.$credits().set('text', "");
        }
    }
    , keyHandler: function(event) {
        var next = this.$selected().getNext('li');
        var prev = this.$selected().getPrevious('li');
        if (event.key === 'right' && next) {
            this.selectImage(next, next.getElement('img'));
        } else if (event.key === 'left' && prev) {
            this.selectImage(prev, prev.getElement('img'));
        }
        this.$selected()
    }
    , listHandler: function() {
        this.wrapper.getElements('li').each(function(listitem) {
            listitem.removeClass(this.options.selectedImageClass);
        }, this);
    }
    , makeScroller: function() {
        //count clips
        var listitems = this.wrapper.getElements('li');
        var listitemCount = listitems.length;
        var listItemWidth = parseInt(listitems.getStyle('width'));
        var listWidth = (listItemWidth - 9) * listitemCount;

        //set clip list width
        var list = this.wrapper.getElement('ol');
        list.setStyle('width', listWidth);

        //scroll it!
        var scroll = new Scroller(this.wrapper, { area: 70, velocity: 0.5 });
        scroll.attach(); //fix bug in Scroller for MooTools 1.2.0
        return scroll;
    }
    , temporallyDetachScroller: function() {
        this.scroller.detach();
        var func = function() {
            this.scroller.attach();
            this.removeEvent('mousemove', func);
        } .bind(this);
        this.wrapper.addEvent('mousemove', func);
    }
    , $largeImage: function() { return $(this.options.largeImageID); }
    , $caption: function() { return this.$largeImage().getNext('.' + this.options.captionClass); }
    , $credits: function() { return this.$largeImage().getNext('.' + this.options.creditsClass); }
    , $selected: function() { return this.wrapper.getElement('.selected'); }
});
Element.implement({
    createGallery: function() { return new DR.Ung.Gallery(this); }
});

DR.Ung.AddMediaBox = {
    init: function(wrapper) {
        wrapper.getElements('img').each(function(img) {
            var parent = img.getParent('a');
            if (parent && !parent.get('rel')) { parent.set('rel', 'lightbox[p3gallery]'); }
        });
    }
};

// Denne stump retter en bug i MooTools fireForParent: https://mootools.lighthouseapp.com/projects/24057/tickets/240-bug-in-fireforparent-method-in-tips
// Skal fjernes når det nye MooTools bliver rullet ud i topbaren.
Tips.implement({ fireForParent: function(event, element){
    if (!element) return;
    parentNode = element.getParent();
    if (parentNode == document.body) return;
    if (parentNode.retrieve('tip:enter')) parentNode.fireEvent('mouseenter', event);
    else this.fireForParent(event, parentNode);
}});

/*Danmarks Indsamling 2011*/

DR.P3 = {};
DR.P3.DKI = {};
DR.P3.DKI.Counter = {};
DR.P3.DKI.Counter.timer_id = null;

DR.P3.DKI.Counter.format_amount = function (amount) {
    var array_value = amount.toString().split('');
    var string_value = '';
    while (array_value.length > 3) {
        string_value = '.' + array_value.splice(array_value.length-3, 3).join('') + string_value;
    }
    string_value = array_value.join('') + string_value;
    return string_value;
}

DR.P3.DKI.Counter.update_by_adding = function (current, amount) {
    var diff = amount - current;
    var to_add = Math.ceil(diff / 3);
    var new_value = current + to_add;
    string_value = DR.P3.DKI.Counter.format_amount(new_value);
    $('amount').set('text', string_value);
    if (new_value == amount) {
        clearInterval(DR.P3.DKI.counter_timer_id);
    }
    return new_value;
}

DR.P3.DKI.Counter.start_adding = function (amount) {
    var current = parseInt($('amount').get('text').replace(/\./g, ''), 10);
    if (amount < current) {
        $('amount').set('text', DR.P3.DKI.Counter.format_amount(amount));
    }
    else {
        var timer_id = null;
        DR.P3.DKI.counter_timer_id = (function () {
            current = DR.P3.DKI.Counter.update_by_adding(current, amount);
        }).periodical(50);
    }
}

DR.P3.DKI.Counter.fetch_amount = function () {
    var req = new Request.JSON({
        'url': '/php/p3/dkindsamling/dkindsamling.json',
        'onSuccess': function (data) { DR.P3.DKI.Counter.start_adding(data.amount) }
    });
    req.send();
}

window.addEvent('domready', function () {
    var req = new Request.JSON({
        'url': '/php/p3/dkindsamling/dkindsamling.json',
        'onSuccess': function (data) { $('amount').set('text', DR.P3.DKI.Counter.format_amount(data.amount)); }
    });
    req.send();
    DR.P3.DKI.Counter.fetch_amount.periodical(15000);
});
/* /Danmarks Indsamling 2011*/

window.addEvent('domready', function() {
    DR.Ung.SearchField.init();
    if ($('blogGallery')) { $('blogGallery').createGallery(); }
    var tooltips = new Tips($$('.tooltip'), { fixed: true, text: '', offset: { 'x': -20, 'y': -25} });

    // Eksterne links
    DR.Ung.SiteLinks.captureByRel('external', $('navigation'));

    // Highlight form elements on focus
    $$('form.highlightedForm input, form.highlightedForm textarea').addEvents({
        focus: function(e) { $(e.target).addClass('active_field'); }
		, blur: function(e) { $(e.target).removeClass('active_field'); }
    });

    window.addEvent('scroll', function() { if (window.scrollY > $("navigation").getCoordinates().top - 10) { $$('#navigation ul')[0].addClass('navigation-fixed'); } else { $$('#navigation ul')[0].removeClass('navigation-fixed'); } });

    if ($$('.blogpost')[0]) { DR.Ung.AddMediaBox.init($$('.blogpost')[0]); }

    //if ($('dropdown')) { $('dropdown').createDropDown(1); }
    //if ($$('.imageLink').length) { DR.Ung.ImageBorder.init($$('.imageLink')); }
    //if ($('themeswitch')) { DR.Ung.Themeswitch.init($('themeswitch')); }
});

function popUpWindow(URLStr, left, top, width, height) {
	open(URLStr, 'popUpWin', 'toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=no, resizable=no, copyhistory=yes, width=' + width + ', height=' + height + ', left=' + left + ', top=' + top + ', screenX=' + left + ', screenY=' + top + '');
}

/* 
TODO: ryd op/væk... 
****************************************************** */

/*/
DR.Ung.Dropdown = new Class({
    initialize: function(wrapper, state) {
		var stretchers = $$('ul.atStart');
  	    var toggles = $$('li.atStart');
		var accordion = new Accordion(
			toggles, stretchers, { 
				opacity: true
				,display: -1
				,duration: 250
				,alwaysHide: true
			}, wrapper);
			
		toggles.each( function(e, i){
			e.addEvents({
				'click' : function(ee){				
					if (e.retrieve('isOpen')) {
						ee.preventDefault();
						accordion.display(-1);
						e.store('isOpen', false);
						toggles.each(function(item){
						    item.removeClass('hover');
						});						
					} else {
						ee.preventDefault();
						accordion.display(0);
						e.store('isOpen', true);
						toggles.each(function(item){
						    item.removeClass('hover');
						});
						e.addClass('hover');
					}	                
				}
			});
		});
    }
});
Element.implement({
	createDropDown: function (state) { return new DR.Ung.Dropdown(this, state); }
});/*/

/*/ Insert funny topborder on images
DR.Ung.ImageBorder = {
    init: function(wrapper) {
        wrapper.each(function(el){
            DR.Ung.ImageBorder.attachElement(el);
        });
    }
    ,attachElement: function(el) {
        var span = new Element('span');
        span.inject(el, 'top');
    }
};//*/

/*/ 
DR.Ung.Themeswitch = {
    init: function(wrapper) {
        var links = wrapper.getElements('a');
        var theme;
        links.each(function(link){
            link.addEvent('click', function(e){
                theme = link.get('rel');
                DR.Ung.Themeswitch.switchClass(e, theme);
            });
        });
    }
    ,switchClass: function(e, theme) {
        e.stop();
        var bodyClass = $(document.body).get('class');
        if(!$(document.body).hasClass(theme)) {
            $(document.body).removeClass(bodyClass);
            $(document.body).addClass(theme);
        } else {
            $(document.body).removeClass(bodyClass);
            $(document.body).toggleClass(theme);
        }
    }
};//*/

