﻿
var api_search_geotag = "Handler/SearchHandler.aspx?rpp=8&geocode=#geo#&callback=process_search_stream_geotag"
var api_userinfo = "Handler/UserGeoTagHandler.aspx?user_name=#username#&callback=process_user"
var api_twitter_search_stream = "Handler/UserGeoTagHandler.aspx?user_name=#username#&div_id=#divid#&timetoshow=#time#&callback=process_search_stream_second"
var api_twitter_user_stream = "Handler/SearchHandler.aspx?user_name=#username#&count=5&callback=process_user_stream&rpp=5"
var api_foursquare_venues = "Handler/UserGeoTagHandler.aspx?lat=#lattitude#&lng=#longitude#&callback=process_venues"
var domain_name = "http://www.tweetfind.me/";
//var domain_name = "http://localhost:3839/";
var username = ""
var lat = 0
var lng = 0
var user_point;
var map = null;
var geocoder = null;

var search_last_status_id = 0;
var search_block_count = 0;
var search_first_call = true;
var search_timer_obj;
var search_time_out = 40000;

var user_last_status_id = 0;
var user_block_count = 0;
var user_text_geotag = "";
var user_first_call = true;
var user_timer_obj;
var user_time_out = 40000;

var ip_address = "";
var zoom_out = 11;

loadjscssfile_usergeotag(domain_name + "css/themes/base/ui.all.css", "css");


function user_search_geotag_initialize(){            
    $("#dialog-message").dialog("destroy");
    $("#dialog-message").attr("style", "display:block;");
    $("#dialog-message").dialog({
        modal: true,
        height: 700,
        width: 1150,
        resizable: false,
        close: function() {
            try {
                $("#map_nearest_loc").html("");
                $("#map_canvas").html("");
                $("#map_twitter_user_div").html("");
                $("#map_twitter_stream_div").html("");

                search_last_status_id = 0;
                search_block_count = 0;
                clearTimeout(search_timer_obj);
                search_timer_obj = null;
                search_first_call = true;

                user_first_call = true;
                clearTimeout(user_timer_obj);
                user_timer_obj = null;
                user_last_status_id = 0;
                user_block_count = 0;
                $("#dialog-message").attr("style", "display:none;");
                //$("#dialog-message").attr("style", "diaplay:none;");
                //location.reload(true);
            }
            catch (e) { }
        }

    });
    user_geotag_initialize(document.getElementById("srch_txt").value);
}

function user_geotag_initialize(user_name) {
    username = user_name.replace('https://twitter.com/', '').replace('http://twitter.com/', '');    
    if (GBrowserIsCompatible()) {
        map = new GMap2(document.getElementById("map_canvas"));        
        map.setUIToDefault();
        map.setCenter(new GLatLng(0, 0), zoom_out);        
        geocoder = new GClientGeocoder();

    }

    var map_nearest_loc = document.getElementById('map_nearest_loc');
    load_json_geotag(domain_name + api_userinfo,'');    
    
    search_first_call = true;
    search_timer_obj = null;
    search_block_count = 0;
    search_last_status_id = 0;
    var search_div = document.getElementById('map_twitter_stream_div');
    if (search_first_call) {
        search_div.innerHTML = search_div.innerHTML + "<div class='section_header_search'><input type='checkbox' id='chkMove' onclick='setUserPoint()'>Follow Nearest Twitter User's Location on Map</div><div id='twitter_stream_search_div_block' style='margin-left:4px'><div/>";
    }

    user_first_call = true;
    user_timer_obj = null;
    user_block_count = 0;
    user_last_status_id = 0;
    var user_div = document.getElementById('map_twitter_user_div');
    if (user_first_call) {
        user_div.innerHTML = user_div.innerHTML + "<div id='twitter_user_div_block' style='margin-left:3px'><div/>";
    }
    load_json_geotag(domain_name + api_twitter_user_stream, 'user');
    user_timer_obj = window.setInterval("load_json_geotag(domain_name + api_twitter_user_stream, 'user')", user_time_out);
    
}

function setUserPoint() {
    var chk = document.getElementById('chkMove');
    if (chk!=null && !chk.checked) {
        map.setCenter(user_point, zoom_out);
    }
}

//Process user stream
function process_user(feed) {
    if (feed.location == null) {
        $("#map_nearest_loc").html("<div>The user you have searched does not exist.</div>")
        return
    }
    
    $("#map_twitter_background").attr("style", "background:#FFFFFF url('" + feed.profile_background_image_url + "') no-repeat; background-size: 100%;")    
    var address = "";
    if (feed.location.startsWith("ÜT:")) {
        address = feed.location.replace("ÜT: ", "")
    }
    else {
        address = feed.location
    }
    if (geocoder) {
        geocoder.getLatLng(
          address,
          function(point) {
              if (!point) {
                  //alert(feed.location + " not found");
              } else {
                  lat = point.lat();
                  lng = point.lng();
                  user_point = point;
                  map.setCenter(point, zoom_out);
                  var marker = new GMarker(point);
                  map.addOverlay(marker);
                  marker.openInfoWindowHtml("<table><tr><td><img src='" + feed.profile_image_url + "' height='50px' width='50px'></td><td class='map_text_search'><b>Name: </b><a href='http://twitter.com/" + feed.screen_name + "' target='_blank'>" + feed.name + "</a><br><b>Location:</b> " + feed.location + "</td></tr></table>");
                  load_json_geotag(domain_name + api_foursquare_venues, '');
                  load_json_geotag(domain_name + api_search_geotag, 'search');
                  search_timer_obj = window.setInterval("load_json_geotag(domain_name + api_search_geotag, 'search')", search_time_out);
              }
          }
        );
      }
      

}

