﻿/* Properties */
var mapLoaded = false;
var mapviewer;
var pan_zoom_widget, map_type_widget, location_widget, overview_widget;
var siteId = getQueryVariable('siteID');
var selectedPostcode = getQueryVariable('postcode');
var zoomFactor = (siteId) ? 14 : 10;
var regionName = "ChilternsRegion";
var regionData;
var searchMarker;
var markers;
var polyline = new Array();
var markerPoints = new Array();
var openMarkerPoints = new Array();
var mapBaseUrl = "/script/map.asp";
var blocker, blocker2;
/* End Properties */

/* On Load - Callback from MM api */
// this uses jQuery DOM Ready to start the map process - Safari and Google Chrome require function apiLoaded() to be used instead as the callback from the MM API
$(function() {
    if (!mapLoaded) {
        mapLoaded = true;
        InitMM();
    }
});
//function apiLoaded() {
//    if (!mapLoaded) {
//        InitMM();
//    }
//}
function InitMM() {
    mapLoaded = true;
    if (MMIsSupportedBrowser()) {
        $.getJSON("/script/region.json",
                function(markerinfo, status) {
                    InitMap('mapviewer');
                    regionData = markerinfo.markers;
                    ProcessJson(regionData);
                    if (selectedPostcode) SearchPostcode(unescape(selectedPostcode).replace(/\+/g, " "));

                    // Zoom being set fires the first update
                    jQuery('input:checkbox.categoriesCheckbox').click(function() {
                        if (siteId > 0) {
                            if (!jQuery("input:checkbox.categoriesCheckbox.current:checked").is('*')) { location.href = GetUpdateUrl("/places.asp"); }
                        }
						UpdateMap();
                    });
                });
    } else {
        alert('Unfortunately your browser is not supported by the Multimap API.');
    }
    // Misc Setup
    if (location.href.indexOf("places") > -1) { jQuery('#mapSearch').submit(submit_SearchPostcode); }
    jQuery('#postcode').click(PostCodeFieldClick);
}
function LoadJsonData(Path) {
    ToggleBlocker(true);
    $.getJSON(Path, JsonCallBack);
}
function JsonCallBack(markerinfo, status){
    ClearMapOverlays();
    ProcessJson(markerinfo.markers);
    ToggleBlocker(false);
}
function ProcessJson(markers) {
    var pointcount = 0;
    DisplayMapReplacementItemGroups(categories);
    for (var i = 0; i < markers.length; i++) {
        if(markers[i]){
            var markerEscapedName = (markers[i].anchor) ? SanitizeName(markers[i].anchor.name) : "";
            var curAnchor = undefined;
            
            if ((markers[i].anchor) && (markers[i].anchor.lat)) { // Create Anchor
                if (markers[i].anchor.lat && markers[i].anchor.lon) {
                    curAnchor = CreateMarker("m__r" + markers[i].id + "_a", markers[i].categories, markers[i].name, markers[i].anchor.title, markers[i].anchor.desc, markers[i].anchor.url, markers[i].anchor.link, markers[i].anchor.lat, markers[i].anchor.lon, undefined, markers[i].id, markers[i].highlight);
                } else {
                    curAnchor = CreateMarker("m__r" + markers[i].id + "_a", markers[i].categories, markers[i].name, markers[i].anchor.title, markers[i].anchor.desc, markers[i].anchor.url, markers[i].anchor.link, undefined, undefined, markers[i].anchor.address, markers[i].id, markers[i].highlight);
                }
                DisplayMapReplacementItems(markers[i].categories, markers[i].id, markers[i].anchor.title);
            }
            if (markers[i].routes) { // Create Polylines
                for (var k = 0; k < markers[i].routes.length; k++) {
                    if (markers[i].routes[k].points) {
                        var points = [];
                        for (var l = 0; l < markers[i].routes[k].points.length; l++) {
                            if (markers[i].routes[k].points[l]) {
                                points.push(new MMLatLon(markers[i].routes[k].points[l].lat, markers[i].routes[k].points[l].lon));
                                pointcount++;
                            }
                        }
                        var id = "m_" + markers[i].id + "_r" + k;
                        var lineColor = (markers[i].highlight == 1) ? "#0000ff" : (markers[i].closed == 1) ? "#ff0000" : "#ff00ff";
                        var fillColor = (markers[i].highlight == 1) ? "#0000ff" : (markers[i].closed == 1) ? "#ff0000" : "#ff00ff";
                        if (points.length > 0) {
                            if (markers[i].closed == 1) {
                                if (markers[i].fill && markers[i].color)
                                    AddPolyline(id, points, markers[i].color, 0.3, 0.3, true, markers[i].fill, markers[i].anchor.url, false, (ShowingPolylines(markerEscapedName) || markers[i].highlight == 1), curAnchor);
                                else if ((markers[i].anchor) && (markers[i].anchor.name == regionName)) {
                                    AddPolyline(id, points, "yellow", 0.3, 0.3, true, "yellow", "", false, (ShowingPolylines(markerEscapedName)), curAnchor);
                                } else
                                    AddPolyline(id, points, lineColor, 0.3, 0.3, true, fillColor, (markers[i].anchor) ? markers[i].anchor.url : "", true, (ShowingPolylines(markerEscapedName) || markers[i].highlight == 1), curAnchor);
                            } else {
                                AddPolyline(id, points, lineColor, 0.5, 1, false, undefined, (markers[i].anchor) ? markers[i].anchor.url : "", true, (ShowingPolylines(markerEscapedName) || markers[i].highlight == 1), curAnchor);
                            }
                        }
                    }
                }
            }
        }
    }
    ProcessedJson();
}
var selectedTooltip = false;
function ProcessedJson(){
    if(!selectedTooltip){
        var marker = GetMarkerByID(siteId);
        if( (marker) && (marker.InfoBox) ){
            if(getQueryVariable("lat")) { 
                ShowTooltip(marker.InfoBox,250,210);
            } else {
                marker.openInfoBox(); 
            }
            selectedTooltip = true
        }
    }
}

