﻿// JScript File
var __repeater = null;
var __dataSource = null;
var __selectedIndex = 0;
var __char = '';
var __ie6Fix = false;

var __listingLink;
var __debug;
var __searchText;
var __searchLiteText;
var __searchCity; 
var __searchState;
var __searchZip; 
var __searchList;
var __searchFilter;
var __searchEvent;
var __searchMessage;
var __searchWarning;
var __searchID;
var __searchProperty;
var __watermarkSearch;
var __watermarkProperty;
var __searchButton;

// CONSTANTS
var __pageSize = 10;

// TEMPLATES
var __template = "<div id='item_{Index}' onclick='select({Index})' onmouseover='hilight({Index})' class='{Style}'>{Text}</div>";
var __linkTemplate = "<li><a onclick='select({Index});setMessage();' href='javascript:void(0)'>{Text}</a></li>";
var __refineYourSearchMesage = "<div style='font-size: 17px; font-weight: normal;'>Your search could not be found. Please try another search term.</div>";
var __refineYourZipMesage = "<div style='font-size: 17px; font-weight: normal;'>ZIP CODE could not be found. Please try another ZIP CODE search.</div>";
var __selectSearchMesage = "<div style='font-size: 17px; font-weight: normal;'>Did you mean?<ul>{Value}</ul><div>";
var __refineYourPriceMesage = "<div style='font-size: 17px; font-weight: normal;'>Price Min must be less than or equal to Price Max.</div>"; //Added for DE254

// RESOURCE CONSTANTS
var __cityWatermarkText = "Enter City, State or Zip to Begin Search";
var __LiteWatermarkText = "Enter City, State or Zip";
var __propertyWatermarkText = "Property Name";

function init()
{
loadData();
displayList(false);
}

function loadData()
{
__repeater = new JRepeater();           
__repeater.setElement(__searchList);
__repeater.setTemplate(__template);
__repeater.onDataBind(repeater_OnDataBind);
}

// generic callback
function getCity_Callback(response)
{
__dataSource = response.value;

var keynum = getKeyCode(__searchEvent);
bindData(__searchEvent, __searchFilter);

if (__repeater.dataSource != null && __repeater.dataSource.length > 0 && keynum != 13 && __searchFilter != "") {
displayList(true);
}
else {
displayList(false);
}
__complited = true;
}

function repeater_OnDataBind(args)
{
if (args.index == this.selectedIndex)
args.dataItem.Style = "active";
else
args.dataItem.Style = "inactive";

args.dataItem.Text = args.dataItem.City + ", " + args.dataItem.StateCode.toUpperCase();
}

function submitSearch() {
__validated = false;
try {
var result = validate();
if (result) {
setSearchTags(__originalSearchText);
__originalSearchText = "";
return result;
}
else {
setBadSearchTags(__originalSearchText);
__originalSearchText = "";
return result;
}
} catch (e) { }
return false;
}

var __validated = false;
function validate() {
setMessage(""); 
if (__searchText.value == "")
{
setMessage(__refineYourSearchMesage);
initWatermark();
return false;
}
var priceMin = null;
var priceMax = null;
if (__searchPriceFrom != null && __searchPriceTo != null) {
priceMin = parseInt(__searchPriceFrom.getValue()); 
priceMax = parseInt(__searchPriceTo.getValue()); 
}
if (priceMax != null && priceMax != -1)  
{
if (priceMin > priceMax) {
setMessage(__refineYourPriceMesage);
initWatermark();
return false;
}
}

var state = isState(__searchText.value.toLowerCase());

if ((isCity() || isCollege()) && state != null)
{
clearValues();
__searchText.value = state.name.toUpperCase();
__searchState.value = state.name;
return true;
}
else
{
var data = findSelection(__searchText.value);
var zip = isZip();
if (zip != null)
{
var isZipValid = CSi.ApartmentGuide.Presentation.Controllers.AptAjax.IsZipCodeValid(zip).value;
if (isZipValid)
{
clearValues();
__searchZip.value = zip;
__searchText.value = zip;
return true;
}
else
{
setMessage(__refineYourZipMesage);
initWatermark();
return false;     
}
}
else if (data == null)
{
__char = getFilterKey();
if (__char != null && __validated == false)
{
__dataSource = CSi.ApartmentGuide.Presentation.Controllers.AptAjax.GetCities(__char).value;
__validated = true;
return validate();          
}
else
{
setMessage(__refineYourSearchMesage);
initWatermark();
return false;  
}
}
else if (data.length > 1)
{
clearValues();
var rpt = new JRepeater();           
rpt.setElement(__searchMessage);
rpt.setTemplate(__linkTemplate);
rpt.dataSource = data;
rpt.onDataBind(repeater_OnDataBind);
rpt.dataBind();


var tmp = new JTemplate(__selectSearchMesage);
setMessage(tmp.evaluate(__searchMessage.innerHTML));
initWatermark();
return false; 
}
else if (data.length == 1)
{
clearValues();
select(0);
return true;
}
else
{
clearValues();
setMessage(__refineYourSearchMesage);
initWatermark();
return false;
}
}

return false;
}

