﻿//var domain_name = "http://localhost:5823/"
var domain_name = "http://esnube.com/"
var api_search = domain_name + "tweethandler/Search.aspx?q=#query#&rpp=7&callback=process_search_stream"
var api_user = domain_name + "tweethandler/UserTimeline.aspx?user_name=#username#&callback=process_user_stream&count=10"
var api_10trend = domain_name + "tweethandler/twittertrend.aspx?callback=process_10trend&duration=5&trendtype=keyword"
var api_100trend = domain_name + "tweethandler/twittertrend.aspx?callback=process_100trend&duration=2160&trendtype=keyword&trendcount=100"



var last_status_id = 0;
var block_count = 0;
var stream_type = "";
var search_text = "";
var user_text = "";
var first_call = true;
var timer_obj;
var start_stream = false;
var time_out = 28000;

loadjscssfile(domain_name + "LiveStream/style/style.css", "css")




/******************************************************************************
 *  Search and User Stream Code
 ******************************************************************************/
 
//Initialize Twitter stream
function twitter_stream_init(str_type) {
        
        stream_type = str_type;        
        var stream_div= document.getElementById('twitter_stream_div');
        //stream_div.innerHTML = "<span><input class='twitter_stream_button' type='button' onclick=load_stream('normal') id='twitter_stream_btn' value='Go Live'></span> &nbsp; <span><input class='twitter_stream_button' id='twitter_stream_close_btn' type='button' value='Close' onclick='stream_close()' style='display:none'/></span>";
        //load_stream("ondemand");
        load_stream("normal");
}

function stream_close()
{
    reset_btn = document.getElementById('twitter_stream_close_btn');
    
    if(reset_btn.value== 'Close')
    {
        document.getElementById('twitter_stream_div_block').style.display= "none";
        reset_btn.value = "Open";
    }
    else
    {
        document.getElementById('twitter_stream_div_block').style.display= "block";
        reset_btn.value = "Close";
    }
}


//Load user live stream
function load_stream(type){
    var user_div= document.getElementById('twitter_stream_div');
    var text_val= document.getElementById('twitter_stream_text'); 
    //var stream_btn= document.getElementById('twitter_stream_btn');
    //var stream_close_btn= document.getElementById('twitter_stream_close_btn');
    //stream_close_btn.style.display = "";
    
    if(!start_stream){

        if (type == 'normal') {
            start_stream = true;
            //stream_btn.value = "Streaming...";
            //stream_btn.disabled = true;
            //window.setTimeout("document.getElementById('twitter_stream_btn').value='Pause'; document.getElementById('twitter_stream_btn').disabled=false;", time_out);
        }

        if(first_call){        
            user_div.innerHTML = user_div.innerHTML  + "<div id='twitter_stream_div_block'><div/></div>";    
        }
        
        //set the timer for loading api
        if(stream_type == 'user') {
            user_text = text_val.value;
            load_json(api_user);
            if (type == 'normal') {
                timer_obj = window.setInterval("load_json(api_user)", time_out);
            }
        }
            
        if(stream_type == 'search'){
                search_text = text_val.value;
                load_json(api_search);
                if (type == 'normal') {
                    timer_obj = window.setInterval("load_json(api_search)", time_out);
                }
        }
    }   
    else
    {
        start_stream = false; 
        //stream_btn.value = "Pausing...";
        //stream_btn.disabled = true;
        //window.setTimeout("document.getElementById('twitter_stream_btn').value='Go Live'; document.getElementById('twitter_stream_btn').disabled=false;", time_out);
        window.clearInterval(timer_obj);
    }   
    
}

//Process user stream
function process_user_stream(feed){

    //Process the feed from call back
    if(feed.length >0)
        last_status_id = feed[0].id;
        
     var container = document.getElementById("twitter_stream_div_block");
     var cnt=0;
     for (i=feed.length-1; i>=0; i--) {
        block_count++;
        cnt++;
        var timetoshow=4000*(cnt);
        var divid = "twitter_stream_div_block_" + block_count;
        var stream_obj = new Stream_Object(feed[i].user.screen_name, 
                                feed[i].user.profile_image_url, feed[i].text, feed[i].id, feed[i].created_at);
        preload_image(feed[i].user.profile_image_url);   
        container.insertBefore(get_block_content(stream_obj), container.childNodes[0]);        
        if (!first_call) {
            window.setTimeout('fadeInDiv("' + divid + '",1000)', timetoshow);            
        }

    }
    follow_users("twitter_stream_div_block");
    first_call = false;
}

