/*jslint laxbreak: true, eqeqeq: true, browser: true, undef: true */
/*extern $, $$, $H, $chk, $type, $defined, Class, Options, Element, Request, Accordion, Browser, Swiff, Cookie, Fx */
/*extern Uplayer, trace, escape, Autocompleter */
/*global DR, PIRATFLASH, ROOT */

String.implement({

	parseQueryString: function(){
		var vars = this.split(/[&;]/), res = {};
		if (vars.length) {
			vars.each(function(val){
				var index = val.indexOf('='),
					keys = index < 0 ? [''] : val.substr(0, index).match(/[^\]\[]+/g),
					value = decodeURIComponent(val.substr(index + 1)),
					obj = res;
				keys.each(function(key, i){
					var current = obj[key];
					if(i < keys.length - 1) {
						obj = obj[key] = current || {};
					} else if ($type(current) === 'array') {
						current.push(value);
					} else {
						obj[key] = $defined(current) ? [current, value] : value;
					}
				});
			});
		}
		return res;
	},

	cleanQueryString: function(method){
		return this.split('&').filter(function(val){
			var index = val.indexOf('='),
			key = index < 0 ? '' : val.substr(0, index),
			value = val.substr(index + 1);
			return method ? method.run([key, value]) : $chk(value);
		}).join('&');
	}

});

function trace(){
	if (window.console && window.console.log) {
		console.log(arguments[0]);
	}
}





/***************************************************************************

	Name:		pirat.js
    Site:		PIRAT TV - http://www.dr.dk/pirattv
	Author:		Bjarni Olsen
	Date:		maj - july 2009

	Table of Contents:
	=================
	1 - =SearchField
	2 - =CategorysDropdown
    3 - =ActorsDropdown	
	4 - =Show/hide DR topbar
	5 - =BlogArchive
	6 - =PiratLogin
	7 - =SiteLinks

****************************************************************************/
// Create namespaces
if (!DR) { DR = {}; }
if (!DR.Ung ) { DR.Ung = {}; }

/*
1 - =SearchField
*****************************************/
DR.Ung.SearchField =
{
    init: function()
    {
        var searchLI = $('search');
        var field = $('searchField');        
        var valueString = field.get('value');
        var valueText = valueString;
        field.addEvents({
            'focus': function(){
                if(field.get('value') === valueText) {
                    field.set('value','');
                    searchLI.addClass('hasFocus');
                    searchLI.removeClass('noFocus');
                }
            },
            'blur': function(){
                if( field.get('value') === "" ){ 
                    field.set('value',valueText);
                    searchLI.removeClass('hasFocus');
                    searchLI.addClass('noFocus');
                }
            }
        }); 

		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'}
	    }));
    }
};

/*
2 - =CategorysDropdown
*****************************************/
DR.Ung.CategorysDropdown =
{
    init: function()
    {
  	    var stretchers = $$('ul.atStart');
  	    var toggles = $$('li.atStart');
  	    var accordion = new Accordion(
  		    toggles, stretchers, { 
  			    opacity: true
  			    ,display: -1
  			    ,duration: 250
  		    }, $('accordion'));
  		
  		toggles.each( function(e, i){
  		    e.addEvents({
	            'mouseenter' : function(){
		            accordion.display(i);
		            toggles.each( function (t, i) {
		                t.getElement('a').removeClass('HeaderCategoryHover');
		                t.setStyle('z-index', '1');
		                clearTimeout(t.retrieve('timer'));
		            });
		            e.setStyle('z-index', '4');
		            e.getElement('a').addClass('HeaderCategoryHover');
	            },
	            'mouseleave' : function(){
	                var f = function () {
                        accordion.display(-1);
                        toggles.each( function (t, i) { 
                            t.getElement('a').removeClass('HeaderCategoryHover'); 
                            e.setStyle('z-index', '1');
                        });
	                };
	                e.store( 'timer', f.delay(500) );
	            }
            });
	    });
    }
};