/* Initialisation */
function InitMap(eleId) {
    jQuery('#interactiveMapContainer').css({ display: "block" });
    
    mapviewer = MMFactory.createViewer(document.getElementById(eleId));
    reverseDataPrefs();
       
    mapviewer.setZoomFactor(zoomFactor);
    mapviewer.addEventHandler('click', handleClick);
    mapviewer.addEventHandler('changeZoom', viewer_changeZoom);
    mapviewer.addEventHandler('endPan', viewer_endPan);

    mapviewer.addEventHandler('mouseover', mouseEvent);
    mapviewer.addEventHandler('mouseout', mouseEvent);

    SetCentre(lat, lon);

    addPanZoomWidget(false);
    addMapTypeWidget(false);

    mapviewer.removeAllOverlays();
}
function GetUpdateUrl(page, site){
    var newBounds = mapviewer.getMapBounds();
    var center = mapviewer.getCurrentPosition();
    var url = page + "?type=2" + ((site) ? ("&siteID=" + site) : ("&siteID=0")) + "&nwlat=" + newBounds.getNorthWest().lat + "&nwlon=" + newBounds.getNorthWest().lon + "&selat=" + newBounds.getSouthEast().lat + "&selon=" + newBounds.getSouthEast().lon + "&lat=" + center.lat + "&lon=" + center.lon + "&z=" + mapviewer.getZoomFactor() + "&categories=";
    jQuery("input:checkbox.categoriesCheckbox:checked").each(function(intIndex) {
        url += jQuery(this).val() + ",";
    });
    return url;
}
function UpdateMap() {
    ToggleOAKey(jQuery('#categories-53').attr("checked"));
    HideTooltip();
    LoadJsonData(GetUpdateUrl(mapBaseUrl, siteId));
}
function ToggleOAKey(show){
    if(show)
        jQuery('#oaKeyKey, #oaKeyValue').show();
    else
        jQuery('#oaKeyKey, #oaKeyValue').hide();
}

