﻿(function ($) {
    $.fn.makeCalc = function (params) {
        //default params, overriden if passed in params
        params = $.extend({ fieldWidth: 141, fieldHeight: 95, spaceWidth: 2, areaPaddingTop: 75, areaPaddingBottom: 0,
            fieldRealWidth: 100, fieldRealHeight: 100, spaceRealWidth: 2, fieldPrice: 100, title: '', numberOfFields: 6, imgSrc: 'trutnov_predni.png'
        }, params);

        if (window.calcCount == null)
            window.calcCount = 1;
        else
            window.calcCount++;

        //get parent element
        var $wrapper = $(this);
        $wrapper.css('width', '315px');
        $wrapper.css('float', 'left');

        /*** <create selectable area> ***/
        var style = 'width:300px;height:' + (430 - params.areaPaddingTop - params.areaPaddingBottom).toString() +
            'px;background:url(/portals/e-creative/skins/default/js/magazine_calculator/' + params.imgSrc + ') no-repeat;padding-top:' +
            params.areaPaddingTop + 'px;padding-bottom:' + params.areaPaddingBottom + 'px;';

        var html = '<fieldset class="calc-field" style="' + style + '"><ul class="selectableArea">';

        style = 'text-indent:9999px !important;height:' + params.fieldHeight + 'px;width:' + params.fieldWidth + 'px;margin:' + params.spaceWidth + 'px;';
        for (var i = 1; i <= params.numberOfFields; i++) {
            html = html + '<li style="' + style + '">' + params.fieldPrice + ',' + params.fieldRealWidth + ',' + params.fieldRealHeight + ',' + i + '</li>';
        }
        //close selectable area
        html = html + "</ul></fieldset>";

        /*** <create info tables> ***/
        $wrapper.html(html);

        //if this is the last calculator, insert info tables
        if (window.calcCount == 3) {

            html = '<br /><br />';
            html = html + '<table class="calc-tbl cenik"><tr><th>cena</th><th>sleva - 10%</th><th>sleva - 15%</th></tr>';
            html = html + '<tr><td class="price">-</td><td class="price90">-</td><td class="price85">-</td></tr>';
            html = html + '</table>'

            //html = html + '<table class="calc-tbl cenik"><tr><th>šířka</th><th>výška</th><th>plocha</th></tr>';
            //html = html + '<tr><td class="width">-</td><td class="height">-</td><td class="area">-</td></tr>';
            //html = html + '</table>'

            $wrapper.after(html);
        }

        /*** <make area selectable> ***/
        $(".calc-field").children('.selectableArea').selectable({
            stop: function () {
                var selectedFields = 0;
                var data = null;
                var fields = new Array();

                $(".ui-selected", this).each(function (key, value) {
                    selectedFields++;
                    if (data == null) {
                        data = $(this).text().split(',');
                    }

                    fields[key] = $(this).text().split(',')[3];
                });
                
                var index = fields[fields.length - 1] - fields[0];
                //alert(index);

                var dim = getSizeOfSelection(index, data[1], data[2], 2, '');

                var price = data[0] * selectedFields;

                var width = dim[0];
                var height = dim[1];
                var area = width * height;

                $('.calc-tbl').find('.price').text(Math.round(price) + ',- Kč');
                $('.calc-tbl').find('.price90').text(Math.round(price * 0.90) + ',- Kč');
                $('.calc-tbl').find('.price85').text(Math.round(price * 0.85) + ',- Kč');

                $('.calc-tbl').find('.width').text(Math.round(width) + ' mm');
                $('.calc-tbl').find('.height').text(Math.round(height) + ' mm');
                $('.calc-tbl').find('.area').html(Math.round(area / 1000) + ' cm<sup>2</sup>');
                //alert(selectedFields);
            },
            start: function () {
                $('.ui-selected').each(function () {
                    $(this).attr('class', 'ui-state-default');
                });
            },
            selecting: function () {
            }
        });
        /*** <make area selectable> ***/

        //allow jquery chaining
        return this;
    };
})(jQuery);

