// ---------
// Globals
// ---------
var gCounter = 0;
var gCurrentBrokerSuggestItem = -1;
var gIgnoreBrokerBlur = false;
var gBrokerFocused = false;
var gBrokerSearchInputId = 'TextBoxBroker';
var gBrokerIsPostingAjax = false;
var gBrokerAbortSuggestionSearch = false;

// ------------------------------------------------------------
// This function will fire a click event on the specified control when the 
// enter key is pressed in a text field. Attach this function to the 
// onkeypress-event on the text field like this:
// <input type="text" onkeypress="return fireClickOnEnter(event, 'IdOfControlToFireClickOn');">
// ------------------------------------------------------------
function fireClickOnEnter(evt, controlId) {
    var control = document.getElementById(controlId);
    var keyCode = (typeof window.event == 'object') ? window.event.keyCode : evt.keyCode;

    // If enter is pressed -> fire click-event on the control
    if (control && (keyCode == 13)) {
        control.focus();
        control.click();
        return false;
    }
    else {
        return true;
    }
}

// ------------------------------------------------------------
// This function will fire a postbackon the specified control when the 
// enter key is pressed in a text field. Attach this function to the 
// onkeypress-event on the text field like this:
// <input type="text" onkeypress="return postbackOnEnter(event, 'IdOfControlToFirePostbackOn');">
// ------------------------------------------------------------
function postbackOnEnter(evt, controlId) {
    var keyCode = (typeof window.event == 'object') ? window.event.keyCode : evt.keyCode;
    // If enter is pressed -> do a postback
    if (keyCode == 13) {
        __doPostBack(controlId, '');
        gBrokerAbortSuggestionSearch = true;
        return true;
    }
    else {
        return true;
    }
}

// ------------------------------------------------------------
// Returns the x coordinate of the specified object
// ------------------------------------------------------------
function findPosX(obj) {
    var curleft = 0;
    if (obj.offsetParent) {
        while (obj.offsetParent) {
            curleft += obj.offsetLeft;
            obj = obj.offsetParent;
        }
    }
    else if (obj.clientLeft) {
        curleft += obj.clientLeft;
    }
    return curleft;
}

// ------------------------------------------------------------
// Returns the y coordinate of the specified object
// ------------------------------------------------------------
function findPosY(obj) {
    var curtop = 0;
    if (obj.offsetParent) {
        while (obj.offsetParent) {
            curtop += obj.offsetTop;
            obj = obj.offsetParent;
        }
    }
    else if (obj.clientTop) {
        curtop += obj.clientTop;
    }
    return curtop;
}

// ---------------
// Toggles visibility of the specified element.
// ---------------
function toggleVisibility(elemId) {
    var elem = document.getElementById(elemId);

    if (elem) {
        if (elem.style.display == 'none') {
            elem.style.display = 'block';
        }
        else {
            elem.style.display = 'none';
        }
    }
}

// ---------------
// Toggles visibility of details for the specified divs.
// ---------------
function toggleDetails(noDetailDivId, detailDivId) {
    var noDetailDiv = document.getElementById(noDetailDivId);
    var detailDiv = document.getElementById(detailDivId);

    if (noDetailDiv && detailDiv) {
        if (noDetailDiv.style.display == 'none') {
            detailDiv.style.display = 'none';
            noDetailDiv.style.display = 'block';
        }
        else {
            noDetailDiv.style.display = 'none';
            detailDiv.style.display = 'block';
        }
    }
}

// ---------------
// Hides all windowed controls in browsers that
// can't display layers on top of them.
// ---------------
function hideWindowedControls() {
    if ((BrowserDetect.browser == 'Explorer') && (BrowserDetect.version < 7)) {
        // Hides all listboxes
        for (var i = 0; i < document.getElementsByTagName('select').length; i++) {
            document.getElementsByTagName('select')[i].style.visibility = 'hidden';
        }
    }
}

// ---------------
// Shows all windowed controls.
// ---------------
function showWindowedControls() {
    if ((BrowserDetect.browser) == 'Explorer' && (BrowserDetect.version < 7)) {
        // Show all listboxes
        for (var i = 0; i < document.getElementsByTagName('select').length; i++) {
            document.getElementsByTagName('select')[i].style.visibility = 'visible';
        }
    }
}

// ---------------
// Returns the size of the viewport.
// ---------------
function getViewportSize() {
    size = {};
    if (window.innerHeight) {
        size.width = window.innerWidth;
        size.height = window.innerHeight;
    }
    else if (document.documentElement && document.documentElement.clientHeight) {
        size.width = document.documentElement.clientWidth;
        size.height = document.documentElement.clientHeight;
    }
    else if (document.body) {
        size.width = document.body.clientWidth;
        size.height = document.body.clientHeight;
    }
    return size;
}

// ---------------
// Returns the scroll offset
// ---------------
function getScrollOffset() {
    scrollOffset = {};
    if (window.pageYOffset)// all except Explorer
    {
        scrollOffset.x = window.pageXOffset;
        scrollOffset.y = window.pageYOffset;
    }
    else if (document.documentElement && document.documentElement.scrollTop) // Explorer 6 Strict
    {
        scrollOffset.x = document.documentElement.scrollLeft;
        scrollOffset.y = document.documentElement.scrollTop;
    }
    else if (document.body) // all other Explorers
    {
        scrollOffset.x = document.body.scrollLeft;
        scrollOffset.y = document.body.scrollTop;
    }
    return scrollOffset;
}

// ---------------
// Used by the pager on the object search page. Selects what page to display.
// ---------------
function searchResultSelectPage(pageIndex, hiddenControlId) {
    var hiddenControl = document.getElementById(hiddenControlId);
    if (hiddenControlId) {
        hiddenControl.value = pageIndex;
    }
    return true;
}

// ---------------
// Activates the object card with the specified id
// ---------------
function activateObjectCard(index, favLink) {
    var ObjectCardOuter = document.getElementById('ObjectCardOuter' + index);
    var objectCardFavorite = document.getElementById(favLink);

    if (ObjectCardOuter) {
        $(ObjectCardOuter).addClass("ObjectCardActive");
        $(ObjectCardOuter).addClass("Clickable");
        ObjectCardOuter.style.border = 'solid 2px #8E003C';
    }
    if (objectCardFavorite) {
        objectCardFavorite.className = 'ObjectFavorite GreyText';
    }

    return true;
}

// ---------------
// Deactivates the object card with the specified id
// ---------------
function deactivateObjectCard(index, favLink) {
    var ObjectCardOuter = document.getElementById('ObjectCardOuter' + index);
    var objectCardFavorite = document.getElementById(favLink);

    if (ObjectCardOuter) {
        $(ObjectCardOuter).removeClass("ObjectCardActive");
        $(ObjectCardOuter).removeClass("Clickable");
        ObjectCardOuter.style.border = 'solid 2px #ffffff';
    }
    if (objectCardFavorite) {
        objectCardFavorite.className = 'ObjectFavoriteGray GreyText';
    }

    return true;
}

// ---------------
// Activates the object list item with the specified id
// ---------------
function activateObjectListItem(index, favLink) {
    var ObjectListItemOuter = document.getElementById('ListItemOuter' + index);
    var previousObjectListItemTopDiv = document.getElementById('ObjectListItemTop' + (index - 1));
    var previousObjectListItemBottomDiv = document.getElementById('ObjectListItemBottom' + (index - 1));
    var objectListFavorite = document.getElementById(favLink);

    if (ObjectListItemOuter) {
        ObjectListItemOuter.style.border = 'solid 2px #8D033E';
    }
    if (previousObjectListItemTopDiv && previousObjectListItemBottomDiv) {
        deactivateObjectListItem(index - 1);
    }
    if (objectListFavorite) {
        objectListFavorite.className = 'ObjectFavorite';
    }
    
    return true;
}

