/**
 * == SYNTAX == rssticker.js?paramName=paramValue&...
 * rss: flux id (eg. jcisio), if you have flux http://feeds.feedburner.com/ID,
 *      you can use fb_ID as flux id without any registration
 *      if not, contact me to get a flux id
 * domain: domain name (eg. jcisio.com)
 * border: border color (ffffff [without #] or white)
 * background: background color
 * opacity: opacity (from 0 to 1)
 * width: width (in px)
 * description: 1/0 (display description or not)
 * image: 1/0 (display image, if available)
 * imagewidth: in px or in percent
 * readmore: 1/0 (display 'Read more' line)
 * maxlength: description max length (in characters)
 * delay: in miliseconds, for description about 400 characters
 * tickerid: id of element to display text
 *
 * == LICENSE ==
 * You can only call this script from your site
 * Copy or reuse of this script in whole or in part is prohibited without the author's acceptance
 * (c) by jcisio, jcisio@gmail.com or http://jcisio.com
 * V 1.0: 03/06/2007
 * V 1.1: 23/07/2007 maxlength smart trim, image size
 */
function rssticker()
{
	var expcolor = new RegExp('^[0-9a-f]{3,6}$', 'i');
	this.rss = js_getUrlParam('rss', 'ttvt');
	this.tickerid = js_getUrlParam('tickerid', 'rsscontent');
	this.mouseoverBol = 0; //Boolean to indicate whether mouse is currently over ticker (and pause it if it is)
	this.pointer = 0;
	this.domain = js_getUrlParam('domain', document.domain);
	this.options = new Object();
	this.options.border = js_getUrlParam('border', '088');
	this.options.background = js_getUrlParam('background', 'e9eef5');
	this.options.opacity = js_getUrlParam('opacity', 1);
	this.options.width = js_getUrlParam('width', 260);
	this.options.position = js_getUrlParam('position', 2);
	this.options.delay = js_getUrlParam('delay', 5000);
	this.options.maxlength = js_getUrlParam('maxlength', 300);
	this.options.description = js_getUrlParam('description', 'true')=='true'? true:false;
	this.options.date = js_getUrlParam('date', '0')=='1'? true:false;
	this.options.image = js_getUrlParam('image', '1')=='1'? true:false;
	this.options.imagewidth = js_getUrlParam('imagewidth', '47px');
	this.options.readmore = js_getUrlParam('readmore', '1')=='1'? true:false;
	this.opacitysetting = 0.2; //Opacity value when reset. Internal use.
	this.title=[], this.link=[], this.description=[], this.pubdate=[] //Arrays to hold each component of an RSS item
	if (expcolor.test(this.options.border)) this.options.border = '#'+this.options.border;
	if (expcolor.test(this.options.background)) this.options.background = '#'+this.options.background;
	this.url = js_getUrl('rssticker.js');
	this.path = this.url.replace(/rssticker\.js.*$/, '');
	document.write('<script src="' + this.path + 'flux.php?id=' + this.rss + '&bustcache='+new Date().getTime()+'"></script>');
}

rssticker.prototype.initialize=function()
{
	var instanceOfTicker=this;
	this.feeditems=feeditems;
	if (document.getElementById(this.tickerid) == null)
	{
		var divHolder = document.createElement('div');
		divHolder.id = 'rssholder';
		divHolder.className = 'rssclass';
		var divContent = document.createElement('div');
		divContent.id = this.tickerid;
		divContent.className = 'rsscontent';
		divHolder.appendChild(divContent);
		var divClose = document.createElement('div');
		divClose.className = 'rssclose';
		divClose.onclick=function() {instanceOfTicker.hide();}
		divClose.appendChild(document.createTextNode('X'));
		divHolder.appendChild(divClose);
		document.body.appendChild(divHolder);
	}
	if (window.getComputedStyle) //detect if moz-opacity is defined in external CSS for specified class
		this.mozopacityisdefined=(window.getComputedStyle(document.getElementById(this.tickerid), "").getPropertyValue("-moz-opacity")==1)? 0 : 1;
	document.getElementById(this.tickerid).onmouseover=function(){instanceOfTicker.mouseoverBol=1}
	document.getElementById(this.tickerid).onmouseout=function(){instanceOfTicker.mouseoverBol=0}
	if (this.feeditems.length > 0) this.rotatemsg();
}

rssticker.prototype.hide=function()
{
	document.getElementById('rssholder').style.display='none';
}