/* Searching */
function PostCodeFieldClick(){
    jQuery(this).val('');
    jQuery(this).unbind();
    return false;
}
var geocoder;
function SearchPostcode(pc){
    geocoder = new MMGeocoder(SetPostcodeSearch);
    geocoder.geocode(new MMAddress({ qs: pc, country_code: 'GB' }))
}
function submit_SearchPostcode(pc){
    SearchPostcode(jQuery('#postcode').val());
    return false;
}
function SetPostcodeSearch(){
    if (geocoder.error_code && geocoder.error_code != 'MM_GEOCODE_MULTIPLE_MATCHES') {
        return false;
    }else{
        var icon = new MMIcon('/images/map/poiLocationMarker.png');
        icon.iconSize = new MMDimensions(28, 30);
        icon.iconAnchor = new MMPoint(11, 21);
        if(searchMarker) mapviewer.removeOverlay(searchMarker);
        searchMarker = new MMMarkerOverlay(geocoder.result_set[0], { 'label' : 'You are here','icon': icon, 'inert':true });
        var el = document.createElement('div');
        el.setAttribute('class', 'mapMarker');

        var elH = document.createElement('h1');
        elH.appendChild(document.createTextNode("You are here"));
        el.appendChild(elH);
            
        searchMarker.setInfoBoxContent(el, { className: 'altinfobox', min_width: 170, dont_move: true });
        mapviewer.addOverlay(searchMarker);
        searchMarker.openInfoBox();
        
        mapviewer.goToPosition(geocoder.result_set[0],  14);
    }
}
function ClearCategories(){
    jQuery('input[name=categories]').removeAttr('checked');
    UpdateMap();
    return false;
}
function SearchCategory(){
    var catId = jQuery('select[name=categories]').val();
    if(catId > 0){
        jQuery('input[name=categories]').removeAttr('checked');
        jQuery('input[value='+catId+']:checkbox').attr('checked','checked');
    }else{
        jQuery('input[name=categories]').attr('checked', 'checked');
    }
    UpdateMap();
    return false;
}

