

var map;
var mapData = { 0: {}, 1: {}, 2: {}, 3: {}, 4: {}, 5: {}, 6: {}, 7: {}, 8: {}, 9: {}, 10: {}, 11: {}, 12: {}, 13: {}, 14: {}, 15: {}, 16: {}, 17: {}, 18: {}, 19: {} };
var loopNumber = 0;
var isbns = new Array();
var latitude;
var longitude;
var peopleID = "";
var docID = "";
var lastRead = "0";
var peopleIDs = "";
var docIDs = "";


$(document).ready(function(){
    drawMap();
});

function getNewReadBook(reload) {

    $.ajax({
        type: 'POST',
        dataType: 'json',
        url: 'browse/getLatLong.aspx',
        data: 'peopleIDs=' + peopleIDs + '&docIDs=' + docIDs + '&peopleID=' + peopleID + '&docID=' + docID + '&lastRead=' + lastRead,
        //error: function(error) { alert('an error has occurred' + error) },
        success: function(data) {
            //console.log(data);
            if (data.length > 0)
            {
              //console.log(data[0]);
                var remoteIP = data[0].remoteIP;
                peopleID = data[0].peopleID;
                docID = data[0].docID;
                lastRead = data[0].lastRead;
                coverImage = data[0].coverImage;
                latitude = data[0].latitude;
                longitude = data[0].longitude;
                getMapData(reload, data[0]);
            }
            else
            {
              window.setTimeout('getNewReadBook(false)', requestFrequency);
            }
 /*           
            if (data.remoteIP != "") {
                var remoteIP = data.remoteIP;
                peopleID = data.peopleID;
                docID = data.docID;
                lastRead = data.lastRead;
                coverImage = data.coverImage;
                latitude = data.latitude;
                longitude = data.longitude;
                getMapData(reload, data);

            } else {
                window.setTimeout('getNewReadBook(false)', requestFrequency);
            }
*/            
        }
    });
    }

    function showAddress(remoteIP, reload, data) {
        var geocoder = new GClientGeocoder();
        if (geocoder) {
            geocoder.getLatLng(
                        address,
                        function(point) {
                            if (point) {

                                var latLong = "" + point;
                                var latLongSep = latLong.split(",");
                                latitude = latLongSep[0].substring(1);
                                longitude = latLongSep[1].substring(0, latLongSep[1].length - 1);
                                getMapData(reload, data);
                            }
                        }
            );
        }
    }

    

function getMapData( reload, data ) {

    if (mapData[19].marker != null) {
        mapData[19].marker.infoWindowInstance.remove();
        mapData[19].marker.remove();

        var pos = peopleIDs.indexOf("~") + 1;
        peopleIDs = peopleIDs.substring(pos);
        
        pos = docIDs.indexOf("~") + 1;
        docIDs = docIDs.substring(pos);
    }
	
    mapData[19] = mapData[18];
    mapData[18] = mapData[17];
    mapData[17] = mapData[16];
    mapData[16] = mapData[15];
    mapData[15] = mapData[14];
    mapData[14] = mapData[13];
    mapData[13] = mapData[12];
    mapData[12] = mapData[11];
    mapData[11] = mapData[10];
    mapData[10] = mapData[9];
    mapData[9] = mapData[8];
    mapData[8] = mapData[7];
    mapData[7] = mapData[6];
    mapData[6] = mapData[5];
    mapData[5] = mapData[4];
    mapData[4] = mapData[3];
    mapData[3] = mapData[2];
    mapData[2] = mapData[1];
    mapData[1] = mapData[0];
    mapData[0] = {};
    
    refreshMap(data);
}

function getExclusions( field ) {
    var array = new Array();
    for (var i = 0; i < 20; i++) {
        eval("array.push( mapData[i]."+field+" );");
    }
    return array;
}

function refreshMap(data) {
  
    var num = data.length;

    if (data.id > 0) {
        addMarker( 0, data );
    } else {
        //console.log("data array");
        for (var i = 0; i < num; i++) {
            addMarker( i, data[i] );
        }
    }
    if ('big' == pMapType) {
        redrawMarkers();
    }
    window.clearTimeout();
    loopNumber++;
    if ( loopNumber > maxRequestsPerSession) return;
    window.setTimeout( 'getNewReadBook(true)', requestFrequency );
}

function redrawMarkers() {
    var num = mapData.length;
    for (var j = 0; j < 20; j++) {
        if (mapData[j].marker != null) {
            mapData[j].marker.infoWindowInstance.redraw(true);
        }
    }
}

function addMarker(i, data) {

        peopleIDs += data.peopleID + "~";
        docIDs += data.docID + "~";
        
        mapData[i].address = data.address;
        mapData[i].peopleID = data.peopleID;
        mapData[i].docID = data.docID;
        mapData[i].lastRead = data.lastRead;
        mapData[i].title = data.title;
        mapData[i].Latitude = latitude;
        mapData[i].Longitude = longitude;
        mapData[i].coverImage = data.coverImage;
        mapData[i].timeDiff = data.timeDiff;
        mapData[i].countryName = data.countryName;
        mapData[i].pFlagImage = data.displayName;
        mapData[i].displayName = data.displayName;
        pFlagImage = data.displayName;

        point = createPoint( latitude, longitude );
        html = createHtml(coverImage, pFlagImage, data.title, data.displayName, data.timeDiff, data.docID);
        marker = createMarker(point, html);
        // changes too fast
        //if ( 'big' == pMapType )
        //alert(zoomLevel);
            //map.setCenter(point, zoomLevel);
        
        mapData[i].marker = marker;
}

