﻿var clip = function (str, count, trailer) {
    if (trailer.length > 0) {
        count -= trailer.Length - 1;
    }

    str = str.substr(0, count) + " " + trailer;
    str = $.trim(str);
    return str;
};

var wordclip = function (str, count, trailer) {
    str = str + "";
    if (str.length < count) {
        return str;
    }

    var words = str.split(/\s/);
    var word, len = 0;

    if (trailer.length > 0) {
        count -= trailer.length;
    }

    for (word = 0; word < words.length; word++) {
        len += words[word].length + (word != 0 ? 1 : 0); // 1 for space on subsequent elements
        if (len >= count) {
            break;
        }
    }

    if (word == 0 && words[0].length > count) {
        return clip(word[0], count, trailer);
    }

    words = words.slice(0, word);
    var result = "";
    $.each(words, function (i, value) {
        result += value + " ";
    });
    result += " " + trailer;
    result = $.trim(result);
    return result;
};

var loc = window.location.toString();

var store_get_local = function (name) {
    return localStorage.getItem(name);
};
var store_set_local = function (name, value) {
    localStorage.setItem(name, value);
};
var store_clear_local = function (name) {
    localStorage.removeItem(name);
};

var store_get_cookie = function (name) {
    name = name + "=";
    var cookies = document.cookie.split(';');
    for (var i = 0; i < cookies.length; i++) {
        var cookie = cookies[i];
        while (cookie.charAt(0) == ' ')
            cookie = cookie.substring(1, cookie.length);

        if (cookie.indexOf(name) == 0)
            return cookie.substring(name.length, cookie.length);
    }
    return null;
};
var store_set_cookie = function (name, value) {
    document.cookie = name + "=" + value + "; path=/";
};
var store_clear_cookie = function (name) {
    var d = new Date();
    document.cookie = name + "=1; path=/; expires=" + d.toGMTString() + ";";
};

var store_get = store_get_cookie;
var store_set = store_set_cookie;
var store_clear = store_clear_cookie;

try {
    if (window.localStorage && window.localStorage.getItem) {
        store_get = store_get_local;
        store_set = store_set_local;
        store_clear = store_clear_local;
    }
} catch (e) {
}

var autotrader_last_search_add = function (title, url) {
    url = url.replace(/[?&]add=true$/gi, "");

    var searches = autotrader_last_search_get();

    if (searches.length > 0 && searches[0].url == url) {
        return;
    }

    searches.splice(0, 0, { title: title, url: url });
    if (searches.length > 10) {
        searches.length = 10;
    }

    var currentValue = JSON.stringify(searches);
    store_set('autotrader_last_search', currentValue);
};

var autotrader_last_search_autoadd = function (title) {
    if (window.location.hash.toString() == '#add') {
        var loc = window.location.toString();
        loc = loc.substring(0, loc.length - '#add'.length);
        autotrader_last_search_add(title, loc);
        window.location.hash = '';
    }
};

var autotrader_last_search_get = function () {
    var value = store_get('autotrader_last_search');
    value = value ? JSON.parse(value) : [];
    return value;
};

var isPrinting = false;
if (loc.indexOf('#print', loc.length - '#print'.length) !== -1) {
    isPrinting = true;
    $('link[rel="stylesheet"][media]').attr('media', 'screen,print');
    window.print();
}

$(document).ready(function () {
    if (loc.indexOf('#clear', loc.length - '#clear'.length) !== -1) {
        store_clear('autotrader_last_search');
    }

    var latest = autotrader_last_search_get();
    for (var i = 0; i < latest.length; i++) {
        $('<a/>', { href: latest[i].url, title: latest[i].title, text: wordclip(latest[i].title, 90, "...") }).appendTo($('.OstatnioSzukane')).wrap("<p/>");
    }
    if (latest.length > 0 && !isPrinting) {
        $('.OstatnioSzukane').show();
    }
});


var defaultTextClass = "ProponowanyTekst";

var defaultValues = new Array();
var autoid = 0;

var setMaskForStatics = function () {
    $('.liczba').each(function () {
        var span = $(this);
        span.html($.mask.string(span.html(), 'liczba'));
    });
};

