﻿/***************************************************************************************************************************

Bing map api basic operate


***************************************************************************************************************************/

var map = null;


//image 
var icon = "<div style='cursor:default;'><img src=\"images/clr.gif\" style=\"background-position:-882px -331px; background-image:url(images/Microblog/allMBlog.png); width:20px; height:20px;\" alt=\"\" /> </div>";

var InfoIconFont  = "<div id='mData' style='cursor:default;'>" +
                    "<div style='background-image:url(images/Microblog/buttle_top.png);background-repeat:no-repeat;width:410px;height:15px'>" +
                    "</div>" +
                    "<div id='bubble_middle' style='margin-left:-4px; background-image:url(images/Microblog/bubble_middle.png);background-repeat:repeat-y;width:410px;'>";
 var InfoIconBack = " </div>" +
                    "<div style='margin-top:0px;background-image:url(images/Microblog/bubbel_bottom.png);background-repeat: no-repeat;width:410px; height:56px'></div>" +
                    "<div style='position:absolute;top:14px;left:0px; width:11px;height:23px;background-image:url(images/Microblog/buttle_pointer.png);background-repeat: no-repeat;'></div></div>";

function CreateMap(lat, long, zoom) {

    map = new VEMap('myMap');

    //set the longitude latitude
    var LA = new VELatLong(lat, long);
    //set the nav
    map.SetDashboardSize(VEDashboardSize.Tiny);
    //load map
    map.LoadMap(LA, zoom, VEMapStyle.Road, true, VEMapMode.Mode2D, true, 2);
    map.ClearInfoBoxStyles();

}

function SetCenterAndZoom(lat, long, zoom) {
    if (map != null) {
        var LA = new VELatLong(lat, long);
        map.SetCenterAndZoom(LA, zoom);
    }
}

function PanLatLong(lat, long) {
    if (map != null) {
        map.PanToLatLong(new VELatLong(lat, long));
    }
}

function AddPushpin(lat, long, title, Desc) {
    if (map != null) {

        //get VELatLong object
        var LA = new VELatLong(lat, long);
        //create shape
        var shape = new VEShape(VEShapeType.Pushpin, LA);
        //set title
        //shape.SetTitle(title);
        //set description
        //shape.SetDescription(Desc);
        //add shape
        map.AddShape(shape);

        return shape;
    }
}

function AddCustomerPushpin(lat, long, title, inforbox) {
    if (map != null) {

        //get VELatLong object
        var LA = new VELatLong(lat, long);
        //create shape
        var shape = new VEShape(VEShapeType.Pushpin, LA);
        shape.SetCustomIcon(icon);

        //set title
        //shape.SetTitle(title);
        //set description
        //shape.SetDescription(inforbox);
        //add shape
        map.AddShape(shape);

        return shape;
    }
}

function AddCustomerIcoPushpin(lat, long, iconText, title, inforbox) {
    if (map != null) {

        //get VELatLong object
        var LA = new VELatLong(lat, long);
        //create shape
        var shape = new VEShape(VEShapeType.Pushpin, LA);
        shape.SetCustomIcon(iconText);

        //set title
        //shape.SetTitle(title);
        //set description
        //shape.SetDescription(inforbox);
        //add shape
        map.AddShape(shape);

        return shape;
    }
}

function AddCenterShape(html) {
    var shape = null;
    if (map != null) {

        shape = new VEShape(VEShapeType.Pushpin, map.GetCenter());
        //Set the icon
        shape.SetCustomIcon(html);

        //Add the shape the the map
        map.AddShape(shape);
    }

    return shape;
}

function AddInforBox(lat, long, htmlContent) {

    if (map == null)
        return;

    var infor=InfoIconFont+htmlContent+InfoIconBack;
    var shape = AddCustomerIcoPushpin(lat, long, infor, "", "");
 
    return shape;
}

function GetInforLatLong(microBlog) {

    var getContent = microBlog.Content;
    var getHtml = microBlog.GetInfoBox();

    var getLat = microBlog.Latitude;
    var getLong = microBlog.Longtitude;

    var nLat = parseFloat(getLat) + parseFloat(infor_Offset_lat);
    var nLong = parseFloat(getLong) + parseFloat(infor_Offset_long);

    var shape = AddInforBox(nLat, nLong, getHtml);
    return shape;
}

function ShowErrorMessage(msg) {
    if (map != null) {
        map.ShowMessage(msg);
    }
}

function SetInforZIndex(shape) {
    shape.SetZIndex(1010, null);
}

function SetBubbleZIndex(shape) {
    shape.SetZIndex(1000, null);
}

function DeleteShape(shape) {

    if (shape != null) {
        map.DeleteShape(shape);
        shape = null;
    }
}

function DeleteAllShape() {

    map.DeleteAllShapes();
}

/***************************************************************************************************************************

micro-blog start page map control


***************************************************************************************************************************/

var infor_Offset_lat  = 0;
var infor_Offset_long = 0;

var move_Offset_lat   = 0;
var move_Offset_long  = 0;

var display_interval = 5000;
var update_interval = 40000;

