var jumpsInterval = 170;
var jumpsLeft = 1;
var jumpsRight = -1;
var numberOfItems = 3;
var INPUT_DEFAULT_VALUE = 'Enter a Topic';
var slideStep = 15;
var slideDelay = 5;

var tbLoad=true;


function Set_Cookie( name, value, expires, path, domain, secure )
{
/* set time, it's in milliseconds */
var today = new Date();
today.setTime( today.getTime() );

/*
if the expires variable is set, make the correct
expires time, the current script below will set
it for x number of days, to make it for hours,
delete * 24, for minutes, delete * 60 * 24
*/
if ( expires )
{
expires = expires * 1000 * 60 * 60 * 24;
}
var expires_date = new Date( today.getTime() + (expires) );

document.cookie = name + "=" +escape( value ) +
( ( expires ) ? ";expires=" + expires_date.toGMTString() : "" ) +
( ( path ) ? ";path=" + path : "" ) +
( ( domain ) ? ";domain=" + domain : "" ) +
( ( secure ) ? ";secure" : "" );
}
	
/* this fixes an issue with the old method, ambiguous values*/
/* with this test document.cookie.indexOf( name + "=" );*/
function Get_Cookie( check_name ) {
	/* first we'll split this cookie up into name/value pairs*/
	/* note: document.cookie only returns name=value, not the other components */
	var a_all_cookies = document.cookie.split( ';' );
	var a_temp_cookie = '';
	var cookie_name = '';
	var cookie_value = '';
	var b_cookie_found = false; /* set boolean t/f default f */

	for ( i = 0; i < a_all_cookies.length; i++ )
	{
		/* now we'll split apart each name=value pair  */
		a_temp_cookie = a_all_cookies[i].split( '=' );


		/* and trim left/right whitespace while we're at it  */
		cookie_name = a_temp_cookie[0].replace(/^\s+|\s+$/g, '');

		/* if the extracted name matches passed check_name  */
		if ( cookie_name == check_name )
		{
			b_cookie_found = true;
			/* we need to handle case where cookie has no value but exists (no = sign, that is):  */
			if ( a_temp_cookie.length > 1 )
			{
				cookie_value = unescape( a_temp_cookie[1].replace(/^\s+|\s+$/g, '') );
			}
			/* note that in cases where cookie is initialized but no value, null is returned  */
			return cookie_value;
			break;
		}
		a_temp_cookie = null;
		cookie_name = '';
	}
	if ( !b_cookie_found )
	{
		return null;
	}
}

function AddTopSiteSearch()
{
try {_gaq.push(['_trackEvent','TopSiteSearchProvider','Add']);} catch(e){}
if (window.external && ("AddSearchProvider" in window.external)) {
	/* Firefox 2 and IE 7, OpenSearch*/
	window.external.AddSearchProvider("http://www.topsite.com/topsite-searchprovider.xml");
} else {
	/* No search engine support (IE 6, Opera, etc).*/
	alert("No search engine support");
}
CloseNote(true);
}

function CloseNote(afterAdd)
{
	if (!afterAdd)
	{
	    try { _gaq.push(['_trackEvent', 'TopSiteSearchProvider', 'Close']); } catch (e) { }
	}
	document.body.removeChild(document.getElementById('ts_spn_div'));
    Set_Cookie( 'ts_spn', '1', 365, '/', '', '' );
}

function AddSearchProviderNote()
{
	if (window.external && ("AddSearchProvider" in window.external)) {
		if (!Get_Cookie('ts_spn'))
		{
			var myDiv = document.createElement("div");
			myDiv.id = 'ts_spn_div';
			document.body.appendChild(myDiv);
			myDiv.innerHTML = 
			'<img style="position: absolute; top: 0px; right: 0px;" alt="Add TopSite Search" title="Add TopSite Search" id="ts_spn" src="/img/sp-note.png" usemap="#ts_spn_map" border="0" />'
			+ '<map name="ts_spn_map" id="ts_spn_map">'
			+ '    <area shape="rect" coords="0,0,232,35" href="javascript:AddTopSiteSearch();" alt="Add TopSite Search" title="Add TopSite Search" />'
			+ '    <area shape="rect" coords="10,36,105,47" href="javascript:CloseNote(false);" alt="Close Note" title="Close Note" />'
			+ '</map>';
		}
	}
}