/*
3 - =ActorsDropdown
*****************************************/
DR.Ung.MoreInfoDropdown = new Class({
    initialize: function(wrapper, state)
    {
		var stretchers = wrapper.getElement('div.dropdown');
		var toggles = wrapper.getElements('a.dropdown');
		var accordion = new Accordion(
			toggles, stretchers, { 
				opacity: true
				,display: state
				,duration: 250
				,alwaysHide: true
			}, stretchers);
		
		toggles.each( function(e, i){
		    if(state === 0){
		        e.addClass('active');
		        e.store('isOpen', true);
		    }
			e.addEvents({
				'click' : function(ee){
                    ee.target.blur();
					if (e.retrieve('isOpen')) {
						ee.preventDefault();
						accordion.display(-1);
						e.store('isOpen', false);
						e.removeClass('active');
					} else {
						ee.preventDefault();
						accordion.display(0);
						e.store('isOpen', true);
						e.addClass('active');
					}	                
				}
			});
		});
    }
});

Element.implement({
	createMoreInfoDropDown: function (state) { return new DR.Ung.MoreInfoDropdown(this, state); }
});

/*
4 - =Show/hide DR topbar
*****************************************/
DR.Ung.ShowHideTopbar = 
{
    init: function()
    {
        var topbar = $('globalWrapper');
        var button = $$('#burnDR a');
        if (!button) { return; }
        
        var status = true;
        var cookie_values = JSON.decode(unescape(Cookie.read('pirattv')));

        if(!$defined(cookie_values)){
            cookie_values = { HideTopbar : false };
            Cookie.write('pirattv', JSON.encode(cookie_values));
        }

		if (cookie_values.HideTopbar) {
			$('globalWrapper').setStyles({overflow: 'hidden', height: 0});
			button.addClass('gone');
			status = false;
            PIRATFLASH.resizeElements.delay(0, PIRATFLASH);
		}

        button.addEvents({
            'click': function(e){
                e.target.blur();
				var fx = null;
                if (status) {
                    e.preventDefault();
                    $('globalWrapper').setStyles({overflow: 'hidden'}).tween('height', 0);
                    button.addClass('gone');

					fx = new Fx.Tween('container_swf');
					fx.start('top', 93).chain( function () {
						PIRATFLASH.resizeElements();
					});
                    status = false;
                } else {
                    e.preventDefault();
                    fx = new Fx.Tween($('globalWrapper'));
                    fx.set('overflow', 'hidden').start('height', 68).chain(function(){
						this.set('overflow', null);
						PIRATFLASH.resizeElements();
					});
					$('container_swf').tween('top', 161);
					button.removeClass('gone');
                    status = true;
                }
                cookie_values.HideTopbar = !status;
				Cookie.write('pirattv', JSON.encode(cookie_values), { duration: 14, path : '/' });

            }
        });
    }
};

/*
5 - =BlogArchive
*****************************************/
DR.Ung.BlogArchive =  new Class ({
    initialize: function(wrapper)
    {
		wrapper.getElements('li.month, li.year').forEach( function (li, index) {
			if (!li.getFirst('a').hasClass('active')) {
				li.getFirst('ul').slide('hide');
			}
			li.addEvent('click', this.clickHandler);
		}, this);

		wrapper.getElements('ul').forEach( function (ul) {
			ul.set('slide', {duration: 'short'});
		});
    }

	,clickHandler: function (e) {
		var li = $(e.target).get('tag') === 'li' ? $(e.target) : $(e.target).getParent('li');
		var ul = li.getElement('ul');

		if (!ul) { return; }

		e.stop();

		if($(e.target).hasClass('active')){
			li.getElement('ul').slide('out');
			li.getElement('a').removeClass('active');
			li.getElement('a').addClass('inactive');
		} else {
			li.getElement('ul').get('slide').start('in')
				.chain(function () { this.wrapper.setStyle('height', 'auto'); });
			li.getElement('a').removeClass('inactive');
			li.getElement('a').addClass('active');
		}                        
	}
});