function drawMap() {
    map = new GMap2( document.getElementById( 'map' ) );
    if ( 'big' == pMapType ) {
        map.addControl( new GSmallMapControl() );
        map.addControl( new GMapTypeControl() );
        map.setCenter( new GLatLng( sStartLat, sStartLng ), zoomLevel );
//        map.disableDragging();

        map.setMapType( G_HYBRID_MAP);

    	map.disableDoubleClickZoom();
        map.disableScrollWheelZoom();
    }

    getNewReadBook( false );
}

function createHtml(pBookImage, pFlagImage, pTitle, pDisplayName, pTimeDiff, pDocID) {
    var html;
    
    if ( 'big' == pMapType ) {
        html = '<span id="GoogleMap">';
        html += '<a target="_blank" href="http://www.scholarvox.com/BookDetails.aspx?type=cyberlibris&DocID=' + pDocID + '"><img src="' + bookImages + pBookImage + '" alt="' + pTitle + '" width="68" class="bookImage" /></a>';
        html += '<span class="orderContent">';
        html += '<table><tr><td><span class="bookTitle">' + pTitle + '</span></td><td valign="top"><span class="location"><img src="' + sImageDir + 'worldflags/' + pFlagImage + '.png" alt="' + pDisplayName + '" class="flag" /></span></td></table/>';
        html += '<span class="map_minutes">' + pTimeDiff + '</span>';
        html += '</span></span>';
    }


    
    return html;
}

function createMarker( pPoint, pHtml ) {
    var tinyIcon = new GIcon();
    tinyIcon.image = sImageDir + 'mm_20_red.png';
    tinyIcon.shadow = sImageDir + 'mm_20_shadow.png';
    tinyIcon.iconSize = new GSize( 12, 20 );
    tinyIcon.shadowSize = new GSize( 22, 20 );
    tinyIcon.iconAnchor = new GPoint( 6, 20 );
    tinyIcon.infoWindowAnchor = new GPoint( 4, 1 );
    mOptions = { icon: tinyIcon };
    var gMarker = new GMarker( pPoint, mOptions );
    fromLatLng = map.fromLatLngToDivPixel( pPoint );
    fromLatLng.x += 80;
    fromLatLng.y -= 70;
    newPoint = map.fromDivPixelToLatLng( fromLatLng );
    if ( 'big' == pMapType ) {
        map.panTo( newPoint );
        map.addOverlay( gMarker );
        if ( gMarker.infoWindowInstance == null ) {
            gMarker.infoWindowInstance = new infoWindow( gMarker, pHtml );
            map.addOverlay( gMarker.infoWindowInstance );
        }
    }

    return gMarker;
}

function createPoint( pLatitude, pLongitude ) {
    return new GLatLng( pLatitude, pLongitude );
}

/*function bigMapOpenBook( pIsbn, pBookUrl ) {
    document.location = '/book/' + pIsbn + '/' + pBookUrl;
}*/

function infoWindow( marker, html, width ) {
    this.html = html;
    this.width = ( width ) ? width + 'px' : 'auto';
    this.marker = marker;
}
infoWindow.prototype = new GOverlay();
infoWindow.prototype.initialize = function( map ) {
    this.map = map;
    var container = document.createElement( 'div' );
    container.setAttribute( 'class', 'container' );
    map.getPane( G_MAP_FLOAT_PANE ).appendChild( container );
    this.container = container;

    var shadow = document.createElement( 'div' );
    shadow.setAttribute( 'class', 'shadowContainer' );
    map.getPane( G_MAP_FLOAT_SHADOW_PANE ).appendChild( shadow );
    this.shadow = shadow;
}
infoWindow.prototype.remove = function() {
    this.container.parentNode.removeChild( this.container );
    this.shadow.parentNode.removeChild( this.shadow );
}
infoWindow.prototype.redraw = function(force) {
    if (!force) return;
    var content = document.createElement('span');
    content.innerHTML = this.html;
    content.setAttribute('class', 'mapBookSurround');
    content.style.margin = '6px 0px 0px 0px';
    content.style.padding = '0';
    content.style.border = '0';
    content.style.width = '208px';
    content.style.height = '108px';
    content.style.display = 'block';
    content.style.position = 'absolute';
    content.style.background = '#fff';
    this.map.getContainer().appendChild(content);
    content.parentNode.removeChild(content);
    var contentWidth = 204;
    var contentHeight = 105;
    var wrapper = document.createElement('div');
    wrapper.setAttribute('class', 'mapSurround4');
    wrapper.appendChild(content);
    var wrapperParts = {
        tl: {},
        t: {},
        tr: {},
        l: {},
        r: {},
        bl: {},
        p: {},
        b: {},
        br: {}
    }
    for (i in wrapperParts) {
        var img = document.createElement('img');
        img.src = sImageDir + 'map_window/' + i + '.png';
        img.alt = '';
        img.className = 'bubbleCorners ' + i;
        wrapper.appendChild(img);
        wrapperParts[i].img = img;
    }
    var pixelLocation = this.map.fromLatLngToDivPixel(this.marker.getPoint());
    this.container.style.position = 'absolute';
    this.container.style.left = (pixelLocation.x - 3) + 'px';
    this.container.style.top = (pixelLocation.y - contentHeight - 25 - this.marker.getIcon().iconSize.height) + 'px';
    this.container.style.display = 'block';
    this.container.appendChild(wrapper);
    var mapNE = this.map.fromLatLngToDivPixel(this.map.getBounds().getNorthEast());
    var panX = 0;
    var panY = 0;
    if (this.container.offsetTop < mapNE.y) {
        panY = mapNE.y - this.container.offsetTop;
    }
    if (this.container.offsetLeft + contentWidth + 10 > mapNE.x) {
        panX = (this.container.offsetLeft + contentWidth + 10) - mapNE.x;
    }
}

window.onunload = GUnload;

