// JavaScript Document

var Web2News = {};
Web2News = {
	active_clicks: [],
	active_votes: [],
	hidden_feeds: [],
	hidden_cookie: 'alltop_hf',
	
	gfiClick: function(permalink) {
		setTimeout(function(){Web2News.active_clicks.remove(permalink);}, 2000);
		// window.open(permalink);
		// self.location.href=permalink;
	},

	gfiVote: function(id) {
		setTimeout(function(){Web2News.active_votes.remove(id);}, 2000);
	}
};
Web2News.Cookie = {
	set: function(name, value, daysToExpire) {
		var expire = '';
		if (daysToExpire != undefined) {
			var d = new Date();
			d.setTime(d.getTime() + (86400000 * parseFloat(daysToExpire)));
			expire = '; expires=' + d.toGMTString();
		}
		return (document.cookie = escape(name) + '=' + escape(value || '') + expire);
	},
	get: function(name) {
		var cookie = document.cookie.match(new RegExp('(^|;)\\s*' + escape(name) + '=([^;\\s]*)'));
		return (cookie ? unescape(cookie[2]) : null);
	},
	erase: function(name) {
		var cookie = Web2News.Cookie.get(name) || true;
		Web2News.Cookie.set(name, '', -1);
		return cookie;
	},
	accept: function() {
		if (typeof navigator.cookieEnabled == 'boolean') {
			return navigator.cookieEnabled;
		}
		Web2News.Cookie.set('_test', '1');
		return (Web2News.Cookie.erase('_test') === '1');
	}
};
Web2News.trash = function(elements){
	try {
		// do 1000 elements at a time to avoid triggering a "slow script" error
		var len = (elements.length<1000)?elements.length:1000;
		for (var i = 0, j = len, el; i < j; i++){
		// for (var i = 0, j = elements.length, el; i < j; i++){
			if (!(el = elements[i]) || !el.$tmp) continue;
			if (el.$events) el.fireEvent('trash').removeEvents();
			for (var p in el.$tmp) el.$tmp[p] = null;
			for (var d in Element.prototype) el[d] = null;
			Garbage.elements[Garbage.elements.indexOf(el)] = null;
			el.htmlElement = el.$tmp = el = null;
		}
		Garbage.elements.remove(null);
		elements = elements.slice(1000);
		if (elements.length>0) {
			setTimeout(function(){Web2News.trash(elements);}, 10);
		}
	} catch(e) {}
};
Garbage.trash = Web2News.trash;

var feeds_container_el = $('headlines');

var acktext = ($('ack-box')) ? $E('li a', $('ack-box')).innerHTML : '' ;
document.addEvent('click', function(e){
	if ($('ack-box')) {
		$E('li a', $('ack-box')).innerHTML = acktext;
		$E('li', $('ack-box')).setStyle('display', 'inline');
		$('ack-box').removeClass('show-urls');
	}
	if ($('cat-box')) $('cat-box').removeClass('show-urls');
});

var hookups = 0;
function hookUp(uls, idx, len) {

	var hidden = false;
	var myuls = uls.slice(idx, (idx+len));
	var links = [];
	myuls.each(function(el){

		if (Web2News.hidden_feeds.contains(el.id.replace(/^feed/,''))) {
			$(el).remove();
			hidden = true;
		}

		if (el.id.match(/-box/)) return;

		var posts = $ES('li.hentry', $(el));
		posts.each(function(post) {
			postHookUp(post);
		});

		var xel = $E('a.hide-feed-x', $(el));
		if (xel) {
			xel.addEvent('click', function(e){
				e = new Event(e).stop();
				hideFeed($(el).id);
			});
		}
	});

	if (hidden) {
		// display the reset button
		if ($('restore').getStyle('display')=='none') {
			$E('#restore a').addEvent('click', function(e){
				e = new Event(e).stop();
				restoreAllFeeds();
				window.location.href = '/';
			});
			$('restore').setStyle('display','block');
		}
	}


	if (uls.slice((idx+len), (idx+len+len)).length > 0) {
		if (hookups++ == 0) { resetSeparators(); }
		setTimeout(function(){ hookUp(uls, (idx+len), len); }, 10);
	}
	else {
		// Reset separators
		resetSeparators();
	}
		
}