Element.implement({
	createBlogArchive: function () { return new DR.Ung.BlogArchive(this); }
});

/*
6 - =PiratLogin
*****************************************/
DR.Ung.PiratLogin = new Class ({
    initialize: function(wrapper)
    {
        var overlay = new Element('div', {
            'id': 'piratOverlay'
        });
        overlay.inject($$('.site')[0], 'after');

        var h = window.getScrollHeight();
        overlay.setStyles({
            'height': h
        });
        
        //center popup
        var left = (screen.width - '315') / 2;
        wrapper.setStyle('left', left);     
    }
});
Element.implement({
	createPiratLogin: function () { return new DR.Ung.PiratLogin(this); }
});

DR.Ung.LoginOverlay = {};

DR.Ung.LoginOverlay.Show = function() {
    var overlay = $('piratOverlay');
    overlay.addClass('overlayVisible');
};
DR.Ung.LoginOverlay.Hide = function() {
    var overlay = $('piratOverlay');
    overlay.removeClass('overlayVisible');
};

DR.Ung.LoginForm = {
    init: function(){
        var form = $('piratLogin');
        if(!form) { return; }
        $$('a[href$=logind/]').addEvent('click', function(event){
            event.stop();
            DR.Ung.ForgotForm.hide();
            DR.Ung.CreateForm.hide();
            DR.Ung.LoginForm.show();
        });
        $$('a[href$=opret-bruger/]').addEvent('click', function(event){
            event.stop();
            DR.Ung.ForgotForm.hide();
            DR.Ung.LoginForm.hide();
            DR.Ung.CreateForm.show();
        });
        $$('a[href$=glemt-kodeord/]').addEvent('click', function(event){
            event.stop();
            DR.Ung.CreateForm.hide();
            DR.Ung.LoginForm.hide();
            DR.Ung.ForgotForm.show();
        });
        form.addEvent('submit', function(e){
            e.stop();
            var req = new Request.JSON({url:form.get('action'), method:form.get('method'), data:form.toQueryString()});
            req.addEvent('success', function(json){
                if(json.login){
                    window.location = window.location;
                } else{
                    DR.Ung.ASPMVCFormErrorHandler(json.errors);
                }
            });
            req.addEvent('failure', function(json){
                //trace("OnFailure() :" + json);
            });
            req.send();
        });
    }
    ,show: function(){
        var form = $('piratLogin');
        DR.Ung.LoginOverlay.Show();
        var wrapper = form.getParent('#piratLoginWrapper');
        wrapper.getElements('form').each(function(f){
            f.removeClass('formVisible');
        });
        DR.Ung.PLSMF.hide();
        form.addClass('formVisible');
        wrapper.addClass('piratWrapperVisible');
        window.scrollTo(0, 0);
    }
    ,hide: function(){
        var form = $('piratLogin');
        var wrapper = form.getParent('#piratLoginWrapper');
        wrapper.getElements('form').each(function(f){
            f.removeClass('formVisible');
        });
        DR.Ung.PLSMF.hide();
        wrapper.removeClass('piratWrapperVisible');
        DR.Ung.LoginOverlay.Hide();
    }
};

DR.Ung.Overlay = {
    init: function(){
        $$('.piratLoginClose').each(function(e){
            e.addEvent('click', function(ev){
                ev.stop();
                ev.target.blur();
                var wrapper = $('piratLoginWrapper');
                wrapper.getElements('form').each(function(f){
                    f.removeClass('formVisible');
                });
                DR.Ung.PLSMF.hide();
                wrapper.removeClass('piratWrapperVisible');
                DR.Ung.LoginOverlay.Hide();
            });
        });
    }
};

