/*
** JavaScript for De Journalist
** Uses Mootools v1.11 + Mapstraction
** Build 20080407
*/

var DJ = new Hash;

// Extend String with getHash()
String.extend({
 getHash : function() {
  var hash = this.split('#');
  return hash[1] || false;
 }
});


// ----- EXTERNAL LINKS

DJ.set('Links',{
	domain: undefined,
	open: function(e,a) {
		var event = new Event(e);
		if (event.shift || event.control || event.alt || event.meta) return true;
		window.open(a.href);
		event.stop();
	},
	init: function() {
		this.domain = location.href.match(/http:\/\/([\.\-0-9a-z]+)\/.*/)[1];
		$$('a').each(function(el){
			// skip link params
			if (el.href.test("(mailto:|javascript:)","ig")) return;
			
		    if (!el.href.test("("+this.domain+")","ig")) {
				el.addEvent('click', this.open.bindAsEventListener(this,el));
			}
		},this);
	}
});

// ----- RSS FEED URL GENERATOR

DJ.set('Rss',{
	form: undefined,
	target: undefined,
	boxes: undefined,
	url: undefined,
	domain: undefined,
	base: '/feeds/rss',
	build: function(){
		var segs = new Hash;
		for (var i = 0; i < this.boxes.length; i++) {
			if (!this.boxes[i].checked) continue;
			var name = this.boxes[i].name.replace('[]','');
			if (!segs.hasKey(name)) {
				segs.set(name,[]);
			}
			if (this.boxes[i].value != 'on') {
				segs.get(name).push(this.boxes[i].value);	
			}
		}
		
		this.url = '';
		segs.each(function(val,key){
			this.url += '/' + key;
			if (val.length) {
				this.url += ':' + val.join(',');
			}
		},this);

		this.show();
	},
	show: function(){
		this.target.empty();
		if (!this.url) return;
		var b = new Element('strong').appendText('Uw gegenereerde URL is:');
		var br = new Element('br');
		b.injectInside(this.target);
		br.injectInside(this.target);
		this.url = 'http://' + this.domain + this.base + this.url + '/';
		var a = new Element('a',{'href':this.url}).appendText(this.url);
		a.injectInside(this.target);
	},
	init: function(){
		this.form = $('rss');
		this.target = $('rss-url');
		if (!this.form || !this.target) return;
		this.form.getElement('input[type=submit]').remove();
		this.boxes = this.form.getElements('input[type=checkbox]');
		this.boxes.each(function(el){
			el.addEvent('click',this.build.bind(this));
		},this);
		this.domain = location.href.match(/^http:\/\/([\.\-0-9a-z]+)\//)[1];
		this.build();
	}
});


// ----- NIEUWS OP HOME-PAGINA

DJ.set('Homenieuws',{
	element: undefined,
	bump: function(e) {
		new Event(e).stop();
		new Ajax(this.href).request();
		$(this).getParent().getParent().remove();
	},
	init: function(){
		this.element = $('homenews');
		if (!this.element) return;
		
		$$('#homenews a.ditch').each(function(el){
			el.addEvent('click',this.bump);
		},this);
	}
});



// ----- SECTION SEARCH

DJ.set('SectionSearch',{
	form: undefined,
	url: '/home/ajax/',
	target: undefined,
	button: undefined,
	limit: 5,
	more: false,
	submit: function(e){
		new Event(e).stop();
		if (this.more) {
			this.showMore();
		} else {
			this.target.setHTML('Loading...');
			this.form.send({onComplete:this.completed.bind(this),evalScripts:true});
		}

	},
	completed: function(r){
		var response = Json.evaluate(r);
		
		this.target.empty();
		
		var div = new Element('div',{'id':'result'}).injectInside(this.target);
		var ul  = new Element('ul').injectInside(div);
		
		for (var i in response) {
			var style = (i > this.limit) ? {'styles':{'display':'none'}} : {};
			var a = new Element('a',{'href':response[i].url}).appendText(response[i].title);
			var li = new Element('li',style).injectInside(ul);
			a.injectInside(li);
		}
		
		if (i > this.limit) {
			this.more = true;
			this.button.value = 'Toon alles';
		} else {
			this.button.value = 'Opnieuw zoeken';
		}
		
		if (!i) {
			var li = new Element('li').appendText('Niets gevonden!');
			li.injectInside(ul);
		}
	},
	showMore: function(){
		$$('#result li').setStyle('display','block');
		this.more = false;
		this.button.value = 'Opnieuw zoeken';
	},
	init: function(){
		this.form = $('a-zoek');
		this.button = $('a-toon');
		if (!this.form || !this.button) return;
		
		var action = this.form.getAttribute('action').split('/');
		this.form.setAttribute('action',this.url+action[action.length - 2]);
		this.form.addEvent('submit',this.submit.bindAsEventListener(this));
		this.target = new Element('div').injectBefore(this.button);
	}
});


// ----- HILITE ALERT MESSAGE

DJ.set('ShowAlert',{
	init: function() {
		var div = $('alert');
		if (!div) return;
		new Fx.Style(div, 'opacity',{duration:2000}).start(0,1);
	}
});

// ----- INITIATE HASH 

DJ.each(function(obj,key){
	window.addEvent('domready',obj.init.bind(obj));
});