/*
 * Function to return back a string with all HTML entities decoded.
 */


String.prototype.unescapeHtml = function () {
	var ta=document.createElement("textarea");
	ta.innerHTML=this.replace(/</g,"&lt;").replace(/>/g,"&gt;");
	return ta.value;
}

if (typeof TSAVO == 'undefined') { 
	TSAVO = {};
}

TSAVO.topstories = function(config){
	this.DEFAULT_CONFIG = {
			"title":"Around The Web",
			"data":[],
			"offsetX":350,
			"offsetY":50,
			"defaultFavicon":"http://cache.static.tsavo.com/img/topStoriesWidget/default.jpg"
	};
	
	this.config = TSAVO.mergeObjects(this.DEFAULT_CONFIG, config);
	
 	this.init = function() { 
 		document.write('<div id="tsavo-topstories-c"><h2>' + this.config.title + '</h2><ul id="tsavo-top-stories-list"/></div>');	
 	};
	
 	this.render = function() {
 		// loop over the links found 
 		var html, oLI, oUL, fxnMouseOver, fxnMouseOut, oModal;
 		
 		fxnMouseOver = function(e, o) { 
 			if (typeof oModal == 'undefined') { 
 				oModal = document.createElement('div');
 				oModal.id = 'tsavo-top-story-modal';
 				document.body.appendChild(oModal);
 				
 				oModalTop = document.createElement('div');
 				oModalTop.id = 'tsavo-top-story-modal-t';
 				oModal.appendChild(oModalTop);
 				
 				oModalMiddle = document.createElement('div');
 				oModalMiddle.id = 'tsavo-top-story-modal-m';
 				oModal.appendChild(oModalMiddle);
 				
 				oModalContent = document.createElement('div');
 				oModalContent.id = 'tsavo-top-story-modal-content';
 				oModalMiddle.appendChild(oModalContent);
 				
 				oModalBottom = document.createElement('div');
 				oModalBottom.id = 'tsavo-top-story-modal-b';
 				oModal.appendChild(oModalBottom);
 			}
 			
 			oModalContent.innerHTML = '';
  			oModal.style.display = 'block';
  			
  			
			if (typeof o.source != 'undefined') { 
				oModalContent.innerHTML += '<cite>' + o.source + '</cite>';
			}
			
			var strDescription =  o.description.replace(/(<([^>]+)>)/ig,"");
			if (strDescription.length > 360) { 
				var pos = strDescription.indexOf(' ', 360);
				strDescription = strDescription.substr(0, pos) + '...';
			}
			
			oModalContent.innerHTML += '<h4>' + o.title.unescapeHtml() + '</h4><p>' + strDescription.unescapeHtml() + '</p>';
 		}
 		
 		fxnMouseOut = function(e){
 			oModal.style.display = 'none';
 		}
 		
 		fxnMouseMove = function(e, o) { 
 			var top, left, box, offsetX, offsetY;
 			
 			box = YAHOO.util.Dom.getXY(this);
 			offsetY = e.clientY - box[1];
 			offsetX = e.clientX - box[0];
 			
 			top = ((parseInt(box[1])) - o.config.offsetY);
 			left = ((parseInt(box[0])) - o.config.offsetX + offsetX);
 			
 			oModal.style.top = top + 'px';
 			oModal.style.left = left + 'px';
 			oModal.style.display = 'block';
 		}
 		
 		fxnFavIconError = function(e,o) { 
 			var oImg = document.getElementById(o.id);
 			// alert(oImg.id);
 			// alert(o.default_icon);
 			oImg.src = o.default_icon;
 		}
 		
 		oUL = document.getElementById('tsavo-top-stories-list');
 		
 		for ( i = 0; i < this.config.data.length; i++) {
 			baseURL = this.config.data[i].link.split('/').slice(0,3).join('/');
 			
 			oLI = document.createElement('li');
 			oLI.className = "clearfix";
 			
 			oImg = document.createElement('img');
 			oImg.id = 'tsavo-top-story-favicon-' + i;
 			oImg.className = 'favicon';
 			oImg.src = baseURL + '/favicon.ico';
 			oLI.appendChild(oImg);
 			
 			oDiv = document.createElement('div');
 			// oDiv.style.float = "left";
 			oDiv.style.marginLeft = "30px";
 			oLI.appendChild(oDiv);
 			
 			oA = document.createElement('a');
 			oA.href = this.config.data[i].link;
 			oA.innerHTML = this.config.data[i].title.unescapeHtml();
 			oA.target = '_blank';
 			oDiv.appendChild(oA);
 			
 			oSourceDiv = document.createElement('div');
 			oSourceDiv.innerHTML = this.config.data[i].source;
 			oSourceDiv.className = 'tsavo-top-story-source';
 			oDiv.appendChild(oSourceDiv);
 			
 			// oLI.appendChild(oDiv);
 			
 			errorObj = { 'id' : 'tsavo-top-story-favicon-' + i, 'default_icon': this.config.defaultFavicon }
 			
 			YAHOO.util.Event.on(oImg, "error", fxnFavIconError, errorObj);
 			YAHOO.util.Event.on(oA, "mouseover", fxnMouseOver, this.config.data[i]);
 			YAHOO.util.Event.on(oA, "mousemove", fxnMouseMove, this);
 			YAHOO.util.Event.on(oA, "mouseout", fxnMouseOut);
 			
 			oUL.appendChild(oLI);
 		}
 	};

}