// ---------------
// Deactivates the object list item with the specified id
// ---------------
function deactivateObjectListItem(index) {
    var ObjectListItemOuter = document.getElementById('ListItemOuter' + index);

    if (ObjectListItemOuter) {
        ObjectListItemOuter.style.border = 'solid 2px #ffffff';
    }

    return true;
}

// ---------------
// Used when adding/removing favorites on the search result page.
// ---------------
function handleFavorite(objectId) {
    var hiddenField = document.getElementById('HiddenFavoriteObjectId');
    if (hiddenField) {
        hiddenField.value = objectId;
        __doPostBack('HiddenFavoriteObjectId', '');
    }
}

// ---------------
// Gets the value of an QueryString parameter
// ---------------
function getQueryString(parameter) {
    var loc = location.search.substring(1, location.search.length);
    var param_value = false;

    var params = loc.split("&");
    for (i = 0; i < params.length; i++) {
        param_name = params[i].substring(0, params[i].indexOf('='));
        if (param_name == parameter)
            param_value = params[i].substring(params[i].indexOf('=') + 1);
    }

    if (param_value)
        return param_value;
    else
        return false;
}

function isWebKit() {
    return (navigator.userAgent.toLowerCase().indexOf('safari') == -1) ? false : true;
}

// ---------------
// Perform object search via URL parameters
// ---------------
var destForm = document.forms['ObjectSearchForm'];
if (getQueryString('la1'))
    destForm.la1.value = getQueryString('la1');     // Boareal min [25,50,75,100,125,150]
if (getQueryString('la2'))
    destForm.la2.value = getQueryString('la2');     // Boareal max [25,50,75,100,125,150,175,200]
if (getQueryString('pr1'))
    destForm.pr1.value = getQueryString('pr1');     // Pris min [250000,500000,750000,1000000,1250000,1500000,1750000,2000000,2250000,2750000,3000000,3500000,4000000,6000000,8000000]
if (getQueryString('pr2'))
    destForm.pr2.value = getQueryString('pr2');     // Pris max [250000,500000,750000,1000000,1250000,1500000,1750000,2000000,2250000,2750000,3000000,3500000,4000000,6000000,8000000]
if (getQueryString('upd'))
    destForm.upd.value = getQueryString('upd');     // Innkommet: 0 = *inget*, 1 = Siden i går, 2 = Siste uke, 3 = Siste to uker, 4 = Siste måned
if (getQueryString('vis'))
    destForm.vis.value = getQueryString('vis');     // Visning: 0 = *inget*, 1 = Alle plantage, 2 = Idag, 3 = Neste uke, 4 = Neste to uker
if (getQueryString('sa1'))
    destForm.sa1.value = getQueryString('sa1');     // Tomtareal min [1000,2000,3000,4000,5000]
if (getQueryString('sa2'))
    destForm.sa2.value = getQueryString('sa2');     // Tomtareal max [1000,2000,3000,4000,5000]
if (getQueryString('pa1'))
    destForm.pa1.value = getQueryString('pa1');     // Areal (ha) min [5,10,20,50,100]
if (getQueryString('pa2'))
    destForm.pa2.value = getQueryString('pa2');     // Areal (ha) max [5,10,20,50,100]
if (getQueryString('st'))
    destForm.st.value = getQueryString('st');       // Fastighetstyp: 0 = *alla*, 2 = Kontor, 8 = Industri/verkstad, 4 = Butik, 16 = Lager/förråd
if (getQueryString('fee1'))
    destForm.fee1.value = getQueryString('fee1');   // Avgift min [1000,2000,3000,4000,5000,6000]
if (getQueryString('fee2'))
    destForm.fee2.value = getQueryString('fee2');   // Avgift max [1000,2000,3000,4000,5000,6000]

if (getQueryString('lok'))                        // Lokale [1|0]
    destForm.lok.value = (getQueryString('lok') == 1) ? '1' : '0';

if (getQueryString('fast'))                       // Fast eiendom [1|0]
    destForm.fast.value = (getQueryString('fast') == 1) ? '1' : '0';

// Lägga till dessa som "hidden fields" istället?! ------------------------------------------------------
if (getQueryString('heis') && getQueryString('heis') == 1)            // Heis [1|0]
    document.getElementById("ctl00_ContentPlaceHolderMain_ContentPlaceHolderRightArea_SearchResultTop_SearchOptions_CheckBoxHeis").checked = true;

if (getQueryString('golfbane') && getQueryString('golfbane') == 1)    // Golfbane [1|0]
    document.getElementById("ctl00_ContentPlaceHolderMain_ContentPlaceHolderRightArea_SearchResultTop_SearchOptions_CheckBoxGolfbane").checked = true;
//------------------------------------------------------------------------------------------------------

// Do postback to correct type
// Note: Postbacks are temporary disabled for Chrome and Safari (read TODO below)
// TODO: location.href bugs in Chrome and Safri. Seems to be a common problem in the WebKit engine.
if (getQueryString('type') && !getQueryString('redirect')) {
    var obj = 'ctl00$ContentPlaceHolderMain$ContentPlaceHolderRightArea$SearchResultTop$LinkButton';
    switch (getQueryString('type')) {
        case "alle":
            __doPostBack(obj + 'all', '');
            break;

        case "leilighet":
            __doPostBack(obj + 'boratt', '');
            break;

        case "enebolig":
            __doPostBack(obj + 'villa', '');
            break;

        case "rekkehus":
            __doPostBack(obj + 'radhus', 'paramtest=123456');
            break;

        case "tomannsbolig":
            __doPostBack(obj + 'parhus', '');
            break;

        case "nybygg":
            __doPostBack(obj + 'nybygg', '');
            break;

        case "fritid":
            __doPostBack(obj + 'fritid', '');
            break;

        case "tomt":
            __doPostBack(obj + 'tomt', '');
            break;

        case "andre":
            __doPostBack(obj + 'andre', '');
            break;

        case "residens":
            __doPostBack(obj + 'residens', '');
            break;
    }

    // Redirect and set flag
    if (!isWebKit())
        window.location = window.location.href + "&redirect=1";
}

