﻿var emptyCityMessage = "";
var emptySearchMessage = "";

var incorrectCityMessage = "Not found - please select another city";
var loadingCityMessage = "<span class=\"LoadingMsg\">Checking City... Please wait.</span>";
var emptyBusinessMessage = "Query must be longer than 2 letters";
var searchflag = true;
var correctCity = false;


var txtAutocomplete = $("input[name$='txtAutocomplete']");


var valCity = $("span[id$='valCity']");

var options1, options, searchac, cityac;

var rbCategory = $('a[id$="rbCategory"]');
var rbBusiness = $('a[id$="rbBusiness"]');
var spnCategory = $('span[id$="spnCategory"]');
var spnBusiness = $('span[id$="spnBusiness"]');
var rbValue = $('input.searchTypeHidden');

var watermarkMessage = "I'm looking for a...";
var watermarkMessageCity = "in (City)";


$(document).ready(function() {
    emptyCityMessage = valCity.html();
    jQuery(function() {
        options = {
            serviceUrl: serviceUrl,
            width: 300,
            minChars: 1,
            params: { type: 'city' }
        };
        cityac = txtAutocomplete.autocomplete(options);
    });  
});

$(document).ready(function() {
    SetWatermarkMessage(txtAutocomplete, watermarkMessageCity);
});

function SetWatermarkMessage(elem, message) {
    if (elem.val() == "" || elem.val() == message) {
        elem.addClass("watermarkOn").val(message);
    }
    
    // Define what happens when the textbox comes under focus
    // Remove the watermark class and clear the box
    elem.focus(function() {
        $(this).filter(function() {
            // We only want this to apply if there's not 
            // something actually entered
            return $(this).val() == "" || $(this).val() == message
        }).removeClass("watermarkOn").val("");

    });

    // Define what happens when the textbox loses focus
    // Add the watermark class and default text
    elem.blur(function() {
        $(this).filter(function() {
            // We only want this to apply if there's not
            // something actually entered
            return $(this).val() == ""
        }).addClass("watermarkOn").val(message);
    });
}


function checkCityValue(q) {
    if (q.length > 0) {
        var hasSuggestions = false;
        $.ajax({
            url: serviceUrl,
            dataType: 'text',
            data: "type=checkCity&query=" + q,
            beforeSend: function() {
                SetErrorMessageCity(loadingCityMessage);
                correctCity = false;
                Page_BlockSubmit = true;
            },
            success: function(data) {
                try {
                    var responseString = $.parseJSON(data);
                } catch (err) { err; return; }
                if (responseString != null) {
                    if (responseString.valid == "true") {
                        Page_BlockSubmit = false;
                        correctCity = true;
                        SetErrorMessageCity("");
                        __doPostBack(btnGo, '');
                    } else if (responseString.valid == "false") {
                        if (responseString.suggestions.length > 0) {
                            hasSuggestions = true;
                            SetErrorMessageCity("");
                            cityac.setOptions({ suggestions: responseString.suggestions, isLocal: true, selectedIndex: 0 });
                            cityac.getSuggestions(q);
                        } else {
                            SetErrorMessageCity(incorrectCityMessage);
                        }
                        correctCity = false;
                    }
                } else {
                    valCity.show()
                    SetErrorMessageCity(incorrectCityMessage);
                    correctCity = false;
                }
            },
            complete: function() {
                Page_BlockSubmit = false;
                if (valCity.html() == loadingCityMessage) {
                    SetErrorMessageCity("");
                }
                cityac.setOptions({ params: { type: 'city' }, isLocal: false });
                if (hasSuggestions) {
                    cityac.stopKillSuggestions();
                }
            },
            error: function() { correctCity = false; }
        });
    }
}

function validateFields() {
    var pageStatus = runClientValidations();
    var cityString = $.trim(txtAutocomplete.val());
    if (pageStatus && cityString.length > 0 && cityString != watermarkMessageCity) {
        checkCityValue(cityString);
        pageStatus = correctCity;
    }

//    if (valCity.css("display") == "none") {
//        ShowErrorMessageCity(0);
//    }
    
    return pageStatus;
}

function runClientValidations() {
    var bolSearch = ClientValidateSearch();
    var bolCity = ClientValidateCity();
    return bolSearch && bolCity;
}

function ClientValidateCity() {
    valCity.hide();
    var cityString = $.trim(txtAutocomplete.val());
    if ((GetSelectedSearchType() == 1) && (cityString == "" || cityString == watermarkMessageCity)) {
        SetErrorMessageCity(emptyCityMessage);
        return false;
    } else {
        SetErrorMessageCity("");
        return true;
    }
}

function ClientValidateSearch() {
    valSearchStr.hide();
    var searchStr = $.trim(txtSearchStr.val());
    if (searchStr != "" && searchStr != watermarkMessage && searchStr.length > 2) {
        SetErrorMessageSearchStr("");
        return true;
    }
    else {
        if (searchStr == "" || searchStr == watermarkMessage) {
            SetErrorMessageSearchStr(emptySearchMessage);
        }
        else {
            SetErrorMessageSearchStr(emptyBusinessMessage);
        }
        return false;        
    }
}

function SetErrorMessageSearchStr(message) {
    valSearchStr.html(message);
    if (message.length == 0) {
        ShowErrorMessageSearchStr(0);
    }
    else {
        valSearchStr.show();
        ShowErrorMessageSearchStr(10000);
    }
}

function SetErrorMessageCity(message) {
    valCity.html(message);
    if (message.length == 0) {
        ShowErrorMessageCity(0);
    }
    else {
        valCity.show();
        ShowErrorMessageCity(10000);
    }
}


function ShowErrorMessage(element, timeToHide) {
    element.stop(true, true);
    if (timeToHide > 0) {
        element.css('display', 'block');
        element.fadeOut(timeToHide);
    }
}