function input_init(first)
{
    var textBox = document.getElementById('ts-hp-txt');
    if (textBox)
    {
		textBox.value = INPUT_DEFAULT_VALUE;
		textBox.className = 'example';
	    
		if (first)
		{
			textBox.onfocus = input_onfocus;
			textBox.onblur = input_onblur;
			textBox.onkeypress = input_onkeypress;
		}
    }
}
function input_onfocus()
{
	if (!tbLoad)
	{
    var textBox = document.getElementById('ts-hp-txt');
    if (textBox.value == INPUT_DEFAULT_VALUE)
    {
        textBox.value = '';
    }
    textBox.className = '';
    }
}
function input_onkeypress()
{
    tbLoad = false;
    input_onfocus();
}
function input_onblur()
{
    tbLoad = false;

    var textBox = document.getElementById('ts-hp-txt');
    if (textBox.value == '')
    {
        input_init();
    }
}

function scroll_left()
{
	scrollDiv(jumpsLeft,true);
}

function scroll_right()
{
	scrollDiv(jumpsRight,true);
}


function InitTSBoxes()
{
	RandomScroll();
	
	var scrollL = document.getElementById('hp-ts-scroll-l');
	if (scrollL)
	{
		scrollL.onclick = scroll_left;
		scrollL.onmouseover = function(){ if (this.className != 'disabled-l'){this.className = 'over-l';} }
		scrollL.onmouseout = function(){ if (this.className != 'disabled-l'){this.className = 'regular-l';} }
	}
	
	var scrollR = document.getElementById('hp-ts-scroll-r');
	if (scrollR)
	{
		scrollR.onclick = scroll_right;
		scrollR.onmouseover = function(){ if (this.className != 'disabled-r'){this.className = 'over-r';} }
		scrollR.onmouseout = function(){ if (this.className != 'disabled-r'){this.className = 'regular-r';} }
	}
	
	RefreshScrollButtons();
}

function RefreshScrollButtons()
{
	var fullDiv = document.getElementById('hp-ts-full');
	if (fullDiv)
	{
		var leftValue = 0;
		if ((fullDiv.style.left != '') && (fullDiv.style.left != 0))
		{
			leftValue = parseInt(fullDiv.style.left);
		}
		
		var jumpRightInterval = jumpsInterval * jumpsRight;
		var jumpLeftInterval = jumpsInterval * jumpsLeft;
		
		if (inRange(leftValue + jumpRightInterval,fullDiv))
		{
			if (document.getElementById('hp-ts-scroll-r').className == 'disabled-r')
			{
				document.getElementById('hp-ts-scroll-r').className = 'regular-r';
			}
		}
		else
		{
			document.getElementById('hp-ts-scroll-r').className = 'disabled-r';
		}
		
		if (inRange(leftValue + jumpLeftInterval,fullDiv))
		{
			if (document.getElementById('hp-ts-scroll-l').className == 'disabled-l')
			{
				document.getElementById('hp-ts-scroll-l').className = 'regular-l';
			}
		}
		else
		{
			document.getElementById('hp-ts-scroll-l').className = 'disabled-l';
		}
	}
}


function RandomScroll()
{
	var fullDiv = document.getElementById('hp-ts-full');
	if (fullDiv)
	{
		var randIndex = Math.floor(Math.random()*(fullDiv.childNodes.length - numberOfItems + 1));
		scrollDiv(jumpsRight * randIndex,false);
	}
}

function inRange(leftValue, fullDiv)
{
	if ((leftValue <= 0) && (leftValue >= ((fullDiv.childNodes.length - numberOfItems) * jumpsInterval * -1)))
	{
	return true;
	}
	else
	{
	return false;
	}
	
}

var animating = false;
function scrollDiv(jumpDirection,animate)
{
	if (animate && animating)
	{
		return;
	}
	
	var interval = jumpDirection * jumpsInterval;
	var fullDiv = document.getElementById('hp-ts-full');
	var leftValue = 0;
	if ((fullDiv.style.left != '') && (fullDiv.style.left != 0))
	{
		leftValue = parseInt(fullDiv.style.left);
	}
	
	leftValue += interval;
	
	if (inRange(leftValue,fullDiv))
	{
		if (animate)
		{
			animating = true;
			ScrollLeft(jumpsInterval,jumpDirection);
		}
		else
		{
			fullDiv.style.left = leftValue + 'px';
		}
		
	}
	RefreshScrollButtons();
}