// ---------------
// Perform object search.
// ---------------
function doObjectSearch(actionUrl) {
    var sourceForm = document.forms[0];
    var destForm = document.forms['ObjectSearchForm'];

    if (actionUrl) {
        destForm.action = actionUrl;
    }

    // Copy search params to hidden search form and post it
    //ctl00_ContentPlaceHolderMain_ContentPlaceHolderRightArea_SearchResultTop_SearchOptions_DropDownListAreaMax
    if (sourceForm.ctl00_ContentPlaceHolderMain_ContentPlaceHolderRightArea_SearchResultTop_SearchOptions_DropDownListAreaMin) {
        destForm.la1.value = sourceForm.ctl00_ContentPlaceHolderMain_ContentPlaceHolderRightArea_SearchResultTop_SearchOptions_DropDownListAreaMin.options[sourceForm.ctl00_ContentPlaceHolderMain_ContentPlaceHolderRightArea_SearchResultTop_SearchOptions_DropDownListAreaMin.selectedIndex].value;
        destForm.la2.value = sourceForm.ctl00_ContentPlaceHolderMain_ContentPlaceHolderRightArea_SearchResultTop_SearchOptions_DropDownListAreaMax.options[sourceForm.ctl00_ContentPlaceHolderMain_ContentPlaceHolderRightArea_SearchResultTop_SearchOptions_DropDownListAreaMax.selectedIndex].value;
    }

    if (sourceForm.ctl00_ContentPlaceHolderMain_ContentPlaceHolderRightArea_SearchResultTop_SearchOptions_DropDownListRoomMin) {
        destForm.r1.value = sourceForm.ctl00_ContentPlaceHolderMain_ContentPlaceHolderRightArea_SearchResultTop_SearchOptions_DropDownListRoomMin.options[sourceForm.ctl00_ContentPlaceHolderMain_ContentPlaceHolderRightArea_SearchResultTop_SearchOptions_DropDownListRoomMin.selectedIndex].value;
        destForm.r2.value = sourceForm.ctl00_ContentPlaceHolderMain_ContentPlaceHolderRightArea_SearchResultTop_SearchOptions_DropDownListRoomMax.options[sourceForm.ctl00_ContentPlaceHolderMain_ContentPlaceHolderRightArea_SearchResultTop_SearchOptions_DropDownListRoomMax.selectedIndex].value;
    }

    if (sourceForm.ctl00_ContentPlaceHolderMain_ContentPlaceHolderRightArea_SearchResultTop_SearchOptions_DropDownListSiteMin) {
        destForm.sa1.value = sourceForm.ctl00_ContentPlaceHolderMain_ContentPlaceHolderRightArea_SearchResultTop_SearchOptions_DropDownListSiteMin.options[sourceForm.ctl00_ContentPlaceHolderMain_ContentPlaceHolderRightArea_SearchResultTop_SearchOptions_DropDownListSiteMin.selectedIndex].value;
        destForm.sa2.value = sourceForm.ctl00_ContentPlaceHolderMain_ContentPlaceHolderRightArea_SearchResultTop_SearchOptions_DropDownListSiteMax.options[sourceForm.ctl00_ContentPlaceHolderMain_ContentPlaceHolderRightArea_SearchResultTop_SearchOptions_DropDownListSiteMax.selectedIndex].value;
    }

    if (sourceForm.ctl00_ContentPlaceHolderMain_ContentPlaceHolderRightArea_SearchResultTop_SearchOptions_DropDownListPremisesMin) {
        destForm.pa1.value = sourceForm.ctl00_ContentPlaceHolderMain_ContentPlaceHolderRightArea_SearchResultTop_SearchOptions_DropDownListPremisesMin.options[sourceForm.ctl00_ContentPlaceHolderMain_ContentPlaceHolderRightArea_SearchResultTop_SearchOptions_DropDownListPremisesMin.selectedIndex].value;
        destForm.pa2.value = sourceForm.ctl00_ContentPlaceHolderMain_ContentPlaceHolderRightArea_SearchResultTop_SearchOptions_DropDownListPremisesMax.options[sourceForm.ctl00_ContentPlaceHolderMain_ContentPlaceHolderRightArea_SearchResultTop_SearchOptions_DropDownListPremisesMax.selectedIndex].value;
    }

    destForm.pr1.value = sourceForm.ctl00_ContentPlaceHolderMain_ContentPlaceHolderRightArea_SearchResultTop_SearchOptions_DropDownListMinPrice.options[sourceForm.ctl00_ContentPlaceHolderMain_ContentPlaceHolderRightArea_SearchResultTop_SearchOptions_DropDownListMinPrice.selectedIndex].value;
    destForm.pr2.value = sourceForm.ctl00_ContentPlaceHolderMain_ContentPlaceHolderRightArea_SearchResultTop_SearchOptions_DropDownListMaxPrice.options[sourceForm.ctl00_ContentPlaceHolderMain_ContentPlaceHolderRightArea_SearchResultTop_SearchOptions_DropDownListMaxPrice.selectedIndex].value;

    if (sourceForm.ctl00_ContentPlaceHolderMain_ContentPlaceHolderRightArea_SearchResultTop_SearchOptions_DropDownListMinFee) {
        destForm.fee1.value = sourceForm.ctl00_ContentPlaceHolderMain_ContentPlaceHolderRightArea_SearchResultTop_SearchOptions_DropDownListMinFee.options[sourceForm.ctl00_ContentPlaceHolderMain_ContentPlaceHolderRightArea_SearchResultTop_SearchOptions_DropDownListMinFee.selectedIndex].value;
        destForm.fee2.value = sourceForm.ctl00_ContentPlaceHolderMain_ContentPlaceHolderRightArea_SearchResultTop_SearchOptions_DropDownListMaxFee.options[sourceForm.ctl00_ContentPlaceHolderMain_ContentPlaceHolderRightArea_SearchResultTop_SearchOptions_DropDownListMaxFee.selectedIndex].value;
    }

    if (sourceForm.ctl00_ContentPlaceHolderMain_ContentPlaceHolderRightArea_SearchResultTop_SearchOptions_DropDownListChanged) {
        destForm.upd.value = sourceForm.ctl00_ContentPlaceHolderMain_ContentPlaceHolderRightArea_SearchResultTop_SearchOptions_DropDownListChanged.options[sourceForm.ctl00_ContentPlaceHolderMain_ContentPlaceHolderRightArea_SearchResultTop_SearchOptions_DropDownListChanged.selectedIndex].value;
    }
    if (sourceForm.ctl00_ContentPlaceHolderMain_ContentPlaceHolderRightArea_SearchResultTop_SearchOptions_DropDownListVisning) {
        destForm.vis.value = sourceForm.ctl00_ContentPlaceHolderMain_ContentPlaceHolderRightArea_SearchResultTop_SearchOptions_DropDownListVisning.options[sourceForm.ctl00_ContentPlaceHolderMain_ContentPlaceHolderRightArea_SearchResultTop_SearchOptions_DropDownListVisning.selectedIndex].value;
    }

    destForm.lp.value = (sourceForm.ctl00_ContentPlaceHolderMain_ContentPlaceHolderRightArea_SearchResultTop_SearchOptions_CheckBoxLagePlus &&
						 sourceForm.ctl00_ContentPlaceHolderMain_ContentPlaceHolderRightArea_SearchResultTop_SearchOptions_CheckBoxLagePlus.checked)
							 ? '1' : '0';

    destForm.newb.value = (sourceForm.ctl00_ContentPlaceHolderMain_ContentPlaceHolderRightArea_SearchResultTop_SearchOptions_rbl_ObjectType_1 &&
						   sourceForm.ctl00_ContentPlaceHolderMain_ContentPlaceHolderRightArea_SearchResultTop_SearchOptions_rbl_ObjectType_1.checked)
						     ? '1' : '0';

    destForm.lok.value = (sourceForm.ctl00_ContentPlaceHolderMain_ContentPlaceHolderRightArea_SearchResultTop_SearchOptions_CheckBoxLokal &&
						   sourceForm.ctl00_ContentPlaceHolderMain_ContentPlaceHolderRightArea_SearchResultTop_SearchOptions_CheckBoxLokal.checked)
						     ? '1' : '0';

    destForm.fast.value = (sourceForm.ctl00_ContentPlaceHolderMain_ContentPlaceHolderRightArea_SearchResultTop_SearchOptions_CheckBoxFastighet &&
						   sourceForm.ctl00_ContentPlaceHolderMain_ContentPlaceHolderRightArea_SearchResultTop_SearchOptions_CheckBoxFastighet.checked)
						     ? '1' : '0';

    if (sourceForm.ctl00_ContentPlaceHolderMain_ContentPlaceHolderRightArea_SearchResultTop_SearchOptions_DropDownListKommersiellSubTyp) {
        destForm.st.value = sourceForm.ctl00_ContentPlaceHolderMain_ContentPlaceHolderRightArea_SearchResultTop_SearchOptions_DropDownListKommersiellSubTyp.options[sourceForm.ctl00_ContentPlaceHolderMain_ContentPlaceHolderRightArea_SearchResultTop_SearchOptions_DropDownListKommersiellSubTyp.selectedIndex].value;
    }

    if (sourceForm.ctl00_ContentPlaceHolderMain_ContentPlaceHolderRightArea_SearchResultTop_SearchOptions_DropDownListMosaicType) {
        destForm.mos.value = sourceForm.ctl00_ContentPlaceHolderMain_ContentPlaceHolderRightArea_SearchResultTop_SearchOptions_DropDownListMosaicType.options[sourceForm.ctl00_ContentPlaceHolderMain_ContentPlaceHolderRightArea_SearchResultTop_SearchOptions_DropDownListMosaicType.selectedIndex].value;
    }

    // This (rather ugly) checkbox-to-index-mapping need to 
    // match the one in UISearchHandler.AddParamsFromRequest()
    destForm.sw.value = (
		(sourceForm.ctl00_ContentPlaceHolderMain_ContentPlaceHolderRightArea_SearchResultTop_SearchOptions_CheckBoxRadhus && sourceForm.ctl00_ContentPlaceHolderMain_ContentPlaceHolderRightArea_SearchResultTop_SearchOptions_CheckBoxRadhus.checked ? '0,' : '') +
		(sourceForm.ctl00_ContentPlaceHolderMain_ContentPlaceHolderRightArea_SearchResultTop_SearchOptions_rbl_ObjectType_2 && sourceForm.ctl00_ContentPlaceHolderMain_ContentPlaceHolderRightArea_SearchResultTop_SearchOptions_rbl_ObjectType_2.checked ? '1,' : '') +
		(sourceForm.ctl00_ContentPlaceHolderMain_ContentPlaceHolderRightArea_SearchResultTop_SearchOptions_rbl_ObjectType_3 && sourceForm.ctl00_ContentPlaceHolderMain_ContentPlaceHolderRightArea_SearchResultTop_SearchOptions_rbl_ObjectType_3.checked ? '2,' : '') +
		(sourceForm.ctl00_ContentPlaceHolderMain_ContentPlaceHolderRightArea_SearchResultTop_SearchOptions_rbl_ObjectType_4 && sourceForm.ctl00_ContentPlaceHolderMain_ContentPlaceHolderRightArea_SearchResultTop_SearchOptions_rbl_ObjectType_4.checked ? '3,' : '') +
		(sourceForm.ctl00_ContentPlaceHolderMain_ContentPlaceHolderRightArea_SearchResultTop_SearchOptions_rbl_ObjectType_5 && sourceForm.ctl00_ContentPlaceHolderMain_ContentPlaceHolderRightArea_SearchResultTop_SearchOptions_rbl_ObjectType_5.checked ? '4,' : '') +
		(sourceForm.ctl00_ContentPlaceHolderMain_ContentPlaceHolderRightArea_SearchResultTop_SearchOptions_rbl_ObjectType_6 && sourceForm.ctl00_ContentPlaceHolderMain_ContentPlaceHolderRightArea_SearchResultTop_SearchOptions_rbl_ObjectType_6.checked ? '5,' : '') +
		(sourceForm.ctl00_ContentPlaceHolderMain_ContentPlaceHolderRightArea_SearchResultTop_SearchOptions_CheckBoxSjonara && sourceForm.ctl00_ContentPlaceHolderMain_ContentPlaceHolderRightArea_SearchResultTop_SearchOptions_CheckBoxSjonara.checked ? '6,' : '') +
		(sourceForm.ctl00_ContentPlaceHolderMain_ContentPlaceHolderRightArea_SearchResultTop_SearchOptions_CheckBoxCentralt && sourceForm.ctl00_ContentPlaceHolderMain_ContentPlaceHolderRightArea_SearchResultTop_SearchOptions_CheckBoxCentralt.checked ? '7,' : '') +
		(sourceForm.ctl00_ContentPlaceHolderMain_ContentPlaceHolderRightArea_SearchResultTop_SearchOptions_CheckBoxLandet && sourceForm.ctl00_ContentPlaceHolderMain_ContentPlaceHolderRightArea_SearchResultTop_SearchOptions_CheckBoxLandet.checked ? '8,' : '') +
		(sourceForm.ctl00_ContentPlaceHolderMain_ContentPlaceHolderRightArea_SearchResultTop_SearchOptions_CheckBoxBastu && sourceForm.ctl00_ContentPlaceHolderMain_ContentPlaceHolderRightArea_SearchResultTop_SearchOptions_CheckBoxBastu.checked ? '9,' : '') +
		(sourceForm.ctl00_ContentPlaceHolderMain_ContentPlaceHolderRightArea_SearchResultTop_SearchOptions_CheckBoxBubbelbad && sourceForm.ctl00_ContentPlaceHolderMain_ContentPlaceHolderRightArea_SearchResultTop_SearchOptions_CheckBoxBubbelbad.checked ? '10,' : '') +
		(sourceForm.ctl00_ContentPlaceHolderMain_ContentPlaceHolderRightArea_SearchResultTop_SearchOptions_CheckBoxPool && sourceForm.ctl00_ContentPlaceHolderMain_ContentPlaceHolderRightArea_SearchResultTop_SearchOptions_CheckBoxPool.checked ? '11,' : '') +
 		(sourceForm.ctl00_ContentPlaceHolderMain_ContentPlaceHolderRightArea_SearchResultTop_SearchOptions_CheckBoxSpis && sourceForm.ctl00_ContentPlaceHolderMain_ContentPlaceHolderRightArea_SearchResultTop_SearchOptions_CheckBoxSpis.checked ? '12,' : '') +
 		(sourceForm.ctl00_ContentPlaceHolderMain_ContentPlaceHolderRightArea_SearchResultTop_SearchOptions_CheckBoxHiss && sourceForm.ctl00_ContentPlaceHolderMain_ContentPlaceHolderRightArea_SearchResultTop_SearchOptions_CheckBoxHiss.checked ? '13,' : '') +
		(sourceForm.ctl00_ContentPlaceHolderMain_ContentPlaceHolderRightArea_SearchResultTop_SearchOptions_CheckBoxGarage && sourceForm.ctl00_ContentPlaceHolderMain_ContentPlaceHolderRightArea_SearchResultTop_SearchOptions_CheckBoxGarage.checked ? '14,' : '') +
 		(sourceForm.ctl00_ContentPlaceHolderMain_ContentPlaceHolderRightArea_SearchResultTop_SearchOptions_CheckBoxBalkong && sourceForm.ctl00_ContentPlaceHolderMain_ContentPlaceHolderRightArea_SearchResultTop_SearchOptions_CheckBoxBalkong.checked ? '15,' : '') +
 		(sourceForm.ctl00_ContentPlaceHolderMain_ContentPlaceHolderRightArea_SearchResultTop_SearchOptions_CheckBoxHeis && sourceForm.ctl00_ContentPlaceHolderMain_ContentPlaceHolderRightArea_SearchResultTop_SearchOptions_CheckBoxHeis.checked ? '16,' : '') +
 		(sourceForm.ctl00_ContentPlaceHolderMain_ContentPlaceHolderRightArea_SearchResultTop_SearchOptions_CheckBoxGolfbane && sourceForm.ctl00_ContentPlaceHolderMain_ContentPlaceHolderRightArea_SearchResultTop_SearchOptions_CheckBoxGolfbane.checked ? '17,' : '')

	);

    destForm.submit();
}

