﻿(function($) {
    $.fn.searchForm = function(o) {
        o = $.extend({
            btnSubmit: null,
            baseUrl: '/',
            isRefine: false
        }, o || {});

        var div = null;
        return this.each(function() {
            div = $(this);

            var btnId = '';
            if (o.btnSubmit) {
                btnId = $(o.btnSubmit).attr('id');
                $(o.btnSubmit).click(function() {
                    return DoSearch();
                });
            }

            var selects = $('select', div);
            for (var x = 0; x < selects.length; x++) {
                var input = $(selects[x]);
                var rel = input.attr('rel');

                var name = getName(input);

                var data = _quickSearch_Data[rel];
                var options = '';
                var values = getQueryVariables(name);

                for (var id in data) {
                    var isSelected = false;
                    if (values && isArray(values) > 0)
                        for (var k = 0; k < values.length; k++) {
                        if (values[k] == id)
                            isSelected = true;
                    }
                    else if (values) {
                        isSelected = id == values;
                    }

                    if (isSelected) {
                        options += '<option value="' + id + '" selected="selected">' + data[id] + '</option>';
                    }
                    else
                        options += '<option value="' + id + '">' + data[id] + '</option>';
                }
                input.append(options);
            }
            var fields = $('input[type="text"]', div);
            for (var x = 0; x < fields.length; x++) {
                $(fields[x]).keypress(function(event) {
                    return HandleEnter(event);
                });
            }
            populateParameters();

        });

        function populateParameters() {
            var fields = $('input,textarea', div);

            for (var x = 0; x < fields.length; x++) {
                var input = $(fields[x]);
                var name = getName(input);
                var value = getQueryVariable(name);
                if (value && value.length > 0) {
                    if (input.is("[type='checkbox']") && value == '1') {
                        input.attr('checked', 'checked');
                    }
                    else {
                        input.val(value);
                    }
                }
            }

            var selects = $('select', div);
            for (var x = 0; x < selects.length; x++) {
                var input = $(selects[x]);
                var val = getVal(input);

                if (!(val && val.length > 0)) {
                    var name = getName(input);
                    var value = getQueryVariable(name);

                    if (value && value.length > 0) {
                        input.val(value);
                    }
                }
            }
        }

        function getName(input) {
            var name = input.attr('name');
            if (!(name && name.length > 0))
                name = input.attr('id');
            if (!(name && name.length > 0))
                name = input.attr('rel');

            return name;
        }

        function DoSearch() {
            var fields = $('select,input,textarea', div);
            var qs = '';
            var first = true;
            var fieldNames = [];

            var hasCat = false;
            for (var x = 0; x < fields.length; x++) {
                var id = getName($(fields[x]));
                var val = getVal($(fields[x]));
                fieldNames.push(id);

                if (id && id.length > 0 && val && val.length > 0) {
                    if (id != "tid") {
                        if (!first) qs += '&';
                        else first = false;

                        qs += id + '=' + val;

                        if (id == "state_ids") {
                            qs += "&region_ids=" + val;
                        } else if (id == "catId") {
                            hasCat = true;
                        }
                    }
                }
            }
            if (_quickSearch_Values) {
                for (var name in _quickSearch_Values) {
                    if (jQuery.inArray(name, fieldNames) < 0 || (name == "catId" && !hasCat)) {
                        if (name != 'region_ids' && name != "tid" && (!o.isRefine && name != 'p')) {
                            if (!first) qs += '&';
                            else first = false;

                            qs += name + '=' + _quickSearch_Values[name];
                            if (name == 'state_ids') {
                                qs += '&region_ids=' + _quickSearch_Values[name];
                            }
                        }
                    } else if (name == "catId" && hasCat) {
                        if (!first) qs += '&';
                        else first = false;

                        qs += 'topCatId=' + _quickSearch_Values[name];
                    }
                }
            }
            if (qs.length > 0) {
                qs = '?' + qs;

                if (qs.charAt(qs.length - 1) == '&')
                    qs = qs.substr(0, qs.length - 1);
            }

            clearCompare();

            document.location = o.baseUrl + qs;
        }

        function getVal(field) {
            var val = field.val();
            if (val == 'on' && !field.is(':checked')) {
                val = '';
            } else if (val == 'on' && field.is(':checked')) {
                val = '1';
            }
            if (field.is('[type="button"]') || field.is('[type="submit"]')) {
                val = '';
            }

            return val;
        }

        function HandleEnter(e) {
            if (isEnterKeyEvent(e)) {
                DoSearch();
                return false;
            }
            else
                return true;
        }

        function isEnterKeyEvent(e) {
            var key;
            var event;

            if (window.event) {
                event = window.event;
                key = window.event.keyCode;     //IE
            }
            else {
                key = e.which;     //firefox
                event = e;
            }
            return key == 13;
        }
        function getQueryVariable(variable) {
            if (_quickSearch_Values && _quickSearch_Values[variable]) {
                return _quickSearch_Values[variable];
            }
            return "";
        }
        function getQueryVariables(variable) {
            if (_quickSearch_Values && _quickSearch_Values[variable]) {
                var str = _quickSearch_Values[variable];
                if (str != null) {
                    return str.split(',');
                }
            }
            return new Array();
        }
        function isArray(obj) {
            if (obj == null)
                return false;

            if (obj.constructor.toString().indexOf("Array") == -1)
                return false;
            else
                return true;
        }
        function clearCompare() {
            try {
                var compareIds = new String();
                var cookieData = document.cookie.split(";");

                compareIds = getCompareData(cookieData);
                if (compareIds != null) {
                    var toks = compareIds.split("=");
                    if (toks.length > 1) {
                        var tmpIds = toks[1].split(",");
                        var newComparIds = new String();
                        newComparIds = "CompareIds=";
                        compareIds = newComparIds;
                        if (compareIds != null) {
                            if (compareIds.indexOf("path") < 0) {
                                compareIds += ";path=/";
                            }
                            document.cookie = compareIds;
                        }
                    }
                }
            }
            catch (e) { }
        }
        function getCompareData(cookieData) {
            for (i = 0; i < cookieData.length; i++) {
                if (cookieData[i].indexOf("CompareIds") >= 0) {
                    return cookieData[i];
                }
            }
            return;
        }
    }
})(jQuery);