var bubble_Count    = 10;
var method_Name     = "SearchMicroBlog";

//wether the hot city is configurable
var is_Configurable = 0;
var is_Attraction   = 0;
var is_Hot          = 0;

var loadingShape    = null;
var loadingShapeArr = new Array();

//define variable
var mBlog_Array   = null;
var nBlog_Array   = null;
var is_Firstload  = 1;
var shapInfo      = null;
var operate       = 0;

var timer_Update  = null;
var timer_Display = null;

var zoom_Value    = 4;

//display the current show item index
var currentIndex  = 0;

// current select hot city
var selCity_Id       = null;
var selCity_Lat      = null;
var selCity_Long     = null;
var selCity_MaxLat   = null;
var selCity_MaxLong  = null;
var selCity_Minlat   = null;
var selCity_MinLong  = null;
var selCity_Zoom     = null;

var travelLogLink    = "";
var faqLink          = "";
var routeLink        = "";
var microblogLink    = "";
var travelLogSrc     = "";
var faqSrc           = "";
var routeSrc         = "";
var microblogSrc     = "";


/*************************************
NAME:   PageLoadMethod

DESCRIPTION:
when the page load 

PARAS:  No Paras

RETURNS: No return

**************************************/
$(document).ready(function () {

    CreateMap(39.88056, 116.407839, zoom_Value);

    SetOffset();
   
    Ajax_Microblog(method_Name, "", "-1", 1, parseInt(bubble_Count), 3, 0);

});

/*************************************
NAME:   MicroBlog Object

DESCRIPTION:
the constructor of the MicroBlog Object

PARAS:  members

RETURNS: No return

**************************************/
function MicroBlog(Content, Latitude, LocationId, LocationName, Longtitude, PublishedTime, Source,
           ThumbnailPic, UserId, UserScreenName, UserProfileImageUrl, LocationTravelogueNumber,
           LocationFAQNumber, LocationRouteNumber, LocationMicroblogNumber) {

    this.Content                  = Content;
    this.Latitude                 = Latitude;
    this.LocationId               = LocationId;
    this.LocationName             = LocationName;
    this.Longtitude               = Longtitude;
    this.PublishedTime            = PublishedTime;
    this.Source                   = Source;
    this.ThumbnailPic             = ThumbnailPic;
    this.UserId                   = UserId;
    this.UserScreenName           = UserScreenName;
    this.UserProfileImageUrl      = UserProfileImageUrl;
    this.LocationTravelogueNumber = LocationTravelogueNumber;
    this.LocationFAQNumber        = LocationFAQNumber;
    this.LocationRouteNumber      = LocationRouteNumber;
    this.LocationMicroblogNumber  = LocationMicroblogNumber,
    this.Shape                    = null;
    this.RealLatLong              = "0";
}