// ---------------
// Disables the price checkboxes if the user only searches rentable object.
// This only applies to Kommersiella fastigheter
// ---------------
function setPriceDisabled(checkBoxLokalId, checkBoxFastighetId, dropdownMinPriceId, dropdownMaxPriceId) {
    var checkBoxLokal = document.getElementById(checkBoxLokalId);
    var checkBoxFastighet = document.getElementById(checkBoxFastighetId);
    var dropdownMinPrice = document.getElementById(dropdownMinPriceId);
    var dropdownMaxPrice = document.getElementById(dropdownMaxPriceId);

    if (checkBoxLokal && checkBoxFastighet && dropdownMinPrice && dropdownMaxPrice) {
        if (!checkBoxFastighet.checked && checkBoxLokal.checked) {
            dropdownMinPrice.selectedIndex = 0;
            dropdownMaxPrice.selectedIndex = 0;
            dropdownMinPrice.disabled = true;
            dropdownMaxPrice.disabled = true;
        }
        else {
            dropdownMinPrice.disabled = false;
            dropdownMaxPrice.disabled = false;
        }
    }
}

// ---------------
// Opens a dialog. The first parameter should be the dialog name.
// ---------------
function openDialog() {
    gCounter = gCounter + 1;
    var dialogName = arguments[0];
    var dialog = document.getElementById('DialogContainer');
    var hiddenField = document.getElementById(gDialogHiddenFieldId);

    try {
        if (dialogName == "TipFriend") {
            s.prop9 = "Tipsa van";
        }
        if (dialogName == "ObjectIntrestRegistration") {
            s.prop9 = "Anmal intresse";
        }
    } catch (err) { }
    if (dialog && hiddenField) {
        dialog.className = 'Dialog ' + dialogName;
        hiddenField.value = '';
        // Make a delimited string with the dialogname and parameters
        for (var i = 0; i < arguments.length; i++) {
            hiddenField.value += arguments[i];
            if (i + 1 < arguments.length) hiddenField.value += '|';
        }

        __doPostBack(gDialogHiddenFieldId, '');

        hideWindowedControls();
        showDialogBackground();
    }
}
function openHelp() {
    gCounter = gCounter + 1;
    var dialog = document.getElementById('DialogHelpContainer');
    var hiddenField = document.getElementById(gHelpDialogHiddenFieldId);

    if (dialog && hiddenField) {
        hiddenField.value = '';
        // Make a delimited string with the dialogname and parameters

        hiddenField.value = "clicked";
        __doPostBack(gHelpDialogHiddenFieldId, '');

        hideWindowedControls();
        showDialogBackground();
    }
}
// ---------------
// Closes the dialog-layer.
// ---------------
function closeDialog() {
    gCounter = gCounter - 1;
    var dialog = document.getElementById('DialogContainer');
    var hiddenField = document.getElementById(gDialogHiddenFieldId);
    if (dialog && hiddenField) {
        dialog.style.display = 'none';
        hiddenField.value = '';
        __doPostBack(gDialogHiddenFieldId, '');

        hideDialogBackground();
        showWindowedControls();
    }
    var helpDialog = document.getElementById('DialogHelpContainer');

    if (helpDialog) {
        var helphiddenField = document.getElementById(gHelpDialogHiddenFieldId);
        helpDialog.style.display = 'none';
        helphiddenField.value = '';
        __doPostBack(gHelpDialogHiddenFieldId, '');
    }

}
function closeHelpDialog() {
    gCounter = gCounter - 1;
    var parentDialog = document.getElementById('DialogContainer');
    var helpDialog = document.getElementById('DialogHelpContainer');
    var helphiddenField = document.getElementById(gHelpDialogHiddenFieldId);
    if (gCounter == 0) {
        hideDialogBackground();
        showWindowedControls();
    }
    if (helpDialog) {
        helpDialog.style.display = 'none';
        helphiddenField.value = '';
        __doPostBack(gHelpDialogHiddenFieldId, '');
    }
}