var setMaskForInputs = function () {
    $('input[alt="liczba"], input[alt="liczbabezspacji"]').setMask();
};

var changeMultiselectSize = function (multiselect) {
    var m = multiselect.multiselect('widget');
    var maxWidth = m.width();
    $('ul.ui-multiselect-checkboxes li', m).each(function (i, e) {
        var wi = $(e).width();
        if (wi > maxWidth) {
            maxWidth = wi + 30;
        }

    });
    m.width(maxWidth);
    var mul = $('ul.ui-multiselect-checkboxes', m);
    if (mul.height() > 300) {
        mul.height(300);
    }

    return multiselect;
};

var rescanDefaultValues = function () {
    setMaskForStatics();

    $("input." + defaultTextClass).each(function () {
        var input = $(this);
        if (input.attr('id') == undefined) {
            input.attr('id', 'AUTOID_' + autoid);
            autoid = autoid + 1;
        }
    });

    $("input." + defaultTextClass).focus(function () {
        var input = $(this);
        if (!defaultValues[input.attr('id')]) {
            defaultValues[input.attr('id')] = input.val();
        }
        if (input.val() == defaultValues[input.attr('id')]) {
            input.val('');
            input.removeClass(defaultTextClass);
        }
    }).blur(function () {
        var input = $(this);
        if (input.val() == '') {
            input.addClass(defaultTextClass);
            input.val(defaultValues[input.attr('id')]);
        }
    });

    setMaskForInputs();

    $('select[name="ri"]').multiselect({
        noneSelectedText: "Wybierz region",
        selectedList: 1,
        show: 'blind',
        header: false,
        height: 'auto',
        multiple: false
    });

    $('select[name="db"], select[name="fuel"], select[name="typ"], select[name="tz"]').multiselect({
        noneSelectedText: "Wszystkie",
        selectedList: 1,
        minWidth: 190,
        show: 'blind',
        header: false,
        height: 'auto',
        multiple: false
    });

    if (typeof (ActiveMarkModelTree) != "undefined") {
        // code below is executed only on HP and search results

        var markSelect = $('select[name="mark"]');
        var modelSelect = $('select[name="model"]');

        var addToModels = function(ui) {
            if (modelSelect.length > 0) {
                var optgroup = $("<optgroup />", {
                    label: ui.text
                });

                // determine insert position
                var optgroups = $('optgroup', modelSelect);
                var lastGrp = optgroups.filter(function(index) {
                    return $(this).attr('label') <= optgroup.attr('label');
                }).last();
                if (lastGrp.length == 0) {
                    optgroup.prependTo(modelSelect);
                } else {
                    lastGrp.after(optgroup);
                }

                // add to models select and mark selected
                for (var val in ActiveMarkModelTree[ui.value]) {
                    var optvalue = ui.value + "," + ActiveMarkModelTree[ui.value][val];
                    var option = $("<option />", {
                        value: optvalue,
                        text: ActiveMarkModelTree[ui.value][val].replace( /&amp;/g , '&')
                    });
                    if (typeof(selectModels) != "undefined" && $.inArray(optvalue.toLowerCase(), selectModels) > -1) {
                        option.attr("selected", "selected");
                    }

                    option.appendTo(optgroup);
                }
                modelSelect.prop('disabled', false).multiselect("enable");
            }
        };

        $('option', markSelect).remove();
        $('option', modelSelect).remove();
        modelSelect.prop('disabled', true);

        var multiple = markSelect.attr('multiple') == 'multiple';

        if (!multiple) {
            $("<option />", {
                value: "",
                text: "Wybierz markę"
            }).appendTo(markSelect);
        }

        for (var key in ActiveMarkModelTree) {
            var option = $("<option />", {
                value: key,
                text: key
            });
            if (typeof(selectMarks) != "undefined" && $.inArray(key.toLowerCase(), selectMarks) > -1) {
                option.attr("selected", "selected");
                addToModels({ text: key, value: key });
            }
            option.appendTo(markSelect);
        };

        var markSelectedListCount = 3;
        if (markSelect.width() < 225) {
            markSelectedListCount = 1;
        }

        markSelect.multiselect({
                noneSelectedText: 'Wybierz markę',
                selectedList: markSelectedListCount,
                selectedText: "# zaznaczone",
                minWidth: 190,
                show: 'blind',
                header: false,
                height: 'auto',
                multiple: multiple
            }).bind("multiselectclick", function(event, ui) {
                if (ui.checked) {
                    addToModels(ui);
                } else {
                    $('optgroup[label="' + ui.text + '"]', modelSelect).remove();
                }
                if ($('option', modelSelect).length == 0) {
                    modelSelect.prop('disabled', true).multiselect('disable');
                }
                modelSelect.multiselect("refresh");
            });
        modelSelect.multiselect({
                noneSelectedText: 'Wybierz model',
                selectedList: 1,
                selectedText: "# zaznaczone",
                minWidth: 190,
                show: 'blind',
                height: 'auto',
                header: false
            });
        }

    $('select').bind('multiselectopen', function () {
        changeMultiselectSize($(this));
    });
};

