﻿var objSearch = objSearch ? objSearch : new Search;

function Search() {
    var Results; // data fromn server
    var ResultsTable; //actual jquery datatable
    var ResultsTableID;
    var Details;
    var Columns;
    this.InitResultsTable = function () {

    }

    this.BuildResultsTable = function () {
        switch (this.Details.SearchType) {
            case "Cost":
                this.Columns = [
                    {
                    "sWidth": "100%",
                    "bSortable": false
                    }
                ];

                break;

            default:
                this.Columns = [
                    { "sWidth": "100%",
                        "bSortable": false
                    }
                ];
                break;
        }
        this.ResultsTable = this.BuildTable();

    }


    this.BuildTable = function () {
        $('#tblResults').show();
        $("#tblResults_paginate").show();
        $('#tblCompResults').hide();
        $("#tblCompResults_paginate").hide();
        this.ResultsTable = $('#tblResults').dataTable({
            "bJQueryUI": true,
            "oLanguage": { "sEmptyTable": "No results for this search." },
            "sDom": 'ilt<"tblspc">p',
            "asStripClasses": [],
            "iDisplayLength": 25,
            "aaLengthMenu": [10, 25, 50, 100],
            "aoColumns": [
                { "sWidth": "100%",
                    "mDataProp": "itemtype",
                    "bSortable": false,
                    "bUseRendered": false,
                    "fnRender": function (oObj) {
                        return "<div class='itemtype" + oObj.aData.itemtype + "'>" + oObj.aData.CtkDescription + "</div>";
                    }
                },
                  { "bSortable": false, "mDataProp": "coststr"
                  },
                { "sClass": "costsrUOM", "mDataProp": "ctkUOM",
                    "bSortable": false
                }
            ],
            "bAutoWidth": false,
            "sPaginationType": "full_numbers",
            "bFilter": false,
            "bDestroy": true,
            "bServerSide": true,
            "sAjaxSource": "/Services/egsSearch.asmx/Search2",
            "fnServerData": function (sSource, aoData, fnCallback) {
                $("#tblResults").hide();
                $("#divUpdating").show();
                eGordianSearch.egsSearch.Search2(aoData, objSearchDetails, fnCallback, Search_fail);
            },
            "fnRowCallback": function (nRow, aData, iDisplayIndex, iDisplayIndexFull) {

                if (aData.itemtype == 1) {
                    $(nRow).addClass('costsrTask');
                } else if (aData.itemtype == 2) {
                    $(nRow).addClass('costsrMod');
                } else {
                    $(nRow).addClass('costsrDem');
                }
                $(nRow).addClass('costsr');
                $(nRow).attr("ctkpkey", aData.ctkpkey);

                return nRow;
            },
            "fnDrawCallback": function () {
                //assign clicks
                $("#tblResults").show();
                $("#divUpdating").hide();
                $(".costsr").click(function () {
                    $(document).trigger('onCostItemSelected_Event', $(this).attr("ctkpkey"));
                });
                $(document).trigger('onResultsDrawComplete');
            }

        });

        $("#tdInfo").html("");
        //$("#tdPaginate").html("");
        $("#tdLength").html("");

        $("#tblResults_info").detach().appendTo("#tdInfo").css("white-space", "nowrap");
        //$("#tblResults_paginate").detach().appendTo("#tdPaginate");
        $("#tblResults_length").detach().appendTo("#tdLength").css("white-space", "nowrap");

        $('.srchInfo').html("<b>" + objSearchDetails.SearchType + ":</b> Search results for " + objSearchDetails.SearchString);

    }

    this.BuildCompTable = function () {
        $('#tblResults').hide();
        $("#tblResults_paginate").hide();
        $('#tblCompResults').show();
        $("#tblCompResults_paginate").show();

        $('#tblCompResults').dataTable({
            "bJQueryUI": true,
            "oLanguage": { "sEmptyTable": "No results for this search." },
            "sDom": 'ilt<"tblspc">p',
            "asStripClasses": [],
            "iDisplayLength": 25,
            "aaLengthMenu": [10, 25, 50, 100],
            "aoColumns": [
                {
                    "sClass": "compsrchitemcol",
                    "bVisible": false
                },
                { "sClass": "compsrchitemcolleft",
                    "bSortable": false,
                    "fnRender": function (oObj) {
                        return "<span class='compSrchItemlbl'>" + oObj.aData[1] + "</span> <span class='compSrchMiles'>(" + oObj.aData[2] + ")</span><hr class='greenhr'><span class='compSrchItemCS'>" + oObj.aData[3] + "</span>";
                    }
                },
                {
                    "bVisible": false,
                    "bSortable": false
                },
                {
                    "bVisible": false
                },
                {
                "sClass": "compsrchitemcolright",
                "bSortable": false,
                "fnRender": function (oObj) {
                    return oObj.aData[4] + "<hr class='greenhr'><span class='compSrchItemLinks'>" + oObj.aData[5] + "</span>";
                }
            },
                {
                    "bVisible": false
                }
            ],
            "bAutoWidth": false,
            "sPaginationType": "full_numbers",
            "bFilter": false,
            "bDestroy": true,
            "bServerSide": true,
            "sAjaxSource": "/Services/egsSearch.asmx/Search2",
            "fnServerData": function (sSource, aoData, fnCallback) {
                $("#tblCompResults").hide();
                $("#divUpdating").show();
                
                eGordianSearch.egsSearch.Search2(aoData, objSearchDetails, fnCallback, Search_fail);
            },
            "fnRowCallback": function (nRow, aData, iDisplayIndex, iDisplayIndexFull) {
                $(nRow).addClass('compSrchItem');
                $(nRow).attr('srchguid', aData[0]);
                return nRow;
            },
            "fnDrawCallback": function () {
                //assign clicks
                $("#tblCompResults").show();
                $("#divUpdating").hide();
                $(".compSrchItem").click(function () {
                    $(document).trigger('onCompSelected_Event', $(this).attr("srchguid"));
                });
                $("[linkcrosstype]").click(function () {

                    var type = $(this).attr("alt");
                    var guid = $(this).parent().parent().parent().attr("srchguid");

                    eGordianSearch.egsSearch.GetLinks(type, guid, function (results) {
                        if (results.length == 1) {
                            window.location = 'http://' + results[0].URL;
                        } else {
                            //show list in pop-up
                            var div = $("<div style='display:none'></div>");
                            var html = "<center>";
                            for (var i = 0; i < results.length; i++) {
                                html += "<div style='text-align:left'><a href='http://" + results[i].URL + "'>" + results[i].URL + "</a></div>";
                            }
                            html += "</center>"
                            div.html(html);
                            $(document).append(div);
                            div.dialog({
                                autoOpen: true,
                                title: results[0].Type,
                                closeOnEscape: true,
                                modal: true,
                                close: function (event, ui) {
                                    $(this).dialog('destroy');
                                    div.remove();
                                }
                            });
                        }
                    },
                    function (error) { },
                    function (error) { });
                    return false;
                });
                $("[starindex]").stars({
                    inputType: "select",
                    disabled: true
                });
                $(document).trigger('onResultsDrawComplete');
            }

        });

        $("#tdInfo").html("");
        //$("#tdPaginate").html("");
        $("#tdLength").html("");

        $("#tblCompResults_info").detach().appendTo("#tdInfo").css("white-space", "nowrap");
        //$("#tblResults_paginate").detach().appendTo("#tdPaginate");
        $("#tblCompResults_length").detach().appendTo("#tdLength").css("white-space", "nowrap");

        $('.srchInfo').html("<b>" + objSearchDetails.SearchType + ":</b> Search results for " + objSearchDetails.SearchString);
    }

    this.InitDetails = function () {
        if (objSearchDetails.SearchType == null || objSearchDetails.SearchType.length == 0) {
            //set default search type

            if (Get_Cookie('SearchType') && Get_Cookie('SearchType').length > 0) {
                objSearchDetails.SearchType = Get_Cookie('SearchType');
            }
            else {
                objSearchDetails.SearchType = 'Cost'
                Set_Cookie('SearchType', 'Cost', 360, '/', '', '');
            }
        }

        objSearchDetails.City = '';
        objSearchDetails.State = '';
        objSearchDetails.Zip = '';



        var set = this.isLocationValid();


        if ((objSearchDetails && objSearchDetails.City && objSearchDetails.City.length > 0) &&
         (objSearchDetails && objSearchDetails.State && objSearchDetails.State.length > 0) &&
          (objSearchDetails && objSearchDetails.Zip && objSearchDetails.Zip.length > 0)) {
            //already set by querystring
            set = true;
        }

        if (!set && Get_Cookie('city')) {
            objSearchDetails.City = Get_Cookie('city');
            objSearchDetails.State = Get_Cookie('state');
            objSearchDetails.Zip = Get_Cookie('zip');
            set = (this.isLocationValid());
        }

        if (!set) {
            //do geo search
            //the geoplugin_functions are from http://www.geoplugin.net/javascript.gp, //so make sure it is an included javascript
            objSearchDetails.City = geoplugin_city();
            objSearchDetails.State = geoplugin_region();

            if (objSearchDetails.City.length > 0 && objSearchDetails.State.length > 0) {
                eGordianSearch.locations.GetZip(objSearchDetails.City, objSearchDetails.State, objSearch.GetZip_success, objSearch.GetZip_fail)
            }

        } else {
            $(document).trigger('onSearchInitComplete');
        }


    }

    this.isLocationValid = function () {

        if (objSearchDetails) {
            if ((objSearchDetails.City) && (objSearchDetails.State) && (objSearchDetails.Zip)) {
                return (objSearchDetails.City.length > 0) && (objSearchDetails.State.length > 0) && (objSearchDetails.Zip.length > 0);
            }
            else { return false }
        }
        else { return false; }
    }

    this.GetZip_success = function (zip) {
        objSearchDetails.Zip = zip;
        objSearch.setLocationCookie();
        $(document).trigger('onSearchInitComplete');
    }

    this.GetZip_fail = function () {
        $(document).trigger('onSearchInitComplete');
    }

    this.setLocationCookie = function () {
        Set_Cookie('city', objSearchDetails.City, 360, '/', '', '');
        Set_Cookie('state', objSearchDetails.State, 360, '/', '', '');
        Set_Cookie('zip', objSearchDetails.Zip, 360, '/', '', '');
    }

}

