
function getMapHandler(lat, lng, zoom, divId) {
    
    var mapHandler = new Object();
    var defaultPath = "/wp-content/themes/ihf/";
    mapHandler.linkMarkers = new Array();
    mapHandler.windowMarkers = new Array();

    function initMap() {
        var map = new GMap2(document.getElementById(divId));
        var center = new GLatLng(lat, lng)
        map.setCenter(center, zoom);
        map.addControl(new GSmallMapControl());
        map.addControl(new GMapTypeControl());
        mapHandler.map = map;
        addLinkMarkers();
        addWindowMarkers();
    }

    function addLinkMarkers() {
        for(var i=0;i<mapHandler.linkMarkers.length;i++) {
            var linkMarker = mapHandler.linkMarkers[i];
            var marker = new GMarker(new GLatLng(linkMarker.lat, linkMarker.lng),{icon : linkMarker.icon, title: linkMarker.title});
            marker.link = linkMarker.link;
            GEvent.addListener(marker, 'click', function() { window.location= this.link; });
            mapHandler.map.addOverlay(marker);

        }
    }
    function addWindowMarkers() {
        for(var i=0;i<mapHandler.windowMarkers.length;i++) {
            var windowMarker = mapHandler.windowMarkers[i];
            var marker = new GMarker(new GLatLng(windowMarker.lat, windowMarker.lng),{icon : windowMarker.icon, title: windowMarker.title});
            marker.html = windowMarker.html;
            GEvent.addListener(marker, 'click', function() { this.openInfoWindowHtml(this.html); });
            windowMarker.gMarker = marker;
            mapHandler.map.addOverlay(marker);

        }
    }

    mapHandler.addLinkMarker = function(lat, lng, link, title, icon) {
        var linkMarker = new Object();
        linkMarker.lat = lat;
        linkMarker.lng = lng;
        linkMarker.link = link;
        linkMarker.title = title;
        linkMarker.icon = icon;
        mapHandler.linkMarkers.push(linkMarker);

    }

    mapHandler.addWindowMarker = function(lat, lng, html, title, icon) {
        var windowMarker = new Object();
        windowMarker.lat = lat;
        windowMarker.lng = lng;
        windowMarker.html = html;
        windowMarker.title = title;
        windowMarker.icon = icon;
        mapHandler.windowMarkers.push(windowMarker);
    }

    mapHandler.openMarker = function(num) {
        var windowMarker = mapHandler.windowMarkers[num];
        windowMarker.gMarker.openInfoWindowHtml(windowMarker.html);
        return false;
    }

    mapHandler.getBlueIcon =function() {
        var icon = new GIcon(copy = G_DEFAULT_ICON, image = defaultPath +  "images/markers/marker_blue.png");
        return icon;
    }

    mapHandler.getCountyIcon = function() {
        var baseIcon = new GIcon();
        baseIcon.shadow = defaultPath + "images/markers/regionShadow.png";
        baseIcon.image = defaultPath + "images/markers/hotel.png";
        baseIcon.shadowSize = new GSize(52, 29);
        baseIcon.iconSize = new GSize(21, 31);
        baseIcon.iconAnchor = new GPoint(9, 34);
        baseIcon.infoWindowAnchor = new GPoint(9, 2);
        baseIcon.infoShadowAnchor = new GPoint(18, 25);
        return baseIcon;

    }

    mapHandler.getHotelIcon = function(number) {
        var icon = new GIcon(copy = G_DEFAULT_ICON, image = defaultPath +  "images/markers/marker" + number + ".png");
        return icon;    
    }

    mapHandler.getHotelHTML = function(name,code,srcRef,link,starRating, addressLine1, addressLine2, nbImages, count) {
        var html = "<table style='font-family: Verdana;' border='0'><tr>";
        html+= "<td style='background: url(" + defaultPath +"images/markers/icon.png); text-align: center; font-weight: bold;' height='33' width='33'>";
        html+= "<a title='This number references to the marker number in map.'>" + count +"</a>";
        html+= "</td>";
        html+= "<td>";
        html+= "&nbsp;<a href='" + link + "' title='Click to open this link in a new window.' target='_blank'>";
        html+= "<b>" + name +"</b>";
        html+= "</a>";
        html+= "</td>";
        html+= "<td width='85'>";
        html+= "&nbsp;<a title='Star Rating'><img src='" +defaultPath + "images/markers/" + starRating + ".gif' border='0'></a>";
        html+= "</td></tr></table>";
        html+= "<table style='font-family: Verdana;'>";
        html+= "<tr><td width='15'></td>";
        html+= "<td colspan='2'>" + addressLine1 +"</td></tr>";
        html+= "<tr><td width='15'></td>";
        html+= "<td colspan='2'>" + addressLine2 +"</td></tr>";
        html+= "<tr><td width='15'></td>";
        html+= "<td width='100'>";
        html+= "<a href='" + link + "' title='Click here to view more about this property' target='_blank'>";
        html+= "<img src='" + defaultPath + "images/markers/btn-readmore.gif' border='0'></a>";
        html+= "</td>";
        html+= "<td width='150'>";
        html+= "<a href='http://www.bookin1.com/html/new_stage1.jsp?id=" + code + srcRef +"&search=newihf2009' title='Click here to check availability and book online' target='_blank'><img src='" +defaultPath +"images/markers/btn-booknow.gif' border='0'></a>";
        html+= "</td></tr></table>";
        if(nbImages>0) {
            html+= "<table>";
            html+="<tr><td height='81' width='15'></td>";
            html+="<td><img src='http://www.irelandin1.com/images/newirelandin1_images/images/hotels/img_" + code +"/1.jpg' alt='' border='0' height='81' width='120' ></td>";
            if(nbImages>=2) {
                html+="<td><img src='http://www.irelandin1.com/images/newirelandin1_images/images/hotels/img_" + code +"/2.jpg' alt=''  border='0' height='81' width='120' ></td>";
                if(nbImages >=3) {
                    html+="</tr><tr><td></td>";
                    html+="<td><img src='http://www.irelandin1.com/images/newirelandin1_images/images/hotels/img_" + code +"/3.jpg' alt=''  border='0' height='81' width='120' ></td>";
                    if(nbImages >= 4) html+="<td><img src='http://www.irelandin1.com/images/newirelandin1_images/images/hotels/img_" + code +"/4.jpg' alt=''  border='0' height='81' width='120' ></td>";
                }
            }
            html+= "</tr></table>";
        }
        return html;
    }

    function setOnLoad() {
        var onload = window.onload;
        if(onload==null) {
            window.onload = initMap;
        } else {
            window.onload = function() {
                onload();
                initMap();
            }
        }
    }

    setOnLoad();
    return mapHandler;

}