﻿/*
Mekanist.net SearchBox Component
Developed by Eren Baydemir
eren@mekanist.net
www.erenbaydemir.com
*/

var TXT_Search = document.getElementById("TXT_Search");
var DIV_Location = document.getElementById("DIV_Location");
var SPAN_Location = document.getElementById("SPAN_Location");
var DIV_SearchResults = document.getElementById("DIV_SearchResults");
var TD_SearchResults = document.getElementById("TD_SearchResults");

var _locact = false;
var _emptyTextBox = false;

var _ActiveLocationId = 0;
var _ActiveLocationName = "";
var _ActiveLocationType = 0;
var _ActiveCoorX = 0;
var _ActiveCoorY = 0;

function setLocation(LocationId, LocationName, LocationType, __coorx, __coory) {
    if (_locact || LocationName.lenght == 0)
        return;

    _ActiveLocationId = LocationId;
    _ActiveLocationName = LocationName;
    _ActiveLocationType = LocationType;
    _ActiveCoorX = __coorx;
    _ActiveCoorY = __coory;

    _locact = true;

    LocationName = LocationName.substr(0, 1).toUpperCase() + LocationName.substr(1, LocationName.length - 1).toLowerCase();

    SPAN_Location.innerHTML = LocationName + ' ve çevresinde ara';
    //DIV_Location.style.left = GetLeft(TXT_Search) + 4 + "px";
    //DIV_Location.style.top = GetTop(TXT_Search) + 4 + "px";

    if (xmlHttp.readyState == 1 || xmlHttp.readyState == 2) {
        xmlHttp.abort();
    }
    hideResults();

    blinkLabel();
}

var _blinkCount = 0;
var _blinkTimer;

function blinkLabel() {
    //DIV_Location.style.display = 'block';
    $("#DIV_Location").animate({ width: 'show', opacity: 'show' }, 200, function () {
        var PadLeft = DIV_Location.offsetWidth + 6;

        TXT_Search.value = ''

        TXT_Search.style.paddingLeft = PadLeft + "px";
        TXT_Search.style.width = 500 - PadLeft - 5 + "px";

        setTimeout("TXT_Search.value = '*'; TXT_Search.value = '';", 75); // IE 7&8  Bug workaround - E.B.

        _emptyTextBox = true;
    });
    //_blinkTimer = setInterval("_blinkLabelCoreFunc()", 200);
}

function _blinkLabelCoreFunc() {
    if (DIV_Location.style.display == 'none')
        DIV_Location.style.display = 'block';
    else
        DIV_Location.style.display = 'none';

    _blinkCount++;

    if (_blinkCount == 6) {
        clearInterval(_blinkTimer);
        _blinkCount = 0;
    }
}

function clearLocation() {
    if (_idleTextbox)
        TXT_Search.select();

    _locact = false;
    
    //DIV_Location.style.display = 'none';
    $("#DIV_Location").animate({ width: 'hide', opacity: 'hide' }, 200, function () {

    });

    TXT_Search.style.paddingLeft = "5px";
    TXT_Search.style.width = "490px";
    TXT_Search.value = "*";
    TXT_Search.value = "";

    _ActiveLocationId = 0;
    _ActiveLocationName = "";
    _ActiveLocationType = -1;
    _ActiveCoorX = 0;
    _ActiveCoorY = 0;

    examples_GLOBAL();
    hideResults();
    
}



function checkText(event) {
    var keyCode = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode;

    if (keyCode == 38) {
        MoveUp();
        return false;
    }
    else if (keyCode == 40) {
        MoveDown();
        return false;
    }
    else if (keyCode == 13) {
        EnterAction();
        return false;
    }
    else if (keyCode == 37 || keyCode == 39) {
        return true;
    }

    var textToCheck = trim(TXT_Search.value).toLowerCase();

    if (_idleTextbox) {
        useTextbox();
        //TXT_Search.value = "";
    }

    if (_locact && keyCode == 8 && textToCheck.length == 0 && _emptyTextBox) {
        clearLocation();
    }

    if (textToCheck.length == 0)
        _emptyTextBox = true;
    else
        _emptyTextBox = false;

    if (!_emptyTextBox) {
        AsyncProcessQuery(textToCheck);
    }
    else {
        hideResults();
    }

    return true;
}