DR.Ung.PLSMF = {
    show: function(text){
        var wrapper = $('piratLoginWrapper');
        wrapper.getElements('form').each(function(f){
            f.removeClass('formVisible');
        });

        $('piratLoginSuccessMessageField').grab(
			new Element('form', { 'class': 'formVisible', 'text': text })
		);
    }
    ,hide: function(){
        var form = $('piratLogin');
        $('piratLoginSuccessMessageField').set('html', '');

        var wrapper = form.getParent('#piratLoginWrapper');
        wrapper.getElements('form').each(function(f){
            f.removeClass('formVisible');
        });
    }
};

DR.Ung.CreateForm = {
    init: function(){
        var form = $('piratCreate');
        if(!form) { return; }
        form.addEvent('submit', function(e){
            e.stop();

			// verify clientside
			var errors = DR.Ung.CreateForm.verify();
			if (errors.length > 0) {
				DR.Ung.ASPMVCFormErrorHandler(errors);
			} else {
				// submit to createuser service
				var req = new Request.JSON({
					url: DR.SSOTopbar.Gateway
					,data: {
						Op: 'CreateUser'
						,email: $('create_email').get('value')
						,fullName: $('create_name').get('value')
						,password: $('create_password').get('value')
						,username: $('create_alias').get('value')
					}
					,onComplete: function (json) {
						var response = json.ResponseOfString;
						if (response) {
							if (response.returncode === 'success' || response.returncode === "0") {
								// if successful display success message
								DR.Ung.PLSMF.show("Du bliver oprettet som bruger, så snart du klikker på det aktiveringslink, vi har sendt til dig pr. e-mail.");
							} else {
								// else create error object
								DR.Ung.ASPMVCFormErrorHandler([
									{ key: 'exception', errors: [ response.msg ], value: '' }
								]);
							}
						} else {
							DR.Ung.ASPMVCFormErrorHandler([{
								key: 'exception',
								errors: [ "Der er problemer med brugeroprettelse lige nu. Kontakt login@dr.dk" ],
								value: ''
							}]);
						}
						
					}
				});
				req.send();
			}
        });
    }
    ,show: function(){
        var form = $('piratCreate');
        DR.Ung.LoginOverlay.Show();
        var wrapper = form.getParent('#piratLoginWrapper');
        wrapper.getElements('form').each(function(f){
            f.removeClass('formVisible');
        });
        DR.Ung.PLSMF.hide();
        form.addClass('formVisible');
        wrapper.addClass('piratWrapperVisible');
        window.scrollTo(0, 0);
    }
    ,hide: function(){
        var form = $('piratCreate');
        var wrapper = form.getParent('#piratLoginWrapper');
        wrapper.getElements('form').each(function(f){
            f.removeClass('formVisible');
        });
        DR.Ung.PLSMF.hide();
        wrapper.removeClass('piratWrapperVisible');
        DR.Ung.LoginOverlay.Hide();
    }

	// clientside validation
	,verify: function () {

		var error_messages = {
			create_name: 'Du skal skrive dit fulde navn'
			,create_alias: 'Du skal vælge et brugernavn'
			,create_email: 'Du skal angive en gyldig emailadresse'
			,create_password: 'Du skal skrive et kodeord på mindst 8 tegn'
			,create_password_repeat: 'Kodeordene stemmer ikke overens'
			,create_accept_tos: 'Du skal acceptere DRs brugerbetingelser'
		};

		var validators = $H({
			create_name: /\w+\s+\w+/
			,create_alias: /\w+/
			,create_email: /^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i
			,create_password: /\w{8,}/
			,create_password_repeat: function () {
				var val = $('create_password').get('value');
				return val && val === $('create_password_repeat').get('value');
			}
			,create_accept_tos: function () {
				return $('create_accept_tos').get('checked');
			}
		});

		var errors = [];

		validators.forEach( function (validator, key) {
			var valid = $type(validator) === 'regexp' ? validator.test( $(key).get('value') ) : validator();
			if (!valid) {
				errors.push( {
					key: key.substr(6)
					,errors: [ error_messages[key] ]
					,value: $(key).get('value')
				});
			}
		});

		return errors;
	}
};