/*************************************
NAME:   getInfoBox

DESCRIPTION:
Get current micro-blog information box style

PARAS:  No Paras

RETURNS: the html style string of the information box

**************************************/
MicroBlog.prototype.GetInfoBox = getInfoBox;
function getInfoBox() {

    var htmlString       = "";
    var userProfileImage = "";

    //judge the user profile
    if (this.UserProfileImageUrl == "") {
        userProfileImage = "images/Microblog/NoPhoto.png";
    }
    else {
        userProfileImage = this.UserProfileImageUrl;
    }
  
    SetBubbleLink(this.LocationId);

    SetBubbleCss(this.LocationTravelogueNumber, this.LocationFAQNumber,
                 this.LocationRouteNumber, this.LocationMicroblogNumber);
    

    //get html string
    var partTop = "<div style='margin-left:23px;margin-right:33px;'>" +
    "<table width=\"100%\" border=\"0px\" style=\"font-size:12px;\">" +
          "<tr>" +
              "<td rowspan=\"3\" style=\"text-align:left;vertical-align:top; width:20%;\"><a href=\"" + this.UserId + "\" target=\"_blank\" ><img  onerror='UserProfileLoadError(this);' title='" + userProfileImage + "' style=\"border: #b7b7b7 1px solid;width:50px;height:50px; \" src=\"" + userProfileImage + "\" alt=\"userprofileImage\" /></a></td>" +
              "<td style='text-align:left;'><a href=\"" + this.UserId + "\" target=\"_blank\"><b><u>" + CutWords(this.UserScreenName, 24) + "</u></b></a>: <span style='color:#676767'>" + ChangeDecrib(this.RealLatLong,this.Content) + "</span> <a href=\"" + this.LocationId + "\"  target=\"_blank\" ><u><b>" + this.LocationName + "</b></u></a></td>" +
          "</tr>" +
          "<tr>" +
             "<td><span style='color:#676767'>" + CutWords(this.Content, 60) + "<span></td>" +
          "</tr>" +
          "<tr>" +
              "<td style=\"text-align:left;\"><span style='color:#676767;'>" + stringToDateTime(this.PublishedTime) + " 来自 </span><a href='" + GetBlogLink(this.Source) + "' target='_blank' ><u>" + GetMicroBlogSource(this.Source) + "</u></a></td>" +
          "</tr>" +
          "<tr>" +
              "<td colspan=\"2\"><div style=\"border-top:1px dashed #cccccc;height:2px;overflow:hidden;width:100%\"></div></td>" +
          "</tr>";

    htmlString += partTop;

    if (this.ThumbnailPic != "" && this.ThumbnailPic!=null) {
        var partMiddle = "<tr>" +
              "<td colspan=\"2\"><a href=\"" + this.ThumbnailPic + "\" target=\"_blank\" ><img onerror='ImageLoadFaild(this);' title='" + this.ThumbnailPic + "' style='border:#b7b7b7 1px solid;' class='bubble_ThumbnailPic' src=\"" + this.ThumbnailPic + "\" alt=\"ThumbnailPic\" /></a></td>" +
          "</tr>";

        htmlString += partMiddle;
    }

    var partButton = "<tr>" +
              "<td colspan=\"2\">" +
               "<ul style=\"list-style:none;margin:0 auto;\">" +

               "<li  style=\"display:inline\"><img align='absmiddle'  src=\"" + travelLogSrc + "\" /><a  href=\"" + travelLogLink + "\" target=\"_blank\"  onclick='BubbleLogging(\"TravelLog\",\"" + this.LocationName + "\");'>游记</a></li>" +
               "<li  style=\"display:inline\"><img align='absmiddle' src=\"" + faqSrc + "\" /><a  href=\"" + faqLink + "\" target=\"_blank\"  onclick='BubbleLogging(\"Faq\",\"" + this.LocationName + "\");'>问答</a></li>" +
               "<li  style=\"display:inline\"><img align='absmiddle' src=\"" + routeSrc + "\"/><a  href=\"" + routeLink + "\" target=\"_blank\"  onclick='BubbleLogging(\"Route\",\"" + this.LocationName + "\");'>线路</a></li>" +
               "<li  style=\"display:inline\"><img align='absmiddle' src=\"" + microblogSrc + "\"/><a  href=\"" + microblogLink + "\" target=\"_blank\" onclick='BubbleLogging(\"Mblog\",\"" + this.LocationName + "\");'>微博</a></li>" +
               "</ul>" +
              "</td>" +
          "</tr>" +
      "</table></div>";

    htmlString += partButton;

    return htmlString;
}

String.prototype.trim = function () {
    return this.replace(/(^[\\s]*)|([\\s]*$)/g, "");
}

function ChangeDecrib(realLatLong, content) {

    if (is_Hot == 0) {
        if ((content.trim()).indexOf("我在") == 0) {
            return "到过";
        }
        else {
            return "提到";
        }
    }
    else {
        if (realLatLong == "1") {
            return "到过";
        }
        else {
            return "提到";
        }
    }
}


function BubbleLogging(type, locationName) {
    if (type == "TravelLog") {
        Log("StartPage.MblogBubble.Travelogue", locationName, "", "");
    }
    if (type == "Faq") {
        Log("StartPage.MblogBubble.Faq",        locationName, "", "");
    }
    if (type == "Route") {
        Log("StartPage.MblogBubble.Route",      locationName, "", "");
    }
    if (type == "Mblog") {
        Log("StartPage.MblogBubble.Mblog",      locationName, "", "");
    }
}


/*************************************
NAME:   SetBubbleCss

DESCRIPTION:
set the style of Bubble of the map link

PARAS:  travelog number, Faq number, Route number, Miroblog number

RETURNS: no return

**************************************/
function SetBubbleCss(LocationTravelogueNumber, LocationFAQNumber,
LocationRouteNumber, LocationMicroblogNumber) {
    if (LocationTravelogueNumber > 0) {
        travelLogSrc = "/images/travelogueC.png";
    }
    else {
        travelLogSrc = "/images/travelogueG.png";
    }

    if (LocationFAQNumber > 0) {
        faqSrc       = "/images/FAQC.png";
    }
    else {
        faqSrc       = "/images/FAQG.png";
    }

    if (LocationRouteNumber > 0) {
        routeSrc     = "/images/routeC.png";
    }
    else {
        routeSrc     = "/images/routeG.png";
    }

    if (LocationMicroblogNumber > 0) {
        microblogSrc = "/images/Microblog/mblogC.png";
    }
    else {
        microblogSrc = "/images/Microblog/mblogG.png";
    }
}