// ---------------
// Positions the dialog layer in the center of the screen.
// ---------------
function positionDialog() {
    var dialog = document.getElementById('DialogContainer');
    if (dialog) {
        var viewSize = getViewportSize();
        var scrollSize = getScrollOffset();
        dialog.style.display = 'block';


        // Center window on screen
        dialog.style.left = (scrollSize.x + (viewSize.width - dialog.clientWidth) / 2) + 'px';

        var marginTop = dialog.clientHeight > viewSize.height ? ((viewSize.height - dialog.clientHeight) / 2) : 100;
        var top = (scrollSize.y + ((viewSize.height - dialog.clientHeight) / 2) - marginTop);
        if (top > scrollSize.y)
            dialog.style.top = top + 'px';
        else
            dialog.style.top = scrollSize.y + 'px';
    }
}

function positionHelpDialog() {
    var dialog = document.getElementById('DialogHelpContainer');
    if (dialog) {
        var viewSize = getViewportSize();
        var scrollSize = getScrollOffset();
        dialog.style.display = 'block';

        // Center window on screen
        dialog.style.left = (scrollSize.x + (viewSize.width - dialog.clientWidth) / 2) + 'px';

        var marginTop = dialog.clientHeight > viewSize.height ? ((viewSize.height - dialog.clientHeight) / 2) : 100;
        var top = (scrollSize.y + ((viewSize.height - dialog.clientHeight) / 2) - marginTop);
        if (top > scrollSize.y)
            dialog.style.top = top + 'px';
        else
            dialog.style.top = scrollSize.y + 'px';


    }
}

// ---------------
// Creates a semi-transparent div and places it over the entire screen.
// ---------------
function showDialogBackground() {
    var bgDiv = document.getElementById('DialogBG');
    if (bgDiv) {
        var height = document.getElementById('outerdiv').clientHeight + 40;
        bgDiv.style.height = height + 'px';
        bgDiv.style.display = 'block';

        // IE6 and below needs a special class
        if ((BrowserDetect.browser == 'Explorer') && (BrowserDetect.version < 7)) {
            bgDiv.className = 'DialogBGIE6';
        }
    }
}

// ---------------
// Hides the semi-transparent div
// ---------------
function hideDialogBackground() {
    var bgDiv = document.getElementById('DialogBG');
    if (bgDiv) {
        bgDiv.style.display = 'none';
    }
}

// ---------------
// Display the specified drawing.
// ---------------
function showDrawing(menuDiv, activeIndex, imageCount) {
    // Activate menu item
    for (j = 0; j < imageCount; j++) {
        document.getElementById("Item" + j).className = "MenuArrowLeft";
    }
    document.getElementById("Item" + activeIndex).className = "MenuArrowLeft_Active";
    deactivateSiblings(menuDiv, 'MenuArrowLeft');
    menuDiv.className = 'MenuArrowLeft_Active';

    // Loop over drawing divs and display the correct one
    for (i = 0; i < imageCount; i++) {
        imageDiv = document.getElementById('DrawingDiv' + i);
        if (imageDiv) {
            imageDiv.style.display = (i == activeIndex) ? 'block' : 'none';
        }
    }
}

// ---------------
// Deactivates all the siblings to the specified menu-div.
// ---------------
function deactivateSiblings(menuDiv, className) {
    var div = menuDiv.previousSibling;
    while (div != null) {
        div.className = className;
        div = div.previousSibling;
    }

    div = menuDiv.nextSibling;
    while (div != null) {
        div.className = className;
        div = div.nextSibling;
    }
}

