﻿// WebServiceMethodError.js

var isShowedSuggestionsBox = false;
var searchid = "ctl00_ContentPlaceHolderTop_searchBox_search";
var suggestionboxid = "suggestionsBox";
var s_itemid = "sg_item";
var s_itemindex = -1;
var s_countid = "scount";
var s_text = "stext";
var s_target = "ctl00_ContentPlaceHolderTop_searchBox_starget";

var selectedsuggestionid = "";
// This function can cause a divide by zero error.

document.body.onclick = function() {
    HideSuggestionsBox();
}
//document.body.onclick = "alert('bbbbb')";
 
function Div(a, b) {
    Com.Mt.Web.BIS.WebServices.WSSuggestion.Div(a, b,
        SucceededCallback, FailedCallback);
}

function GoSearch() {
    var searchBox = document.getElementById(searchid);
    var htarget = document.getElementById(s_target);

    if (searchBox.value != "") {
        //window.location = htarget.value + '/' + searchBox.value;
        window.location = htarget.value + searchBox.value;
    }
}

function DisableSelection(target) {
    if (typeof target.onselectstart != "undefined") //IE route
        target.onselectstart = function() { return false }
    else if (typeof target.style.MozUserSelect != "undefined") //Firefox route
        target.style.MozUserSelect = "none"
    else //All other route (ie: Opera)
        target.onmousedown = function() { return false }
    target.style.cursor = "default"
}

function Search_OnKeyPressed(event) {
    var txtSearch;
    var intKeyCode;

    if (window.event) {
        intKeyCode = window.event.keyCode;
    }
    //FF uses this
    else {
        intKeyCode = event.which;
    }

    if (intKeyCode == 13) { //Esc
        GoSearch();
    }

    if (intKeyCode == 27) {
        return false;
    }

    return true;
}

function Search_OnKeyDown(event) {
    var txtSearch;
    var intKeyCode;

    if (window.event) {
        intKeyCode = window.event.keyCode;
    }
    //FF uses this
    else {
        intKeyCode = event.which;
    }

    var scount = document.getElementById(s_countid).value;

    if (intKeyCode == 13) { //Esc
        GoSearch();
    }

    if (intKeyCode == 27) { //Esc
        if (isShowedSuggestionsBox == true) {
            var searchBox = document.getElementById(searchid);
            var htext = document.getElementById(s_text);
            searchBox.value = htext.value;
            HideSuggestionsBox();
        }
        return false;
    }
    
    if (intKeyCode == 40 && scount > 0) {

        if (isShowedSuggestionsBox == false) {
            ShowSuggestionsBox();
        } else {
            var selid = s_itemid;
            if (selectedsuggestionid == "") {

                SelectSuggestionItem(selid + "0", 0);
            } else {

                

                if (s_itemindex < scount - 1) {
                    var ind = s_itemindex + 1;
                    SelectSuggestionItem(selid + ind, ind);
                } // if s_itemindex...
            } // else if selectedsuggestionid...
        } // else if isShowed...
    }
    if (intKeyCode == 38 && scount > 0) {
        if (isShowedSuggestionsBox == false) {
            ShowSuggestionsBox();
        } else {
            var selid = s_itemid;
            if (selectedsuggestionid == "") {

                SelectSuggestionItem(selid + "0", 0);
            } else {

                if (s_itemindex > 0) {
                    var ind = s_itemindex - 1;
                    SelectSuggestionItem(selid + ind, ind);
                } // if s_itemindex...
            } // else if selectedsuggestionid...
        } // else if isShowed...
    }
    return true;
}

function SelectSuggestionItem(id, index) {
    var ctrl = document.getElementById(id);
    if (selectedsuggestionid != "") {
        if (selectedsuggestionid != ctrl.id) {
            document.getElementById(selectedsuggestionid).className = "";
        }
    }

    ctrl.className = "selected";
    selectedsuggestionid = ctrl.id;

    s_itemindex = index;

    var searchBox = document.getElementById(searchid);
    searchBox.value = ctrl.innerHTML;
}

function Search_OnKeyUp(sender, event) {

    var txtSearch;
    var intKeyCode;

    

    if (window.event) {
        intKeyCode = window.event.keyCode;
    }
    //FF uses this
    else {
        intKeyCode = event.which;
    }
    
    /*
    // Special keys
    // Backspace = 8
    // Shift = 16
    // Ctrl = 17
    // Alt = 18
    // Caps Lock = 20
    // Space Bar = 32
    // Page Up = 33
    // Page Down = 34    
    // End = 35
    // Home = 36
    // Left Arrow = 37
    // Up Arrow = 38
    // Right Arrow = 39
    // Down Arrow = 40
    // Insert = 45    
    // Delete = 46
    // Start Key (windows) = 91

    // Well, instead of going after all special keys, you can also reverse the logic. You can 
    // get the next word only if only alphabets or numbers are pressed (a-z or A-Z or 0-9)

    if ((intKeyCode == 8) || (intKeyCode == 16) || (intKeyCode == 17) || (intKeyCode == 18) || 
    (intKeyCode == 20) || (intKeyCode == 32) || (intKeyCode == 33) || (intKeyCode == 34) ||
    (intKeyCode == 35) || (intKeyCode == 36) || (intKeyCode == 37) || (intKeyCode == 38) || 
    (intKeyCode == 39) || (intKeyCode == 40) || (intKeyCode == 45) || (intKeyCode == 46) || 
    (intKeyCode == 91))
    return (false);
    //     if you do not want to implement the special key supression, then just include the following    
    */
    // See if a valid key key is pressed such as 0-9, A-Z, a-z, Hyphen, Underscore
    if (((intKeyCode >= 48) && (intKeyCode <= 57)) || // Numbers 0-9
        ((intKeyCode >= 65) && (intKeyCode <= 90)) || // Upper case A-Z
        ((intKeyCode >= 97) && (intKeyCode <= 122)) ||  // Lower case a-z
        (intKeyCode == 189) ||
        (intKeyCode == 8) || //Backspace
        //(intKeyCode == 27) || //Esc
        //(intKeyCode == 38) || //Arrow Up
        (intKeyCode == 46))// ||
        //(intKeyCode == 13)) // Hyphen
    {
        var htext = document.getElementById(s_text);

        htext.value = sender.value;
        GetSuggestions(sender.value);
    }
 
}