function ScrollLeft(jumpsInterval, jumpDirection)
{
	var fullDiv = document.getElementById('hp-ts-full');
	
	if (jumpsInterval <= 0)
	{
		animating = false;
		return;
	}

	var currentSlide = Math.min(slideStep,jumpsInterval);
	var nextJumpInterval = jumpsInterval - currentSlide;
	var interval = jumpDirection * currentSlide;

	var leftValue = 0;
	if ((fullDiv.style.left != '') && (fullDiv.style.left != 0))
	{
		leftValue = parseInt(fullDiv.style.left);
	}
	leftValue += interval;
	fullDiv.style.left = leftValue + 'px';

	if (nextJumpInterval > 0)
	{
		setTimeout('ScrollLeft(' + nextJumpInterval + ',' + jumpDirection + ')',slideDelay);
	}
	else
	{
		animating = false;
		RefreshScrollButtons();
	}
}


function getElementsByStyleClass(className) 
{
	return getElementsByStyleClassFromBase(document,className);
}

function getElementsByStyleClassFromBase(mainElement, className) 
{
	var all = mainElement.all ? mainElement.all : mainElement.getElementsByTagName('*');
	var elements = new Array();
	for (var e = 0; e < all.length; e++)
	{
		var cName = " " + all[e].className + " ";
		if (cName.indexOf(" " + className + " ") != -1)
			elements[elements.length] = all[e];
	}
	return elements;
}

function RolloverImages()
{
	var imgs = getElementsByStyleClass('roll-img');
	for (var e = 0; e < imgs.length; e++)
	{
		var currentImage = imgs[e];
		var regularSrc = currentImage.src;
		var overSrc = currentImage.src.substring(0,currentImage.src.lastIndexOf('.')) + '-o' + currentImage.src.substring(currentImage.src.lastIndexOf('.'));

        currentImage.onmouseout = (function(sss){ 
									return function(event){ this.src=sss; }; 
									})(regularSrc);

        currentImage.onmouseover = (function(sss){ 
									return function(event){ this.src=sss; }; 
									})(overSrc);

        try{
        normal_image = new Image();
		normal_image.src = overSrc;
		} catch(e){}
	}
}

function BindImages()
{
	var imgs = getElementsByStyleClass('r-thumb');

	if (imgs)
	{
		for (var e = 0; e < imgs.length; e++)
		{
			try{
				if (getElementsByStyleClassFromBase(imgs[e].parentNode,'r-lnk')[0].href)
				{
				    imgs[e].onclick = function() { var lnk = getElementsByStyleClassFromBase(this.parentNode, 'r-lnk')[0].href; try { _gaq.push(['_trackPageview', lnk + '?image']); } catch (e) { } document.location = lnk; };
					imgs[e].style.cursor = 'pointer';
				}
			}
			catch(e){}
		}
	}
}

function AddXpiDLInstructions()
{
	var links =  document.getElementsByTagName("a");

	if (links)
	{
		for (var l = 0; l < links.length; l++)
		{
			var check = links[l].href;
			if (check.indexOf('?') > 0)
			{
				check = check.slice(0,check.indexOf('?'));
			}
			
			if (check.substring(check.length-4).toLowerCase() == ".xpi")
			{
				try{    
					if (links[l].addEventListener){
					  links[l].addEventListener("click", DLInstructions, false);
					}
				}catch(e){}
			}
		}
	}
}

function GAOnExternalLinks()
{
	var links = getElementsByStyleClass('ga-lnk');

	if (links)
	{
		for (var l = 0; l < links.length; l++)
		{	
			links[l].onclick = function() { var tUrl = this.href; if (this.id) {tUrl = tUrl + '?' + this.id} try{_gaq.push(['_trackPageview',tUrl]);}catch(e){}};			
		}
	}
}

function ContactUsEvents()
{
try{
	var contactForm = document.getElementById('contactUsForm');
	if (contactForm)
	{
		document.getElementsByName("contactsubmit")[0].onclick = function() { _gaq.push(['_trackEvent','ContactUs','SendClicked']); };
	}
}catch(e){}
try{
	if (document.getElementById('send-msg-success'))
	{
		_gaq.push(['_trackEvent','ContactUs','AfterSend','Success']);
	}
	else if (document.getElementById('send-msg-error'))
	{
		_gaq.push(['_trackEvent','ContactUs','AfterSend','Error']);
	}
}catch(e){}
}

function InitHpSearchBox()
{
	var hpInputDiv = document.getElementById('ts-hp-input-div');
	if (hpInputDiv)
	{
		input_init(true);
	}
	
	var tsSearch = document.getElementById('tsSearch');
	if (tsSearch)
	{
		tsSearch.onsubmit = ValidateSearchBox;		
		tsSearch.sterm.focus();
	}	
}