/*************************************
NAME:   SetBubbleLink

DESCRIPTION:
set the link of Bubble of the map

PARAS:  locationID

RETURNS: no return

**************************************/
function SetBubbleLink(locationId) {

    //is not short url
    if (useConciseUrl == 1) {

        //is attraction
        if (locationId >= 60000000) {
            travelLogLink = "/" + locationId + "/1";
            faqLink       = "/" + locationId + "/2";
            routeLink     = "/" + locationId + "/3";
            microblogLink = "/" + locationId + "/4";
        }

        //is city
        else {
            travelLogLink = "/" + locationId + "/2";
            faqLink       = "/" + locationId + "/3";
            routeLink     = "/" + locationId + "/4";
            microblogLink = "/" + locationId + "/6";
        }
    }

    // is long url
    else {

        //is attraction
        if (this.LocationId >= 60000000) {
            travelLogLink = "/city.aspx?q=" + locationId + "&tk=1"
            faqLink       = "/city.aspx?q=" + locationId + "&tk=2"
            routeLink     = "/city.aspx?q=" + locationId + "&tk=3"
            microblogLink = "/city.aspx?q=" + locationId + "&tk=4"
        }

        //is city
        else {
            travelLogLink = "/city.aspx?q=" + locationId + "&tk=2"
            faqLink       = "/city.aspx?q=" + locationId + "&tk=3"
            routeLink     = "/city.aspx?q=" + locationId + "&tk=4"
            microblogLink = "/city.aspx?q=" + locationId + "&tk=6"
        }

    }
}


/*********************************************************************************************/
Array.prototype.del = function (dx) {
    if (isNaN(dx) || dx > this.length) { return false; }
    this.splice(dx, 1);
}

Array.prototype.contains = function (element) {
    for (var i = 0; i < this.length; i++) {
        if (this[i] == element) {
            return true;
        }
    }
    return false;
}


function SetOffset() {
    
    switch (zoom_Value) {
        case 4:
            infor_Offset_lat  = 1.1;
            infor_Offset_long = 1;
            move_Offset_lat   = -6;
            move_Offset_long  = 7;
            break;
        case 11:
            infor_Offset_lat  = 0.011;
            infor_Offset_long = 0.01;
            move_Offset_lat   = -0.045;
            move_Offset_long  = 0.06;
            break;
        case 12:
            infor_Offset_lat  = 0.005;
            infor_Offset_long = 0.004;
            move_Offset_lat   = -0.02;
            move_Offset_long  = 0.028;
            break;
    };
}

var ajaxRequest = null;

function Ajax_Microblog(action, query, locationID, pageIndex, itemPerPage, filtering, sorting) {

    ajaxRequest = $.ajax(
    {
        type: 'post',
        url: '../get.aspx?' + new Date().valueOf(),
        data: { "act": action,
            "q": query,
            "locationID": locationID,
            "pageIndex": pageIndex,
            "itemPerPage": itemPerPage,
            "filtering": filtering,
            "sorting": sorting
        },
        dataType: 'json',

        beforeSend: function (XMLHttpRequest) {

            if (is_Firstload) {
                if (ajaxRequest) {
                    ajaxRequest.abort();
                }

                if (loadingShape != null) {
                    DeleteShape(loadingShape);
                    loadingShape = null;
                }
                loadingShape = AddCenterShape("<img src='/images/loading.gif' />");
            }
        },

        success: function (data, textStatus) {

            if (data == null) {
                return;
            }

            //analysis get data
            var microBlogList = eval(data);
            var microBlog_Data = microBlogList.DataList;

            //all data
            if (is_Hot == 0) {
                Set_Cache_All(microBlog_Data);
            }
            //hot city data
            else {
                Set_Cache_Hot(microBlog_Data);
            }
        },

        complete: function (XMLHttpRequest, textStatus) {

            if (XMLHttpRequest.responseText == "") {
                return;
            }

            //delete the loading shape
            DeleteShape(loadingShape);
            loadingShape = null;

            if (is_Firstload == 1) {

                CallBack_Display();
                //set the Recyle Timer start
                SetTimer_Display();

            }
            //set update data timer
            SetTimer_Update();

            is_Firstload = 0;
        },

        error: function (XMLHttpRequest, textStatus, errorThrown) {
            //delete loading shape
            DeleteShape(loadingShape);
            loadingShape = null;
            //show error
            //ShowErrorMessage("加载地图数据失败，请稍后刷新再试！");
        }
    })
}

function SetTimer_Update() {
    timer_Update = window.setTimeout(CallBack_Update, parseInt(update_interval));
}

function CallBack_Update() {

    if (is_Hot == 1) {
        Ajax_Microblog(method_Name, "", selCity_Id, 1, parseInt(bubble_Count), 3, 0);
    }

    else {
        Ajax_Microblog(method_Name, "", "-1", 1, parseInt(bubble_Count), 3, 0);
    }
}

function SetTimer_Display() {
    timer_Display = window.setInterval(CallBack_Display, parseInt(display_interval));
}

function CallBack_Display() {

    if (mBlog_Array.length == null || mBlog_Array.length == 0) {
        return;
    }

    if (currentIndex < mBlog_Array.length) {

        //get current object
        var mblog_Entity = mBlog_Array[currentIndex];

        //get the lat and long of current object
        var lat = mblog_Entity.Latitude;
        var long = mblog_Entity.Longtitude;

        //hide last
        DeleteShape(shapInfo);

        //set offrset 
        var lat = parseFloat(lat)   + parseFloat(move_Offset_lat);
        var long = parseFloat(long) + parseFloat(move_Offset_long);

        //move map
        PanLatLong(lat, long);

        if (operate == 0 || operate == 1) {

            ExcuteDisplay();
        }
        else if (operate == -1) {
            window.setTimeout(ExcuteDisplay, 10);
        }
    }
}