function process_venues(feed) {
    //Process the feed from call back
    if (feed.groups != null && feed.groups[0].tips.length > 0) {
        var feedLen = 0;
        if (feed.groups[0].tips.length >= 5)
            feedLen = 5
        else
            feedLen = feed.groups[0].tips.length        
        
        for (i = 0; i < feedLen; i++) {            

            try {
                point = new GLatLng(feed.groups[0].tips[i].venue.geolat,
                            feed.groups[0].tips[i].venue.geolong);
                var desc = "<table cellpadding='2' cellspacing='2' ><tr><td valign='top'><img src='" + feed.groups[0].tips[i].user.photo + "' height='40px' width='40px'></td><td valign='top'><span class='map_text'><b>" + feed.groups[0].tips[i].user.firstname + "&nbsp;" + feed.groups[0].tips[i].user.lastname + "</b> checked-in <b>" + feed.groups[0].tips[i].venue.name + "</b><br>" + feed.groups[0].tips[i].venue.address + "<br>" + feed.groups[0].tips[i].venue.city + ",&nbsp;" + feed.groups[0].tips[i].venue.state + "&nbsp;" + feed.groups[0].tips[i].venue.zip + "<br><b>Tip: </b>" + feed.groups[0].tips[i].text + " </span></td></table>";
                var text = "<table cellpadding='2' cellspacing='2' class='foursquare_loc_search'><tr><td valign='top'><img src='" + feed.groups[0].tips[i].user.photo + "' height='40px' width='40px'></td><td valign='top'><span class='near_loc_text'><b>" + feed.groups[0].tips[i].user.firstname + "&nbsp;" + feed.groups[0].tips[i].user.lastname + "</b> checked-in <b>" + feed.groups[0].tips[i].venue.name + "</b><br>" + feed.groups[0].tips[i].venue.address + "<br>" + feed.groups[0].tips[i].venue.city + ",&nbsp;" + feed.groups[0].tips[i].venue.state + "&nbsp;" + feed.groups[0].tips[i].venue.zip + "<br><b>Tip: </b>" + feed.groups[0].tips[i].text + "</span></td></table></br>";
                desc = desc.replace("undefined", "")
                text = text.replace("undefined", "")

                map.addOverlay(createMarker(point, desc, text, i));
            }
            catch (Error) {
            }
        }    
    }
    
}


var baseIcon = new GIcon(G_DEFAULT_ICON);
baseIcon.shadow = "http://www.google.com/mapfiles/shadow50.png";
baseIcon.iconSize = new GSize(20, 34);
baseIcon.shadowSize = new GSize(37, 34);
baseIcon.iconAnchor = new GPoint(9, 34);
baseIcon.infoWindowAnchor = new GPoint(9, 2);

function createMarker(point, description,text, index) {
    // Create a lettered icon for this point using our icon class
    var letter = String.fromCharCode("A".charCodeAt(0) + index);
    var letteredIcon = new GIcon(baseIcon);
    letteredIcon.image = "http://www.google.com/mapfiles/marker" + letter + ".png";

    // Set up our GMarkerOptions object
    markerOptions = { icon: letteredIcon };
    var marker = new GMarker(point, markerOptions);

    GEvent.addListener(marker, "click", function() {
    marker.openInfoWindowHtml(description);
});

document.getElementById("map_nearest_loc").innerHTML = document.getElementById("map_nearest_loc").innerHTML + "<table border='0' cellspacing='1' cellpadding='2'><tr><td valign='top' align='center'><img src='" + "http://www.google.com/mapfiles/marker" + letter + ".png" + "'></td><td>" + text + "</td></tr></table>";
    return marker;
}

function createTwitterMarker(lattitude,longitude, text, image) {
    point = new GLatLng(lattitude,longitude);                            
    var letteredIcon = new GIcon(baseIcon);
    letteredIcon.image = image;
    letteredIcon.iconSize = new GSize(30, 30);

    // Set up our GMarkerOptions object
    markerOptions = { icon: letteredIcon };
    var marker = new GMarker(point, markerOptions);

    GEvent.addListener(marker, "click", function() {
    marker.openInfoWindowHtml(text);

});
var chk = document.getElementById('chkMove');
if (chk != null && chk.checked) {
    map.setCenter(point, zoom_out);
}

    return marker;
}