DR.Ung.Logout = function(){
    $('piratLogoutForm').submit();
};

DR.Ung.ForgotForm = {
    init: function () {
        var form = $('piratForgotLogin');
        if(!form) { return; }
        form.addEvent('submit', function(e){
            e.stop();

			var req = new Request.JSON({
				url: DR.SSOTopbar.Gateway
				,data: {
					Op: 'RequestPassword'
					,email: $('forgot-email').get('value')
				}
				,onComplete: function (json) {
					var response = json.ResponseOfString;
					if (response) {
						if (response.returncode === 'success' || response.returncode === "0") {
							DR.Ung.PLSMF.show("Du modtager en email med yderligere instruktioner.");
						} else {
							DR.Ung.ASPMVCFormErrorHandler([{ key: 'exception', errors: [ response.msg ], value: '' }]);
						}
					} else {
						DR.Ung.ASPMVCFormErrorHandler([{
							key: 'exception',
							errors: [ "Der er nogen problemer lige nu. Kontakt login@dr.dk" ],
							value: ''
						}]);
					}
				}
			});
            req.send();
        });
    }
    ,show: function (){
        var form = $('piratForgotLogin');
        DR.Ung.LoginOverlay.Show();
        var wrapper = form.getParent('#piratLoginWrapper');
        wrapper.getElements('form').each(function(f){
            f.removeClass('formVisible');
        });
        DR.Ung.PLSMF.hide();
        form.addClass('formVisible');
        wrapper.addClass('piratWrapperVisible');
    }
    ,hide: function (){
        var form = $('piratForgotLogin');
        var wrapper = form.getParent('#piratLoginWrapper');
        wrapper.getElements('form').each(function(f){
            f.removeClass('formVisible');
        });
        DR.Ung.PLSMF.hide();
        wrapper.removeClass('piratWrapperVisible');
        DR.Ung.LoginOverlay.Hide();
    }
};

DR.Ung.ASPMVCFormErrorHandler = function(errors){
    var validation_wrappers = $$('.validation_summary_wrapper');
    //var span = new Element('span', {'class':"validation_summary_errors", text:"Hov!"});
    var ul = new Element('ul');
    errors.each(function(error){
        var form_elements = $$('input[name=' + error.key +']');
        form_elements.each(function(fe){
            if(!error.value){
                if(!fe.get('type') === 'checkbox' || !fe.get('type') === 'password') {
                    fe.set('value', error.value);
                }
                fe.getParent().addClass('error');
//              if(!fe.getParent().getElement('span')) {
//                  //fe.grab(new Element('span', {text:'*'}), 'after');
//                  fe.getParent().addClass('error');
//              }
            }else{
                fe.getParent().removeClass('error');
            }
        });
        error.errors.each(function(ee){
            var err_el = new Element('li', {'class':'validation_error_summary', text:ee});
            ul.grab(err_el);
        });
    });
    validation_wrappers.each(function(e){
        e.empty();
        //e.grab(span.clone());
        e.grab(ul.clone());
    });
};

DR.Ung.renderIntroBox = function() {
	
    var cookie_values = JSON.decode(Cookie.read('pirattv'));

	// I HATE YOU STUPID BOX.
	if (!Browser.Engine.trident) {
		$$('#piratNotifier').setStyles({
			position:'absolute'
			,left: window.getWidth() / 2 - 457
		});
		$$('#piratNotifier').setStyles({ 'top': 100});
	} else {
		$$('#piratNotifier').setStyles({ 'top': -$$('.page').getHeight().sum() });
	}

    var hide_box = cookie_values.HideInfobox;
    //if (!hide_box) {
    //    $$('#piratNotifier').setStyle('display', 'block');
    //}
    // Fjern den store kødfarvede bjælke - BJNO 19/8-09
    if (hide_box) {
        $$('#piratNotifier').setStyle('display', 'none');
    }
        
    $$('#piratNotifier .hide').addEvents({
        'click': function(e){
            e.target.blur();
            e.preventDefault();
            var fx = new Fx.Tween($('piratNotifier'));
            fx.start('opacity', 0);
            cookie_values.HideInfobox = true;
		    Cookie.write('pirattv', JSON.encode(cookie_values), { duration: 14, path : '/' });
        }
    });
    
    $$('#showPiratNotifier a').addEvents({
        'click': function(e){
			$$('#piratNotifier').setStyle('display', 'block');
            e.target.blur();
            e.preventDefault();
            var fx = new Fx.Tween($('piratNotifier'));
            fx.set('opacity', 0).start('opacity', 1);
            cookie_values.HideInfobox = false;
		    Cookie.write('pirattv', JSON.encode(cookie_values), { duration: 14, path : '/' });
        }
    });
};