function postHookUp(post) {
	var link_element = {};
	if (post.hasClass('image-feed-entry')) {
		link_element = $E('a', post);
	}
	else {
		link_element = $E('h3 a[rel=bookmark]', post);
		var content_element = $E('div.entry-content', post);
		var thedate = $E('div.published', post).innerHTML;
		if (!thedate) thedate = '&nbsp;';
		$(link_element).setProperty('title', thedate+' :: '+$(content_element).innerHTML.replace(/::/, ':'));
	}

	$(link_element).addEvent('click', function(e){
		var permalink = $(link_element).href;

		// Check to see if this might be a multiple click
		if (Web2News.active_clicks.contains(permalink)) return true;

		new Ajax('/track/', {
			method: 'get',
			data: { url: permalink },
			onRequest: function(){
				Web2News.active_clicks.include(permalink);
			},
			onComplete: function(response){
				Web2News.gfiClick(permalink);
			},
			onFailure: function(){
				Web2News.gfiClick(permalink);
			}
		}).request();
	});

	addTips(new Array($(link_element)));
}

function resetSeparators() {
	var sep = $E('div.row-clear', feeds_container_el);
	$ES('div.row-clear', feeds_container_el).each(function(s){
		s.remove();
	});
	var nifs = getNonImgFeeds(true);
	for (var i=0; i<nifs.length; i++) {
		if ((i+1)%3==0) {
			sep.clone().injectAfter($(nifs[i]));
		}
	}

	var ifs = getImgFeeds();
	var seps = $ES('div.row-clear', feeds_container_el);
	for (var i=0; i<ifs.length; i++) {
		if ($(seps[i])) {
			$(ifs[i]).clone().injectAfter($(seps[i]));
			$(ifs[i]).remove();
		}
	}
}

function addTips(links) {
	new Tips(links, {
		maxTitleChars: 50
	});
}

// Read hidden feeds from cookie
function getHiddenFeeds() {
	var hf = [];
	if (hf = Web2News.Cookie.get(Web2News.hidden_cookie)) {
		Web2News.hidden_feeds = hf.split(/_/);
	}
}

// Write hidden feeds to cookie
function saveHiddenFeeds() {
	Web2News.Cookie.set(Web2News.hidden_cookie, Web2News.hidden_feeds.join('_'), 365*10);
}

function hideFeed(id) {
	id_num = id.replace(/^feed/,'');
	if (!Web2News.hidden_feeds.contains(id_num)) {
		Web2News.hidden_feeds.push(id_num);
		saveHiddenFeeds();
		if (window.ie6)
			window.location.href='/';
		else {
			$(id).remove();
			resetSeparators();
		}
	}
}

function restoreAllFeeds() {
	Web2News.Cookie.erase(Web2News.hidden_cookie);
	window.location.href = '/';
}

function getNonImgFeeds(ads) {
	var uls = (ads) ? $ES('.feed-block', feeds_container_el) : $ES('ul', feeds_container_el) ;
	var newuls = [];
	uls.each(function(ul){
		if (!ul.hasClass('image-feed')) newuls.push(ul);
	});
	return newuls;
}

function getImgFeeds() {
	return $ES('ul.image-feed', feeds_container_el);
}

getHiddenFeeds();
window.addEvent('domready', function(){

	hookUp($ES('ul', feeds_container_el), 0, 20);

	$ES('a.vote', feeds_container_el).each(function(el){
		el.addEvent('click', function(e){
			new Event(e).preventDefault();
			var updown = 0;
			var feedid = el.rel;
			if ($(el).hasClass('vote-up')) updown = 1;
			else if ($(el).hasClass('vote-down')) updown = -1;
			new Ajax('/vote/', {
				method: 'get',
				data: {
					feedid: feedid,
					updown: updown
				},
				onRequest: function(){
					Web2News.active_votes.include(feedid);
				},
				onComplete: function(response){
					Web2News.gfiVote(feedid);
				},
				onFailure: function(){
					Web2News.gfiVote(feedid);
				}
			}).request();
		});
	});
	new Tips($$('a#ack-list'), {
		maxTitleChars: 90
	});
});