//Process user stream
function process_search_stream_geotag(feed) {

    //Process the feed from call back
    if (feed.results.length > 0) {
        search_last_status_id = feed.results[0].id;
    }

    var container = document.getElementById("twitter_stream_search_div_block");
    var cnt = 0;
    for (i = feed.results.length - 1; i >= 0; i--) {
        search_block_count++;
        cnt++;
        var timetoshow = 4000 * (cnt);
        var divid = "twitter_stream_search_div_block_" + search_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_search(stream_obj), container.childNodes[0]);
        load_json_geotag(domain_name + api_twitter_search_stream.replace("#username#", feed.results[i].from_user).replace("#divid#", divid).replace("#time#", timetoshow), 'search');
    }
    search_first_call = false;

}

//Process user stream
function process_user_stream(feed) {

    //Process the feed from call back
    if (feed.length > 0)
        user_last_status_id = feed[0].id;

    var container = document.getElementById("twitter_user_div_block");
    var cnt = 0;
    for (i = feed.length - 1; i >= 0; i--) {
        user_block_count++;
        cnt++;
        var timetoshow = 4000 * (cnt);
        var divid = "twitter_user_div_block_" + user_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_user(stream_obj), container.childNodes[0]);

        if (!user_first_call)
            window.setTimeout('$("#' + divid +'").fadeIn("slow");', timetoshow);

    }
    user_first_call = false;

}

function process_search_stream_second(feed, divid, timetoshow) {
    var address = "";
    if (feed.location.startsWith("ÜT:")) {
        address = feed.location.replace("ÜT: ", "")
    }
    else {
        address = feed.location
    }
    if (geocoder) {
        geocoder.getLatLng(
          address,
          function(point) {
              if (point) {
                  var text = "<table><tr><td><img src='" + feed.profile_image_url + "' height='50px' width='50px'></td><td class='map_text_search'><b>Name: </b><a href='http://twitter.com/" + feed.screen_name + "' target='_blank'>" + feed.name + "</a><br><b>Location:</b> " + feed.location + "</td></tr></table>";
                  var image = feed.profile_image_url
                  window.setTimeout('map.addOverlay(createTwitterMarker(' + point.lat() + ',' + point.lng() + ',"' + text + '","' + image + '"))', timetoshow);
              }
          }
        );
    }
    window.setTimeout('$("#' + divid + '").fadeIn("slow");', timetoshow);
}

//get block content
function get_block_content_search(stream_obj) {
    //Set the content
    var div = document.createElement("div");
    var dividb = "twitter_stream_search_div_block_" + search_block_count
    var display = "none";

    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_map_table_search2' width='375px'><tr>";
    block = block + "<td rowspan='2' width='65px' valign='top' align='left'><a href='http://twitter.com/" + stream_obj.screen_name + "' target='_blank'><img src='" + stream_obj.profile_image + "' height='48px' width='48px'></a></td>";
    block = block + "<td align='left' valign='top'><span class='twitter_stream_user'>" + stream_obj.screen_name + ": </span><span class='twitter_stream_message'>" + stream_obj.message + "</span></td>";
    block = block + "</tr><tr>";
    block = block + "<td align='left' class='twitter_stream_date'><span>" + stream_obj.created_at + "</span> | <a class='twitter_stream_link' href='http://twitter.com/" + stream_obj.screen_name + "' target='blank'>View User</a></td>";
    block = block + "</tr></table></td></tr><table></div>";
    div.innerHTML = block;
    return div;

}

//get block content
function get_block_content_user(stream_obj) {
    //Set the content
    var div = document.createElement("div");
    var dividb = "twitter_user_div_block_" + user_block_count
    var display = "none";

    if (user_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_map_table' style='width:280px; height:85px'><tr>";
    block = block + "<td rowspan='2' width='52px' valign='top' align='left'><a href='http://twitter.com/" + stream_obj.screen_name + "' target='_blank'><img src='" + stream_obj.profile_image + "' height='48px' width='48px'></a></td>";
    block = block + "<td align='left' valign='top'><span class='twitter_stream_user'>" + stream_obj.screen_name + ": </span><span class='twitter_stream_message'>" + stream_obj.message + "</span></td>";
    block = block + "</tr><tr>";
    block = block + "<td align='left' class='twitter_stream_date'><span>" + stream_obj.created_at + "</span> | <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></td>";
    block = block + "</tr></table></td></tr><table></div>";
    div.innerHTML = block;
    return div;

}

//Load JSON
function load_json_geotag(url, type) {
    url = url.replace("#username#", escape(username));
    url = url.replace("#lattitude#", escape(lat));
    url = url.replace("#longitude#", escape(lng));
    url = url.replace("#geo#", escape(lat + "," + lng + "," + "30km"));
    url = url.replace("#ip_address#", escape(ip_address));

    //set the latest status id
    if (type=='user' && user_last_status_id != 0 )
        url = url + "&since_id=" + user_last_status_id;

    if (type == 'search' && search_last_status_id != 0)
        url = url + "&since_id=" + search_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);
}

String.prototype.startsWith = function(str) {return (this.match("^"+str)==str)}

//Load script dynamically
function loadjscssfile_usergeotag(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)
}

//Get Random mumber
function getRandomNumber() {
    return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1)
}


function preload_image(url) {
    pic1 = new Image(48, 48);
    pic1.src = url;
}

//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;

}


