/*
7 - =SiteLinks
*****************************************/
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(/^external/.test(rel)){ DR.Ung.SiteLinks.openExternalLink(link); }		
		// Process popup links
		if(/^popup/.test(rel)) { DR.Ung.SiteLinks.popupLink(link, rel); }
		// Process popupOverlay links
		if(/^popupOverlay/.test(rel)) { DR.Ung.SiteLinks.popupOverlay(link, rel); }
	}	
	,openExternalLink: function(link)
	{
		var url = link.getProperty('href');
		open(url);
	}	
	,popupLink: function(link, rel)
	{
		var match = rel.match(/.*\[(.*)]/);    
	    if (match) {
			var parts = match[1].split(/,\s*/);
		    
			// added centering of the popup window
			var left = (screen.width - parts[0]) / 2;
			var top = (screen.height - parts[1]) / 2;
			link.setAttribute('popupprops', 'width=' + parts[0] + ', height=' + parts[1] + ', left=' + left + ', top=' + top);
			if (parts[4]){
				link.href = link.href + "?page=" + parts[2] + "&title=" + parts[3] + "&w=" + parts[0] + "&h=" + parts[1] + "&teaser=" + parts[4];
			}
			else {
				link.href = link.href + "?page=" + parts[2] + "&title=" + parts[3] + "&w=" + parts[0] + "&h=" + parts[1];
			}
			
			window.open(link.href, '', link.getAttribute('popupprops') || '');
		}
	}
};

DR.Ung.DetectFlashVersion = {
    init: function (wrapper)
    {
        var flashVersion = Browser.Plugins.Flash.version + "," + Browser.Plugins.Flash.build;
        wrapper.set('text', flashVersion);

    }
};

/*
8 - =Newsletter
*****************************************/
function validate(this_form, the_action) {
	var emailad = this_form.email.value;
	if  (the_action == "Tilmeld") {
		this_form._1_MailTo.value = "join-pirat-tv@lister.dr.dk";
		this_form._1_SuccessDocument.value = "http://www.dr.dk" + ROOT + "nyheder/?tilmeldt";
		this_form._1_FailureDocument.value = "http://www.dr.dk" + ROOT + "nyheder/?ikketilmeldt";
	} else if (the_action == "Afmeld") {
        this_form._1_MailTo.value = "leave-pirat-tv@lister.dr.dk";
        this_form._1_SuccessDocument.value = "http://www.dr.dk" + ROOT + "nyheder/?afmeldt";
        this_form._1_FailureDocument.value = "http://www.dr.dk" + ROOT + "nyheder/?ikkeafmeldt";
    }   
	var exclude=/[^@\-\.\w]|^[_@\.\-]|[\._\-]{2}|[@\.]{2}|(@)[^@]*\1/;
	var check=/@[\w\-]+\./;
	var checkend=/\.[a-zA-Z]{2,3}$/;
	
	if(((emailad.search(exclude) != -1)||(emailad.search(check)) == -1)||(emailad.search(checkend) == -1)){
		alert("Den indtastede emailadresse er ugyldig!");return false;
	}
	else {
		this_form.submit();
	}
}
function clearText(thefield){
	if (thefield.defaultValue==thefield.value) thefield.value = "";
}