// ---------------
// Returns a parameter from the query string
// ---------------
function getUrlParam(strParamName) {
    var strReturn = '';
    var strHref = window.location.href;
    if (strHref.indexOf('?') > -1) {
        var strQueryString = strHref.substr(strHref.indexOf('?'));
        var aQueryString = strQueryString.split('&');
        for (var iParam = 0; iParam < aQueryString.length; iParam++) {
            if (aQueryString[iParam].indexOf(strParamName + '=') > -1) {
                var aParam = aQueryString[iParam].split('=');
                strReturn = aParam[1];
                break;
            }
        }
    }
    return strReturn;
}

// ---------------
// Sends logging events to stats service
// ---------------
function logClick(actionName) {
    var statsSitePrefix = (window.location.href.indexOf('ObjectHemnet.aspx') == -1) ? 'Svenskfast' : 'Hemnet';
    var objectId = getUrlParam('objectid');
    var stringToLog = statsSitePrefix + '|' + actionName + '|' + objectId;
}

// ---------------
// Open window for viewing all pictures
// ---------------
function openPictureWindow(url) {
    logClick('objektlank_visa_bilder');
    w = window.open(url, 'PictureViewWindow', 'location=no,scrollbars=yes,menubar=yes,toolbar=yes,resizable=yes');
    w.focus();
}

// ---------------
// Open window for viewing drawings
// ---------------
function openDrawingWindow(url) {
    logClick('objektlank_planritning');
    w = window.open(url, 'DrawingViewWindow', 'location=no,scrollbars=yes,menubar=yes,toolbar=yes,resizable=yes');
    w.focus();
}

// ---------------
// Open window for furnishing
// ---------------
function openFurnishWindow(url) {
    logClick('objektlank_provbo');
    w = window.open(url, 'FurnishWindow', 'width=980,height=650,location=no,scrollbars=yes,menubar=no,toolbar=no,resizable=yes,status=yes');
    w.focus();
}

// ---------------
// Open window for panorama
// ---------------
function openPanoramaWindow(url) {
    logClick('objektlank_panorama');

    // Use different size on pop-up window depending on where the link goes
    if (url.substr(0, 27) == 'http://viewer.previsite.net') {
        var width = 322;
        var height = 322;
    }
    else // http://www.vrfilm.se
    {
        var width = 718;
        var height = 440;
    }

    // Center window on screen
    var left = (screen.width - width) / 2;
    var top = ((screen.height - height) / 2) - 30;

    w = window.open(url, 'PanoramaWindow', 'width=' + width + ',height=' + height + ',left=' + left + ',top=' + top + 'location=no,scrollbars=yes,menubar=no,toolbar=no,resizable=yes,status=yes');
    w.focus();
}

// ---------------
// Open window for vr
// ---------------
function openVRWindow(url) {
    logClick('objektlank_vr');
    w = window.open(url, 'VRWindow', 'width=980,height=650,location=no,scrollbars=yes,menubar=no,toolbar=no,resizable=yes,status=yes');
    w.focus();
}


// ---------------
// Open window for object on map
// ---------------
function openObjectMapWindow(url, poisearch, _width, _height) {
    if (poisearch == null) {
        logClick('objektlank_visa_karta');
    }
    else {
        logClick('objektlank_visa_karta_poi_' + poisearch);
    }

    // Size the window slightly smaller than the screen
    var width = 0;
    if (_width == null)
        width = (screen.width * 0.85);
    else
        width = _width;

    var height = 0;
    if (_height == null)
        height = (screen.height * 0.80);
    else
        height = _height;

    // Center window on screen
    var left = (screen.width - width) / 2;
    var top = ((screen.height - height) / 2) - 30;

    // Add poisearch-param if specified
    if (poisearch != null && poisearch != '') {
        url += ('&poisearch=' + poisearch.replace(/\&/, '%26'));
    }

    w = window.open(url, 'ObjectMapWindow', 'width=' + width + ',height=' + height + ',left=' + left + ',top=' + top + ',location=no,scrollbars=yes,menubar=no,toolbar=no,resizable=yes,status=yes');
    w.focus();
}

// ---------------
// Open window for search-result on map
// ---------------
function openSearchResultMapWindow(url) {
    if (url != null) {
        logClick('soklank_visa_resultat_pa_karta');
    }

    // Size the window slightly smaller than the screen
    var width = (screen.width * 0.85);
    var height = (screen.height * 0.80);

    // Center window on screen
    var left = (screen.width - width) / 2;
    var top = ((screen.height - height) / 2) - 30;

    w = window.open(url, 'ObjectMapWindow', 'width=' + width + ',height=' + height + ',left=' + left + ',top=' + top + ',location=no,scrollbars=yes,menubar=no,toolbar=no,resizable=yes,status=yes');
    w.focus();
}

// ---------------
// Open window for Bokalkyl
// ---------------
function openBokalkylWindow(url) {
    logClick('objektlank_bokalkyl');
    w = window.open(url, 'BokalkylWindow', 'width=730,height=445,location=no,scrollbars=yes,menubar=no,toolbar=no,resizable=yes,status=yes');
    w.focus();
}

// ---------------
// Open window for Ansok om lanelofte
// ---------------
function openLanelofteWindow(url) {
    logClick('objektlank_lanelofte');
    w = window.open(url, 'LanelofteWindow', 'width=760,height=600,location=no,scrollbars=yes,menubar=no,toolbar=no,resizable=yes,status=yes');
    w.focus();
}

// ---------------
// Open window for Forsakringskalkyl
// ---------------
function openForsakringskalkylWindow(url) {
    s.prop9 = "Forsakringskalkyl";
    logClick('objektlank_forsakringskalkyl');
    w = window.open(url, 'ForsakringskalkylWindow', 'fullscreen=no,status=no,toolbar=no,menubar=no,location=no,resizable=no,scrollbars=yes,top=0,left=0', "true");
    w.focus();
}
// ---------------
// Open window for Intresseanmälan
// ---------------
function openInterestRegistrationWindow(url) {
    logClick('objektlank_anmal_intresse');
    w = window.open(url, 'InterestRegistrationWindow', 'width=685,height=575,location=no,scrollbars=no,menubar=no,toolbar=no,resizable=no,status=yes');
    w.focus();
}
// ---------------
// Open print window
// ---------------
function openPrintWindow(url) {
    s.prop9 = "Skriv ut";
    logClick('objektlank_skrivut');
    w = window.open(url, 'PrintWindow', 'width=666,height=614,location=no,scrollbars=yes,menubar=no,toolbar=no,resizable=yes,status=yes');
    w.focus();
}

// ---------------
// Open print office window
// ---------------
function openPrintOfficeWindow(url) {
    w = window.open(url, 'PrintOfficeWindow', 'width=666,height=614,location=no,scrollbars=yes,menubar=no,toolbar=no,resizable=no,status=yes');
    w.focus();
}

// ---------------
// Opens the SL window
// ---------------
function openSLWindow(fromAddress, toAddress, travelNow) {
    var url = 'http://reseplanerare.sl.se/bin/help.exe/sn?tpl=index&REQ0JourneyStopsS0A=255&REQ0JourneyStopsZ0A=255';
    url += '&Z=' + escape(toAddress);
    url += '&S=' + escape(fromAddress);
    url += (travelNow ? '&start=yes&REQ0JourneyTime=%2b0%3a05' : '');
    w = window.open(url, 'SLWindow', 'location=yes,scrollbars=yes,menubar=yes,toolbar=yes,resizable=yes,status=yes');
    w.focus();
}

