//<![CDATA[
// -*- java -*-

var myMarker;
var markers;
var htmls;

function here(){
    return new String(window.top.location);
}

function directory(){
    var h = here();
    return h.split("map")[0];
}

function getQueryVariable(variable) {
  var query = window.top.location.search.substring(1);
  var vars = query.split("&");
  var elements = new Array();
  for (var i = 0; i < vars.length; i++) {
    var pair = vars[i].split("=");
    if (pair[0] == variable) {
      pair.shift();
      pair = pair.join('=');
      elements = elements.concat(pair.split(' '));
    }
  }
  return elements;
}

function init() {
    var box = document.getElementById("box");
    if(!GBrowserIsCompatible()){
        box.className = 'shown';
        box.innerHTML = 'Your browser is not officially supported. We '
        +'currently support the following browsers:</p><ul><li>'
        +'<a href="http://www.mozilla.org/products/firefox/">Firefox</a>'
        +' 0.8+ (Linux, Mac, Windows)</li><li>'
        +'<a href="http://www.microsoft.com/windows/ie/downloads/default.asp">'
        +'IE</a> 5.5+ (Windows)</li><li>'
        +'<a href="http://www.mozilla.org/products/mozilla1.x/">'
        +'Mozilla</a> 1.4+ (Linux, Mac, Windows)</li><li>'
        +'<a href="http://channels.netscape.com/ns/browsers/download.jsp">'
        +'Netscape</a> 7.1+ (Linux, Mac, Windows)</li><li>'
        +'<a href="http://www.apple.com/safari/download">'
        +'Safari</a> 1.2.4+ (Mac)</li>'
        +'<li><a href="http://www.opera.com/download/">'
        +'Opera</a> 7.5+ (Linux, Mac, Windows)</li></ul>'
        +'<p>We recommend you download one of the browsers above';
    } else {
        box.className = 'shown';

        var map = new GMap(document.getElementById("map"));
        document.theMap = map;
        map.addControl(new GLargeMapControl());
        var zoom = parseInt(getQueryVariable("zoom")[0]);
        var locating = getQueryVariable("geocodeurl").length > 0;
        if (isNaN(zoom)) {
            if (locating) {
                zoom = 1;
            } else {
                zoom = 8;
            }
        }
        var centerPoint = validCenterPoint();
        map.centerAndZoom(centerPoint, zoom);
//         The registerKeyHandlers function has been disabled by google guys now
//         map.registerKeyHandlers(window);
        var bus = getQueryVariable("bus");
        if (bus.length > 0){
            var firstLocating = getQueryVariable("firstLocating").length > 0;
            if (firstLocating) {
                locatingInit(centerPoint,true);
            }else{
                showBusiness(bus,centerPoint);
            }
        }else{
            var searchResult = getQueryVariable("method");
            if (searchResult.length > 0){
                getAndShowResults(searchResult);
            }
        }
    }
    return;
}

function validCenterPoint(){
    var latitude = parseFloat(getQueryVariable("lat")[0]);
    var longitude = parseFloat(getQueryVariable("long")[0]);
    if( isNaN(longitude) || latitude <= 1 || isNaN(longitude) || longitude >= -1){
        lat =  33.74862563707713; //33.748893;
        lng =  -84.39059436321259; //-84.388733;
    }
    return new GPoint(longitude, latitude)
}

function showBusiness(itemId,centerPoint){
    getAndShowResults(NaN,directory()+'members/'+itemId+'/xmlForMap',centerPoint)
}

function resetGlobals(){
    htmls = new Array();
    markers = new Array();
}

function setBusy(busy) {
    var mapdiv = document.getElementById("map");
    if (busy) {
        var msgDiv = document.getElementById("message");
        msgDiv.className = 'hidden';
        mapdiv.style.cursor = 'wait';
    } else {
        mapdiv.style.cursor = 'auto';
    }
}