function ExcuteDisplay() {
 
   //set flag display
    operate = 1;

    var inforBoxHtml = (mBlog_Array[currentIndex]).GetInfoBox();
    shapInfo         = GetInforLatLong(mBlog_Array[currentIndex]);

    SetInforZIndex(shapInfo);
    currentIndex++;
    if (currentIndex == mBlog_Array.length) {
        currentIndex = 0;
    }

    //set flag normal
    operate = 0;
}

function Set_Cache_All(microBlog_Data) {
   
    if (is_Firstload == 1) {

        mBlog_Array = new Array();
        for (var i = 0; i < microBlog_Data.length; i++) {
            var temp_MicroBlog = new MicroBlog(microBlog_Data[i].Content,
                                               microBlog_Data[i].Latitude,
                                               microBlog_Data[i].LocationId,
                                               microBlog_Data[i].LocationName,
                                               microBlog_Data[i].Longtitude,
                                               ConvertJSONDateToJSDateObject(microBlog_Data[i].PublishedTime),
                                               microBlog_Data[i].Source,
                                               microBlog_Data[i].ThumbnailPic,
                                               microBlog_Data[i].UserId,
                                               microBlog_Data[i].UserScreenName,
                                               microBlog_Data[i].UserProfileImageUrl,
                                               microBlog_Data[i].LocationTravelogueNumber,
                                               microBlog_Data[i].LocationFAQNumber,
                                               microBlog_Data[i].LocationRouteNumber,
                                               microBlog_Data[i].LocationMicroblogNumber)

            var shape = AddCustomerPushpin(microBlog_Data[i].Latitude, microBlog_Data[i].Longtitude,
            "", "");
            SetBubbleZIndex(shape);

            temp_MicroBlog.Shape = shape;
            mBlog_Array.push(temp_MicroBlog);
        }

    }
    else {
     
        nBlog_Array = new Array();
        for (var i = 0; i < microBlog_Data.length; i++) {
            var temp_MicroBlog = new MicroBlog(microBlog_Data[i].Content,
                                               microBlog_Data[i].Latitude,
                                               microBlog_Data[i].LocationId,
                                               microBlog_Data[i].LocationName,
                                               microBlog_Data[i].Longtitude,
                                               ConvertJSONDateToJSDateObject(microBlog_Data[i].PublishedTime),
                                               microBlog_Data[i].Source,
                                               microBlog_Data[i].ThumbnailPic,
                                               microBlog_Data[i].UserId,
                                               microBlog_Data[i].UserScreenName,
                                               microBlog_Data[i].UserProfileImageUrl,
                                               microBlog_Data[i].LocationTravelogueNumber,
                                               microBlog_Data[i].LocationFAQNumber,
                                               microBlog_Data[i].LocationRouteNumber,
                                               microBlog_Data[i].LocationMicroblogNumber);
            nBlog_Array.push(temp_MicroBlog);
        }

        if (operate == 0 || operate == -1) {
            
            CompareData(mBlog_Array, nBlog_Array);
        }
        else {
            window.setTimeout(CallBackCompareData, 10);
        }
    }
}

function Set_Cache_Hot(microBlog_Data) {

    if (is_Firstload == 1) {
        mBlog_Array = Package_Arr_Hot(microBlog_Data);

        for (var i = 0; i < mBlog_Array.length; i++) {

            var shape = AddCustomerPushpin(mBlog_Array[i].Latitude, mBlog_Array[i].Longtitude,
            "", "");
            SetBubbleZIndex(shape);
            mBlog_Array[i].Shape = shape;
        }
    }
    else {
        nBlog_Array = Package_Arr_Hot(microBlog_Data);

        if (operate == 0 || operate == -1) {

            CompareData(mBlog_Array, nBlog_Array);
        }
        else {
            window.setTimeout(CallBackCompareData, 10);
        }
    }
}