function bindData(e, filter)
{
var keynum = getKeyCode(e);

if (keynum == 13) { return; }

__selectedIndex = 0;

if (__dataSource != null && filter != null)
{
findSelection(filter);
__repeater.dataBind();
}
}

function findSelection(filter)
{
if (__dataSource != null && filter != null)
{ 
try
{
filter = filter.toLowerCase();

var filterItems = filter.substr(filter.length - 3, 1);

filter = refineFilter(filter);

if (filterItems == "," || filterItems == " ") 
{
__repeater.dataSource = __dataSource.filter(function(x) {
var cityStateCode = x.City.toLowerCase() + ", " + x.StateCode.toLowerCase();
var cityStateCodeNoSpace = x.City.toLowerCase() + "," + x.StateCode.toLowerCase();
var cityStateCodeNoComma = x.City.toLowerCase() + " " + x.StateCode.toLowerCase();

return ((cityStateCode.indexOf(filter, 0) == 0) ||
(cityStateCodeNoSpace.indexOf(filter, 0) == 0) ||
(cityStateCodeNoComma.indexOf(filter, 0) == 0));
}).slice(0, __pageSize); 
}
else
{
__repeater.dataSource = __dataSource.filter(function(x) {
var cityState = x.City.toLowerCase() + ", " + x.State.toLowerCase();
var cityStateNoSpace = x.City.toLowerCase() + "," + x.State.toLowerCase();
var cityStateNoComma = x.City.toLowerCase() + " " + x.State.toLowerCase();
return ((cityStateNoComma.indexOf(filter, 0) == 0) ||
(cityStateNoSpace.indexOf(filter, 0) == 0) ||
(cityState.indexOf(filter, 0) == 0));
}).slice(0, __pageSize);
}
}catch(e){}
return __repeater.dataSource;
}
}

function browse(e)
{
    __searchID.value = "";
    __validated = false;

    if (__repeater.dataSource == null)
    return true;

    var keynum = getKeyCode(e);
    
    if (keynum == 37 || keynum == 39)
    {
    return true;
    }
    else if (keynum == 38 && __selectedIndex > 0)
    {
    __selectedIndex = Number(__selectedIndex) - 1;
    }
    else if (keynum == 40)
    {
    if (__selectedIndex < __repeater.dataSource.length - 1)
    __selectedIndex = Number(__selectedIndex) + 1;
    }
    else if (keynum == 13 || (keynum == 9 && __searchList.style.display == "block"))
    {
        select(__selectedIndex);
        return true;
    }

    hilight(__selectedIndex);
    return true;
}

function asyncBrowse(e) {
browse(e);
}

function asyncSearch(e, value) 
{
if (value.length > 2) 
{
__searchFilter = value;

if (e != null)
__searchEvent = e;
search();
}
else if (value.trim() == "")
{
displayList(false);
}
return true;
}

var __complited = true;
function search()
{
__complited = false;
__validated = false;

setMessage();

var keynum = getKeyCode(__searchEvent);
if (keynum == 37 || keynum == 39 || keynum == 38 || keynum == 40)
{
return true;
}

try
{
var newChar = getFilterKey();
if (__char != newChar && newChar != null)
{
__char = newChar;
displayList(false);
Csi.NewHomeGuide.Core.Business.NHGAjax.GetCities(__char, getCity_Callback);
return;
}
bindData(__searchEvent, __searchFilter);

if (__repeater.dataSource != null && __repeater.dataSource.length > 0 && keynum != 13 && __searchFilter != "")
{
displayList(true);
}
else
{
displayList(false);
}
}
catch(e)
{}
__complited = true;
return true;
}

function getFilterKey() 
{
var newChar = null;

var filter = "";
if (__searchText != null)
filter = refineFilter(__searchText.value);
else
filter = refineFilter(__searchLiteText.value);

if (filter.length > 1)
newChar = filter.substr(0, 3).toUpperCase();
return newChar;
}

var __originalSearchText = "";
function select(index) {
if (__originalSearchText == "") 
{
if (__searchText != null)
__originalSearchText = __searchText.value;
else
__originalSearchText = __searchLiteText.value;
}

clearValues();

if (__repeater.dataSource == null || __repeater.dataSource.length == 0)
return;

if (__searchText != null)
__searchText.value = __repeater.dataSource[index].City + ", " + __repeater.dataSource[index].StateCode.toUpperCase();
else
__searchLiteText.value = __repeater.dataSource[index].City + ", " + __repeater.dataSource[index].StateCode.toUpperCase();
__searchState.value = __repeater.dataSource[index].State;
__searchCity.value = __repeater.dataSource[index].City;
__searchID.value = __repeater.dataSource[index].SearchID;
displayList(false);
__selectedIndex = 0; 

return false;
}