function ValidateSearchBox()
{
	try{
	var tsSearch = document.getElementById('tsSearch');
	if (tsSearch)
	{
		var searchTerm = tsSearch.sterm.value;
		
		searchTerm = searchTerm.replace(/^\s*/, "").replace(/\s*$/, "");
		
		if ((searchTerm == '') || (searchTerm == INPUT_DEFAULT_VALUE))
		{
			return false;
		}
		
		try{_gaq.push(['_trackPageview','/search?sterm=' + tsSearch.sterm.value]);}catch(e){}
	}	
	}catch(e){}
}

function AddDownloadTriangle()
{
if (/Firefox[\/\s](\d+\.\d+)/.test(navigator.userAgent)){
	var myDiv = document.createElement("div");
	myDiv.id = 'triangle_div';
	document.body.appendChild(myDiv);
	myDiv.innerHTML = "<a id=\"dl-triangle\" class=\"ga-lnk\" title=\"Download TopSite toolbar\" rel=\"nofollow\" href=\"https://addons.mozilla.org/en-US/firefox/downloads/latest/56194/addon-56194-latest.xpi?confirmed=true&amp;src=external-topsites-triangle\"><img style=\"position: fixed; bottom: 0; right: 0;\" alt=\"Download TopSite toolbar\" title=\"Download TopSite toolbar\" src=\"/img/ts-dl-tngl.png\" /></a>";
}
}

function DLInstructions()
{
	var dlText = "";
	dlText += "<div id=\"download_msg\">"
	dlText += "<div style=\"color: white; padding-top: 10px; text-align: center; width: 100%; height: 35px;\"><a style=\"color: white; text-decoration: none; margin-left: 10px; float:left; text-align:center; width: 13px; height: 15px;\" href=\"#\" onclick=\"return CloseDownloadMsg();\">X</a> It's Easy to Install!</div>"
	dlText += "<ol style=\"line-height: 1.5;\">"
	dlText += "<li id=\"step1\">Click Allow</li>"
	dlText += "<li id=\"step2\">Click Install Now</li>"
	dlText += "<li id=\"step3\">After Installing, Restart Firefox</li>"
	dlText += "</ol>"
	dlText += "</div>"
	dlText += "<div id=\"download_overlay\"/>"

	var wrapper = document.createElement("div");
	wrapper.setAttribute("id","dl-insturctions-w");
	wrapper.innerHTML = dlText;
	document.body.appendChild(wrapper);

	HighlightStep();
}

function CloseDownloadMsg()
{
document.body.removeChild(document.getElementById('dl-insturctions-w'));
}

var nextStep = 'step1';

function HighlightStep()
{
    if (nextStep != '')
    {
        document.getElementById(nextStep).style.color='white';
        
        if (nextStep == 'step1')
        {
            document.getElementById('step3').style.color=''; 
            nextStep = 'step2';
        }
        else if (nextStep == 'step2')
        {
            document.getElementById('step1').style.color=''; 
            nextStep = 'step3';
        }
        else
        {
            document.getElementById('step2').style.color='';
            nextStep = 'step1';
        }
        
        setTimeout("HighlightStep()", 2000);
    }
}


function InitResults()
{
	var divs = getElementsByStyleClass('r2-box');
	if (divs)
	{
	for (var e = 0; e < divs.length; e++)
	{
		var currentDiv = divs[e];
		var regularClass = currentDiv.className;
		var overClass = regularClass + ' ' + 'r2-box-o';

        currentDiv.onmouseout = (function(sss){ 
									return function(event){ this.className=sss; }; 
									})(regularClass);

        currentDiv.onmouseover = (function(sss){ 
									return function(event){ this.className=sss; }; 
									})(overClass);
	}
	}
}

function body_onload()
{
	InitTSBoxes();
	RolloverImages();
	BindImages();
	ContactUsEvents();
	InitHpSearchBox();
	InitResults();
	AddSearchProviderNote();
	AddDownloadTriangle();
	AddXpiDLInstructions();
	GAOnExternalLinks();
}

try{    
if (window.addEventListener){
  window.addEventListener("load", body_onload, false);
} else if (window.attachEvent){
  window.attachEvent("onload", body_onload);
}
}catch(e){}