/* Map Overlays */
function SetCentre(lat, lon) { mapviewer.goToPosition(new MMLatLon(lat, lon)); }
function SelectMarker(markerKey, showInfoBox, centre, forceShow) {
    var curMarker = markerPoints[markerKey];
    if(!curMarker) curMarker = GetMarkerByID(markerKey);

    if ( (curMarker.onscreen)&&(!forceShow) ) {
        curMarker.setVisibility(false);
        curMarker.onscreen = false;
        curMarker.closeInfoBox();
    } else {
        curMarker.setVisibility(true);
        curMarker.onscreen = true;
        if(showInfoBox) curMarker.openInfoBox();
        if(centre) SetCentre(curMarker.getPosition().coords.lat, curMarker.getPosition().coords.lon)
    }
}
function CreateMarker(id, categorylist, groupname, title, desc, url, link, lat, lon, address, dbid, highlight) {
    var preExistingMarker = GetMarkerByID(dbid);
    var icon;

    if (categorylist.length > 1)
        icon = GetMultiCategoryIcon();
    else
        icon = GetIconForType(categorylist[0]);
        
    var marker;
    var reopenbox = false;
    var ret;
    if (markerPoints[id]) {
        reopenbox = markerPoints[id].isInfoBoxOpened();
        markerPoints[id].remove();
        mapviewer.removeOverlay(markerPoints[id]);
    }

    var el;
    if((!markerPoints[id])&&(preExistingMarker != undefined)){
        reopenbox = preExistingMarker.isInfoBoxOpened();
        // change marker icon to multi icon
        preExistingMarker.reset(preExistingMarker.getPosition(),  { 'label': title, 'icon': GetMultiCategoryIcon() });
        el = generateInfoBoxContent(id, categorylist, groupname, title, desc, url, link, lat, lon, address, dbid, preExistingMarker);
        preExistingMarker.setInfoBoxContent(el, { className: 'altinfobox', min_width: 170, dont_move: true });
        if(reopenbox) preExistingMarker.openInfoBox();
        preExistingMarker.onscreen = true;
        ret = undefined;
    }else{
        if(openMarkerPoints[id]) { reopenbox = true; }

        el = generateInfoBoxContent(id, categorylist, groupname, title, desc, url, link, lat, lon, address, dbid);
        
        if (icon) {
            if(lat != undefined && lon != undefined)
                markerPoints[id] = new MMMarkerOverlay(new MMLatLon(lat, lon), { 'label': title, 'icon': icon });
            else
                markerPoints[id] = new MMMarkerOverlay(new MMAddress(address), { 'label': title, 'icon': icon });
        } else {
            if(lat != undefined && lon != undefined)
                markerPoints[id] = new MMMarkerOverlay(new MMLatLon(lat, lon), { 'label': title });
            else
                markerPoints[id] = new MMMarkerOverlay(new MMAddress(address), { 'label': title });
        }
        
        markerPoints[id].url = url;
        markerPoints[id].setInfoBoxContent(el, { className: 'altinfobox', min_width: 170, dont_move: true });
        markerPoints[id].InfoBox = el;
        
        mapviewer.addOverlay(markerPoints[id]);
        if(reopenbox) markerPoints[id].openInfoBox();
        markerPoints[id].onscreen = true;
        ret = markerPoints[id];
    }
    return ret;
}
function generateInfoBoxContent(id, categorylist, groupname, title, desc, url, link, lat, lon, address, dbid, preExistingMarker) {
    var el;
        if((markerPoints[id]) && (markerPoints[id].InfoBox)){
            el = markerPoints[id].InfoBox;
            AddCategoryImagesToInfoBox(el, categorylist);
        }else if(preExistingMarker){
            el = preExistingMarker.InfoBox;
            AddCategoryImagesToInfoBox(el, categorylist);
        }else{
            el = document.createElement('div');
            el.setAttribute('class', 'mapMarker');

            var elH = document.createElement('h1');
            elH.appendChild(document.createTextNode(title));
            el.appendChild(elH);
            
            var p = document.createElement('p');
            p.appendChild(document.createTextNode(desc));
            el.appendChild(p);
            AddCategoryImagesToInfoBox(el, categorylist);
        }
    return el;
}
function AddCategoryImagesToInfoBox(infoBoxElement, categorylist) {
    for (var i = 0; i < categorylist.length; i++) {
        var imgSrc = GetListIconForType(categorylist[i]);
        if (!jQuery('img[src$="' + imgSrc + '"]', infoBoxElement).is('img')) {
            var newI = document.createElement('img');
            newI.setAttribute('src', imgSrc);
            infoBoxElement.appendChild(newI);
        }
    }
}
function AddPolyline(id, points, color, opacity, thickness, closed, fill, url, active, addToMap, anchorMMMarkerOverlay) {
    if (polyline[id]) {
        polyline[id].remove();
    }
    polyline[id] = new MMPolyLineOverlay(points, { color: color, opacity: opacity, thickness: thickness, closed: closed, fill: fill, clickable: (url.length > 0), active: active });
    if(addToMap) mapviewer.addOverlay(polyline[id]);
    polyline[id].onscreen = true;
    polyline[id].url = url;
    polyline[id].anchor = anchorMMMarkerOverlay;
    return polyline[id];
}
function ClearMapOverlays(){
    jQuery('#resultContainer').empty();

    for (var p in polyline) {
        if( ((p.indexOf(regionName) <= 0) ) 
                && (polyline[p] instanceof MMPolyLineOverlay) ){
            mapviewer.removeOverlay(polyline[p]);
        } else if (p.indexOf(regionName) >= 0) {
            ToggleRegion(ShowingPolylines(regionName));
        }
    }
    openMarkerPoints = new Array();
    for (var m in markerPoints){
        if( (m.indexOf(regionName.toLowerCase()) <= 0) && (markerPoints[m] instanceof MMMarkerOverlay) ){
            if(markerPoints[m].isInfoBoxOpened())
                openMarkerPoints[m] = "placeholder";
            mapviewer.removeOverlay(markerPoints[m]);
        }
    }
}
function ToggleRegion(show) {
    for (var p in polyline) {
        if (p.indexOf(regionName) > 0) {
            if (polyline[p] instanceof MMPolyLineOverlay) {
                var toggle;
                if(show != undefined)
                    toggle = show
                else
                    toggle = (polyline[p].onscreen)
                if (toggle) {
                    mapviewer.addOverlay(polyline[p]);
                    polyline[p].onscreen = true;
                } else {
                    polyline[p].remove();
                    mapviewer.removeOverlay(polyline[p]);
                    polyline[p].onscreen = false;
                }
            }
        }
    }
}
function GetMarkerByID(id){
    var ret = undefined;
    for (var m in markerPoints) {
        var reg = RegExp("(_r)(" + id + ")(_a)", "g")
        if (reg.test(m)) {
            ret = markerPoints[m];
        }
    }
    return ret;
}