// ---------------
// Opens the SL window if enter was pressed.
// This function is attached to an onkeypress-event
// ---------------
function openSLOnEnter(evt, toAddress) {
    var keyCode = (typeof window.event == 'object') ? window.event.keyCode : evt.keyCode;

    // If enter is pressed -> open the SL window
    if (keyCode == 13) {
        openSLWindow(document.forms[0].fromAddress.value, toAddress, true);
        return false;
    }
    else {
        return true;
    }
}

// ---------------
// Display the specified picture. 
// Used to browse pictures on the object page.
// ---------------
function showPicture(index) {
    // Make sure index is valid
    if ((index < gPictureCount) && (index > -1)) {
        // Change cssclass of currentlink
        var currentLink = document.getElementById('PicturePagerLink' + gCurrentPicture);
        if (currentLink) {
            currentLink.className = 'GreyText PicturePagerLink';
        }

        // Change picture on the image tag
        var imageTag = document.getElementById(gImageTagId);
        if (imageTag) {
            imageTag.src = gPictureUrls[index];
            imageTag.alt = gPictureDescriptions[index];
            gCurrentPicture = index;
        }

        // Change link 
        var linkLink = document.getElementById(gLinkTagId);
        if (linkLink) {
            linkLink.href = gLinkUrls[index];
        }

        // Change cssclass of the clickedlink
        var newCurrentLink = document.getElementById('PicturePagerLink' + gCurrentPicture);
        if (newCurrentLink) {
            newCurrentLink.className = 'GreyText PicturePagerLinkActive';
        }
    }
}

function openBopriset(dropdownlanid, dropdownkommunid) {
    var droplan = document.getElementById(dropdownlanid);
    var dropkommun = document.getElementById(dropdownkommunid);

    openBoprisetWindow(droplan.options[droplan.selectedIndex].value, dropkommun.options[dropkommun.selectedIndex].value);
}
function openBoprisetWindow(lankod, kommunkod) {
    s.prop9 = "Prisstatistik";
    var baseUrl = 'http://www.bopriset.nu/bopris/Kartor1/';
    var winsettings = 'width=788,height=583,menubar=no,toolbar=no,status=no,resizable=no,scrollbars=no';

    if (lankod != '00' && kommunkod != '') {
        window.open(baseUrl + lankod + kommunkod + '/' + lankod + kommunkod + '.htm', 'BoprisetWindow', winsettings);
    } else {
        alert('Välj län och kommun');
    }
}
function openBokalkylWindow(url, params) {
    s.prop9 = "Bolanekalkyl";
    logClick('objektlank_bokalkyl');
    w = window.open(url + params, 'BokalkylWindow', 'width=730,height=445,location=no,scrollbars=yes,menubar=no,toolbar=no,resizable=yes,status=yes');
    w.focus();
}

function openLanelofteWindow(url) {
    s.prop9 = "Lanelofte";
    logClick('objektlank_lanelofte');
    w = window.open(url, 'LanelofteWindow', 'width=760,height=600,location=no,scrollbars=yes,menubar=no,toolbar=no,resizable=yes,status=yes');
    w.focus();
}

function SearchTabStrip_OnMouseOver(sourceObject) {
    var sourceID = sourceObject.id;

    var left = document.getElementById(sourceID + '_Left');
    var middle = document.getElementById(sourceID + '_Middle');
    var right = document.getElementById(sourceID + '_Right');


    if (left.parentNode.className != 'SearchResultTabSelected') {
        left.className = left.className + '_Hover';
        middle.className = middle.className + '_Hover';
        right.className = right.className + '_Hover';
    }
}

function SearchTabStrip_OnMouseOut(sourceObject) {
    var sourceID = sourceObject.id;

    var left = document.getElementById(sourceID + '_Left');
    var middle = document.getElementById(sourceID + '_Middle');
    var right = document.getElementById(sourceID + '_Right');

    if (left.parentNode.className != 'SearchResultTabSelected') {
        left.className = left.className.replace('_Hover', '');
        middle.className = middle.className.replace('_Hover', '');
        right.className = right.className.replace('_Hover', '');
    }
}

function toggleFontWeight(objectId) {
    var domObject = document.getElementById(objectId);

    domObject.style.fontWeight = (domObject.style.fontWeight == 'bold') ? '' : 'bold';
}

function fbs_click() {
    u = location.href;
    t = document.title;
    window.open('http://www.facebook.com/sharer.php?u=' + encodeURIComponent(u) + '&t=' + encodeURIComponent(t), 'sharer', 'toolbar=0,status=0,width=626,height=436');

    if (s) {
        s.prop9 = "Dela pa facebook";
    }

    return false;
}

// ------------------------------------------------------------
// Opens the 'broker calls you' window
// ------------------------------------------------------------
function openBrokerWindow(url, params) {
    w = window.open(url + params, 'BrokerWindow', 'width=570,height=380,location=no,scrollbars=no,menubar=no,toolbar=no,resizable=no,status=no');
    w.focus();
}

// ------------------------------------------------------------
// Thousands separator for number values
//   1. 2525643 --> 2 525 643
//   2. 12300.725 --> 12 300.725
// @num - The number to be formatted
// @decpoint - The decimal point character. if skipped, "." is used
// @sep - The separator character. if skipped, " " is used
// ------------------------------------------------------------
function FormatNumber(num, decpoint, sep) {
    if (arguments.length == 2)
        sep = " ";

    if (arguments.length == 1) {
        sep = " ";
        decpoint = ".";
    }

    num = num.toString();

    a = num.split(decpoint);
    x = a[0];
    y = a[1];
    z = "";

    if (typeof (x) != "undefined") {
        for (i = x.length - 1; i >= 0; i--)
            z += x.charAt(i);

        z = z.replace(/(\d{3})/g, "$1" + sep);
        if (z.slice(-sep.length) == sep)
            z = z.slice(0, -sep.length);

        x = "";

        for (i = z.length - 1; i >= 0; i--)
            x += z.charAt(i);

        if (typeof (y) != "undefined" && y.length > 0)
            x += decpoint + y;
    }
    return x;
}

//Google Analytics pageview tracking.
function trackVirtualPageView(path) {
    if (pageTracker) {
        pageTracker._trackPageview(path);
    }
}

//Cookiehandler (used by the iPhone popup)
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 setCookie(c_name, value, expiredays) {
    var exdate = new Date();
    exdate.setDate(exdate.getDate() + expiredays);
    document.cookie = c_name + "=" + escape(value) +
        ((expiredays == null) ? "" : ";expires=" + exdate.toUTCString());
}

// Overlay reposition when in left sidebar
function overlayWhenInLeftSidebar(divid) {
    overlay(divid);

    var ScrollTop = document.body.scrollTop;

    if (ScrollTop == 0) {
        if (window.pageYOffset)
            ScrollTop = window.pageYOffset;
        else
            ScrollTop = (document.body.parentElement) ? document.body.parentElement.scrollTop : 0;
    }

    var newTop = parseFloat($('#' + divid).css('top').replace('px', '')) + ScrollTop;
    $('#' + divid).css('top', newTop + 'px');
    initialize();
}

// ------------------------------------------------------------
// Handler for focus in the Broker search field
// ------------------------------------------------------------
function BrokerFocus(searchBox) {
    //var searchBox = document.getElementById(gBrokerSearchInputId);
    if (searchBox) {
        searchBox.value = '';
        searchBox.className = 'BrokerSearchInput';
        gBrokerFocused = true;
    }
}

