var time;
var timerOn=false;
onDomReady(function () {
	// init
	homepage.initialize();
});
function parseLive(lis) {
    homepage.parseLive(lis);
}
function getTimePassed(compareTo)
{
	var passed="";
	var today_date = new Date();
	var diff_date =  today_date - compareTo;
	var num_years = Math.floor(diff_date/31536000000);
	var num_months = Math.floor((diff_date % 31536000000)/2628000000);
	var num_days = Math.floor(((diff_date % 31536000000) % 2628000000)/86400000);
	
	if(num_years>0)
		passed+=num_years + " Years, ";
	if(num_months>0)
		passed+=num_months + " Months, ";
	if(num_days>0)
		passed+=num_days + " Days  ";
	passed=passed.substring(0,passed.length-2);
	passed+=" ago";
	return passed;
}
var homepage = {
	speed : 20,
	delay : 3000,
	topB: new Array(),
	recent: new Array(),
	recentMone: 0,
	featured: new Array(),
	featuredMone: 0,
	random: new Array(),
	randomMone: 0,
	loadedArr : new Array(),
	videoContainers: undefined,
	refreshMone: 0,
	first: true,
	fishing: false, //fish eye effect in action
	imgs : new Array(),
	tags : new Array(),
	live : new Array(),
	time : null,
	
	initialize: function()
    {
		this.videoContainers=$("homepageGrid").getElementsByClassName("videoBoxText");
		this.parseData($("moviesData"));
        header.liveCallback = parseLive;
	},
	parseLive : function(lis)
	{
		var i;
		var j;
		var tempRecent;
		for(j=0; j<lis.length; j++) //check if a live movie is added
		{
			 /* check if the live movie allready exists */
			for(i=0; i<this.live.length && lis[j].getElementsByTagName("id")[0].firstChild.nodeValue!=this.live[i].id; i++); //search for it
			if(i==this.live.length) //we went through the array and havn't found it!
			{
				this.live.push(new flixItem(lis[j],true)); //add it to the live arr
				tempRecent=this.recent.splice(0,this.recentMone); //split the arr, the objects before the position of the new live movie will move to tempRecent, the rest will stay at this.recent
				tempRecent.push(new flixItem(lis[j],true)); //add the new movie
				this.recent=tempRecent.concat(this.recent); //restore the objects to this.recent
				
			}
		}
		for(j=0; j<this.live.length; j++)
		{
			for(i=0; i<lis.length && lis[i].getElementsByTagName("id")[0].firstChild.nodeValue!=this.live[j].id; i++);
			if(i==lis.length)
			{
				///alert('ddd');
				for(var k=0; k<this.recent.length; k++)
					if(this.recent[k].id==this.live[j].id)
						this.recent[k].isLive=false;
				this.live.splice(j,1);
			}
		}		
	},
	parseData : function(node)
	{
		var items=node.getElementById('top_broadcasters').getElementsByTagName("ul")[0].getElementsByTagName("li");
		for(var i=0; i<items.length; i++)
		{
			this.topB.push(new broadcasterItem(items[i]));
		}
		items=node.getElementById('recent_flix').getElementsByTagName("ul")[0].getElementsByTagName("li");
		for(var i=0; i<items.length; i++)
		{
			this.recent.push(new flixItem(items[i],false));
		}
		
		items=node.getElementById('featured_flix').getElementsByTagName("ul")[0].getElementsByTagName("li");
		for(var i=0; i<items.length; i++)
		{
			this.featured.push(new flixItem(items[i],false));
		}
		
		items=node.getElementById('random_flix').getElementsByTagName("ul")[0].getElementsByTagName("li");
		for(var i=0; i<items.length; i++)
		{
			this.random.push(new flixItem(items[i],false));
		}
		this.showAll();
	},
	showAll : function()
	{
		this.showbroadcasters();
		this.showRecent();
		this.showFeatured();
		this.showRandom();
	},
	showbroadcasters : function()
	{
        try
        {
            
            var grid=$("broadcastersGrid");
            var containers=grid.getElementsByClassName('avatarContainer');
            var img;
            for(var i=0; i<this.topB.length; i++)
            {
                //remove all childs
                while (containers[i].firstChild)
                    containers[i].removeChild(containers[i].firstChild);
                //create the image
                img = document.createElement("img");
                img.src="http://avatars.flixwagon.com.s3.amazonaws.com/" + this.topB[i].id + "_big.gif";
                img.setAttribute('id',"top_broadcasters_"+i);
                img.className="BroadcasterImage";
                
                //Register events
                img.onerror=function(){ this.src='/images/users/defaultbig.gif'; };
                img.onmouseover=showTooltip;
                img.onmouseout=hideTooltip;
                img.onclick=homepage.play;
                
                containers[i].appendChild(img);
            }
        }
        catch (e)
        {
            window.setTimeout(function() {
                homepage.showbroadcasters();
            }, 1000);
        }		
        
        
	},
	showRecent : function()
	{
		for(var i=0; i<5; i++)
		{
			//create the image
			this.imgs[i] = document.createElement("img");
			this.tags[i]=this.recent[this.recentMone];
			this.imgs[i].setAttribute('id',"image_" + i);
			this.imgs[i].className="videoImg";
			if(this.recent[this.recentMone].isLive)
				this.imgs[i].className="videoImgLive";
			this.imgs[i].style.display='none';
			this.imgs[i].onclick = homepage.play;
			this.imgs[i].onmouseover=homepage.fishEye;
			this.imgs[i].onmouseout=homepage.unFishEye;
			this.imgs[i].onerror=function(){ this.src='/images/home/not_found.jpg'; };
			this.imgs[i].onload=homepage.imgLoaded;
			if(document.all) //IE
				this.videoContainers[i].appendChild(this.imgs[i]); //IE dosn't send the srcElement to the onload function if the object is not on th document
			//this.imgs[i].src="/images/alphalogo.gif";
			this.imgs[i].src=this.recent[this.recentMone++].imageurl;
			if(this.recentMone>=this.recent.length)
				this.recentMone=0;
		}
	},
	showFeatured : function()
	{
		for(var i=5; i<10; i++)
		{
			//create the image
			this.imgs[i] = document.createElement("img");
			this.tags[i]=this.featured[this.featuredMone];
			this.imgs[i].setAttribute('id',"image_" + i);
			this.imgs[i].className="videoImg";
			if(this.featured[this.featuredMone].isLive)
				this.imgs[i].className="videoImgLive";
			this.imgs[i].style.display="none";
			this.imgs[i].onclick = homepage.play;
			this.imgs[i].onmouseover=homepage.fishEye;
			this.imgs[i].onmouseout=homepage.unFishEye;
			this.imgs[i].onerror=function(){ this.src='/images/home/not_found.jpg'; };
			this.imgs[i].onload=homepage.imgLoaded;
			if(document.all) //IE
				this.videoContainers[i].appendChild(this.imgs[i]); //IE dosn't send the srcElement to the onload function if the object is not on th document
			
			this.imgs[i].src=this.featured[this.featuredMone++].imageurl;
			//this.imgs[i].src="/images/alphalogo.gif";
			if(this.featuredMone>=this.featured.length)
				this.featuredMone=0;
		}
	},
	showRandom : function()
	{
		for(var i=10; i<15; i++)
		{
			//create the image
			this.imgs[i] = document.createElement("img");
			this.tags[i]=this.random[this.randomMone];
			this.imgs[i].setAttribute('id',"image_" + i);
			this.imgs[i].className="videoImg";
			if(this.random[this.randomMone].isLive)
				this.imgs[i].className="videoImgLive";
			this.imgs[i].style.display="none";
			this.imgs[i].onmouseover=homepage.fishEye;
			this.imgs[i].onmouseout=homepage.unFishEye;
			this.imgs[i].onclick = homepage.play;
			this.imgs[i].onerror=function(){ this.src='/images/home/not_found.jpg'; };
			this.imgs[i].onload=homepage.imgLoaded;
			if(document.all) //IE
				this.videoContainers[i].appendChild(this.imgs[i]); //IE dosn't send the srcElement to the onload function if the object is not on th document
				
			//this.imgs[i].src="/images/alphalogo.gif";
			this.imgs[i].src=this.random[this.randomMone++].imageurl;
			if(this.randomMone>=this.random.length)
				this.randomMone=0;
		}
	},
	fishEye : function()
	{
		if(document.all)
			var srcElement=window.event.srcElement;
		else
			var srcElement=this;
		if(srcElement.getAttribute('id').match("image_ontop_"))
			srcElement=srcElement.previousSibling;
		srcElement.style.width='108px';
		srcElement.style.height='81px';
		if(timerOn)
		{	
			clearTimeout(time);
			timerOn=false;
		}
		homepage.fishing=true;
	},
	unFishEye : function()
	{
		if(document.all)
			var srcElement=window.event.srcElement;
		else
			var srcElement=this;
		if(srcElement.getAttribute('id').match("image_ontop_"))
			srcElement=srcElement.previousSibling;
		srcElement.style.width='100px';
		srcElement.style.height='75px';
		homepage.fishing=false;
		if(timerOn)
		{
			clearTimeout(time);
			timerOn=false;
		}
		if(!homepage.first)
		{
			time=setTimeout("homepage.first=false; homepage.loadedArr=new Array(); homepage.refreshOne();",homepage.delay);
			timerOn=true;
		}
	},
	play : function()
	{
		var srcElement=this;
		if(this.getAttribute('id').match("broadcasters"))
		{
			var id=parseInt(srcElement.getAttribute('id').replace("top_broadcasters_",""));
			document.location.href = "/"+homepage.topB[id].username;
		}
		else
		{
			if(this.getAttribute('id').match("image_ontop_"))
				srcElement=this.previousSibling;
			var id=parseInt(srcElement.getAttribute('id').replace("image_",""));
			document.location.href = "/watch/"+homepage.tags[id].id;
		}
	},
	refreshOne : function()
	{
		//alert('refresh');
		switch(this.refreshMone)
		{
			case 0: this.showRecent(); break;
			case 1: this.showFeatured(); break;
			case 2: this.showRandom(); break;
		}
		this.refreshMone=(this.refreshMone+1)%3;
	},
	imgLoaded : function(e)
	{
		if(document.all) //IE
			var srcElement=window.event.srcElement; //e is the i from the event decleration
		else
			var srcElement=this;
		homepage.loadedArr[homepage.loadedArr.length]=srcElement;
		if(homepage.first)
		{
			//alert(homepage.loadedArr.length);
			for(var i=0; i<homepage.imgs.length; i++)
				if(homepage.imgs[i]==srcElement)
				{
					//alert(i);
					homepage.imgs[i].style.display="inline";
					homepage.imgs[i].style.marginTop="0px";
					homepage.videoContainers[i].style.marginTop="0px";
					while (homepage.videoContainers[i].firstChild)
						homepage.videoContainers[i].removeChild(homepage.videoContainers[i].firstChild);
					homepage.videoContainers[i].appendChild(homepage.imgs[i]);
					if(homepage.tags[i].isLive==true)
					{
						var img=document.createElement("img");
						img.style.marginTop=-80 + "px";
						img.style.marginLeft=0 + "px";
						img.src='/images/home/live_arrow.png';
						img.onclick = homepage.play;
						img.onmouseover=homepage.fishEye;
						img.onmouseout=homepage.unFishEye;
						img.setAttribute('id',"image_ontop_"+i);
						img.style.cursor='pointer';
						homepage.videoContainers[i].appendChild(img);
					}
					for(var j=0; j<homepage.videoContainers[i].parentNode.childNodes.length; j++)
						if(homepage.videoContainers[i].parentNode.childNodes[j].className=="videoDescription")
						{
							var passed=homepage.tags[i].taken;//=getTimePassed(Date.parse(homepage.tags[i].taken));
							homepage.videoContainers[i].parentNode.childNodes[j].innerHTML="<span class='video_title'>" + homepage.tags[i].title + "</span><br /><span class='video_username' onclick=\"document.location='/" + homepage.tags[i].username + "'\">" + homepage.tags[i].username + "</span><br /><span class='video_taken'>" + passed + "</span>";
						}
					//alert(homepage.videoContainers[i])//.getElementsByClassName("videoDescription");
				}
			if(homepage.loadedArr.length==15)
			{
				//alert('15 completed');
				homepage.first=false;
				if(timerOn)
				{
					clearTimeout(time);
					timerOn=false;
				}
				if(!homepage.fishing)
				{
					time=setTimeout("homepage.loadedArr=new Array(); homepage.refreshOne();",homepage.delay);
					timerOn=true;
				}
			}
		}
		else if(homepage.loadedArr.length>=5)
		{
			//alert('dsadsadasdadaddsadsada');
			var start;
			for(var i=0; i<15; i++)
				if(homepage.imgs[i]==homepage.loadedArr[0])
					start=i;
			//homepage.loadedArr=new Array();
			//alert(homepage.speed);
			for(var i=0; i<5; i++)
				setTimeout("homepage.movePic("+(i*(40-homepage.speed)+50)+","+ parseInt((i+parseInt(start/5)*5)) +",100);",(i*(40-homepage.speed)+50));
			if(timerOn)
			{
				clearTimeout(time);
				timerOn=false;
			}
			if(!homepage.fishing)
			{
				time=setTimeout("homepage.loadedArr=new Array(); homepage.refreshOne();",homepage.delay+(4*(40-homepage.speed)+50)*18);
				timerOn=true;
			}
		}
		//else
			//alert(homepage.loadedArr.length);
	},
	movePic :function(timeout, imgId, dest)
	{
		//alert(parseInt(homepage.loadedArr[imgId].style.marginTop));
		//alert(imgId);
		//alert(dest);
		if(parseInt(homepage.videoContainers[imgId].firstChild.style.marginTop)>=dest)
		{
			if(homepage.videoContainers[imgId].firstChild != homepage.imgs[imgId]) //we moved the old ones down, but the new ones are still not there
			{
				while (homepage.videoContainers[imgId].firstChild)
					homepage.videoContainers[imgId].removeChild(homepage.videoContainers[imgId].firstChild);
				homepage.videoContainers[imgId].appendChild(homepage.imgs[imgId]);
				//alert(homepage.imgs[imgId]);
				if(homepage.tags[imgId].isLive==true)
				{
					var img=document.createElement("img");
					img.style.marginTop=-80+"px";
					img.style.marginLeft=0 + "px";
					img.src='/images/home/live_arrow.png';
					img.onclick = homepage.play;
					img.onmouseover=homepage.fishEye;
					img.onmouseout=homepage.unFishEye;
					img.setAttribute('id',"image_ontop_"+imgId);
					img.style.cursor='pointer';
					homepage.videoContainers[imgId].appendChild(img);
				}
				homepage.imgs[imgId].style.display="inline";
				homepage.imgs[imgId].style.marginTop="-80px";
				//alert(homepage.videoContainers[imgId].parentNode.getElementsByClassName);
				for(var i=0; i<homepage.videoContainers[imgId].parentNode.childNodes.length; i++)
					if(homepage.videoContainers[imgId].parentNode.childNodes[i].className=="videoDescription")
					{
						var passed=homepage.tags[imgId].taken;//getTimePassed(Date.parse(homepage.tags[imgId].taken));
						homepage.videoContainers[imgId].parentNode.childNodes[i].innerHTML="<span class='video_title'>" + homepage.tags[imgId].title + "</span><br /><span class='video_username' onclick=\"document.location='/" + homepage.tags[i].username + "'\">" + homepage.tags[imgId].username + "</span><br /><span class='video_taken'>" + passed + "</span>";
					}
				
				setTimeout("homepage.movePic("+timeout+","+ imgId + ",0);",timeout);
			}	
			return;
		}
		//alert(homepage.loadedArr[imgId].previousSibling);
		//alert(homepage.videoContainers[imgId].innerHTML);
		//alert((parseInt(homepage.videoContainers[imgId].getElementsByTagName("img")[0].style.marginTop)+10) + "px");
		homepage.videoContainers[imgId].getElementsByTagName("img")[0].style.marginTop=(parseInt(homepage.videoContainers[imgId].getElementsByTagName("img")[0].style.marginTop)+10) + "px";
		//homepage.loadedArr[imgId].previousSibling.style.marginTop=(parseInt(homepage.loadedArr[imgId].previousSibling.style.marginTop)+10) + "px";
		setTimeout("homepage.movePic("+timeout+","+ imgId + "," + dest+");",timeout);
	}
	
}
function getValue(prop)
{
	prop=parseInt(prop);
	if(!prop)
		prop=0;
	return prop;
}
function hideTooltip(e) //hide broadcasters tooltip
{
	var body=document.getElementsByTagName("body")[0];
	if(!body.onmousemove)
	{
		body.onmousemove=hideTooltip;
	}
	else
	{
		var tooltip=$("tooltipContent");
		if (!e) var e = window.event;
		var posx=0;
		var posy=0;
		if (e.pageX || e.pageY)
		{
			posx = e.pageX;
			posy = e.pageY;
		}
		else if (e.clientX || e.clientY)
		{
			posx = e.clientX + document.documentElement.scrollLeft;
			posy = e.clientY + document.documentElement.scrollTop;
			//alert(e.clientY + " " + getAbsTop(srcElement));
		}
		//$("debug").innerHTML=posy + " " + (getAbsTop(tooltip) + " " + document.documentElement.scrollTop);
		if(posx<0 || posy<0)
			return;
		//alert(posy + " " + getAbsTop(tooltip));
		if(posx<(getAbsLeft(tooltip)-$("tooltipLeft").offsetWidth-10) || posx>(getAbsLeft(tooltip)+tooltip.offsetWidth + $("tooltipRight").offsetWidth+10) || posy<(getAbsTop(tooltip)-10)  || posy>(getAbsTop(tooltip)+tooltip.offsetHeight+10))
		{
			tooltip.style.display='none';
			$("tooltipRight").style.display='none';
			$("tooltipLeft").style.display='none';
			document.getElementsByTagName("body")[0].onmousemove="";
		}
	}
	
}
function showTooltip(e) //show broadcasters tooltip
{
	if(document.all) //IE
		srcElement=window.event.srcElement;
	else
		srcElement=this;
	var id=srcElement.id.replace("top_broadcasters_","");
	var tooltip=$("tooltipContent");

    if((homepage.topB[id].flix0_title).length >13)
    {
            homepage.topB[id].flix0_title=homepage.topB[id].flix0_title.substring(0,11);
            homepage.topB[id].flix0_title=homepage.topB[id].flix0_title+ "..";
    }	
    if((homepage.topB[id].flix1_title).length >13)
    {
            homepage.topB[id].flix1_title=homepage.topB[id].flix1_title.substring(0,11);
            homepage.topB[id].flix1_title=homepage.topB[id].flix1_title+ "..";
    }    
    
    tooltip.innerHTML="<div style='margin-left: -30px;font-size:10pt'><a href='/"+homepage.topB[id].username+"'>" + homepage.topB[id].username + "</a><br />" + homepage.topB[id].countryname + "<br /><span style='color: gray;font-size:8pt'>Recent Flix:</span><div><table><tr><td><img class='tooltipImg' onclick=\"document.location='/watch/" + homepage.topB[id].flix0_id + "'\" src='" + homepage.topB[id].flix0_img + "' \></td><td><span style='color: gray'>&nbsp;&nbsp;<b>" + homepage.topB[id].flix0_title + "</b></span></td></tr></table></div><div style='height: 3px;'></div><div><table><tr><td><img class='tooltipImg' onclick=\"document.location='/watch/" + homepage.topB[id].flix1_id + "'\" src='" + homepage.topB[id].flix1_img + "' \></td><td><span style='color: gray'>&nbsp;&nbsp;<b>" + homepage.topB[id].flix1_title + "</b></span></td></tr></table></div></div>";
	
	tooltip.style.display='';
	//alert(getAbsRight(srcElement));
	tooltip.style.top=(getAbsTop(srcElement)-tooltip.offsetHeight) + 'px'; //position it above the image
	tooltip.style.left=(getAbsLeft(srcElement)- getAbsLeft($("wrapper"))+30) + "px";
	$("tooltipRight").style.top=(getAbsTop(srcElement)-tooltip.offsetHeight) + 'px';
	$("tooltipRight").style.left=(getAbsLeft(srcElement)- getAbsLeft($("wrapper")) + tooltip.offsetWidth+30) + "px";
	$("tooltipRight").style.display='';
	$("tooltipLeft").style.display='';
	$("tooltipLeft").style.top=(getAbsTop(srcElement)-tooltip.offsetHeight) + 'px';
	$("tooltipLeft").style.left=(getAbsLeft(srcElement)- getAbsLeft($("wrapper"))-$("tooltipLeft").offsetWidth+30) + "px";
}
function getAbsTop(element) //instead of getting relative position, it gives absolute position 
{
	var returnValue=0;
	while(element!=null) 
	{
		returnValue+=parseInt(element.offsetTop);
		element=element.offsetParent;
	}
	return returnValue;
}
function getAbsLeft(element) //instead of getting relative position, it gives absolute position 
{
	var returnValue=0;
	while(element!=null) 
	{
		returnValue+=parseInt(element.offsetLeft);
		element=element.offsetParent;
	}
	return returnValue;
}
function broadcasterItem(node) {
	this.id=node.getAttribute('id');
	this.views=node.getAttribute('views');
	this.username=node.getAttribute('username');
	this.countryname=node.getAttribute('countryname');
	this.flix0_id=node.getAttribute('flix0_id');
	this.flix0_img=node.getAttribute('flix0_img');
	this.flix0_views=node.getAttribute('flix0_views');
	this.flix0_title=node.getAttribute('flix0_title');
	this.flix1_id=node.getAttribute('flix1_id');
	this.flix1_img=node.getAttribute('flix1_img');
	this.flix1_views=node.getAttribute('flix1_views');
	this.flix1_title=node.getAttribute('flix1_title');
}
function flixItem(node,isLive) {
	if(isLive) 
	{
		this.id=node.getElementsByTagName("id")[0].firstChild.nodeValue;
		this.isLive=true;
		this.taken="A few seconds ago";
		this.title=node.getElementsByTagName("title")[0].firstChild.nodeValue;
		this.username=node.getElementsByTagName("username")[0].firstChild.nodeValue
		this.imageurl=node.getElementsByTagName("st")[0].firstChild.nodeValue
	}
	else
	{
		this.taken=Common.formatDate(node.getAttribute('taken'));
		
        this.id=node.getAttribute('id');
		this.isLive=(node.getAttribute('isLive')==0 ? false : true);
		this.title=node.getAttribute('title');
		if(this.title.length>15)
		{
			this.title=this.title.substring(0,13);
			this.title=this.title+ "..";
		}
		this.username=node.getAttribute('username');
		this.imageurl=node.getAttribute('imageurl');
	}
}