function getAndShowResults(searchResult,url,displayPointId){
/* If the parameter url is not given (NaN), the xml will be asked to the
   searchMethod in searchResult, otherwise, url will be used
   If displayPointId is given (not NaN) and is a pointid of a marker created,
   then the market info window will be showed */
    try {
        setBusy(1);
        resetGlobals();
        document.theMap.clearOverlays();
        var request = GXmlHttp.create();
        if(url == null){
            url = directory()+searchResult+'?map=True'+searchParams(searchResult);
        }
        request.open("GET", url, true);
        request.onreadystatechange = function() {
            try {
                if (request.readyState == 4) {
                    if (request.status == 200) {
                        var xmlDoc = request.responseXML;
                        var kind = "business";
                        var xmlmarkers = xmlDoc.documentElement.getElementsByTagName(kind);
                        for(var k=0; k < xmlmarkers.length; k++){
                            createMarker(xmlmarkers[k],kind);
                            }
                            if (displayPointId != null && markers[displayPointId]!=null){
                                                        var mode = getQueryVariable("mode");
                                if(mode=="locating"){
                                    locatingInit(displayPointId);
                                }else{
                                    markers[displayPointId].openInfoWindowHtml(
                                                getInfoWindow(displayPointId,0)
                                    );
                                }
                            }
                    }
                    setBusy(0);
                }
            } catch (e) {
                setBusy(0);
                throw (e);
            }
        }
        request.send(null);
    } catch (e) {
        // cleanup
        setBusy(0);
        throw (e)
    }
}

function searchParams(method){
    var args = new Array();
    var value;
    if(method=='simpleSearch'){
        var methodArgs = new Array('bus_entire','code','industry','country');
    }else if(method=='simpleSearchOld'){
        var methodArgs = new Array('bus_name','bus_offer_desc');
    }else if(method=='distanceSearch'){
        var methodArgs = new Array('code','distance');
    }else if(method=='searchLastUpdatedSince'){
        var methodArgs = new Array('last_updated');
    }
    var customFields = getQueryVariable("customFields");
    methodArgs = methodArgs.concat(customFields);
    for (i in methodArgs){
        value = getQueryVariable(methodArgs[i]);
        if(value.length > 0){
            args.push(methodArgs[i]+'='+value);
        }
    }
    if(args.length > 0){
        result = '&'+args.join('&');
    }else{
        result = '';
    }
    return result;
}

function createMarker(markerInfo,kind) {
    var latitude = parseFloat(markerInfo.getAttribute("lat"));
    var longitude = parseFloat(markerInfo.getAttribute("long"));
    var itemid = markerInfo.getAttribute('id');
    var point = new GPoint(longitude,latitude);
    var name = markerInfo.getAttribute("name");
    var desc = markerInfo.getAttribute("desc");
    addHtmlAndMarker(itemid,name,desc,point,kind);
}

function addHtmlAndMarker(itemid, name, desc, point, kind) {
    var pointid = point.toString();
    var msg = createInfoWindowText(itemid, name, desc);
    if (!htmls[pointid]) {
/*        var icon = new GIcon(baseIcon);
        if(kind == "needs"){
            icon.image = "http://www.google.com/mapfiles/marker.png";
        }else{
            icon.image = "http://www.google.com/mapfiles/dd-start.png";
        }*/
        var marker = new GMarker(point);
        markers[pointid] = marker;
        htmls[pointid] = new Array();
        htmls[pointid].push(msg);
        GEvent.addListener(marker, "click", function() {
            myMarker = marker;
            //alert(getInfoWindow(pointid,0));
            marker.openInfoWindowHtml(getInfoWindow(pointid,0));
        });
        document.theMap.addOverlay(marker);
    }
    else {
        htmls[pointid].push(msg);
    }
}

function createInfoWindowText(itemid, name, desc){
    var info = ''
            +'<div class="info">'
            +'  <p class="name">'
            +     name
            +'  </p>'
            +'  <p class="desc">'
            +     desc
            +'  </p>'
            +'  <p class="moreinfo">'
            +'    <a class="link" onClick="javascript: return showItem(\''+itemid+'\')">'
            +      'more info'
            +'    </a>'
            +'  </p>'
    return info;
}

function showItem(itemid){
    var url = directory() + 'members/'+itemid;
    window.top.location = url;
    return false;
}

function getInfoWindow(pointid,whichOne){
    var howMany = htmls[pointid].length;
    var msg = htmls[pointid][whichOne];
    var nextOne = '<a class="link" onclick="nextInfoWindow(\'' + pointid + '\', ' + (whichOne+1) + ');return false">next</a> ';
    var prevOne = '<a class="link" onclick="nextInfoWindow(\'' + pointid + '\', ' + (whichOne-1) + ');return false">prev</a> ';

    if(howMany > 1){
        msg += '<br/><br/>';
        if(whichOne > 0){
            msg += prevOne;
        }
        msg += (whichOne+1) +'/'+ howMany + ' ';

        if(whichOne < howMany-1){
            msg += nextOne;
        }
    }
    msg += '</div>';
    return msg;
}

function nextInfoWindow(pointid,whichOne){
    myMarker.openInfoWindowHtml(getInfoWindow(pointid, whichOne));
}

//]]>