function initVrchlabi() {
    $('#predni').makeCalc({ title: 'přední strana', fieldRealWidth: 100, fieldRealHeight: 70,
        fieldPrice: 1600, imgSrc: 'vrchlabi-predni.png'
    });

    $('#stred').makeCalc({ title: 'vnitřní strana', fieldWidth: 68, fieldHeight: 68,
        imgSrc: 'vrchlabi-stred.png', areaPaddingTop: 25, numberOfFields: 16, fieldRealWidth: 49, fieldRealHeight: 49, fieldPrice: 320
    });

    $('#zada').makeCalc({ title: 'zadní strana', fieldWidth: 140, fieldHeight: 67, imgSrc: 'vrchlabi-zada.png',
        areaPaddingTop: 25, numberOfFields: 8, fieldRealWidth: 100, fieldRealHeight: 69, fieldPrice: 800
    });
}

function initTrutnov() {
    $('#predni').makeCalc({ title: 'přední strana', fieldRealWidth: 100, fieldRealHeight: 70,
        fieldPrice: 2400, imgSrc: 'trutnov-predni.png'
    });

    $('#stred').makeCalc({ title: 'vnitřní strana', fieldWidth: 68, fieldHeight: 68,
        imgSrc: 'trutnov-stred.png', areaPaddingTop: 25, numberOfFields: 16, fieldRealWidth: 49, fieldRealHeight: 49, fieldPrice: 420
    });

    $('#zada').makeCalc({ title: 'zadní strana', fieldWidth: 140, fieldHeight: 67, imgSrc: 'trutnov-zada.png',
        areaPaddingTop: 25, numberOfFields: 8, fieldRealWidth: 100, fieldRealHeight: 69, fieldPrice: 1000
    });
}

function getSizeOfSelection(index, width, height, space, page) {
    var w = width;
    var h = height;
    var sv = space;
    var sh = space;

    switch (index) {
        case 0:
            return [w, h];
            break;
        case 1:
            return [2 * w + sv, h];
            break;
        case 2:
            return [3 * w + (2 * sv), h];
            break;
        case 3:
            return [4 * w + (3 * sv), h];
            break;
        case 4:
            return [w, 2 * h + sh];
            break;
        case 5:
            return [2 * w + sv, 2 * h + sh];
            break;
        case 6:
            return [3 * w + (2 * sv), 2 * h + sh];
            break;
        case 7:
            return [4 * w + (3 * sv), 2 * h + sh];
            break;
        case 8:
            return [w, 3 * h + (2 * sh)];
            break;
        case 9:
            return [2 * w + sv, 3 * h + (2 * sh)];
            break;
        case 10:
            return [3 * w + (2 * sv), 3 * h + (2 * sh)];
            break;
        case 11:
            return [4 * w + (3 * sv), 3 * h + (2 * sh)];
            break;
        case 12:
            return [w, 4 * h + (3 * sh)];
            break;
        case 13:
            return [2 * w + sv, 4 * h + (3 * sh)];
            break;
        case 14:
            return [3 * w + (2 * sv), 4 * h + (3 * sh)];
            break;
        case 15:
            return [4 * w + (3 * sv), 4 * h + (3 * sh)];
            break;
        case 16:
            return [w, 5 * h + (4 * sh)];
            break;
        case 17:
            return [2 * w + sv, 5 * h + (4 * sh)];
            break;
        case 18:
            return [3 * w + (2 * sv), 5 * h + (4 * sh)];
            break;
        case 19:
            return [4 * w + (3 * sv), 5 * h + (4 * sh)];
            break;
        //Pouze pro vnitrni a zadni stranu 
        case 20:
            return [w, 6 * h + (5 * sh)];
            break;
        case 21:
            return [2 * w + sv, 6 * h + (5 * sh)];
            break;
        case 22:
            return [3 * w + (2 * sv), 6 * h + (5 * sh)];
            break;
        case 23:
            return [4 * w + (5 * sv), 6 * h + (5 * sh)];
            break;
        case 24:
            return [w, 7 * h + (6 * sh)];
            break;
        case 25:
            return [2 * w + sv, 7 * h + (6 * sh)];
            break;
        case 26:
            return [3 * w + (2 * sv), 7 * h + (6 * sh)];
            break;
        case 27:
            return [4 * w + (3 * sv), 7 * h + (6 * sh)];
            break;
        case 28:
            return [w, 8 * h + (7 * sh)];
            break;
        case 29:
            return [2 * w + sv, 8 * h + (7 * sh)];
            break;
        case 30:
            return [3 * w + (2 * sv), 8 * h + (7 * sh)];
            break;
        case 31:
            return [4 * w + (3 * sv), 8 * h + (7 * sh)];
            break;
        default:
            return [0, 0];
            break;
    }
}