function Package_Arr_Hot(microBlog_Data) {
 
    var temp_Arr=new Array();
    var temp_MicroBlog = null;

     for (var i = 0; i < microBlog_Data.length; i++) {

         //if is Configurable all must be random from the config
         if (is_Configurable == 1) {
          
             var randomLat = fRandom(parseFloat(selCity_Minlat), parseFloat(selCity_MaxLat), 9);
             var randomLong = fRandom(parseFloat(selCity_MinLong), parseFloat(selCity_MaxLong), 9);

             temp_MicroBlog = new MicroBlog(
                                           microBlog_Data[i].Content,
                                           randomLat,
                                           microBlog_Data[i].LocationId,
                                           microBlog_Data[i].LocationName,
                                           randomLong,
                                           ConvertJSONDateToJSDateObject(microBlog_Data[i].PublishedTime),
                                           microBlog_Data[i].Source,
                                           microBlog_Data[i].ThumbnailPic,
                                           microBlog_Data[i].UserId,
                                           microBlog_Data[i].UserScreenName,
                                           microBlog_Data[i].UserProfileImageUrl,
                                           microBlog_Data[i].LocationTravelogueNumber,
                                           microBlog_Data[i].LocationFAQNumber,
                                           microBlog_Data[i].LocationRouteNumber,
                                           microBlog_Data[i].LocationMicroblogNumber);
         }
         //dynamic data from server
         else {

             //if it is attraction all must random
             if (is_Attraction == 1) {

                 var randomLat = fRandom((parseFloat(selCity_Lat) - 0.08), (parseFloat(selCity_Lat) + 0.08), 9);
                 var randomLong = fRandom((parseFloat(selCity_Long) - 0.08), (parseFloat(selCity_Long) + 0.08), 9);
                 temp_MicroBlog = new MicroBlog(
                                           microBlog_Data[i].Content,
                                           randomLat,
                                           microBlog_Data[i].LocationId,
                                           microBlog_Data[i].LocationName,
                                           randomLong,
                                           ConvertJSONDateToJSDateObject(microBlog_Data[i].PublishedTime),
                                           microBlog_Data[i].Source,
                                           microBlog_Data[i].ThumbnailPic,
                                           microBlog_Data[i].UserId,
                                           microBlog_Data[i].UserScreenName,
                                           microBlog_Data[i].UserProfileImageUrl,
                                           microBlog_Data[i].LocationTravelogueNumber,
                                           microBlog_Data[i].LocationFAQNumber,
                                           microBlog_Data[i].LocationRouteNumber,
                                           microBlog_Data[i].LocationMicroblogNumber);
             }
             //if it is city parts of can be random form area 
             else {

                 //if it is the same as the center of the city make a random by a close area
                 if ((microBlog_Data[i].Latitude).toFixed(5) == (parseFloat(selCity_Lat)).toFixed(5) &&
                   (microBlog_Data[i].Longtitude).toFixed(5) == (parseFloat(selCity_Long)).toFixed(5)) {

                     var randomLat = fRandom((parseFloat(selCity_Lat) - 0.08), (parseFloat(selCity_Lat) + 0.08), 9);
                     var randomLong = fRandom((parseFloat(selCity_Long) - 0.08), (parseFloat(selCity_Long) + 0.08), 9);


                     temp_MicroBlog = new MicroBlog(microBlog_Data[i].Content,
                                           randomLat,
                                           microBlog_Data[i].LocationId,
                                           microBlog_Data[i].LocationName,
                                           randomLong,
                                           ConvertJSONDateToJSDateObject(microBlog_Data[i].PublishedTime),
                                           microBlog_Data[i].Source,
                                           microBlog_Data[i].ThumbnailPic,
                                           microBlog_Data[i].UserId,
                                           microBlog_Data[i].UserScreenName,
                                           microBlog_Data[i].UserProfileImageUrl,
                                           microBlog_Data[i].LocationTravelogueNumber,
                                           microBlog_Data[i].LocationFAQNumber,
                                           microBlog_Data[i].LocationRouteNumber,
                                           microBlog_Data[i].LocationMicroblogNumber);

                 }

                 // if it is not the center of the city use real data
                 else {
                     temp_MicroBlog = new MicroBlog(microBlog_Data[i].Content,
                                           microBlog_Data[i].Latitude, 
                                           microBlog_Data[i].LocationId,
                                           microBlog_Data[i].LocationName,
                                           microBlog_Data[i].Longtitude, 
                                           ConvertJSONDateToJSDateObject(microBlog_Data[i].PublishedTime),
                                           microBlog_Data[i].Source,
                                           microBlog_Data[i].ThumbnailPic,
                                           microBlog_Data[i].UserId,
                                           microBlog_Data[i].UserScreenName,
                                           microBlog_Data[i].UserProfileImageUrl,
                                           microBlog_Data[i].LocationTravelogueNumber,
                                           microBlog_Data[i].LocationFAQNumber,
                                           microBlog_Data[i].LocationRouteNumber,
                                           microBlog_Data[i].LocationMicroblogNumber);
                     temp_MicroBlog.RealLatLong = "1";
                 
                 }
             }

         }

         temp_Arr.push(temp_MicroBlog);
     }

     return temp_Arr;
}

function CallBackCompareData() {
   
    CompareData(mBlog_Array, nBlog_Array);
}

function InsertTop(array, value) {
    var newArr = new Array();
    newArr.push(value);

    for (var i = 0; i < array.length; i++) {
        newArr.push(array[i]);
    }

    return newArr;
}