var _ActiveOption = 0;
var _OptionCount = 0;

function EnterAction() {
    if (_ActiveOption > -1 && ResultsArray.length > 0) {
        if (ResultsArray[_ActiveOption][0] == 0) {
            // Semt
            if (!_locact) {
                setLocation(ResultsArray[_ActiveOption][1], ResultsArray[_ActiveOption][2], ResultsArray[_ActiveOption][3], ResultsArray[_ActiveOption][4], ResultsArray[_ActiveOption][5]);
            }
        }
        else if (ResultsArray[_ActiveOption][0] == 1) {
            // Mekân
            TXT_Search.value = ResultsArray[_ActiveOption][2];
            window.location = "/showplace.aspx?id=" + ResultsArray[_ActiveOption][1];
        }
    }
    else {
        //window.location = "/Navigator.aspx?keyword=" + trim(TXT_Search.value);
        if (_ActiveLocationType == 0) {
            window.location = "/Navigator.aspx?keyword=" + escape(TXT_Search.value) + "&ProvinceId=" + _ActiveLocationId + "&ProvinceName=" + escape(_ActiveLocationName) + "&CoorX=" + _ActiveCoorX + "&CoorY=" + _ActiveCoorY + "&radius=5"; ;
        }
        else if (_ActiveLocationType == 1) {
            window.location = "/Navigator.aspx?keyword=" + escape(TXT_Search.value) + "&CityId=" + _ActiveLocationId + "&CityName=" + escape(_ActiveLocationName) + "&CoorX=" + _ActiveCoorX + "&CoorY=" + _ActiveCoorY + "&radius=25";
        }
        else {
            window.location = "/Navigator.aspx?keyword=" + escape(TXT_Search.value);
        }
    }

    hideResults();
}

function clickSearch() {
    if (trim(TXT_Search.value).length > 0 && !_idleTextbox) {
        if (_ActiveLocationType == 0) {
            window.location = "/Navigator.aspx?keyword=" + escape(TXT_Search.value) + "&ProvinceId=" + _ActiveLocationId + "&ProvinceName=" + escape(_ActiveLocationName) + "&CoorX=" + _ActiveCoorX + "&CoorY=" + _ActiveCoorY + "&radius=5";
        }
        else if (_ActiveLocationType == 1) {
            window.location = "/Navigator.aspx?keyword=" + escape(TXT_Search.value) + "&CityId=" + _ActiveLocationId + "&CityName=" + escape(_ActiveLocationName) + "&CoorX=" + _ActiveCoorX + "&CoorY=" + _ActiveCoorY + "&radius=25";
        }
        else {
            window.location = "/Navigator.aspx?keyword=" + escape(TXT_Search.value);
        }
    }
}

function ClickAction(index) {
    TXT_Search.value = ResultsArray[index][2];
    window.location = "/showplace.aspx?id=" + ResultsArray[index][1];
    hideResults();
}

function MoveUp() {
    DeselectAllOptions();
    decreaseActiveOption();
    SelectOption(_ActiveOption);
}

function MoveDown() {
    DeselectAllOptions();
    increaseActiveOption();
    SelectOption(_ActiveOption);
}

function decreaseActiveOption() {
    if (_ActiveOption > 0)
        _ActiveOption--;
    else
        _ActiveOption = _OptionCount - 1;
}

function increaseActiveOption() {
    if (_ActiveOption == _OptionCount - 1)
        _ActiveOption = 0;
    else
        _ActiveOption++;
}

function SelectOption(OptionIndex) {
    var curOption = document.getElementById("opt" + OptionIndex);
    if (curOption) {
        if (curOption.className == '') {
            curOption.className = 'act';
        }
        else if (curOption.className == 'pro') {
            curOption.className = 'proact';
        }
    }
}