/*
8 - =Comment form AJAXification
*****************************************/
DR.Ung.EnhanceComments = function()
{
    var COMMENT_MAX_LENGTH = 5000;
    var form = document.getElement('#skriv-kommentar form');
    
    // TODO: Make this do something funkier
    var show_error = function(message)
    {
        alert(message);
    };
    
    // This is not at all bulletproof, but hey... It will only result in local glitches for users trying to h4x0r the commments
    var parse_template = function(data)
    {
        var comment = data.comment.replace(/</g, '&lt;').replace(/>/g, '&gt;');
        comment = comment.replace(/\n\n+/g, '</p><p>').replace(/\n/g, '<br />');
        return '<h3>{name}<q>tilføjet for et øjeblik siden</q></h3><p>{comment}</p>'.replace('{name}', data.name).replace('{comment}', comment);
    };
    
    // The following should only be applied if the form is present (ie. the user is logged in)
    if (form)
    {
        // Limit the content of the textarea to only contaion 5000 characters
        form.getElement('textarea').addEvent('keyup', function(e) {
            var value = e.target.get('value');
            if (value.length > COMMENT_MAX_LENGTH)
            {
                e.target.set('value', value.substring(0, COMMENT_MAX_LENGTH));
            }
        });
        
        // Hook into form submit event
        form.addEvent('submit', function(e) {
            e.stop();
            // Let's look at what they've written...
            var field = form.getElement('#Content');
            var text = field.get('value');
            // They didn't write anything at all
            if (!text.length)
            {
                show_error('Du skal skrive noget før du kan sende din kommentar.');
            }
            // They wrote too much
            else if (text.length > COMMENT_MAX_LENGTH)
            {
                show_error('Du har skrevet aaaaaalt for meget. Hold dig under ' + COMMENT_MAX_LENGTH + ' tegn.');
            }
            // They wrote something appropriate (at least in terms of text length)
            else
            {
                var req = new Request.JSON({
                    url: form.get('action'),
                    data: 'Content=' + text,
                    onComplete: function (data) {
                        // Insert comment into list of comments
                        if (data.success)
                        {
                            field.set('value', '');
                            var comment = new Element('li', {
                                html: parse_template(data)
                            });
                            var list = form.getParent().getPrevious('ol');
                            // Create comment list if it doesn't exist (ie. no comments yet)
                            if (!list)
                            {
                                list = new Element('ol');
                                form.getParent().getParent().grab(list, 'top');
                            }
                            // Inser comment
                            list.grab(comment, 'top');
                            // Make sure theres room for it (the show/hide effects sets the height of the container - override that)
                            form.getParent().getParent().setStyle('height', 'auto');
                            // Track in GA
                            if (pageTracker)
                            {
                                pageTracker._trackEvent('clipcomments', 'add', data);
                            }
                            // Scroll to new comment
                            var scroller = new Fx.Scroll(document, {
                                offset : {
                                    x: comment.getPosition().x - 10,
                                    y: comment.getPosition().y - 50
                                }
                            }).toTop();
                        }
                        // Tell the user that it didn't succeed
                        else
                        {
                            show_error('Der gik et eller andet galt. Prøv igen.');
                        }
                    }
                }).send();
            }
        });
    }
};