/* Handlers */
var ib = jQuery('<div class="altinfobox"><div class="MMplacer"><table cellspacing="0" class="MMInfoBoxTable"><tbody><tr style="display: none;" class="MMtabs"><td class="MMleft"><div class="MMspacer"></div></td>'+
'<td class="MMcentre MMcenter"><div class="MMspacer"></div></td><td class="MMright"><div class="MMspacer"></div></td></tr><tr class="MMtop"><td class="MMleft"><div class="MMspacer"></div></td>'+
'<td class="MMcenter MMcentre"><div class="MMspacer"></div></td><td class="MMright"><div class="MMspacer"></div></td></tr><tr class="MMmiddle"><td class="MMleft"><div class="MMspacer"></div></td>'+
'<td class="MMcenter MMcentre"><div class="MMspacer">  <div class="MMcontent">    <a class="MMclose" href="#" onclick="HideTooltip();return false;" title="Close">Close</a>'+
    '<div class="mapMarker"></div>'+
'</div></div></td><td class="MMright"><div class="MMspacer"></div></td></tr><tr class="MMbottom"><td class="MMleft"><div class="MMspacer"></div></td><td class="MMcenter MMcentre">'+
'<div class="MMspacer"></div></td><td class="MMright"><div class="MMspacer"></div></td></tr></tbody></table><div class="MMconnector"></div></div></div>');

function mouseEvent( eventType, eventTarget, arg1, arg2, arg3 ) {
    if (eventTarget instanceof MMMarkerOverlay) {
        if ((eventType == "mouseout")&&(eventTarget.isInfoBoxOpened())) {
            eventTarget.closeInfoBox();
        } else if(eventType == "mouseover") {
            eventTarget.openInfoBox();
        }
    }else if(eventTarget instanceof MMPolyLineOverlay){
        if(eventTarget.anchor){
            if ((eventType == "mouseout")&&(eventTarget.anchor.isInfoBoxOpened())) {
                //eventTarget.anchor.closeInfoBox();
            }else if(eventType == "mouseout"){
                HideTooltip();
            } else if(eventType == "mouseover") {
                //eventTarget.anchor.openInfoBox();
                ShowTooltip(eventTarget.anchor.InfoBox, arg1.x, arg1.y);
            }
            // Show Info Box
        }
    }
    return true;
}
function HideTooltip(){
    ib.hide();
}
function ShowTooltip(infoboxhtml, x, y) {
    ib.find('.mapMarker').replaceWith(jQuery(infoboxhtml).clone(true));
    
    // Arg1 is an MMPoint with x and y Properties
    jQuery('#mapviewer div:first').append(ib);
    ib.css("position","absolute");
    ib.css("left", (x - 5) + "px");
    ib.css("top", (y - (ib.height() + 3)) + "px");
    ib.css("z-index", "1200");
    ib.show();
}
function handleClick(type, target, arg1, arg2, arg3) {
    if (target instanceof MMPolyLineOverlay) {
        var p = mapviewer.getMapPositionAt(new MMPoint(arg1.x-250,arg1.y-210))
        location.href= target.url + "&lat=" + p.lat + "&lon=" + p.lon;
    }else if(target instanceof MMMarkerOverlay){
        location.href= target.url;
    }
}

function viewer_changeZoom(type, target, old_zoom, new_zoom) {
    UpdateMap();
}
function viewer_endPan() {
    UpdateMap();
}

/* Util */
function ShowingPolylines(markerName){
    if(markerName.toLowerCase() == regionName.toLowerCase()){
        return (mapviewer.getZoomFactor() < 13)
    }
    return (mapviewer.getZoomFactor() >= 11);
}
var cachedIcons = new Array();
function GetIconForType(typeId) {
    var icon = null;
    var iconKey = "siteCatID-" + typeId;
    if (cachedIcons[iconKey]) {
        icon = cachedIcons[iconKey];
    } else if (categories[typeId]) {
        var tmpIcon = new MMIcon('/images/map/' + categories[typeId].MapMarkerIconFilename);
            tmpIcon.iconSize = new MMDimensions(28, 30);
            tmpIcon.iconAnchor = new MMPoint(11, 21);

        cachedIcons[iconKey] = tmpIcon;
        icon = cachedIcons[iconKey];
    }
    return icon;
}
function GetListIconForType(typeId) {
    return '/images/map/' + categories[typeId].CatIconFilename;
}
var multiCatIcon;
function GetMultiCategoryIcon() {
    if (!multiCatIcon) {
        multiCatIcon = new MMIcon('/images/map/poiMultiple.png');
        multiCatIcon.iconSize = new MMDimensions(28, 31);
        multiCatIcon.iconAnchor = new MMPoint(11, 21);
    }
    return multiCatIcon;
}

