﻿var bcMArr = new Array();
var bcMArrAdded = false;

var currentID = -1;

function BCPub(pubID, pubMarker, mText) {
    this.PubID = pubID;
    this.Marker = pubMarker;
    this.MText = mText;
}

function bcCreateNRMarker(point, mText, colour, addToMap, cityID) {

    var bcIcon = new GIcon(G_DEFAULT_ICON);
    if (colour == 0xff00)
        bcIcon.image = "http://www.google.com/intl/en_us/mapfiles/ms/micons/green.png";
    else if (colour == 0xff)
        bcIcon.image = "http://www.google.com/intl/en_us/mapfiles/ms/micons/blue.png";
    else
        bcIcon.image = "http://www.google.com/intl/en_us/mapfiles/ms/micons/red.png";
    bcIcon.iconSize = new GSize(32, 32);
    markerOptions = { icon: bcIcon };
    var marker = new GMarker(point, markerOptions);


    GEvent.addListener(marker, "click", function() {
        mText = bcParseForCrawl(mText, cityID);
        marker.openInfoWindowHtml(mText);
    });

    bcMArr.push(marker);

    if (addToMap) {
        bcMap.addOverlay(marker);
        bcMArrAdded = true;
    }
    return marker;
}

function bcParseForCrawl(mText, cityID) {

    var where = mText.indexOf('PubID=');
    if (where == -1)
        return mText;

    var pubID = parseInt(mText.substr(where + 6));
    if (isNaN(pubID))
        return mText;

    var bIndex = mText.indexOf('<!-- bc -->');
    if (bIndex != -1) {
        mText = mText.substr(0, bIndex);
    }

    if (BCIsInCookieCrawl(pubID)) {
        mText += "<!-- bc --><br/><a style='display:none;'  href='javascript:;' title='Click to add to this pub to the current pub crawl' onclick='if(BCAddCrawl(" + pubID.toString() + "," + cityID.toString() + ")) bcResetCLink(this);'>[Add To Crawl]</a>";
        mText += "<a  href='javascript:;' title='Click to remove this pubs from your current crawl' onclick='BCRemoveFromCrawl(" + pubID.toString() + "," + cityID.toString() + "); bcResetCLink(this);'>[Remove From Crawl]</a>";
    }
    else {
        mText += "<!-- bc --><br/><a href='javascript:;' title='Click to add to this pub to the current pub crawl' onclick='if(BCAddCrawl(" + pubID.toString() + "," + cityID.toString() + ")) bcResetCLink(this);'>[Add To Crawl]</a>";
        mText += "<a style='display:none;'  href='javascript:;' title='Click to remove this pubs from your current crawl' onclick='BCRemoveFromCrawl(" + pubID.toString() + "," + cityID.toString() + "); bcResetCLink(this);'>[Remove From Crawl]</a>";
    }



    return mText;

}

function bcResetCLink(ctrl) {
    var cStr = ctrl.onclick.toString();
    if (cStr.indexOf('BCRemoveFromCrawl') != -1) {

        //pNode=ctrl.parentNode;
        ctrl.style.display = 'none';

        var sib = ctrl.previousSibling;
        sib.style.display = '';

    }
    else {
        pNode = ctrl.parentNode;
        ctrl.style.display = 'none';

        var sib = ctrl.nextSibling;
        sib.style.display = '';
    }
}

function bcCreatNumberedMarker(pubID, point, mText, markerNumber, addToMap) {

    var bcIcon = new GIcon(G_DEFAULT_ICON);

    bcIcon.image = "./images/marker" + markerNumber + ".png";
    bcIcon.shadow = "./images/shadow.png";
    bcIcon.printImage = "./images/marker" + markerNumber + ".gif";
    bcIcon.mozPrintImage = "./images/marker" + markerNumber + ".gif";
    bcIcon.printShadow = "";

    bcIcon.iconSize = new GSize(32, 32);
    bcIcon.iconAnchor = new GPoint(16, 32);
    bcIcon.shadowSize = new GSize(59, 32);

    markerOptions = { icon: bcIcon };
    var marker = new GMarker(point, markerOptions);


    GEvent.addListener(marker, "click", function() {
        marker.openInfoWindowHtml(mText);
    });

    bcMArr.push(new BCPub(pubID, marker, mText));

    if (addToMap) {
        bcMap.addOverlay(marker);
        bcMArrAdded = true;
    }
    return marker;
}