function CompareData(mBlog_Array, nBlog_Arry) {

    operate = -1;

    if (mBlog_Array.length == 0) {
        for (var i = 0; i < nBlog_Arry.length; i++) {
            var temp_MicroBlog = new MicroBlog(nBlog_Arry[i].Content,
                                               nBlog_Arry[i].Latitude,
                                               nBlog_Arry[i].LocationId,
                                               nBlog_Arry[i].LocationName,
                                               nBlog_Arry[i].Longtitude,
                                               nBlog_Arry[i].PublishedTime,
                                               nBlog_Arry[i].Source,
                                               nBlog_Arry[i].ThumbnailPic,
                                               nBlog_Arry[i].UserId,
                                               nBlog_Arry[i].UserScreenName,
                                               nBlog_Arry[i].UserProfileImageUrl,
                                               nBlog_Arry[i].LocationTravelogueNumber,
                                               nBlog_Arry[i].LocationFAQNumber,
                                               nBlog_Arry[i].LocationRouteNumber,
                                               nBlog_Arry[i].LocationMicroblogNumber);
            var inforBoxText = temp_MicroBlog.GetInfoBox();

            var shape = AddCustomerPushpin(temp_MicroBlog.Latitude, temp_MicroBlog.Longtitude,
            "", "");

            SetBubbleZIndex(shape);

            temp_MicroBlog.Shape = shape;

            mBlog_Array.push(temp_MicroBlog);
        }
    }
    else {
        
        var separator = nBlog_Arry.length;
        var lastIndex = nBlog_Arry.length - 1;
        var flag = false;
        for (var i = 0; i < nBlog_Arry.length; i++) {
           if(flag==true)
           {
              break;
           }
           for (var j = 0; j < mBlog_Array.length; j++) {
                if (mBlog_Array[j].Content == nBlog_Arry[i].Content) {
                    flag = true;
                    break;
                }
            }
        }
        for (var p = separator - 1; p >= 0; p--) {

            var delItem = mBlog_Array[lastIndex];
            var delShape = delItem.Shape;
            DeleteShape(delShape);

            mBlog_Array.del(lastIndex);
            //create new item
            var temp_MicroBlog = new MicroBlog(nBlog_Arry[p].Content,
                                               nBlog_Arry[p].Latitude,
                                               nBlog_Arry[p].LocationId,
                                               nBlog_Arry[p].LocationName,
                                               nBlog_Arry[p].Longtitude,
                                               nBlog_Arry[p].PublishedTime,
                                               nBlog_Arry[p].Source,
                                               nBlog_Arry[p].ThumbnailPic,
                                               nBlog_Arry[p].UserId,
                                               nBlog_Arry[p].UserScreenName,
                                               nBlog_Arry[p].UserProfileImageUrl,
                                               nBlog_Arry[p].LocationTravelogueNumber,
                                               nBlog_Arry[p].LocationFAQNumber,
                                               nBlog_Arry[p].LocationRouteNumber,
                                               nBlog_Arry[p].LocationMicroblogNumber);

            var inforBoxText = temp_MicroBlog.GetInfoBox();
            var shape = AddCustomerPushpin(temp_MicroBlog.Latitude, temp_MicroBlog.Longtitude,
            "", "");
            SetBubbleZIndex(shape);
            temp_MicroBlog.Shape = shape;
            
            mBlog_Array.unshift(temp_MicroBlog);

        }
    }
    currentIndex = 0;
    operate = 0;
}


//function CompareData(mBlog_Array, nBlog_Arry) {
//    
//    operate = -1;

//    if (mBlog_Array.length == 0) {
//        for (var i = 0; i < nBlog_Arry.length; i++) {
//            var temp_MicroBlog = new MicroBlog(nBlog_Arry[i].Content,
//                                               nBlog_Arry[i].Latitude,
//                                               nBlog_Arry[i].LocationId,
//                                               nBlog_Arry[i].LocationName,
//                                               nBlog_Arry[i].Longtitude,
//                                               nBlog_Arry[i].PublishedTime,
//                                               nBlog_Arry[i].Source,
//                                               nBlog_Arry[i].ThumbnailPic,
//                                               nBlog_Arry[i].UserId,
//                                               nBlog_Arry[i].UserScreenName,
//                                               nBlog_Arry[i].UserProfileImageUrl,
//                                               nBlog_Arry[i].LocationTravelogueNumber,
//                                               nBlog_Arry[i].LocationFAQNumber,
//                                               nBlog_Arry[i].LocationRouteNumber,
//                                               nBlog_Arry[i].LocationMicroblogNumber);
//            var inforBoxText = temp_MicroBlog.GetInfoBox();

//            var shape = AddCustomerPushpin(temp_MicroBlog.Latitude, temp_MicroBlog.Longtitude,
//            "", "");

//            SetBubbleZIndex(shape);

//            temp_MicroBlog.Shape = shape;

//            mBlog_Array.push(temp_MicroBlog);
//        }
//    }
//    else {

//        for (var i = 0; i < nBlog_Arry.length; i++) {
//            var flag = false;
//            for (var j = 0; j < mBlog_Array.length; j++) {
//                if (mBlog_Array[j].Content == nBlog_Arry[i].Content) {
//                    flag = true;
//                    break;
//                }
//            }

//            if (flag == false) {

//                var delItem = mBlog_Array[0];
//                var delShape = delItem.Shape;
//                DeleteShape(delShape);