function Search_Fail() {
    debugger
}

function setSearchTerms() {
    $("#divSearchTerms").show();
    objSearchDetails.SearchString = jQuery.trim($('#txtSearch').val());
    var terms = objSearchDetails.SearchString.split(" ");
    var cbhtml = "";
    for (var i = 0; i < terms.length; i++) {
        cbhtml += "<label class='searchTermLbl'><input type='checkbox' class='searchTermCB' value='" + terms[i] + "' onClick='searchTermCB_click();' checked />" + terms[i] + "</label>"
    }
    $("#divSearchTermCBs").html(cbhtml);

    $(document).trigger('onSearchParamChanged');
}

function saveRecentSearch() {

    var newval = jQuery.trim($('#txtSearch').val());
    var arr = new Array();
    arr[0] = newval; //put new search in first position
    var arrindex = 1;
    for (var i = 1; i < 11; i++) {
        var thiscookie = Get_Cookie('recsearch' + i)
        if (thiscookie) {
            if ($.inArray(thiscookie,arr) == -1) {
               //if val is not already in array
                arr[arrindex] = Get_Cookie('recsearch' + i);
                arrindex++;
            }
        }
    }
    for (var j = 0; j < 10; j++ ) {
        if (arr[j]) {
            Set_Cookie('recsearch' + (j + 1), arr[j], 360, '/', '', '');
        } else {
            Set_Cookie('recsearch' + (j + 1), "", 360, '/', '', '');
        }
    }
    loadRecentSearches();
}