function bcShowHideMarkers(show) {

    if (bcMArr.length == 0)
        return;

    if (!bcMArrAdded) {
        bcAddArrMarkers();
        return;
    }

    for (var i = 0; i < bcMArr.length; i++) {
        if (show)
            bcMArr[i].show();
        else bcMArr[i].hide();
    }
}

function bcAddArrMarkers() {

    //need to add markers
    for (var i = 0; i < bcMArr.length; i++) {
        map.addOverlay(bcMArr[i]);
    }

    bcMArrAdded = true;
}

function PubOver(pubID) {

    for (var i = 0; i < bcMArr.length; i++) {
        if (bcMArr[i].PubID == pubID) {
            bcMArr[i].Marker.openInfoWindowHtml(bcMArr[i].MText);

            break;
        }
    }
}

function PubOut(pubID) {

    for (var i = 0; i < bcMArr.length; i++) {
        if (bcMArr[i].PubID == pubID) {
            bcMArr[i].Marker.closeInfoWindow();
            break;
        }
    }
}

function setCookie(c_name, value, expiredays) {
    var exdate = new Date();
    exdate.setDate(exdate.getDate() + expiredays);
    document.cookie = c_name + "=" + escape(value) +
    ((expiredays == null) ? "" : ";expires=" + exdate.toGMTString()) +
    ";path=/;"
}

function getCookie(c_name) {
    if (document.cookie.length > 0) {
        c_start = document.cookie.indexOf(c_name + "=");
        if (c_start != -1) {
            c_start = c_start + c_name.length + 1;
            c_end = document.cookie.indexOf(";", c_start);
            if (c_end == -1) c_end = document.cookie.length;
            return unescape(document.cookie.substring(c_start, c_end));
        }
    }
    return "";
}

function deleteCookie(c_name) {
    //not sure this works.
    if (getCookie(c_name)) {
        document.cookie = c_name + "=" +
    ";expires=Thu, 01-Jan-1970 00:00:01 GMT;path=/;";
    }
}

function BCCrawl(pubs, cityID, crawlID) {
    if (pubs == null)
        this.Pubs = new Array();
    else this.Pubs = pubs;
    if (cityID == null)
        this.CityID = -1;
    else this.CityID = cityID;
    if (crawlID == null)
        this.CrawlID = -1;
    else this.CrawlID = crawlID;
}

function BCDataToCrawl(cData) {

    var ids = null;
    var city = -1;
    var crID = -1;

    if (cData != null && cData != "") {

        varDataArr = cData.split(";");

        if (varDataArr != null && varDataArr.length > 0) {
            ids = varDataArr[0].split(".");

            if (ids != null && (ids.length == 1 && isNaN(parseInt(ids[0]))))
                ids = null;
        }

        if (varDataArr != null && varDataArr.length > 1) {
            if (!isNaN(parseInt(varDataArr[1])))
                city = varDataArr[1];
        }

        if (varDataArr != null && varDataArr.length > 2) {
            if (!isNaN(parseInt(varDataArr[2])))
                crID = varDataArr[2];
        }
    }
    return new BCCrawl(ids, city, crID);

}

function BCCrawlToData(crawlOb) {

    var strData = "";

    for (var i = 0; i < crawlOb.Pubs.length; i++) {
        if (i > 0)
            strData += ".";
        strData += crawlOb.Pubs[i];
    }

    strData += ";";
    strData += crawlOb.CityID;
    strData += ";";
    strData += crawlOb.CrawlID;

    return strData;
}

function BCGetCookCrawl() {

    var cData = getCookie("bcCrawl");

    return BCDataToCrawl(cData);
}

function BCAddCrawl(pubID, cityID, ctrl) {

    var crawl = BCGetCookCrawl();
    if (crawl.Pubs.length > 0 && crawl.CityID != -1 && cityID != crawl.CityID) {
        alert('You currently have pub(s) from another city in the current crawl, crawls must be in one city only.\r\nUse \'Start New Crawl\' (in right hand column) to remove all pubs from the current crawl and start a new crawl for this city.');
        return false;
    }
    crawl.CityID = cityID;

    //check if its there already
    for (var i = 0; i < crawl.Pubs.length; i++) {
        if (crawl.Pubs[i] == pubID) {
            return true;
        }
    }

    crawl.Pubs.push(pubID);
    BCSetCrawlCook(crawl);
    BCSetCrawlCountVal(crawl.Pubs.length);
    return true;
}

function BCRemoveFromCrawl(pubID, ctrl) {

    var newData = [];
    var crawl = BCGetCookCrawl();

    for (var i = 0; i < crawl.Pubs.length; i++) {
        if (crawl.Pubs[i] == pubID) {
            continue;
        }
        newData.push(crawl.Pubs[i]);
    }

    crawl.Pubs = newData;
    BCSetCrawlCook(crawl);
    BCSetCrawlCountVal(crawl.Pubs.length);

}