/* MM Demo Methods */
function addPanZoomWidget(outside) {
    // Add the Pan/Zoom Widget:
    if (!outside) {
        mapviewer.removeWidget(pan_zoom_widget);
        pan_zoom_widget = new MMPanZoomWidget();
    } else {
        //removeAllWidgets();
        pan_zoom_widget = new MMPanZoomWidget(new MMBox());
        pan_zoom_widget.setContainer(container);
    }
    mapviewer.addWidget(pan_zoom_widget);
}
function addMapTypeWidget(outside) {
    // Add the Map Type Widget:
    if (!outside) {
        mapviewer.removeWidget(map_type_widget);
        map_type_widget = new MMMapTypeWidget();
    } else {
        //removeAllWidgets();
        map_type_widget = new MMMapTypeWidget(undefined, new MMBox());
        map_type_widget.setContainer(container);
    }
    mapviewer.addWidget(map_type_widget);
}

function addLocationWidget(outside) {
    // Add the Location Widget:
    if (!outside) {
        mapviewer.removeWidget(location_widget);
        location_widget = new MMLocationWidget();
    } else {
        //removeAllWidgets();
        location_widget = new MMLocationWidget(undefined, new MMBox());
        location_widget.setContainer(container);
    }
    mapviewer.addWidget(location_widget);
}

function addOverviewWidget(outside) {
    // Add the Overview Widget:
    if (!outside) {
        mapviewer.removeWidget(overview_widget);
        overview_widget = new MMOverviewWidget();
    } else {
        //removeAllWidgets();
        overview_widget = new MMOverviewWidget(undefined, undefined, new MMBox());
        overview_widget.setContainer(container);
    }
    mapviewer.addWidget(overview_widget);
}

function reverseDataPrefs() {
    var prefs = MMDataResolver.getDataPreferences(MM_WORLD_MAP);
    var newprefs = [];
    // Reverse order:
    for (var i = prefs.length - 1; i >= 0; --i) {
        newprefs.push(prefs[i]);
    }
    // Re-draw map:
    MMDataResolver.setDataPreferences(MM_WORLD_MAP, newprefs);
    mapviewer.redrawMap();
}

/* Non-map Results */
function DisplayMapReplacementItemGroups(categories) {
    jQuery('.categoriesCheckbox:checked').each(function(index) {
        var category = categories[jQuery(this).val()];
        var resultContainer = jQuery('#resultContainer');
        var resultTypeContainer = jQuery('#' + 'catNoMap-' + category.id);
        if (!resultTypeContainer.is('div')) {
            resultContainer.prepend('<div id="catNoMap-' + category.id + '" class="routeResult"><h2>Search results: <span class="catName">' + category.name + '</span></h2><ul class="resultList"></ul></div>');
        } else {
            jQuery(".resultList", resultTypeContainer).empty();
        }
    });
}
function DisplayMapReplacementItems(categories, id, title) {
    for (var i = 0; i < categories.length; i++) {
        var resultTypeContainer = jQuery('#catNoMap-' + categories[i] + ' ul[class=resultList]');
        if ((resultTypeContainer.is('ul')) && (!jQuery('#dm_' + id, resultTypeContainer).is('*'))) {
            resultTypeContainer.append('<li class="singleResult"><span class="title">' + title + '</span><span class="viewOptions"><span id="showOnMap" class="button"><a href="#theMap" onclick="SelectMarker(\'' + id + '\', true, true, true);"><span>Show on map</span></a></span><span id="moreDetails" class="button"><a href="place_details.asp?siteID=' + id + '&frommap=true" id="dm_' + id + '"><span>Show details</span></a></span></span></li>');
        }
    }
}

/* Misc/Util */
// Ajax Progress Bar
function ToggleBlocker(show) {
    if (!blocker) {
        blocker = jQuery('<div id="pageCover">&nbsp;</div>')
        blocker2 = jQuery('<div id="pageCoverLoading"><p>Please wait while the map updates.</p></div>');
        blocker.insertBefore('#mainCol');
        blocker2.insertBefore('#mainCol');
    }
    if (show) {
        blocker.show();
        blocker2.show();
    } else {
        blocker.hide();
        blocker2.hide();
    }
}
function SanitizeName(name) {
    return name.replace(new RegExp("[^0-9a-zA-Z]*", "g"), "").toLowerCase();
}

function getQueryVariable(variable) {
    var query = window.location.search.substring(1);
    var vars = query.split("&");
    for (var i=0;i<vars.length;i++) {
        var pair = vars[i].split("=");
        if (pair[0] == variable) {
            return pair[1];
        }
    }
}