function DeselectAllOptions() {
    for (var i = 0; i < _OptionCount; i++) {
        var curOption = document.getElementById("opt" + i);
        if (curOption.className == 'act')
            curOption.className = '';
        else if (curOption.className == 'proact') {
            curOption.className = 'pro';
        }
    }
}

/* BEGIN -> Async Codes */

var xmlHttp = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("MSXML2.XMLHTTP.3.0");
function AsyncProcessQuery(Key) {
    if (Key.length < 2) {
        hideResults();
        return;
    }
    try {
        // Firefox, Opera 8.0+, Safari
        if (xmlHttp.readyState == 1 || xmlHttp.readyState == 2) {
            xmlHttp.abort();
        }
        var URL;

        if (_ActiveLocationId == 0)
            URL = "/Async_Searchbox.aspx?query=" + escape(Key) + "&nocache=" + Date();
        else if (_ActiveLocationType == 0)
            URL = "/Async_Searchbox.aspx?query=" + escape(Key) + "&ProvinceId=" + _ActiveLocationId + "&nocache=" + Date();
        else if (_ActiveLocationType == 1)
            URL = "/Async_Searchbox.aspx?query=" + escape(Key) + "&CityId=" + _ActiveLocationId + "&nocache=" + Date();

        xmlHttp.open("GET", URL, true);
        xmlHttp.onreadystatechange = function() {
            if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
                processResponseDoc(xmlHttp.responseText);
            }
        };

        xmlHttp.send(null);
    }
    catch (e) {
        alert("Lütfen internet bağlantınızı kontrol ediniz: " + e);
        return;
    }
}

var ResultsArray = new Array();

function processResponseDoc(doc) {
    TD_SearchResults.innerHTML = "";
    _OptionCount = 0;
    _ActiveOption = 0;
    ResultsArray = new Array();

    var _a1 = doc.split("#");

    if (trim(_a1[0]).length > 0 && !_locact) {
        var _a2 = _a1[0].split(",");
        TD_SearchResults.innerHTML = createLocationOption(_a2[2], _a2[1], _a2[0], _a2[3], _a2[4]);
        ResultsArray[0] = new Array();
        ResultsArray[0][0] = 0;
        ResultsArray[0][1] = _a2[1];
        ResultsArray[0][2] = _a2[2];
        ResultsArray[0][3] = _a2[0];
        ResultsArray[0][4] = _a2[3];
        ResultsArray[0][5] = _a2[4];
    }

    if (trim(_a1[1]).length > 0) {
        var _a3 = _a1[1].split(";");

        for (var i = 0; i < _a3.length; i++) {
            var _a4 = _a3[i].split(",");
            TD_SearchResults.innerHTML += createPlaceOption(_a4[1], _a4[0], _a4[2], _a4[3], _a4[4]);
            ResultsArray[ResultsArray.length] = new Array();
            ResultsArray[ResultsArray.length - 1][0] = 1;
            ResultsArray[ResultsArray.length - 1][1] = _a4[0];
            ResultsArray[ResultsArray.length - 1][2] = _a4[1];
            ResultsArray[ResultsArray.length - 1][3] = _a4[2];
            ResultsArray[ResultsArray.length - 1][4] = _a4[3];
            ResultsArray[ResultsArray.length - 1][5] = _a4[4];
        }
    }

    if (trim(_a1[0]).length + trim(_a1[1]).length > 0) {
        showResults();
        SelectOption(_ActiveOption);
    }
    else
        hideResults();

}

function createLocationOption(name, id, type, _coorx, _coory) {
    var sb = new StringBuilder();
    sb.append("<a id='opt" + _OptionCount++ + "' href=\"javascript:setLocation(" + id + ", '" + name + "', " + type + ", " + _coorx + ", " + _coory + ")\" class='pro'>");
    sb.append("<div class='sbox_loc'>" + name + " ve çevresinde ara</div>");
    sb.append("</a>");
    return sb.toString();
}