//Process user stream
function process_search_stream(feed){

    //Process the feed from call back
    if(feed.results.length >0)
        last_status_id = feed.results[0].id;       
      
     var container = document.getElementById("twitter_stream_div_block");
     var cnt=0;
     for (i=feed.results.length-1; i>=0; i--) {
        block_count++;
        cnt++;
        var timetoshow=4000*(cnt);
        var divid = "twitter_stream_div_block_" + block_count;
        var stream_obj = new Stream_Object(feed.results[i].from_user, 
                                feed.results[i].profile_image_url, feed.results[i].text, feed.results[i].id, feed.results[i].created_at);
        preload_image(feed.results[i].profile_image_url);
        container.insertBefore(get_block_content(stream_obj), container.childNodes[0]);
        
        if (!first_call) {
            window.setTimeout('fadeInDiv("' + divid + '",1000)', timetoshow);           
        }

    }
    follow_users("twitter_stream_div_block");
    first_call = false; 
             
}


function follow_users(divid) {
//    twttr.anywhere(function(T) {
//    T("#" + divid).hovercards();
//    });
}

//get block content
function get_block_content(stream_obj)
{
    //Set the content
    var div = document.createElement("div");
    var dividb = "twitter_stream_div_block_" + block_count
    var display = "none";
    
    if(first_call)
         display = "block";
    
    var block = "<div style='display:" + display +"' id='" + dividb + "' align='left'><table cellpadding='0' cellspacing='0'><tr><td height='5px'>&nbsp;</td></tr><tr><td>";
    block = block + "<table cellspacing='2' cellpadding='2' class='twitter_stream_table'><tr>";
    block = block + "<td rowspan='2' width='47px' valign='top' align='left'><img src='" + stream_obj.profile_image +"' height='36px' width='36px'></td>";
    block = block + "<td align='left' valign='top' width='150px'><div class='twitter_stream_user'>" + stream_obj.screen_name + ": </div><div class='twitter_stream_message'>" + stream_obj.message + "</div></td>";
    block = block + "</tr><tr>";
    block = block + "<td align='left' width='150px'><div class='twitter_stream_date'>" + stream_obj.created_at + " | <a class='twitter_stream_link' href='http://twitter.com/" + stream_obj.screen_name + "/statuses/" + stream_obj.status_id + "' target='blank'>View Message</a> | <a class='twitter_stream_link' href='http://twitter.com/" + stream_obj.screen_name + "' target='blank'>View User</a> </div></td>";
    block = block + "</tr></table></td></tr><table></div>";    
    div.innerHTML = block; 
    return div;
    
}







/******************************************************************************
 *  Top 10 Trend Stream Code
 ******************************************************************************/


//Initialize Twitter stream
function twitter_top10_init() {
        render_10ui();
        load_json(api_10trend); 
        window.setInterval("load_json(api_10trend)", 4000);      
}

//Render UI
function render_10ui(){
    var container = document.getElementById("twitter_top10_div");
    var block = "<table class='twitter_stream_trend' cellpadding='5' cellspacing='3'>";    
    block += "<tr><td class='twitter_stream_trend_head'>Today's Top 10 Live Twitter Trends</td></tr>"
    for(i=0; i<10; i++){   
        block += "<tr><td class='twitter_stream_trend_hd'>";
        block += "<div id='twitter_top10_div_" + i + "'/>";
        block += "</td></tr>";
    }    
    block += "<tr><td class='twitter_stream_trend_head' onclick=javascript:window.open('http://www.tweetfind.com/Tweenfind_TheTop100LiveTwitterTrends.html') style='cursor:hand'>CLICK HERE To View Today's Top 100 Live Twitter Trends</td></tr></table>";
    container.innerHTML = block;
}


function process_10trend(feed, type){

    feed.trends.sort(sort_callback) 
    feed.trends.sort(function(a,b){return b.count - a.count})
    
    for (i = 0; i < feed.trends.length; i++) {
        var div_id = "twitter_top10_div_" + i;
        var div_container=document.getElementById(div_id); 
        
        if(div_container.childNodes[0]!=null && 
                div_container.childNodes[0].innerText!=feed.trends[i].name){             
            div_container.style.display = "none"           
            div_container.innerHTML = get_10trend_block_content(feed.trends[i], "none")
            //Effect.Appear(div_id, { duration: 0.5 });
            fadeInDiv(div_id,500);
        }  
        else if(div_container.childNodes[0]==null)
        {
                    
            div_container.innerHTML = get_10trend_block_content(feed.trends[i], "none")
            div_container.style.display = "none"
            //Effect.Appear(div_id,{duration:1.0});
            fadeInDiv(div_id, 1000);
        }        
    }
    
}

function get_10trend_block_content(data, display){
    return "<span onclick=javascript:window.open('" + data.url + "') style='cursor:hand;'>" + data.name + "</span>";
}





/******************************************************************************
 *  Top 100 Trend Stream Code
 ******************************************************************************/


//Initialize Twitter stream
function twitter_top100_init() {
        render_100ui();
        load_json(api_100trend); 
        window.setInterval("load_json(api_100trend)", 10000);      
}

