var Y = YAHOO;
var E = Y.util.Event;
var R = Y.util.Region;
var D = Y.util.Dom;
var C = Y.util.Connect;

var axel = Math.random() + "";
var ord = axel * 1000000000000000000;

function $() {
  var elements = new Array();

  for (var i = 0; i < arguments.length; i++) {
    var element = arguments[i];
    if (typeof element == 'string')
      element = document.getElementById(element);

    if (arguments.length == 1) 
      return element;

    elements.push(element);
  }

  return elements;
}

/*
    inArray Prototype Array object by EmbiMedia
*/
Array.prototype.inArray = function (value) {
	var i;
	for (i=0; i < this.length; i++) {
		if (this[i] === value) {
			return true;
		}
	}
	return false;
};

/*
	getElementsBy Class from http://www.dustindiaz.com/getelementsbyclass/
*/

function getElementsByClass(searchClass,node,tag) {
	var classElements = new Array();
	if ( node == null )
		node = document;
	if ( tag == null )
		tag = '*';
	var els = node.getElementsByTagName(tag);
	var elsLen = els.length;
	var pattern = new RegExp("(^|\\s)"+searchClass+"(\\s|$)");
	for (i = 0, j = 0; i < elsLen; i++) {
		if ( pattern.test(els[i].className) ) {
			classElements[j] = els[i];
			j++;
		}
	}
	return classElements;
}

/*
	"Rock Solid addEvent" from http://www.dustindiaz.com/rock-solid-addevent/
*/

function addEvent( obj, type, fn ) {
	if (obj.addEventListener) {
		obj.addEventListener( type, fn, false );
		EventCache.add(obj, type, fn);
	}
	else if (obj.attachEvent) {
		obj["e"+type+fn] = fn;
		obj[type+fn] = function() { obj["e"+type+fn]( window.event ); };
		obj.attachEvent( "on"+type, obj[type+fn] );
		EventCache.add(obj, type, fn);
	}
	else {
		obj["on"+type] = obj["e"+type+fn];
	}
}

var EventCache = function(){
	var listEvents = [];
	return {
		listEvents : listEvents,
		add : function(node, sEventName, fHandler){
			listEvents.push(arguments);
		},
		flush : function(){
			var i, item;
			for(i = listEvents.length - 1; i >= 0; i = i - 1){
				item = listEvents[i];
				if(item[0].removeEventListener){
					item[0].removeEventListener(item[1], item[2], item[3]);
				};
				if(item[1].substring(0, 2) != "on"){
					item[1] = "on" + item[1];
				};
				if(item[0].detachEvent){
					item[0].detachEvent(item[1], item[2]);
				};
				item[0][item[1]] = null;
			};
		}
	};
}();
addEvent(window,'unload',EventCache.flush);