function createPlaceOption(name, id, logofilename, location, score) {

    var ix = name.toLowerCase().indexOf(trim(TXT_Search.value).toLowerCase());
    if (ix > -1)
    {
        var len = trim(TXT_Search.value).length;
        name = name.substr(0, ix) + "<span class='sb_highlight'>" + name.substr(ix, len) + "</span>" + name.substr(ix + len, name.length - ix - len);
    }
            
    var sb = new StringBuilder();
    sb.append("<a id='opt" + _OptionCount + "' href='javascript:ClickAction(" + _OptionCount++ + ")'>");
    sb.append("<div class='sbox_i'><img width='32' src='http://www.mekanist.net/img/logos/32/" + logofilename + "' /></div>");
    sb.append("<div>");
    sb.append("<div class='sbox_t'>" + name + "</div>");
    sb.append("<div class='sbox_s'>" + createStars(score) + "</div>");
    sb.append("</div>");
    sb.append("<div class='sbox_d'>" + location + "</div>");
    sb.append("</a>");
    return sb.toString();
}

function createStars(score) {
    var sb = new StringBuilder();
    var INT_Score = parseInt(score);

    for (var i = 0; i < INT_Score; i++) {
        sb.append("<img src='/img/favorites.png' />");
    }

    INT_Score = 5 - INT_Score;

    for (var i = 0; i < INT_Score; i++) {
        sb.append("<img src='/img/favorites0.png' />");
    }

    return sb.toString();
}

function hideResults() {
    //DIV_SearchResults.style.display = '';
    $("#DIV_SearchResults").animate({ height: 'hide' }, 400, function () {
        TD_SearchResults.innerHTML = "";
        _OptionCount = 0;
        _ActiveOption = 0;
        ResultsArray = new Array();
    });
}

function showResults() {
    //DIV_SearchResults.style.display = 'block';
    $("#DIV_SearchResults").animate({height: 'show'}, 300);
}

/* END -> Async Codes */

var _idleTextbox = true;

var _CatExamplesOrder = 0;
var ARR_CatExamples;
var exTypes = 0;

try
{
    var tmp = ProvinceId;
    tmp++;
    exTypes = 1;
}
catch(x)
{}

try {
    var tmp = CityId;
    tmp++;
    exTypes = 1;
}
catch (x)
{ }

if (exTypes == 0) 
{
    examples_GLOBAL();
}
else
{
    examples_LOCAL();
}

function examples_GLOBAL()
{
    ARR_CatExamples = new Array();
    ARR_CatExamples[0] = "Arama yapacağınız semti / şehri ve kelimeyi yazın.";
    ARR_CatExamples[1] = "ör: Suadiye Köfte";
    ARR_CatExamples[2] = "ör: Maslak Cafe";
    ARR_CatExamples[3] = "ör: Eskişehir AVM";
    ARR_CatExamples[4] = "ör: Cadde Döviz";
    ARR_CatExamples[5] = "ör: Beşiktaş Emniyet";
}

function examples_LOCAL()
{
    ARR_CatExamples = new Array();
    ARR_CatExamples[0] = "ör: Cafe";
    ARR_CatExamples[1] = "ör: Köfte";
    ARR_CatExamples[2] = "ör: Pizza";
    ARR_CatExamples[3] = "ör: Otel";
    ARR_CatExamples[4] = "ör: Döviz";
    ARR_CatExamples[5] = "ör: Banka";
    ARR_CatExamples[6] = "ör: Pastane";
    ARR_CatExamples[7] = "ör: Market";
    ARR_CatExamples[8] = "ör: Tamirci";
    ARR_CatExamples[9] = "ör: Oto Yıkama";
}

var timerHelpText;

function idleTextbox() {
    _CatExamplesOrder = 0;
    switchHelpTexts();
    //timerHelpText = setInterval("switchHelpTexts_faded();", 5000);
}