/*<<<<<<<<<<<<<<<<< Handle Vote Clicks >>>>>>>>>>>>>>>*/
function getAjax()
{
var xmlHttp;
try
  {
  xmlHttp=new XMLHttpRequest();
  }
catch (e)
  {
  try
    {
    xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
    }
  catch (e)
    {
    try
      {
      xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
      }
    catch (e)
      {
      return false;
      }
    }
  }
  return xmlHttp;
}

function request(type,arg1,arg2,arg3,arg4)
{
    var xmlHttp = getAjax();
    var requestLink;
    
     switch(type)
    {
        case "vote":
        var site = arg1;
        var position = arg2;
        var topic = arg3;
        var vote = arg4;
        requestLink = "/vote?topic="+topic+"&site="+site+"&v="+vote+"&pos="+position;
        break;
        default:
            return;
    }
    
    xmlHttp.onreadystatechange = function()
    {
        if(xmlHttp.readyState==4)
        {
           handleRequest(type,arg1,arg2,arg3,arg4);
        }
    }


    xmlHttp.open("GET",requestLink,true);
    xmlHttp.send(null);
}

function handleRequest(type,arg1,arg2,arg3,arg4)
{

    switch(type)
    {
        case "vote":
        voteSuccess(arg3,arg4,arg2);
        break;
        default:
            return;
    }
}


function voteSuccess(topic, vote , position )
{
      document.getElementById("IsTopCaption" + position).innerHTML='Thanks for voting';
        if(vote == "true")
        {
            try{_gaq.push(['_trackEvent','Votes','Up',topic]);}catch(e){}
            document.getElementById("ResultButtons" + position).innerHTML = '<div title="Top ' + topic +' Site" class="t-u-s" >&nbsp;</div>';
        }
        else
        {
            try{_gaq.push(['_trackEvent','Votes','Down',topic]);}catch(e){}
            document.getElementById("ResultButtons" + position).innerHTML = '<div title="Not a Top ' + topic + ' Site" class="t-d-s" >&nbsp;</div>';
        }
}

function RefreshCaptcha()
{
    var s=document.getElementById("SuggestCaptchaImage").src;
    var temp = new Array();
    temp = s.split('/');
    var index = temp[temp.length-2];
    var num = parseInt(index);
    num=num+1;
    document.getElementById("SuggestCaptchaImage").src = "/images/" + num + "/captcha.gif";
}

function SuggestNewSite(topic)
{
    var validate = ValidateSuggestion();
    
    if(validate != "ok")
    {
        FinishSuggest(validate);
        return;    
    }

    var xmlHttp = getAjax();
    var params = "topic="+topic+"&site=" + document.getElementById("newSite").value + "&captcha=" + document.getElementById("newSiteCaptcha").value;

    xmlHttp.onreadystatechange=function()
    {
        
        if(xmlHttp.readyState==4)
        {
             FinishSuggest(xmlHttp.responseText);
        }
    }
    
    xmlHttp.open("POST","/suggest",true);
    xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    xmlHttp.setRequestHeader("Content-length", params.length);
    xmlHttp.setRequestHeader("Connection", "close");
    

    xmlHttp.send(params);
}

function ValidateSuggestion()
{
    var siteUrl = document.getElementById("newSite").value;
    var captcha = document.getElementById("newSiteCaptcha").value;
     
    if(siteUrl == "")
        return "Please fill in Site.";
    if(captcha == "")
        return "Wrong Code , please try again.";
        
    return "ok";
}

function FinishSuggest(message)
{

    if(message.indexOf("Wrong Code") != -1)
    {
         document.getElementById("newSiteCaptcha").value ="";
    }
    else if(message.indexOf("fill in Site")!= -1)
         document.getElementById("newSite").value ="";
    else
    {     
         document.getElementById("infoMessage").innerHTML ="";
         document.getElementById("suggestThanks").style.display = "inline";
         setTimeout("NewSuggest()",3000);
         return;
    }
      
    document.getElementById("infoMessage").style.visibility = "visible";
    document.getElementById("infoMessage").innerHTML = message;
}

function NewSuggest()
{
    document.getElementById("suggestThanks").style.display = "none";
    RefreshCaptcha();
    document.getElementById("newSiteCaptcha").value = "";
    document.getElementById("newSite").value = "";
}

function loadTwitterImages()
{
    var tweetImages = document.getElementsByName("TweetImage");
    var i=0;
    for(i=0;i<tweetImages.length;i++)
    {
        tweetImages[i].src = tweetImages[i].title;
    }
}