//Render UI
function render_100ui(){
    var container = document.getElementById("twitter_top100_div");
    var block = "<table class='twitter_stream_trend_list' cellpadding='3' cellspacing='3'>";    
    block += "<tr><td class='twitter_stream_trend_list_head' >Today's Top Live Twitter Trends</td></tr>"
    for(i=0; i<100; i++){ 
        var rank = i + 1;
        block += "<tr style='display:none'><td width='300' class='twitter_stream_trend_list_hd' >";
        block += "<div id='twitter_top100_div_" + i + "'/>";
        block += "</td></tr>";
    }    
    block += "<tr><td class='twitter_stream_trend_list_head'>&nbsp;</td></tr></table>";
    container.innerHTML = block;
}


function process_100trend(feed, type){
    feed.trends.sort(sort_callback) 
    feed.trends.sort(function(a,b){return b.count - a.count}) 
    for (i = 0; i < feed.trends.length; i++) {
        var div_id = "twitter_top100_div_" + i;
        var div_container=document.getElementById(div_id); 
        var rank = i+1;
        if(div_container.childNodes[0]!=null && 
                div_container.childNodes[0].innerText!= (rank + ". " + feed.trends[i].name)){             
            div_container.style.display = "none"           
            div_container.innerHTML = get_100trend_block_content(feed.trends[i], "none", i+1)
            //Effect.Appear(div_id, { duration: 0.5 });
            fadeInDiv(div_id, 500);
        }  
        else if(div_container.childNodes[0]==null)
        {
            div_container.parentNode.parentNode.style.display = "block";
            div_container.innerHTML = get_100trend_block_content(feed.trends[i], "none", i+1)
            div_container.style.display = "none"
            //Effect.Appear(div_id, { duration: 1.0 });
            fadeInDiv(div_id, 1000);
        }        
    }
    
    for(i=feed.trends.length; i<100; i++)
    {
         var div_id = "twitter_top100_div_" + i;
         var div_container=document.getElementById(div_id);
         div_container.innerHTML = "";
    }
    
}

function get_100trend_block_content(data, display, rank){
    return "<span onclick=javascript:window.open('" + data.url + "') style='cursor:hand;'>" + rank + ". " + data.name + "</span>";
}













/******************************************************************************
 *  Common functions
 ******************************************************************************/

(function($) {
    fadeInDiv = function(divid, duration) {
    $("#" + divid).fadeIn(duration);
    };
})(jQuery);

function preload_image(url)
{
    pic1= new Image(48,48); 
    pic1.src=url; 
}

//Load JSON
function load_json(url) {

    if(stream_type == 'user')
        url = url.replace("#username#", user_text);
    
    if(stream_type == 'search')    
        url = url.replace("#query#", escape(search_text));        
    
    //set the latest status id
    if(last_status_id!=0)
        url = url + "&since_id=" + last_status_id ;    

    var headID = document.getElementsByTagName("head")[0];
    var newScript = document.createElement('script');
    newScript.type = 'text/javascript';
    newScript.src = url //+ "&guid=" + getRandomNumber();
    headID.appendChild(newScript);
 
}

//Get Query String
function get_query_variable(variable) {
    var query = window.location.search.substring(1);
    var vars = query.split("&");
    for (var i = 0; i < vars.length; i++) {
        var pair = vars[i].split("=");
        if (pair[0] == variable) {
            return pair[1];
        }
    }
}

//Get Random mumber
function getRandomNumber() {
    return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1)
}


//Class
function Stream_Object(screen_name, profile_image, message, status_id, created_at) {
    this.screen_name=screen_name;
    this.profile_image=profile_image;
    this.message=message;
    this.status_id=status_id;
    this.created_at=created_at;
    
}

//Load script dynamically
function loadjscssfile(filename, filetype){
 if (filetype=="js"){ //if filename is a external JavaScript file
  var fileref=document.createElement('script')
  fileref.setAttribute("type","text/javascript")
  fileref.setAttribute("src", filename)
 }
 else if (filetype=="css"){ //if filename is an external CSS file
  var fileref=document.createElement("link")
  fileref.setAttribute("rel", "stylesheet")
  fileref.setAttribute("type", "text/css")
  fileref.setAttribute("href", filename)
 }
 if (typeof fileref!="undefined")
  document.getElementsByTagName("head")[0].appendChild(fileref)
}

//replace html with links
function replaceURLWithHTMLLinks(text) {
    var exp = /(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig;
    return text.replace(exp,"<a href='$1' target='_blank'>$1</a>");
}

function replace_searched_term(message, search_term){
    var regex = new RegExp(search_term, "gi");
    return message.replace(regex, boldify)
}

function boldify(m){
    if (m != null && m != "")
        return "<font style='color:#000099;'><b>" + m + "</b></font>";
    else
        return m;
}

function sort_callback(a,b){

	if(a.name == b.name){
			return 0;
		}
	return (a.name < b.name) ? -1 : 1;
}