function switchHelpTexts() {
    TXT_Search.style.color = '#656565';
    TXT_Search.value = ARR_CatExamples[_CatExamplesOrder];
    _idleTextbox = true;

    if (_CatExamplesOrder < ARR_CatExamples.length - 1) {
        _CatExamplesOrder++;
    }
    else {
        _CatExamplesOrder = 0;
    }

    _fadeWait = setTimeout("fadeOut()", 5000);
}

var _fadeLevel = 10;
var _fadeTimer;
var _fadeWait;

function fadeOut() {
    _fadeTimer = setInterval("_fadeOut();", 50);
}

function _fadeOut() {
    if (_fadeLevel == 10)
        TXT_Search.style.color = '#656565';
    else if (_fadeLevel == 9)
        TXT_Search.style.color = '#777';
    else if (_fadeLevel == 8)
        TXT_Search.style.color = '#757575';
    else if (_fadeLevel == 7)
        TXT_Search.style.color = '#888';
    else if (_fadeLevel == 6)
        TXT_Search.style.color = '#858585';
    else if (_fadeLevel == 5)
        TXT_Search.style.color = '#999';
    else if (_fadeLevel == 4)
        TXT_Search.style.color = '#aaa';
    else if (_fadeLevel == 3)
        TXT_Search.style.color = '#bbb';
    else if (_fadeLevel == 2)
        TXT_Search.style.color = '#ccc';
    else if (_fadeLevel == 1)
        TXT_Search.style.color = '#dedede';
    else if (_fadeLevel == 0)
        TXT_Search.style.color = '#fff';


    if (_fadeLevel > 0)
        _fadeLevel--;
    else {
        clearInterval(_fadeTimer);

        TXT_Search.value = ARR_CatExamples[_CatExamplesOrder];
        _idleTextbox = true;

        if (_CatExamplesOrder < ARR_CatExamples.length - 1) {
            _CatExamplesOrder++;
        }
        else {
            _CatExamplesOrder = 0;
        }

        _fadeWait = setTimeout("fadeIn()", 1500);
    }
}

function fadeIn() {
    _fadeTimer = setInterval("_fadeIn();", 25);
}

function _fadeIn() {
    if (_fadeLevel == 0)
        TXT_Search.style.color = '#eee';
    else if (_fadeLevel == 1)
        TXT_Search.style.color = '#ddd';
    else if (_fadeLevel == 2)
        TXT_Search.style.color = '#ccc';
    else if (_fadeLevel == 3)
        TXT_Search.style.color = '#bbb';
    else if (_fadeLevel == 4)
        TXT_Search.style.color = '#aaa';
    else if (_fadeLevel == 5)
        TXT_Search.style.color = '#999';
    else if (_fadeLevel == 6)
        TXT_Search.style.color = '#858585';
    else if (_fadeLevel == 7)
        TXT_Search.style.color = '#888';
    else if (_fadeLevel == 8)
        TXT_Search.style.color = '#757575';
    else if (_fadeLevel == 9)
        TXT_Search.style.color = '#777';
    else if (_fadeLevel == 10)
        TXT_Search.style.color = '#656565';


    if (_fadeLevel < 10)
        _fadeLevel++;
    else {
        clearInterval(_fadeTimer);
        _fadeWait = setTimeout("fadeOut()", 5000);
    }
}

function useTextbox() {
    clearInterval(_fadeTimer);
    clearInterval(_fadeWait);
    TXT_Search.style.color = '';
    _idleTextbox = false;
}

var tmp_timeout;

function blurSearchBox() {
    TXT_Search.className = "";

    if (_locact)
        return;

    var textToCheck = trim(TXT_Search.value).toLowerCase();
    if (textToCheck.length == 0)
        idleTextbox();

    tmp_timeout = setTimeout("hideResults()", 500);
}

function focusSearchBox() {
    TXT_Search.className = "focus";
    if (_idleTextbox && trim(TXT_Search.value).length > 0) {
        useTextbox();
        TXT_Search.value = '';
    }
}

function clickSearchBox() {
    focusSearchBox();
}

idleTextbox();