//                mBlog_Array.del(0);
//                //create new item
//                var temp_MicroBlog = new MicroBlog(nBlog_Arry[i].Content,
//                                               nBlog_Arry[i].Latitude,
//                                               nBlog_Arry[i].LocationId,
//                                               nBlog_Arry[i].LocationName,
//                                               nBlog_Arry[i].Longtitude,
//                                               nBlog_Arry[i].PublishedTime,
//                                               nBlog_Arry[i].Source,
//                                               nBlog_Arry[i].ThumbnailPic,
//                                               nBlog_Arry[i].UserId,
//                                               nBlog_Arry[i].UserScreenName,
//                                               nBlog_Arry[i].UserProfileImageUrl,
//                                               nBlog_Arry[i].LocationTravelogueNumber,
//                                               nBlog_Arry[i].LocationFAQNumber,
//                                               nBlog_Arry[i].LocationRouteNumber,
//                                               nBlog_Arry[i].LocationMicroblogNumber);

//                var inforBoxText = temp_MicroBlog.GetInfoBox();

//                var shape = AddCustomerPushpin(temp_MicroBlog.Latitude, temp_MicroBlog.Longtitude,
//            "", "");

//                SetBubbleZIndex(shape);

//                temp_MicroBlog.Shape = shape;

//                mBlog_Array.push(temp_MicroBlog);

//            }
//        }
//    }

//    operate = 0;
//}

var tick;
/*************************************
NAME:   SelectCity

DESCRIPTION:
set the select city item style and handle the event

PARAS:  current element

RETURNS:No return

**************************************/
function SelectCity(obj) {

    var isFree = false;
    var d = new Date();
    if (tick != null) {
        if (d.valueOf() - tick > 400) isFree = true;
    } else {
        isFree = true;
    }
    tick = d.valueOf();

    if (isFree) {
        //set select hot city li list
        var liList = document.getElementById("ulSelectCity").getElementsByTagName("li");

        //set select style
        for (var i = 0; i < liList.length; i++) {
            if (liList[i].getAttribute("value") == obj.getAttribute('value')) {
                liList[i].style.backgroundColor = '#2b7ec0'
            }
            else {
                liList[i].style.backgroundColor = '#67bdfd'
            }
        }

        //initialization variable
        is_Firstload = 1;

        if (timer_Display != null) {
            window.clearInterval(timer_Display);
        }
        if (timer_Update != null) {
            window.clearTimeout(timer_Update);
        }

        if (shapInfo != null) {
            DeleteShape(shapInfo);
        }

        operate = 0;
        currentIndex = 0;

        //clean map
        DeleteAllShape();
        if (mBlog_Array != null) {
            mBlog_Array.length = 0;
        }
        if (nBlog_Array != null) {
            nBlog_Array.length = 0;
        }

        DeleteShape(loadingShape);

        //handle the event
        var cityData = obj.getAttribute("value");
        if (cityData != "all") {

            is_Hot = 1;
            if (obj.getAttribute("config") == 0) {
                is_Configurable = 0;
            }
            else {
                is_Configurable = 1;
            }
            HandleCityValue(cityData);
        }
        else {
            //add the logging function of the city tab click
            Log("StartPage.MblogMap.HotCity", "所有", "", "");

            is_Hot = 0;

            SetCenterAndZoom(39.88056, 116.407839, 4);

            //set gloable zoom
            zoom_Value = 4;

            SetOffset();
            //get all micro-blog data
            Ajax_Microblog(method_Name, "", "-1", 1, parseInt(bubble_Count), 3, 0);
        }
    }
}

function HandleCityValue(cityData) {

    var values = cityData.split(',');
    if (values.length < 9)
        return;

    //add the logging function of the city tab click
    Log("StartPage.MblogMap.HotCity", values[0], "", "");

    for (var i = 0; i < values.length; i++) {
        selCity_Id      = values[1];
        selCity_Lat     = values[2];
        selCity_Long    = values[3];
        selCity_MaxLat  = values[4];
        selCity_MaxLong = values[5];
        selCity_Minlat  = values[6];
        selCity_MinLong = values[7];
        selCity_Zoom    = values[8];
    }

    //set gloable zoom value
    zoom_Value = parseInt(selCity_Zoom);
    
    SetCenterAndZoom(selCity_Lat, selCity_Long, selCity_Zoom);

    if (IsAttraction(selCity_Id) == true) {
        is_Attraction = 1;
    }
    else {
        is_Attraction = 0;
    }

    SetOffset();
    //call the ajax to get data
    Ajax_Microblog(method_Name, "", selCity_Id, 1, parseInt(bubble_Count), 3, 0);
}

function CutWords(originalWords, length) {
    if (originalWords == null)
        return "";
    var result = "";
    if (originalWords.length > length) {
        result = originalWords.substring(0, length) + "...";
    }
    else {
        result = originalWords;
    }
    return result;
}

function fRandom(minNum, maxNum, Num) {
   
    if (minNum > maxNum || Num < 0) {
        return 0;
    } else if (Num == 0 || Num == null) {
        return parseFloat(minNum) + (parseFloat(maxNum) - parseFloat(minNum)) * Math.random();
    } else if (Num > 0) {
        return (parseFloat(minNum) + (parseFloat(maxNum) - parseFloat(minNum)) * Math.random()).toFixed(Num);
    }
}