// ------------------------------------------------------------
// Handler for keyup in the Broker search field
// ------------------------------------------------------------
function BrokerOnKeyUp(evt, BrokerSearch) {
    var keyCode = evt.keyCode;
    if (BrokerSearch && (keyCode != 38) && (keyCode != 40) && (keyCode != 13)) // up and down
    {
        var val = BrokerSearch.value
        if (val != '') {
            if (val.length > 1) {
                fireBrokerSuggestRequest(val, BrokerSearch.id);
            }
        }
        else {
            hideBrokerSuggest();
        }
    }
    else {
        ToggleLoader(false);
    }
    return true;
}

// ------------------------------------------------------------
// Handler for keydown in the Broker search field
// ------------------------------------------------------------
function BrokerOnKeyDown(evt) {
    var keyCode = evt.keyCode;

    if (keyCode == 38) // up
    {
        highlightBrokerSuggestItem('BrokerSuggestItem_' + (gCurrentBrokerSuggestItem - 1));

        // This is to avoid a bug in Safari that fires duplicate events
        if (evt.stopPropagation) {
            evt.stopPropagation();
        }
        return true;
    }
    else if (keyCode == 40) // down
    {
        highlightBrokerSuggestItem('BrokerSuggestItem_' + (gCurrentBrokerSuggestItem + 1));

        // This is to avoid a bug in Safari that fires duplicate events
        if (evt.stopPropagation) {
            evt.stopPropagation();
        }
        return true;
    }
    else if (((keyCode == 13) || (keyCode == 9)) && !gBrokerAbortSuggestionSearch) // enter or tab
    {
        fireBrokerSearch();
        return true;
    }

    return true;
}

// ------------------------------------------------------------
// Handler for keypress in the Broker search field
// ------------------------------------------------------------
function BrokerOnKeyPress(evt) {
    var keyCode = evt.keyCode;
    // This is to prevent postbacks when enter is pressed
    if (keyCode == 13) {
        return false;
    }
}

// ------------------------------------------------------------
// Fires suggestion request to the server.
// ------------------------------------------------------------
function fireBrokerSuggestRequest(search, BrokerSearchId) {
    $.ajax({
        type: 'POST',
        url: '/Templates/Facebook/WebServices/SearchBrokers.aspx?method=suggestionredirect&q=' + encodeURI(search),
        contentType: 'application/json; charset=utf-8',
        dataType: 'json',
        success: function(data) {
            BrokerSuggestCompleted(data, BrokerSearchId);
        }
    });
    ToggleLoader(true);
}

// ------------------------------------------------------------
// Hides the suggest "drop-down"
// ------------------------------------------------------------
function hideBrokerSuggest() {
    var suggestDiv = document.getElementById('BrokerSuggestDiv');
    if (suggestDiv) {
        $(suggestDiv).css('display', 'none');
        gCurrentBrokerSuggestItem = -1;
    }
    var nohitsDiv = document.getElementById('BrokerSuggestNoHits');
    if (nohitsDiv) {
        $(nohitsDiv).css('display', 'none');
        gCurrentBrokerSuggestItem = -1;
    }
}

// ------------------------------------------------------------
// Callback method that is called when a suggestion request is complete
// ------------------------------------------------------------
function BrokerSuggestCompleted(data, BrokerSearchId) {
    if (data) {
        var searchTerm = data.searchterm;
        var hitList = data.result;

        if (searchTerm == document.getElementById(BrokerSearchId).value) {
            if (hitList.length > 0) {
                $('#TextBoxBroker').attr('onkeypress', '');
                updateBrokerSuggest(hitList);
            }
            else {
                hideBrokerSuggest();
                ToggleLoader(false);
                if (isNaN(searchTerm)) {
                    setBrokerSuggestNoHitsVisibility(true);
                }
            }
        }
    }
}

// ------------------------------------------------------------
// Updates the suggest "drop-down" with new items.
// ------------------------------------------------------------
function updateBrokerSuggest(offices) {
    var suggestDiv = document.getElementById('BrokerSuggestDiv');

    if (suggestDiv) {
        suggestDiv.removeChild(suggestDiv.childNodes.item(0));
        var parentDiv = document.createElement("div");

        var html = '';
        for (var i = 0; i < offices.length; i++) {
            var itemDiv = document.createElement('div');
            itemDiv.id = 'BrokerSuggestItem_' + i;
            itemDiv.className = ((i == 0) ? 'BrokerSuggestItemSelected' : 'BrokerSuggestItem');

            if (itemDiv.addEventListener) {
                itemDiv.addEventListener('mouseover', function(e) { highlightBrokerSuggestItem(this.id); }, false);
                itemDiv.addEventListener('click', function(e) { fireBrokerSearch(); }, false);
            }
            else {
                itemDiv.attachEvent('onmouseover', function(e) { highlightBrokerSuggestItem(e.srcElement.id); }, false);
                itemDiv.attachEvent('onclick', function(e) { fireBrokerSearch(); }, false);
            }
            itemDiv.innerHTML = offices[i].name;

            var hidden = document.createElement('input');
            hidden.id = 'BrokerSuggestItemHidden_' + i;
            hidden.type = 'hidden';
            hidden.value = offices[i].name + ';' + offices[i].officeurl;

            itemDiv.appendChild(hidden);
            parentDiv.appendChild(itemDiv);
        }
        suggestDiv.appendChild(parentDiv);

        gCurrentBrokerSuggestItem = 0;

        if ($(suggestDiv).css('display') != 'block') {
            var searchBox = document.getElementById(gBrokerSearchInputId);
            if (searchBox) {
                $(suggestDiv).css('display', 'block');
                //hideWindowedControls();
            }
        }

        setBrokerSuggestNoHitsVisibility(false);
        ToggleLoader(false);
    }
}

function ToggleLoader(show) {
    if (show) {
        $('#topAjaxLoader').css('display', 'inline');
        $('#bottomAjaxLoader').css('display', 'inline');
    }
    else {
        $('#topAjaxLoader').css('display', 'none');
        $('#bottomAjaxLoader').css('display', 'none');
    }
}

// ------------------------------------------------------------
// Hides or shows the "No hits"-message below the search field.
// ------------------------------------------------------------
function setBrokerSuggestNoHitsVisibility(isVisible) {
    $('#BrokerSuggestNoHits').css('display', isVisible ? 'block' : 'none');
}

// ------------------------------------------------------------
// Highlights the suggest item with the specified index
// ------------------------------------------------------------
function highlightBrokerSuggestItem(id) {
    // The currently selected item
    var oldItem = document.getElementById('BrokerSuggestItem_' + gCurrentBrokerSuggestItem);
    // The new item to select
    var newItem = document.getElementById(id);
    if (oldItem && newItem) {
        oldItem.className = 'BrokerSuggestItem';
        newItem.className = 'BrokerSuggestItemSelected';
        gCurrentBrokerSuggestItem = parseInt(id.split('_')[1]);
    }
}

// ------------------------------------------------------------
// Fires the Broker search request
// ------------------------------------------------------------
function fireBrokerSearch() {
    var suggestItem = document.getElementById('BrokerSuggestItem_' + gCurrentBrokerSuggestItem);
    var searchBox = document.getElementById('TextBoxBroker');

    if (suggestItem) {
        var data = $(suggestItem).find('input').val().split(';');
        if (searchBox)
            searchBox.value = data[0].replace(/<.*?>/g, '');

        if ((data != null) && searchBox && (searchBox.className != 'BrokerSearchInputTip')) {
            hideBrokerSuggest();
            window.location = data[1];
        }
    }
}