/*
	HuffPo javascript from HuffPo
*/
var HuffPoUtil = {

	commenter_name: '',

/* Generic useful functions */

	hide: function(id) {
		var el = document.getElementById(id);
		if (el) el.style.display = 'none';
	},

	show: function(id) {
    var el = document.getElementById(id);
    if (el) el.style.display = 'block';
	},

	getCookie:  function(name) {
		var prefix = name + '=';
		var c = document.cookie;
		var nullstring = '';
		var cookieStartIndex = c.indexOf(prefix);
		if (cookieStartIndex == -1)
			return nullstring;
		var cookieEndIndex = c.indexOf(";", cookieStartIndex + prefix.length);
		if (cookieEndIndex == -1)
			cookieEndIndex = c.length;
		return unescape(c.substring(cookieStartIndex + prefix.length, cookieEndIndex));
	},

/* on_load functions */
	init: function()
	{
		//this.showad();
		//this.externalLinks();
		this.resize();
		//this.sfHover();
		this.commenter_name = this.getCookie('commenter_name');
		//this.printUserStatus();
	},


	resize: function()
	{
		 if (window.innerWidth < 970 )
		 {
			re = new RegExp( /.*?Netscape.(.*)/ );
			matches = re.exec(navigator.userAgent);
			if ( matches.length >= 2 && matches[1] < 7.2 )
			{
				document.body.style.margin = '0';
			}
			
		 }
	},

	printUserStatus: function()
	{
		el = document.getElementById( 'userstatus' );
		if (el && this.commenter_name.length)
				el.innerHTML = '<a href="/users/preferences/">My Account</a>';
	},

	showad: function()
	{ 
		this.show('rightad'); this.show('frontmidad');
	},
	
	externalLinks: function()
	{
		if (!document.getElementsByTagName) return;
		var anchors = document.getElementsByTagName("a");
		for (var i=0; i<anchors.length; i++)
		{
			var anchor = anchors[i];
			if (anchor.getAttribute("href") &&
				anchor.getAttribute("rel") == "popup")
				anchor.onclick = function()
			{
				var height = 430;
				var width = 580;
				
				if ( this.className == 'commentpop' )
				   height = 430;
				if ( this.className == 'biolink' )
				   width = 595;
				   
				window.open(this.href, 'bio', 'toolbar=0,scrollbars=1,location=0,statusbar=1,menubar=1,resizable=1,width=' + width + ',height=' + height);
				return false;
			};
		}
	},
	
	sfHover: function() {
		var sfEls = document.getElementById("topnav").getElementsByTagName("LI");
		for (var i=0; i<sfEls.length; i++) {
			sfEls[i].onmouseover=function() {
				this.className+=" sfhover";
			};
			sfEls[i].onmouseout=function() {
				this.className=this.className.replace(new RegExp("sfhover"), "");
			};
		}
	},

/* Other goodies */
	previewComment: function()
	{
		comment_body = document.getElementById('preview_body');
		comment_author = document.getElementById('preview_name');
	
		body_text = document.comments_form.text.value;
		re= /<\S[^>]*>/g; 
		body_text = body_text.replace(re,"");
		
		comment_body.innerHTML = body_text.replace( /\r|\n/g, '<br \>' );
		comment_author.innerHTML = document.comments_form.author.value;
		
		this.show( 'comment_preview' );
	}

};

var TrackingData = new Object;

var ClickTracker = {

	trackerImg: Object, 

	blogRecentRanking: 0, 
	
	trackMe: function()
	{
		var container;
		el = this;
		for ( i=0; i<4; i++)
		{
			if ( el.id.indexOf( 'entry_' ) >= 0 
				|| el.id.indexOf( 'blog_' ) >= 0
				|| el.id.indexOf( 'recent_' ) >= 0 )
			{
				container = el;
				break;
			}
				
			el = el.parentNode;
		}

		this.trackerImg = new Image();

		if ( container )
		{
			eval("tdata = TrackingData." + container.id);
			
			tdata.url = escape(this.href); 
			
			if ( this.innerHTML == 'READ POST' )
				tdata.type = 'read%20post';
			else if ( this.innerHTML == 'QUICK READ'  )
				tdata.type = 'in%20brief';
			else if ( this.innerHTML.indexOf('comments') >= 0 )
				tdata.type = 'comments';
			else if ( this.innerHTML == 'bio' )
				tdata.type = 'bio';
			else if ( this.parentNode.className == 'author' || this.parentNode.className == 'byline' )
				tdata.type = 'author';
			else if ( tdata.blog_id == 2 && this.firstChild && this.firstChild.tagName == 'IMG')
				tdata.type = 'image';
			else if ( tdata.blog_id == 2 )
				tdata.type = 'headline';
			else if ( tdata.blog_id == 3 && this.parentNode.tagName && this.parentNode.tagName == 'H2')
				tdata.type = 'headline';
			else if ( tdata.blog_id == 3 && this.parentNode.tagName && this.parentNode.tagName == 'P')
				tdata.type = 'entry%20body';
			else
				tdata.type = 'other';
				
			//alert( this.parentNode.tagName );
			//prompt( "Here's the object", JSON.stringify( tdata ) );
			this.trackerImg.src = "http://view.huffingtonpost.com/clicktracking/front.php?" + JSON.stringify( tdata );
			//this.trackerImg.src = "/clicktracking/ap.php?" + tdata.rank;
		}
		else
		{
			el = this;
			for ( i=0; i<6; i++)
			{
				if ( el.id )
				{
					container = el;
					break;
				}
				el = el.parentNode;
			}

			var tdata = 
			{
				url : '',
				type : '',
				id : -1,
				blog_id : -1,
				rank : -1,
				zone : -1
			};

			tdata.url = escape(this.href);
			tdata.type = escape(container.id);

			//prompt( "Here's the object", JSON.stringify( tdata ) );

			this.trackerImg.src = "http://view.huffingtonpost.com/clicktracking/front.php?" + JSON.stringify( tdata );
		
		}

	},

	trackComment: function( comment_id, entry_id ) {
		this.trackerImg = new Image();
		this.trackerImg.src = "http://view.huffingtonpost.com/clicktracking/best-of.php?comment_id=" + comment_id + "&entry_id=" + entry_id;
	},

	deprecated_flagComment: function( comment_id, entry_id ) {
		this.trackerImg = new Image();
		this.trackerImg.src = "http://view.huffingtonpost.com/mt/extlib/huff/huff-send-comment.cgi?id=" + comment_id + "&entry_id=" + entry_id;
	},

	initRelatedTracker: function() {
		lists = getElementsByClass("relatedposts",document,"ul");
		for (var i=0; i<lists.length; i++)
		{
			anchors = lists[i].getElementsByTagName("a");
			for (var j=0; j<anchors.length; j++)
				anchors[j].href = 'http://www.huffingtonpost.com/include/lib/RelatedTracker.php?type=related&ref=' + document.URL + '&dest=' + anchors[j].href;
		}		

		lists = getElementsByClass("topposts",document,"ul");
		for (var i=0; i<lists.length; i++)
		{
			anchors = lists[i].getElementsByTagName("a");
			for (var j=0; j<anchors.length; j++)
				anchors[j].href = 'http://www.huffingtonpost.com/include/lib/RelatedTracker.php?type=top&ref=' + document.URL + '&dest=' + anchors[j].href;
		}		
	},
	
	init: function() {
		if (!document.getElementsByTagName) return;
		var anchors = document.getElementsByTagName("a");
		for (var i=0; i<anchors.length; i++)
		{
			addEvent( anchors[i], 'mousedown', ClickTracker.trackMe);
		}
		
	}

};