rssticker.prototype.rotatemsg=function()
{
	var instanceOfTicker=this;
	if (this.mouseoverBol==1) //if mouse is currently over ticker, do nothing (pause it)
		setTimeout(function(){instanceOfTicker.rotatemsg()}, 100)
	else
	{ //else, construct item, show and rotate it!
		// more weight for recent items !
		var rand = Math.abs(Math.random()+Math.random()+Math.random()+Math.random()-2)/2;
		rand = Math.random();
		this.pointer=Math.floor(rand*this.feeditems.length);
		var tickerDiv=document.getElementById(this.tickerid);
		var item = this.feeditems[this.pointer];
		var linktitle='<div class="rsstitle"><a href="'+item.link+'">'+item.title+'</a></div>'
		var description = item.description.replace(/<img [^>]*>/, '');
		if (description.length > this.options.maxlength)
		{
			description = description.substring(0, this.options.maxlength);
			description = description.replace(/\s+\S*$/, '...');
		}
		if (this.options.image && item.image!='') 
		{
			description = '<img src="' + item.image + '" width="' + this.options.imagewidth + '" height="' + this.options.imagewidth + '" align="left" />' + description;
		}
		description='<div class="rssdescription">'+description+'</div>';
		var feeddate='<div class="rssdate">'+item.pubdate+'</div>'
		var readmore = '<div style="font-size:95%;text-align:right;margin-top:3px;"><a href="' + item.link+'">Xem ti&#7871;p t&#7841;i '+this.domain+'</a></div>';
		if (!this.options.description) description = '';
		if (!this.options.date) feeddate = '';
		if (!this.options.readmore) readmore = '';
		var tickercontent = linktitle+feeddate+description+readmore; //STRING FOR FEED CONTENTS 
		this.fadetransition("reset") //FADE EFFECT- RESET OPACITY
		tickerDiv.innerHTML=tickercontent
		this.fadetimer1=setInterval(function(){instanceOfTicker.fadetransition('up', 'fadetimer1')}, 100) //FADE EFFECT- PLAY IT
		setTimeout(function(){instanceOfTicker.rotatemsg()}, this.options.delay) //update container every second
	}
}

rssticker.prototype.fadetransition=function(fadetype, timerid)
{
	var tickerDiv=document.getElementById(this.tickerid);
	if (fadetype=="reset") this.opacitysetting=0.2;
	if (tickerDiv.filters && tickerDiv.filters[0])
	{
		if (typeof tickerDiv.filters[0].opacity=="number") //IE6+
			tickerDiv.filters[0].opacity=this.opacitysetting*100
		else //IE 5.5
			tickerDiv.style.filter="alpha(opacity="+this.opacitysetting*100+")"
	}
	else 
	if (typeof tickerDiv.style.MozOpacity!="undefined" && this.mozopacityisdefined)
	{
		tickerDiv.style.MozOpacity=this.opacitysetting
	}
	if (fadetype=="up") this.opacitysetting+=0.2;
	if (fadetype=="up" && this.opacitysetting>=1) clearInterval(this[timerid]);
}

if ('function' != typeof window.js_addLoadEvent)
{// load built-in util functions
	function js_addLoadEvent(func)
	{	
		var oldonload = window.onload;
		if (typeof window.onload != 'function')
		{
			window.onload = func;
		} 
		else 
		{
			window.onload = function()
			{
				oldonload();
				func();
			}
		}
	}
	function js_getUrlParam(paramName, defaultValue)
	{
		var oRegex = new RegExp( '[\?&]' + paramName + '=([^&]+)', 'i' ) ;
		var oMatch = oRegex.exec(js_getUrl('rssticker.js')) ;
		return (oMatch && oMatch.length > 1)? oMatch[1]:defaultValue;
	}
	function js_getUrl(scriptName)
	{
		var aScripts = document.getElementsByTagName('script');
		var url = '';
		for (var i=0; i< aScripts.length; i++)
		{
			if (aScripts[i].src.indexOf(scriptName) > 0)
			{ 
				url=aScripts[i].src;
				break;
			}
		}
		return url;
	}
}

function initializeStyle(rssticker)
{
	var pos;
	switch (parseInt(rssticker.options.position))
	{
		case 1:
			pos = 'top:0;left:0';
			break;
		case 2:
			pos = 'top:0;right:0';
			break;
		case 3:
			pos = 'bottom:0;right:0';
			break;
		default:
			pos = 'bottom:0;left:0';
	}
	
	document.write('<style type="text/css">');
	document.write('.rssclass{z-index:9999990;filter: alpha(opacity='+rssticker.options.opacity*100+');opacity:'+rssticker.options.opacity+';background:'+rssticker.options.background+';font-size:12px;font-family:verdana,arial;width:270px;padding:4px 5px;position:fixed;'+pos+';margin:2px;border:1px '+rssticker.options.border+' solid}');
	document.write('.rsscontent {filter:progid:DXImageTransform.Microsoft.alpha(opacity=' + rssticker.options.opacity*100+');-moz-opacity: ' + rssticker.options.opacity + '}');
	document.write('.rsstitle{font-weight: bold}');
	document.write('.rssdate{color: gray;font-size: 85%;}');
	document.write('.rssdescription{font-size:90%;text-align:justify;margin-top:6px;}');
	document.write('.rssdescription img {border:1px gray solid; padding: 1px; margin-right: 5px;}');
	document.write('.rssclose{color:white;position:absolute;right:0;top:0;cursor:pointer;font-size:80%;background-color:red;');
	document.write('</style>');
}

var rssticker = new rssticker();
initializeStyle(rssticker);
js_addLoadEvent(function() {rssticker.initialize();});