function GetSuggestions(str) {
    s_itemindex = -1;
    selectedsuggestionid = "";
    if (str.length > 0) {
        Com.Mt.Web.BIS.WebServices.WSSuggestion.GetSuggestions(str,
        GetSuggestionsSucceededCallback, GetSuggestionsFailedCallback);
    } else {

    HideSuggestionsBox();
}

}

function SearchInputFocusLost() {
    if (isShowedSuggestionsBox == true) {
        //HideSuggestionsBox();
    }
}

function ShowSuggestionsBox() {
    isShowedSuggestionsBox = true;
    var suggestionsBox = document.getElementById(suggestionboxid);
    DisableSelection(suggestionsBox);
    suggestionsBox.style.visibility = "visible";
    
    return suggestionsBox;
}

function UpdateAndShowSuggestionsBox(inner) {
    
    isShowedSuggestionsBox = true;
    var suggestionsBox = document.getElementById(suggestionboxid);
    suggestionsBox.innerHTML = inner;
    DisableSelection(suggestionsBox);
    suggestionsBox.style.visibility = "visible";

    return suggestionsBox;
}

function HideSuggestionsBox() {
    isShowedSuggestionsBox = false;
    var suggestionsBox = document.getElementById(suggestionboxid);
    suggestionsBox.style.visibility = "hidden";

    return suggestionsBox;
}

function GetSuggestionsFailedCallback(error) {
    var stackTrace = error.get_stackTrace();
    var message = error.get_message();
    var statusCode = error.get_statusCode();
    var exceptionType = error.get_exceptionType();
    var timedout = error.get_timedOut();

    // Display the error.    
    var RsltElem =
        document.getElementById("Results");
    RsltElem.innerHTML =
        "Stack Trace: " + stackTrace + "<br/>" +
        "Service Error: " + message + "<br/>" +
        "Status Code: " + statusCode + "<br/>" +
        "Exception Type: " + exceptionType + "<br/>" +
        "Timedout: " + timedout;
}

function SelectSuggestion(ctrl, index) {
    var searchBox = document.getElementById(searchid);
    //HideSuggestionsBox();
    searchBox.focus();
    searchBox.value = ctrl.innerHTML;
    selectedsuggestionid = ctrl.id;
    s_itemindex = index;
}

function SelectSuggestionMouseUp() {
    var searchBox = document.getElementById(searchid);
    searchBox.focus();
}

function CloseSuggestionBox() {
    HideSuggestionsBox();
}

function MouseoverSuggestion(ctrl, index) {

    if (selectedsuggestionid != "") {
        if (selectedsuggestionid != ctrl.id) {
            document.getElementById(selectedsuggestionid).className = "";
        }
    }
    
    ctrl.className = "selected";
    selectedsuggestionid = ctrl.id;

    s_itemindex = index;
}

// This is the succeeded callback function.
function GetSuggestionsSucceededCallback(result) {
    
    // Display the result.
    var counter = 0;
    var message = new Array();
    var inner = "";
    for (var item in result) {
        message[counter] = result[item];
        //inner += "<div class=\"item\">\n";
        inner += "<div id=\"" + s_itemid + counter + "\" onmouseover=\"MouseoverSuggestion(this, " + counter + ")\" onmouseup=\"SelectSuggestion(this, " + counter + ")\" class=\"item\">";

        inner += message[counter];
        inner += "</div>";
        //inner += "\n</div>";

        counter++;
    }

    document.getElementById(s_countid).value = counter;
    //var RsltElem = document.getElementById("Results");
    //RsltElem.innerHTML = st;

    if (counter > 0) {

        inner += "<div class=\"bclose\" onmousedown=\"CloseSuggestionBox()\">затвори</div>";
        UpdateAndShowSuggestionsBox(inner);
    } else {

        HideSuggestionsBox();
    }
    
    
}


// This is the failed callback function.
function FailedCallback(error) {
    var stackTrace = error.get_stackTrace();
    var message = error.get_message();
    var statusCode = error.get_statusCode();
    var exceptionType = error.get_exceptionType();
    var timedout = error.get_timedOut();

    // Display the error.    
    var RsltElem =
        document.getElementById("Results");
    RsltElem.innerHTML =
        "Stack Trace: " + stackTrace + "<br/>" +
        "Service Error: " + message + "<br/>" +
        "Status Code: " + statusCode + "<br/>" +
        "Exception Type: " + exceptionType + "<br/>" +
        "Timedout: " + timedout;
}

// This is the succeeded callback function.
function SucceededCallback(result) {
    // Display the result.
    var RsltElem = document.getElementById("Results");
    RsltElem.innerHTML = result;
}

if (typeof (Sys) !== "undefined") Sys.Application.notifyScriptLoaded();