function loadRecentSearches() {
    var rs = "";
    for (var i = 1; i < 6; i++) {
        if (Get_Cookie('recsearch' + i)) {
            if (rs.indexOf("||" + Get_Cookie('recsearch' + i).trim() + "||") == -1) { //don't show duplicates
                rs = rs + ("||" + Get_Cookie('recsearch' + i).trim() + "||");
                $("#recsearch" + i).html(Get_Cookie('recsearch' + i).trim());
                
            } else {
                $("#recsearch" + i).html("");
            }
        }
    }
}

function searchrecent(val){
    $("#txtSearch").val(val);
    setSearchTerms();
}


function searchTermCB_click() {
    var str = "";
    $(".searchTermCB").each(function () {
        if ($(this).prop("checked")) {
            str += $(this).val() + " ";
        }
    });

    objSearchDetails.SearchString = jQuery.trim(str);
    $(document).trigger('onSearchParamChanged');
}

function do_search() {

    showSearching();

    objSearch.Details = objSearchDetails;
    if (objSearchDetails.SearchString && objSearchDetails.SearchString.length > 0) {
        if (objSearch.Details.SearchType == 'Cost') {
            objSearch.BuildTable();
        } else {
            objSearch.BuildCompTable();
            
        }
        GetCounts(objSearchDetails.SearchString);
        //GetCategoryCounts(objSearchDetails.SearchString);
    } else {
        objSearch.InitResultsTable();
    }
}

function search_param_changed(event) {

    var searchstrCheck = (objSearchDetails.SearchString && objSearchDetails.SearchString.length > 0);
    var locationCheck = objSearch.isLocationValid();
    if (searchstrCheck && locationCheck) {
        do_search();
    }
}

function GetCounts(searchstr) {
    eGordianSearch.egsSearch.GetCounts(searchstr, GetCounts_success, GetCounts_fail);
}

function GetCounts_success(cnts) {
    if (cnts) {
        $("#costCount").html("Costs (" + cnts.costCount + ")");
        $("#contractorCount").html("Contractors (" + cnts.contractorCount + ")");
        $("#supplierCount").html("Suppliers (" + cnts.supplierCount + ")");
        $("#manufacturerCount").html("Manufacturers (" + cnts.manufacturerCount + ")");
        $("#designCount").html("Design Professionals (" + cnts.designCount + ")");
        $("#otherCount").html("Other Resources (" + cnts.otherCount + ")");
    }

}
function GetCounts_fail(error) {

}

function GetCategoryCounts(searchstr) {
    eGordianSearch.egsSearch.GetCostCats(searchstr,
                function (cnts) {
                    $('#tblCatsTopRow').siblings().remove();
                    for (var i = 0; i < cnts.length; i++) {
                        var tbl = $('#tblCats');
                        var tr = $("<tr class='costcat'></tr>");
                        var td = $("<td></td>");
                        td.click(function () {
                            //objSearchDetails.CatFilter = cnts[i].Number;
                            $(document).trigger('onSearchParamChanged');
                        });
                        td.html(cnts[i].Name + " (" + cnts[i].Count + ")");
                        tr.append(td);
                        tbl.append(tr);
                    }
                }, function (err) { });
}