function loadPageExec()
{
	/* 	paul commenting this out 	*/ 

	
	HuffPoUtil.init();
	
	var lottery = Math.round(Math.random()*6);
	if (lottery == 1 && document.URL.match( new RegExp('http://[^.]*\.huffingtonpost\.com/?(index\.php)?$') ))
		ClickTracker.init();

	if (document.URL.match( new RegExp('_[bn]_') ))
	{
		ClickTracker.initRelatedTracker();
	} 

	
}

addEvent(window,'load',loadPageExec);


var FanSystem = {
	linkClass: 'becomefan_link',
	becomeIdPrefix: 'becomefan',
	updatedIdPrefix: 'becomefanupdated',
	updatedText: 'You\'re already a fan of ',
	cmtId: 0,
	
	becomeFan: function(of, cmt_id) {
		if (!of) return true;
		
		var fr = YAHOO.util.Connect.asyncRequest('GET', '/extensions/comments/users/becomeFan.php?of=' + of + '&ajax=1', this);
		this.cmtId = cmt_id;
		return false;
	},
	
	success: function(o) {
		if (o.responseText=='') return false;
		
		var splits = o.responseText.split(':::');
		
		if (splits[0]=='updated') {
			var userid = splits[1];
			if (!userid) return false;
			return this.updateLinks(userid);
		} else if (splits[0]=='login') {
			showtoplogindiv();
		}
	}, 
	
	failure: function(o) {
	},
	
	updateLinks: function(userid) {
		var links = D.getElementsByClassName(this.linkClass, 'a');
		if (!links.length) return false;
		
		for (var i = 0, len = links.length; i < len; i++) {
			var ls = links[i].id.split('_');
			if ( !(ls[0]==this.becomeIdPrefix && ls[1]==userid) && !(this.cmtId=='blogger' && ls[1]=='blogger') ) continue;

			if ( $('of_username_' + ls[1] + '_' + ls[2]) )
				var ofName = $('of_username_' + ls[1] + '_' + ls[2]).innerHTML;
			else continue;
			
			links[i].href = "javascript:FanSystem.showdivFan('" + ls[2] + "', '" + userid + "')";
			links[i].onclick = function(){return true;};
			links[i].innerHTML = this.updatedText + ofName;
		}
		this.showdivFan(this.cmtId, userid);
		return true;
	},
	
	showdivFan: function(cmt_id, userid) {
	//
		//console.debug(cmt_id, userid);
		if ( $('fan-Lightbox-' + cmt_id) ){
		var popup_name = 'fan-Lightbox-' + cmt_id;
			//var ev = YAHOO.util.Event;
			var xy = YAHOO.util.Dom.getXY('becomefan_'+userid + '_' + cmt_id );  
			if(!xy) 
				xy = YAHOO.util.Dom.getXY('becomefanupdated_'+userid + '_' + cmt_id );   
			xy[0] = xy[0] - 179;
			xy[1] = xy[1] - 136;
			$(popup_name).style.display = 'block';
			YAHOO.util.Dom.setXY(popup_name, xy);  
		}
			
	},
	
	hidedivFan: function(cmt_id) {
		if ( $('fan-Lightbox-' + cmt_id) )
			$('fan-Lightbox-' + cmt_id).style.display = 'none';
	}, 
	
	loginAndBecome: function(of) {
		//if ( $('top_return_to') )
		//	$('top_return_to').value = '/users/becomeFan.php?of=' + of + '&ajax=0';
		showtoplogindiv();
	},
	
	click: function(of, cmt_id) {
		if (getCookie('_dick_cookie_username')) {
			FanSystem.becomeFan(of, cmt_id);
		} else {
			FanSystem.loginAndBecome(of);
		}
	},
	
	checkAlready: function() {
		if ( !getCookie('_dick_cookie_username') ) return false;
		
		var links = D.getElementsByClassName('span_fan_username', 'span');
		if (links && links.length > 0) {
			var cookie_user = getCookie('_dick_cookie_username');
			var cookie_blogger = getCookie('_236_blogger_fullname');
			if (cookie_blogger)
				cookie_blogger = cookie_blogger.replace('+', ' ');
			
			for (i=0, ll=links.length; i < ll; i++) {
				var splits = links[i].id.split('_');
				var cmt_id = splits[3];
				var usr_id = splits[2];
				if ( $('of_username_' + usr_id + '_' + cmt_id) ) {
					var el_inner = $('of_username_' + usr_id + '_' + cmt_id).innerHTML;
					
					if ( el_inner==cookie_user || el_inner==cookie_blogger) {
						D.setStyle(this.becomeIdPrefix + '_' + usr_id + '_' + cmt_id, 'display', 'none');
						D.setStyle('fan_sep' + '_' + usr_id + '_' + cmt_id, 'display', 'none');
					}
				}
			}
		}
		
		var hash = Math.random();
		var username = getCookie('_dick_cookie_username');
		var fr = YAHOO.util.Connect.asyncRequest('GET', '/extensions/comments/users/getFanOfUsers.php?u=' + username + '&h=' + hash, this.alreadyCallback);
	},
	
	alreadyCallback: {
		success: function(o) {
			if (o.responseText=='' || o.responseText=='0') return;
			ids = o.responseText.split(':');
			for (i=0, iln=ids.length; i < iln; i++) {
				updClass = FanSystem.updatedIdPrefix + '_' + ids[i];
				links = D.getElementsByClassName(updClass, 'a');
				if (!links || !links.length) continue;
				
				for (j=0, jln=links.length; j < jln; j++) {
					splits = links[j].id.split('_');
					cmt_id = splits[2];
					D.setStyle(FanSystem.becomeIdPrefix + '_' + ids[i] + '_' + cmt_id, 'display', 'none');
					D.setStyle(links[j].id, 'display', 'inline');
				}
			}
		},
		failure: function() {
			
		}
	}
};

function getCookie(name) {
        var prefix = name + "=";
        var cookieStartIndex = document.cookie.indexOf(prefix);
        if (cookieStartIndex == -1)
                return null;
        var cookieEndIndex = document.cookie.indexOf(";", cookieStartIndex + prefix.length);
        if (cookieEndIndex == -1)
                cookieEndIndex = document.cookie.length;
        return unescape(document.cookie.substring(cookieStartIndex + prefix.length, cookieEndIndex));
}