$.validator.methods.range = function (value, element, param) {
    var val = value.replace(/ /g, '');
    return this.optional(element) || (val >= param[0] && val <= param[1]);
};

var fixValuesOnSubmit = function (form) {
    $('input[alt="liczba"]', form).each(function () {
        $(this).val($(this).val().replace(/ /g, ''));
    });
    $('input.' + defaultTextClass).val('');
};

$(document).ready(function () {
    $.mask.masks.liczba = { mask: '999 999 999 999', type: 'reverse', textAlign: false };
    $.mask.masks.liczbabezspacji = { mask: '99999', type: 'reverse', textAlign: false };

    $.mask._keyPressReverse = function (e, o) {
        if (o.range.start == o.value.length) {
            o.range.start = o.$this.val().length;
        }
        this.__setRange(o._this, o.range.start+1);
        return false;
    };

    rescanDefaultValues();

    $('form').live('submit', function () {
        var form = $(this);
        fixValuesOnSubmit(form);
    });
    /*
    $.validator.defaults.onkeyup = function (element, event) {
    this.element(element);
    };
    */
    $('#SearchForm').validate({
        errorPlacement: function (error, element) { },
        errorClass: 'input-error',
        rules: {
            hpF: { required: false, range: [0, 10000] },
            hpT: { required: false, range: [0, 10000] },
            yF: { required: false, range: [1900, 2012] },
            yT: { required: false, range: [1900, 2012] },
            ecF: { required: false, range: [0, 20000] },
            ecT: { required: false, range: [0, 20000] }
        }
    });
    $('.Powiadamiacz form').validate({
        errorPlacement: function (error, element) { },
        errorClass: 'input-error',
        rules: {
            cnemail: { required: true, email: true }
        }
    });

    $('button', $('select.Zaznaczone').parent()).addClass('Zaznaczone');

    // add key letter navigation to multiselectes
    $('.ui-multiselect-menu ul li label').live('keypress.multiselect', function (e) {
        var key = String.fromCharCode(e.which).toLowerCase();
        if (key.match(/^[a-z0-9]$/)) {
            var next = $(this).parent()['nextAll']('li:not(.ui-multiselect-disabled, .ui-multiselect-optgroup-label)').filter(function () {
                var span = $('label span', $(this)).text().toLowerCase();
                return span.indexOf(key) == 0;
            }).first();

            // if there are no more items after currently selected, look from the beginning
            if (!next.length) {
                next = $(this).parent()['prevAll']('li:not(.ui-multiselect-disabled, .ui-multiselect-optgroup-label)').filter(function () {
                    var span = $('label span', $(this)).text().toLowerCase();
                    return span.indexOf(key) == 0;
                }).first();
            }
            if (next.length > 0) {
                next.find('label').trigger('mouseover');
            }
        }
    });

    $("img").each(function (index) {
        $(this).error(function () {
            $(this).hide();
        });
        $(this).attr("src", $(this).attr("src"));
    });
});