function refineFilter(filter) {
filter = filter.replace(new RegExp("^(st )|^(st. )|^(St )|^(St. )|^(ST )|^(ST. )|^(sT )|^(sT. )", "g"), "saint ");
filter = filter.replace(new RegExp("^(ft )|^(ft. )|^(Ft )|^(Ft. )|^(FT )|^(FT. )|^(fT )|(fT. )", "g"), "fort ");
filter = filter.replace(new RegExp("^(mt )|^(mt. )|^(Mt )|^(Mt. )|^(MT )|^(MT. )|^(mT )|(mT. )", "g"), "mount ");
filter = filter.replace(new RegExp("^(pt )|^(pt. )|^(Pt )|^(Pt. )|^(PT )|^(PT. )|^(pT )|(pT. )", "g"), "point ");
filter = filter.replace(new RegExp("^(gr )|^(gr. )|^(Gr )|^(Gr. )|^(GR )|^(GR. )|^(gR )|(gR. )", "g"), "grand ");
return filter;
}

function hilight(index)
{
if (__repeater.dataSource == null)
return;

var to = (__repeater.dataSource.length < __pageSize) ? __repeater.dataSource.length - 1 : __pageSize;

var i = 0;
while(true)
{
if (document.getElementById("item_" + i) != null)
document.getElementById("item_" + i).className = "inactive";
else
break;
i += 1;
}
if (document.getElementById("item_" + index) != null)
document.getElementById("item_" + index).className = "active";
__selectedIndex = index;

// remove
selectedIndex = __selectedIndex;
}

function setMessage(text)
{
if (text == null || text == "")
{
if (__searchMessage != null)
{
__searchMessage.innerHTML = "";
__searchMessage.style.display = 'none';
}
new IE6Select(__searchList).UndoHide();
__ie6Fix = false;
}
else
{
if (__searchMessage != null)
{
__searchMessage.innerHTML = text;
__searchMessage.style.display = 'block';
}
new IE6Select(__searchMessage).Hide();
__ie6Fix = true;
}
}

function displayList(value)
{
var val = (value) ? 'block' : 'none';

if ((__repeater.dataSource == null || __repeater.dataSource.length == 0) && (val == 'block'))
val = 'none';

if (val == 'none')
__searchList.innerHTML = "";
__searchList.style.display = val;

if (val == 'none') {
if (!__ie6Fix)
new IE6Select(__searchList).UndoHide();
__ie6Fix = false;
}
else
new IE6Select(__searchList).Hide();
}

function isZip() {
var zip = null;
if (isCity()) {
var re = new RegExp(/(\d{5})|(\d{5}-\d{4})/);
var m = re.exec(__searchText.value);
if (m != null && m.length > 0)
zip = m[0];
}
return zip;
}

function clearValues()
{
__searchState.value = "";
__searchCity.value = "";
__searchZip.value = "";
}

function initWatermark()
{
if (__watermarkProperty != null)
{
if (__searchProperty.value == "")
{
__watermarkProperty.style.display = 'block';
__watermarkProperty.value = __propertyWatermarkText;
__searchProperty.style.display = 'none';
}
else
{
__watermarkProperty.style.display = 'none';
__searchProperty.style.display = 'block';
}
}

if (__searchText != null)
{
if (__searchText.value == "")
{
__watermarkSearch.value = __cityWatermarkText;
__watermarkSearch.style.display = 'block';
__searchText.style.display = 'none';
}
else
{
__watermarkSearch.style.display = 'none';
__searchText.style.display = 'block';
}
}

if (__searchLiteText != null)
{
if (__searchLiteText.value == "")
{
__watermarkLiteSearch.value = __LiteWatermarkText;
__watermarkLiteSearch.style.display = 'block';
__searchLiteText.style.display = 'none';
}
else
{
__watermarkLiteSearch.style.display = 'none';
__searchLiteText.style.display = 'block';
}
}
}

function watermarkFocus(isProperty) 
{
setMessage("");

if (isProperty)
{
if (__watermarkProperty != null)
{
__searchProperty.style.display = 'block';
__watermarkProperty.style.display = 'none';
__searchProperty.focus();
}
}
else if (__watermarkSearch != null)
{
__watermarkSearch.style.display = 'none';
__searchText.style.display = 'block';
try
{
__searchText.focus();   
}catch(e){}
}
else
{
__watermarkLiteSearch.style.display = 'none';
__searchLiteText.style.display = 'block';
try
{
__searchLiteText.focus();
}
catch(e){}
}
}


function setSearchTags(searchText) {
dcsMultiTrackClick('DCS.dcsuri', 'Multitrack', 'DCSext.clicktype', 'search', 'DCSext.clickvalue', searchText, 'DCSext.search', searchText);
}

function setBadSearchTags(searchText) {
dcsMultiTrackClick('DCS.dcsuri', 'Multitrack', 'DCSext.clicktype', 'badsearch', 'DCSext.clickvalue', searchText, 'DCSext.badsearch', searchText);
}