window.addEvent('domready', function () {

	// create player (must be before pirat flash)
	if ($('player')) { $('player').createPiratPlayer(); }

	// embed flash
	if ($('container_swf') != null)
	{
        PIRATFLASH =  new DR.Ung.PiratFlash();
    }
	
	DR.Ung.SearchField.init();
	DR.Ung.CategorysDropdown.init();
	if ($('burnDR')) { DR.Ung.ShowHideTopbar.init(); }
	
	DR.Ung.Overlay.init();
	DR.Ung.LoginForm.init();
	DR.Ung.CreateForm.init();
	DR.Ung.ForgotForm.init();
	// Eksterne links
	DR.Ung.SiteLinks.captureByRel('external');
	if ($('flashVersion')) {DR.Ung.DetectFlashVersion.init($('flashVersion')); }
	DR.Ung.EnhanceComments();

	if ($('moreInfo')) { $('moreInfo').createMoreInfoDropDown(0); }
	if ($('comments')) { $('comments').createMoreInfoDropDown(0); }
	$$('div.rating').forEach(function (x) { x.createCliprater(); });
	if ($('blogArchive')) { $('blogArchive').createBlogArchive(); }
	if ($('piratLoginWrapper')) { $('piratLoginWrapper').createPiratLogin(); }
	$$('textarea.needsEditor').forEach( function (el) {
		el.mooEditable({
			actions: 'bold italic underline strikethrough | insertunorderedlist insertorderedlist indent outdent | undo redo | createlink unlink | urlimage embedhtml | toggleview'
			,extraCSS: 'body{color:#fff; line-height: 16px; font: 11px verdana, arial, sans-serif; }'
		});
	});

	DR.Ung.renderIntroBox();

	if ($('clipembed')) { $('clipembed').addEvent('click', function() { this.select(); }); }
    
    /*
    var sharebox = new ShareBox({
		'intro_text' : 'Del på'
		,'URL' : 'http://www.dr.dk/pirat'
		,'title' : 'Pïrät TV er alt for najz!!'
		,'description' : '<p>Er du gal det går helt amokk!</p>'
		,'content_type' : 'klippet'
	});
	*/


	/* HACK FOR PLAYLIST IN IE  */
	if (Browser.Engine.trident) {
		$('playlist').setStyle('top', window.getScroll().y + window.getHeight() - 29);
		window.addEvent('scroll', function () {
			$('playlist').setStyle('top', window.getScroll().y + window.getHeight() - 29);
		});
	}
	
	// Warn users with Flash 9.0.115 or older
	if ($('stats') && Browser.Plugins.Flash.version > 0 && (Browser.Plugins.Flash.version < 9 || (Browser.Plugins.Flash.version == 9 && Browser.Plugins.Flash.build < 115)))
	{
	    var box = new Element('div', {
	        id: 'flashVersionWarning',
	        'class': 'col large',
	        html: '<p>Din version af Flash er vist forældet og virker nok ikke med Pirat TV. Så vi vil anbefale dig at opdatere til <a href="http://get.adobe.com/flashplayer/">den seneste version af Flash</a>, for at få mest muligt ud af Pirat TV.</p>'
	    });
	    box.inject($('stats'), 'after');
	}
	
	// Warn IE users with Flash 10.012 that they might experience problems
	if (Browser.Engine.trident && Browser.Plugins.Flash.version == 10 && Browser.Plugins.Flash.build == 12 && $('stats') != null)
	{
	    var box = new Element('div', {
	        id: 'flashVersionWarning',
	        'class': 'col large',
	        html: '<p>Det ser ud som om du bruger Internet Explorer og har Flash version 10.0.12. Lige præcis den kombination af browser af Flash-version har vi oplevet problemer med her på Pirat TV. Så vi vil anbefale dig at opdatere til <a href="http://get.adobe.com/flashplayer/">den seneste version af Flash</a>, for at få mest muligt ud af Pirat TV.</p>'
	    });
	    box.inject($('stats'), 'after');
	}
	
	// Warn users without Flash that they are absolutely screwed
	if (Browser.Plugins.Flash.version == 0)
	{
	    var box = new Element('div', {
	        id: 'flashVersionWarning',
	        'class': 'large',
	        html: '<p>Du har vist ikke Flash installeret. Det er lidt surt, da vi bruger Flash til afspilning af videoer på Pirat TV. Så <a href="http://get.adobe.com/flashplayer/">hent den seneste version af Flash</a>, for at kunne se vores indhold på Pirat TV.</p>'
	    });
	    box.inject($$('.pageWrapper')[0], 'before');
	}
});

