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

	gfiVote: function(id) {
		setTimeout(function(){ALLTOP.active_votes.remove(id);}, 2000);
	}
};
ALLTOP.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 = ALLTOP.Cookie.get(name) || true;
		ALLTOP.Cookie.set(name, '', -1);
		return cookie;
	},
	accept: function() {
		if (typeof navigator.cookieEnabled == 'boolean') {
			return navigator.cookieEnabled;
		}
		ALLTOP.Cookie.set('_test', '1');
		return (ALLTOP.Cookie.erase('_test') === '1');
	}
};
ALLTOP.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(){ALLTOP.trash(elements);}, 10);
		}
	} catch(e) {}
};
Garbage.trash = ALLTOP.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;
var myfeeds = [];
function hookUp(uls, idx, len) {

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

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

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

		var addel = $E('a.add-feed-my', $(el));
		var addedel = $E('.added-feed-my', $(el));
		if (addel) {
			addel.addEvent('click', function(e){
				e = new Event(e).stop();
				addMyFeed($(el).id);
			});
			if (addedel) {
				myfeeds.each(function(feedhash){
					if ($(el).hasClass(feedhash)) {
						addel.effect('opacity').set(0);
						addel.style.display='none';
						addedel.effect('opacity').set(1);
						addedel.style.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 (ALLTOP.active_clicks.contains(permalink)) return true;

		new Ajax('/track/', {
			method: 'get',
			data: { url: permalink },
			onRequest: function(){
				ALLTOP.active_clicks.include(permalink);
			},
			onComplete: function(response){
				ALLTOP.gfiClick(permalink);
			},
			onFailure: function(){
				ALLTOP.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++) {
		var row = ifs[i].className.match(/ r\d+/);
		if (row) {
			row = row[0].replace(/ r/, '')*1;
			if ($(seps[(row-2)])) {
				$(ifs[i]).clone().injectAfter($(seps[(row-2)]));
				$(ifs[i]).remove();
			}
		}
	}
}

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

function addMyFeed(id) {
	var id_num = id.replace(/^feed/,'');
	var feed_name = $E('li.site a.snap_shots', $(id)).innerHTML;
	new Ajax('/add-to-my/', {
		method: 'get',
		data: {
			id: id_num,
			name: feed_name
		},
		onRequest: function(){
		},
		onComplete: function(response){
			// fade
			var addel = $E('a.add-feed-my', $(id));
			var addedel = $E('.added-feed-my', $(id));
			if (addel) {
				addel.effect('opacity', {
					duration: 500,
					fps: 75
				}).start(0);
				addedel.effect('opacity').set(0);
				addedel.style.display = 'block';
				addedel.effect('opacity', {
					duration: 500,
					fps: 75
				}).start(1);
			}
		},
		onFailure: function(){
		}
	}).request();
}

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);
}

var load_method = (window.ie ? 'load' : 'domready');
window.addEvent(load_method, function(){

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

	new Tips($$('a#ack-list'), {
		maxTitleChars: 90
	});
	if ($('ack-list')) $('ack-list').addEvent('click', function(e){
		e = new Event(e).stop();
	});
});