function BCSetCrawlCook(crawl) {
    setCookie("bcCrawl", BCCrawlToData(crawl), 10);
}

function BCIsInCookieCrawl(pubID) {

    var crawl = BCGetCookCrawl();

    for (var i = 0; i < crawl.Pubs.length; i++) {
        if (crawl.Pubs[i] == pubID) {
            return true;
        }
    }
    return false;
}

function BCClearCookCrawl() {
    if (!confirm('Starting a new crawl will clear all pubs from the current crawl.\r\nIf you haven\'t already saved the current crawl you can do so by clicking \'Your Crawl\' then \'Save\'.\r\nContinue?'))
        return;
    setCookie("bcCrawl", ";;", 10);
    BCSetCrawlCountVal(0);
}

function BCSetCrawlCount() {
    var crawl = BCGetCookCrawl();
    BCSetCrawlCountVal(crawl.Pubs.length);
}

function BCSetCrawlCountVal(val) {

    document.getElementById('SPCrawlCount').innerHTML = val;
    if (val == 1)
        document.getElementById('SPCrawlPlural').innerHTML = '';
    else document.getElementById('SPCrawlPlural').innerHTML = 's';

    if (val == 0) {
        document.getElementById('LKClearCrawl').style.display = 'none';
        document.getElementById('SPAddPubs').innerHTML = 'Add pubs!';
    }
    else {
        document.getElementById('LKClearCrawl').style.display = '';
        document.getElementById('SPAddPubs').innerHTML = '';
    }
}

function GetFinderParam(bcMap) {

    try {
        return '?LT=' + bcMap.getCenter().lat().toString() + '&LG=' + bcMap.getCenter().lng().toString() + '&ZM=' + bcMap.getZoom().toString();
    }
    catch (e) {
        return '';
    }
}

var gdir;
function ShowRoute() {

    document.getElementById('spRoute').innerHTML = 'Processing...';
    gdir = new GDirections(undefined, document.getElementById("wDirTxt"));
    GEvent.addListener(gdir, "load", onGDirectionsLoad);
    GEvent.addListener(gdir, "error", handleErrors);

    var mArr = new Array();
    for (var i = 0; i < bcMArr.length && i < 25; i++) {
        ltlng = bcMArr[i].Marker.getLatLng();
        mArr.push(ltlng.lat() + ', ' + ltlng.lng());

    }
    gdir.loadFromWaypoints(mArr, { locale: 'en_GB', getPolyline: true, travelMode: G_TRAVEL_MODE_WALKING });
}

function handleErrors() {
    document.getElementById('spRoute').innerHTML = 'Error computing route. Please note this is only a beta feature.';

}

function onGDirectionsLoad() {

    bcMap.addOverlay(gdir.getPolyline());
    var bs = gdir.getDistance();
    var strExtr = '';
    document.getElementById('spRoute').innerHTML = 'Route processing complete. Your pub crawl involves a ' + gdir.getDistance().html + ' (' + gdir.getDistance().meters + ' metres) walk.';
    if (bcMArr.length > 25) {
        document.getElementById('spRoute').innerHTML += '<br/><em>Please note that route processing currently only works for the first 25 pubs in any crawl.</em>';
    }
}

function GetListBoxSelectedValue(selId)
//gets value of selected item (only 1st) in listbox/droplist
{
    var lb = document.getElementById(selId);

    if (lb.selectedIndex == -1)
        return '';

    return lb.options[lb.selectedIndex].value;
}

/*Pub page*/
function createMarker(point, index, pubname, address, postcode) {
    var marker = new GMarker(point);

    // Show this marker's index in the info window when it is clicked
    var html = "<b>" + pubname + "</b><p>" + address + "<p>" + postcode;
    GEvent.addListener(marker, "click", function() {
        marker.openInfoWindowHtml(html);
    });
    return marker;
}
function createNRMarker(point, mText) {

    var blueIcon = new GIcon(G_DEFAULT_ICON);
    blueIcon.image = "http://www.google.com/intl/en_us/mapfiles/ms/micons/blue.png";
    blueIcon.iconSize = new GSize(32, 32);
    markerOptions = { icon: blueIcon };
    var marker = new GMarker(point, markerOptions);

    GEvent.addListener(marker, "click", function() {
        marker.openInfoWindowHtml(mText);
    });

    nrArr.push(marker);

    return marker;
}
/*End pub page*/


