/**
 * Knihovna funkci
 */

$(document).ready(function () {
    // zobrazeni detailu obrazku
    $("a.picture").colorbox();

    // objednani v obchode
    $("div.shop-list a.order")
        .click(function () {
            var form = $('#shop-order');

            $('.description .inner', form).html($(this).parent().siblings('.text').html());
            $('.image .inner-image', form).html($(this).closest('.shop-item-inside-inner').find('.image a').clone().find('div').remove().end().html());
            $('.price .inner input[name="cena"]', form).val($(this).parent().siblings('.price-outer').find('input[name="cena"]').val());
            $('.price .inner span', form).html($(this).parent().siblings('.price-outer').find('span').html());
            $('input[name="zbozi"]', form).val($(this).parent().siblings('input[name="zbozi"]').val());
        })
        .colorbox({
            inline : true,
            href   : "#shop-order"
        });

    // funkcnost objednavkoveho formulare
    $('#shop-order').each(function () {
        var form = $(this);

        $('input[name="pocet_ks"]', form).keyup(function () {
            count_total_price();
        });

        $('select[name="typ_dopravy"]', form).change(function () {
            var typ_dopravy_parts = $(this).val().split('_');

            $(this).siblings('.cena').html(typ_dopravy_parts[1]);

            count_total_price();
        });

        // nektera pole jsou ciselna, nebudou se smet zadavat pismena
        $('input[name="psc"], input[name="telefon"], input[name="pocet_ks"]', form).keydown(function (event) {
            return is_number(event.keyCode);
        });

        // odeslat povolime pouze kompletne vyplneny formular
        $('button', form).click(function () {
            var messages = '';

            var fieldNames = ['jmeno_prijmeni', 'ulice_cp', 'mesto', 'psc', 'email', 'telefon', 'pocet_ks', 'robot'];

            $.each(fieldNames, function (key, fieldName) {
                var field = $('input[name="' + fieldName + '"]', form);

                if (!$.trim(field.val())) {
                    var label = field.prev().html();

                    messages += label.substr(0, label.length - 1) + "\n";
                }
            });

            if (messages) {
                alert(messages);

                return false;
            }
        });

        // prepocita celkovou cenu
        function count_total_price() {
            var cena = parseInt($('input[name="cena"]', form).val());
            var pocet_ks = parseInt($('input[name="pocet_ks"]', form).val());

            if (!pocet_ks) {
                pocet_ks = 0;
            }

            var typ_dopravy_parts = $('select[name="typ_dopravy"]', form).val().split('_');

            $('.total-price-value-counted').html(cena * pocet_ks + parseInt(typ_dopravy_parts[1]));
        }
    });

    $('a.over').each(function () {
        // pridame over
        var over = $('<div></div>');
        var img = $('img', this);

        if (img.length) {
            over.css({
                width              : img.width(),
                height             : img.height(),
                'background-color' : '#052555',
                position           : 'absolute',
                top                : 0,
                left               : 0,
                opacity            : 0.4
            });

            $(this)
                .css({
                    display  : 'block',
                    position : 'relative'
                })
                .append(over)
                // pridame efekt po najeti mysi (zmizi hover)
                .hover(
                    function () {

                        $('div', this).hide();
                    },
                    function () {
                        $('div', this).show();
                    }
                );
        }
    });

    // popisky fotek v acrotvorbe
    $('div.production a').hover(
        function () {
            var titleParts = $(this).attr('title').split('|');

            $('div.description div.description-inner:eq(0)', $(this).closest('div.production')).html(titleParts[0]);
            $('div.description div.description-inner:eq(1)', $(this).closest('div.production')).html(titleParts[1]);
        },
        function () {
            $('div.description div.description-inner', $(this).closest('div.production')).html('');
        }
    );

    // over obrazku partnera
    $('div.block-inside-small a').hover(
        function () {
            if ($(this).attr('rel')) {
                $(this).data('over', $(this).attr('rel'));
                $(this).removeAttr('rel');
            }

            if ($(this).data('over')) {
                $(this).data('image', $('img', $(this)).attr('src'));
                $('img', $(this)).attr('src', $(this).data('over'));
            }
        },
        function () {
            if ($(this).data('image')) {
                $('img', $(this)).attr('src', $(this).data('image'));
            }
        }
    );

    // pridame ruzky
    $('img.corners').each(function () {
        var w = $(this).width();
        var h = $(this).height();

        $(this)
            .parent().css({
                display             : 'block',
                'background-image'  : 'url(' + $(this).attr('src') + ')',
                'background-repeat' : 'no-repeat',
                width               : w,
                height              : h
            })
            .end()
            .wrap($('<span class="corner-top-left"></span>').css({width : w, height : h}))
            .wrap($('<span class="corner-top-right"></span>').css({width : w, height : h}))
            .wrap($('<span class="corner-bottom-right"></span>').css({width : w, height : h}))
            .wrap($('<span class="corner-bottom-left"></span>').css({width : w, height : h}))
            .remove();
    });

    // online kalkulace
    $('.online-calculation-block').each(function () {
        var __ = $(this);

        // zjistime volby rozliseni
        var rozliseni_volby = Array();

        $('#rozliseni option', __).each(function () {
            rozliseni_volby[$(this).val()] = $(this).text()
        });

        // nektera pole jsou ciselna, nebudou se smet zadavat pismena
        $('#pocet_ks, #sirka, #vyska', __).keydown(function (event) {
            return is_number(event.keyCode);
        });

        // zmena materialu
        $('#material', __).change(function () {
            $('#field-laminace, #field-oka, div[id^="field-zpevneni-okraju-"]', __).hide();
            $('select[id^="zpevneni-okraju-"]', __).val(-1);

            // mame zobrazit laminace
            if (materialy[$(this).val()]['laminace'] == '1') {
                $('#field-laminace', __).show();
            }

            // mame zobrazit oka
            if (materialy[$(this).val()]['oka'] == '1') {
                $('#field-oka', __).show();
            }

            // mame zobrazit zpevneni okraju
            if (materialy[$(this).val()]['zpevneni_okraju'].length) {
                //
                for (i = 0; i < materialy[$(this).val()]['zpevneni_okraju'].length; i++) {
                    $('#field-zpevneni-okraju-' + materialy[$(this).val()]['zpevneni_okraju'][i], __).show();
                }
            }

            if ($(this).val()) {
                // zobrazeni rozliseni, ktera patri materialu
                var rozliseni = $('#rozliseni', __);

                rozliseni.html('');

                $.each(materialy[$(this).val()]['ceny'], function (key, item) {
                    rozliseni.append('<option value="' + key + '">' + rozliseni_volby[key] + '</option>');
                });

                // zmenime hodnotu rozliseni na standard
                rozliseni.val(3);

                $('#field-rozliseni', __).show();
            } else {
                $('#field-rozliseni', __).hide();
            }
        });

        // spocitani ceny
        $('.calculate', __).click(function () {
            var pocet_ks = parseInt($('#pocet_ks', __).val());

            if (isNaN(pocet_ks)) {
                pocet_ks = 0;
            }

            var sirka = parseInt($('#sirka', __).val());

            if (isNaN(sirka)) {
                sirka = 0;
            }

            var vyska = parseInt($('#vyska', __).val());

            if (isNaN(vyska)) {
                vyska = 0;
            }

            var cena_kus = parseInt(materialy[$('#material', __).val()]['ceny'][$('#rozliseni', __).val()]);

            if (isNaN(cena_kus)) {
                cena_kus = 0;
            }

            var plocha = sirka / 1000 * vyska / 1000
            cena_kus *= plocha;

            // mame pridat cenu laminace
            if ($('#field-laminace', __).is(':visible')) {
                cena_kus += parseInt(laminace[$('#laminace', __).val()]) * sirka / 1000 * vyska / 1000;
            }

            // mame pridat cenu za oka
            if ($('#field-oka', __).is(':visible')) {
                var oka_pocet = parseInt($('#oka_pocet', __).val());

                if (isNaN(oka_pocet)) {
                    oka_pocet = 0;
                }

                cena_kus += parseInt(oka[$('#oka', __).val()]) * oka_pocet;
            }

            // mame pridat cenu za zpevneni okraju
            $('select[id^="zpevneni-okraju-"]', __).each(function () {
                if ($(this).val() == 1) {
                    cena_kus += (sirka / 1000 + vyska / 1000) * 2 * parseInt(zpevneni_okraju[$(this).val()]);
                }
            });

            if (plocha * pocet_ks < 1) {
                cena_kus *= 1.3;
            }

            var cena_celkem = cena_kus * pocet_ks;

            if (cena_celkem > 0 && cena_celkem < 250) {
                cena_celkem = 250;
                cena_kus = cena_celkem / pocet_ks;
            }

            $('#online-calculation-kus', __).html(format_cena(cena_kus) + ' Kč (' + format_cena(cena_kus * 1.2) + ' Kč s DPH)');
            $('#online-calculation-celkem', __).html(format_cena(cena_celkem) + ' Kč (' + format_cena(cena_celkem * 1.2) + ' Kč s DPH)');

            $('#online-calculation-kus-hidden', __).val(cena_kus);
            $('#online-calculation-celkem-hidden', __).val(cena_celkem);

            return false;
        });

        // odeslat povolime pouze kompletne vyplneny formular
        $('button', __.parent()).click(function (event) {
            var messages = '';

            var fieldNames = ['email'];

            $.each(fieldNames, function (key, fieldName) {
                var field = $('#' + fieldName, __.parent());

                if (!$.trim(field.val()) || (fieldName == 'email' && !isValidEmailAddress(field.val()))) {
                    var label = field.prev().html();

                    messages += label.substr(0, label.length - 1) + "\n";
                }
            });

            if (messages) {
                alert(messages);

                return false;
            }
        });

        // formatuje cenu
        function format_cena(cena) {
            // maximalni pocet desetinnych mist
            var MAX_DECIMAL = 3;

            var cenaParts = (cena + '').split('.');
            var cena_formatovana = '';
            var temp = ''

            if (cenaParts[0]) {
                cenaParts[0] = reverse_string(cenaParts[0]);

                for (var i = 1; i <= cenaParts[0].length; i++) {
                    temp += cenaParts[0].charAt(i - 1);

                    if (i % 3 == 0) {
                        temp += ' ';
                    }
                }

                cena_formatovana += reverse_string(temp);
            }

            if (cenaParts[1]) {
                cena_formatovana += ',';
                temp = '';

                cenaParts[1] = cenaParts[1].substr(0, MAX_DECIMAL);
                
                for (var i = 1; i <= cenaParts[1].length; i++) {
                    temp += cenaParts[1].charAt(i - 1);

                    if (i % 3 == 0) {
                        temp += ' ';
                    }
                }

                cena_formatovana += temp;
            }

            return cena_formatovana;
        }

        // obraci retezec
        function reverse_string(string) {
            return string.split('').reverse().join('');
        }
    });

    // help
    $('a.help').each(function () {
        var __ = $(this);

        __
            .data('help_text', __.attr('title'))
            .removeAttr('title')
            .hover(
                function () {
                    var help_box = $('#help-box');

                    if (!help_box.length) {
                        help_box = $('<div id="help-box"></div>');

                        help_box.append('<div class="help-box-top"></div><div class="help-box-inner"></div><div class="help-box-bottom"></div>')

                        $('body').append(help_box);
                    }

                    var select_id = $(this).siblings('select').attr('id');

                    $('a.help').removeClass('help-selected');

                    // vlozime text
                    $('.help-box-inner', help_box).html($(this).data('help_text'));

                    // zobrazime help
                    help_box
                        .data('select_id', select_id)
                        .css({
                            top  : $(this).position().top,
                            left : $(this).position().left - 210
                        }).show();

                    $(this).addClass('help-selected');
                },
                function () {
                    var help_box = $('#help-box');

                    help_box
                        .data('select_id', '')
                        .hide();

                    $('a.help').removeClass('help-selected');
                }
            );
//            .click(function () {
//                var help_box = $('#help-box');
//
//                if (!help_box.length) {
//                    help_box = $('<div id="help-box"></div>');
//
//                    help_box.append('<div class="help-box-top"></div><div class="help-box-inner"></div><div class="help-box-bottom"></div>')
//
//                    $('body').append(help_box);
//                }
//
//                var select_id = $(this).siblings('select').attr('id');
//
//                $('a.help').removeClass('help-selected');
//
//                if (select_id == help_box.data('select_id')) {
//
//                } else {
//                    // vlozime text
//                    $('.help-box-inner', help_box).html($(this).data('help_text'));
//
//                    // zobrazime help
//                    help_box
//                        .data('select_id', select_id)
//                        .css({
//                            top  : $(this).position().top,
//                            left : $(this).position().left + 20
//                        }).show();
//
//                    $(this).addClass('help-selected');
//                }
//
//                return false;
//            });
    });
});

// overuje, zda bylo zadano cislo nebo nejaka jina povolena klavesa
function is_number(keyCode) {
    if ((keyCode >= 48 && keyCode <= 57) || (keyCode >= 96 && keyCode <= 105) ||
         keyCode == 8 || keyCode == 9 || keyCode == 46) {
        return true;
    } else {
        return false;
    }
}

// overuje validni e-mailovou adresu
function isValidEmailAddress(emailAddress) {
    var pattern = new RegExp(/^(("[\w-\s]+")|([\w-]+(?:\.[\w-]+)*)|("[\w-\s]+")([\w-]+(?:\.[\w-]+)*))(@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$)|(@\[?((25[0-5]\.|2[0-4][0-9]\.|1[0-9]{2}\.|[0-9]{1,2}\.))((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\.){2}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\]?$)/i);
    return pattern.test(emailAddress);
}
