//var URL_TWITTER = 'http://search.twitter.com/search.json';
//var URL_TWITTER = 'http://127.0.0.1/jpg_triptyque/web/exclude/jpg_search.json';

lastTweetFeature.prototype = 
{
	target: null,
	params:
	{
		delay: 120000
	},
	events: 
	{
		"init": function(){/*console.log("(default) init")*/} ,
		"onchange": function(){/*console.log("(default) onchange")*/}
	}
};

function lastTweetFeature(params, events)/*queryString, target, lang, time*/
{	
	var
		_interval = "",
		_intervalShow = "",
		_data = null,
	    _elems = [],
	    _url = null,

		actual = 0,
		maxShow = 2,		
		className = "active",
		_this = this
	;

	driver.extend(_this.params, params);
	driver.extend(_this.events, events);
	
	lastTweetFeature.prototype.init = function(target, url)
	{	
		if(typeof target == "undefined" || !target)
			return false;

		_url = url;
		_this.target = target;

		getSearch();
		_interval = setInterval(getSearch, this.params.delay);
	};
	
	lastTweetFeature.prototype.destroy = function()
	{
		clearInterval(_interval);
	};
	
	function getSearch()
	{	
		var ajaxRequest = driver.ajaxRequest(
		{
			"error": errorSearch,
			"success": parseSearch,
			"dataType": 'json',
			"url": _url
		});
	}
	
	function parseSearch(data)
	{

		if (typeof data.responseJSON == "undefined")
		{
			return false;
		}

		_data = data.responseJSON.results;
		_elems = [];

		_this.target.innerHTML = "";
		clearInterval(_intervalShow);
		
		for(var i in _data)
		{
			if(typeof _data[i] != "object")
			{
				continue;	
			}
                        
            var elemContent = "<a class='pseudo' href='http://www.twitter.com/"+_data[i].from_user+"'>";
            elemContent += _data[i].from_user;
            elemContent += "</a>";
            elemContent += "<div class='message'>";
            elemContent += _data[i].text;
            elemContent += "</div>";
            elemContent += "<div class='infos'>";
            elemContent += parseDate(_data[i].created_at)+" via "+htmlDecode(_data[i].source);
            elemContent += "</div>";                       
                        
			var elem = document.createElement('div');
            elem.id = _data[i].id;
            elem.className = "tweet";
            elem.innerHTML = elemContent;
                        
			_elems.push(elem);
		}

		showSearch();
		_intervalShow = setInterval(showSearch, 5000);
		
		if (typeof _this.initialized == "undefined")
		{
			_this.events["init"].call(_this);
			_this.initialized = true;
			return false;
		}
		
		_this.events["onchange"].call(_this);
		return false;
	}
	
	function showSearch()
	{
		var 
			_len = _elems.length,
			_nodes = _elems,
			next = (actual == _len-1 ? 0 : actual+1),
                        targetNodes = _this.target.childNodes,
                        targetLen = targetNodes.length
		;
                
		//console.log(next);
		// FIXME : l'animation n'est pas bien callée
		for (var i=0; i<targetLen; i++)
		{
                    if(targetNodes[i].id != _nodes[actual].id && targetNodes[i].id != _nodes[next].id){
                        driver.animateCSS(targetNodes[i], "height: 0px;", 500, hideElement);
                    }
		}

		_this.target.appendChild(_nodes[actual]);
		driver.removeClass(_nodes[actual], 'hide');

		_this.target.appendChild(_nodes[next]);
		driver.removeClass(_nodes[next], 'hide');
		driver.addClass(_nodes[next], className);
		driver.animateCSS(_nodes[next], "height: auto;", 500);

		if(actual == _len-1) actual = 0;
		else actual++;
	}

	function hideElement(target){
            try{
                _this.target.removeChild(target.element);              
            }catch(err){}
	}
	
	function errorSearch(data)
	{
            _trace('data', data);
	}
	
	var parseDate = function (date) 
	{
		var 
			now = new Date(),
			isIE = driver.hasClass(document.body, "msie"),
			before = new Date(date)
		;
		
		var d = now - before,
			e = 1000,
			minute = e * 60,
			hour = minute * 60,
			day = hour * 24,
			week = day * 7;
		
		if (isNaN(d) || d < 0) 
		{
			return "";
		}
		if (d < e * 7) 
		{
			return "right now";
		}
		if (d < minute) 
		{
			return Math.floor(d / e) + " seconds ago";
		}
		if (d < minute * 2) 
		{
			return "about 1 minute ago";
		}
		if (d < hour) 
		{
			return Math.floor(d / minute) + " minutes ago";
		}
		if (d < hour * 2) {
			return "about 1 hour ago";
		}
		if (d < day) 
		{
			return Math.floor(d / hour) + " hours ago";
		}
		if (d > day && d < day * 2) 
		{
			return "yesterday";
		}
		if (d < day * 365) 
		{
			return Math.floor(d / day) + " days ago";
		} 
		else 
		{
			return "over a year ago";
		}
	};
	
	var htmlDecode = function(input){
		var e = document.createElement('div');
		e.innerHTML = input;
		return e.childNodes[0].nodeValue;
	};

	return this;
}
