﻿/*
* TCore
* @version: 1.0.0 (2021)
* @requires: $ v3.0 or later
* @author: TORANJDATA
* @event-namespace: .TCore
* @license: www.toranjnet.com
* Copyright 2021 TORANJDATA
*/
'use strict';

var htmlError = '<span class="text-danger font-size-1 error"></span>',
    template = 'AroundV2',
    apiURL = "/Template/AroundV2/apiV1/";

$.extend({
    tc: {
        init: function () {

            $(document).ready(function () {
                var handleAjaxTemplate = function () {
                    $.each($("[data-innerload]"), function () {
                        $.tc.remote($(this), $(this).attr("data-innerload"));
                    })
                };

                var handleAjaxModal = function () {
                    $('body').on('click', '[data-bs-load="ajax"]', function () {

                        var $btn = $(this);
                        $($btn.data("bs-target") + ' .modal-content').load($btn.data("remote"));

                        var Modal = $btn.data("bs-target");
                        $(Modal).on('hidden.bs.modal', function () {
                            $($btn.data("bs-target") + ' .modal-content').html("<div class=\"modal-loading\"><i class=\"fas fa-spinner fa-spin\"></i><br />لطفا اندکی صبر کنید...</div>");
                        });

                    });
                }

                var handleInputNumberCustom = function () {
                    $('<div class="quantity-nav"><button class="quantity-button quantity-up"><i class="far fa-plus"></i></button><button class="quantity-button quantity-down"><i class="far fa-minus"></i></button></div>').insertAfter('.quantity input');
                    $('.quantity').each(function () {
                        var spinner = $(this),
                            input = spinner.find('input[type="number"]'),
                            btnUp = spinner.find('.quantity-up'),
                            btnDown = spinner.find('.quantity-down'),
                            min = input.attr('min'),
                            max = input.attr('max');

                        btnUp.click(function () {
                            var oldValue = parseFloat(input.val());
                            if (oldValue >= max) {
                                var newVal = oldValue;
                            } else {
                                var newVal = oldValue + 1;
                            }
                            spinner.find("input").val(newVal);
                            spinner.find("input").trigger("change");
                        });

                        btnDown.click(function () {
                            var oldValue = parseFloat(input.val());
                            if (oldValue <= min) {
                                var newVal = oldValue;
                            } else {
                                var newVal = oldValue - 1;
                            }
                            spinner.find("input").val(newVal);
                            spinner.find("input").trigger("change");
                        });

                    });
                }

                var handleSearch = function () {
                    $('body').on('click', '#topSearchBtn', function (e) {

                        e.preventDefault();
                        var $this = $(this);
                        var inputSearch = $this.parents('.row').find('#topSearchValue');
                        var valSearch = inputSearch.val();

                        if (valSearch !== '') {
                            window.location = $(this).data("location") + '?text=' + valSearch;
                        }
                    });

                    $(document).on('keyup', '#topSearchValue', function (e) {
                        e.preventDefault();
                        if (e.keyCode == 13) {
                            var $this = $(this);
                            var BtnSearch = $this.parents('.row').find('#topSearchBtn');
                            var valSearch = $this.val();
                            if (valSearch !== '') {
                                window.location = BtnSearch.data("location") + '?text=' + valSearch;
                            }
                        }
                    });
                };

                var handleTypeaheadSearch = function () {

                    $('#modalSearch').on('shown.bs.modal', function () {
                        $('#searchInput').focus();
                    })

                    $(document).on('click', '.ShowSearchModal', function (e) {
                        var myModal = new bootstrap.Modal(document.getElementById('modalSearch'), {})
                        myModal.show();
                    });

                    $.typeahead({
                        input: '.typeaheadSearch',
                        minLength: 3,
                        order: "asc",
                        dynamic: true,
                        delay: 500,
                        //backdrop: {
                        //    "background-color": "#fff"
                        //},
                        template: function (query, item) {
                            //return '<span class="avatar avatar-xl text-center bg-transparent me-2"><img src="{{imageUrl}}" class="rounded avatar-img"/></span> <span class="title">{{subTitle}} {{title}}</span>'
                            //return '<div class="text-center"><div class="bg-transparent d-block w-50 mx-auto mb-2"><img src="{{imageUrl}}" class="rounded"/></div> <div class="title">{{subTitle}} {{title}}</div></div>'

                            return '<div class="d-flex align-items-center justify-content-right text-start px-2" ><img class="rounded " src="{{imageUrl}}?width=120" alt="">' +
                                '<div class="ps-3">' +
                                '<div class="fs-sm text-muted">{{subTitle}}</div>' +
                                '<div class="h6 mb-1">{{title}}</div>' +
                                '</div></div>';


                        },
                        emptyTemplate: "متاسفانه موردی برای «{{query}}» یافت نشد.",
                        source: {
                            SearchData: {
                                display: ["title", "subTitle", "detailUrl", "sectionTitle"],
                                href: function (item) {
                                    return item.detailUrl;
                                },
                                ajax: [{
                                    type: "GET",
                                    url: apiURL + "Public.aspx?act=GlobalSearch",
                                    data: {
                                        q: "{{query}}",
                                        t: $(".typeaheadSearch").attr("data-sections")
                                    }
                                }, "data"],
                                //template: '<span class="badge badge-pill badge-primary ml-2">{{sectionTitle}}</span> {{subTitle}} {{title}}'
                            }
                        },
                        callback: {
                            onClick: function (node, a, item, event) {

                                // You can do a simple window.location of the item.href
                                //alert(JSON.stringify(item));

                            },
                            onSendRequest: function (node, query) {
                                console.log('request is sent')
                            },
                            onReceiveRequest: function (node, query) {
                                console.log('request is received')
                            }
                        },
                        debug: true
                    });

                }

                var handleNotificationsModal = function () {
                    if ($('#NotificationsModal').length > 0) {
                        var NotificationsModal = new bootstrap.Modal(document.getElementById('NotificationsModal'), {});
                        NotificationsModal.show();
                    }
                }

                var handleFormBuilder = function () {
                    $('body').on('click', '#SubmitFormBuilder', function (e) {

                        var $btn = $(this);
                        var $form = $(this).closest(form);
                        var data = $form.serializeJSON();

                        console.log(data);

                        $form.validate({
                            errorClass: 'error mb-0',
                            errorElement: 'p',
                            errorPlacement: function (error, element) {
                                element.after(error)
                            },
                            rules: {
                                cellPhone: {
                                    pattern: "09[0-9]{9}", //--> 09(1[0-9]|3[1-9]|2[1-9])-?[0-9]{3}-?[0-9]{4} 
                                    minlength: 11
                                }
                            },
                            // Specify validation error messages
                            messages: {
                                cellPhone: {
                                    pattern: "فرمت شماره همراه صحیح نمی باشد. نمونه صحیح: 09121101212",
                                },
                            },
                            highlight: function (element, errorClass) {
                                $(element).addClass(errorClass).parent().prev().children("select").addClass(errorClass);
                            }
                        });


                        if ($form.valid()) {
                            $.ajax({
                                url: apiURL + "Public.aspx?act=SubmitFormV3",
                                type: "POST",
                                data: {
                                    "ContentID": $btn.attr('data-id'),
                                    "Data": JSON.stringify(data)
                                },
                                success: function (result) {
                                    var obj = JSON.parse(result);
                                    if (obj.status == "error") {
                                        swal("خطا در ذخیره سازی", {
                                            icon: obj.status,
                                        });
                                        $.tc.btnLoading('reset', $btn);
                                    }
                                    else {
                                        swal({
                                            title: "با موفقیت ثبت شد.",
                                            text: "کد رهگیری: " + obj.code,
                                            type: "success",
                                            icon: obj.status,
                                        }).then(function () {
                                            window.location = "/";
                                        });
                                    }
                                },
                                beforeSend: function () {
                                    $.tc.btnLoading('loading', $btn);
                                },
                                error: function () {
                                    alert('خطا سیستمی');
                                    $.tc.btnLoading('reset', $btn);
                                },
                                complete: function () { }
                            });
                        }

                    });

                }

                var handleInputFormatter = function () {

                    var input = document.querySelectorAll('[data-format]');
                    if (input.length === 0) return;

                    for (var i = 0; i < input.length; i++) {
                        var inputFormat = input[i].dataset.format,
                            blocks = input[i].dataset.blocks,
                            delimiter = input[i].dataset.delimiter;
                        blocks = blocks !== undefined ? blocks.split(' ').map(Number) : '';
                        delimiter = delimiter !== undefined ? delimiter : ' ';

                        switch (inputFormat) {
                            case 'number':
                                var number = new Cleave(input[i], {
                                    numeral: true,
                                    numeralThousandsGroupStyle: 'thousand'
                                });
                                break;

                            case 'card':
                                var card = new Cleave(input[i], {
                                    creditCard: true
                                });
                                break;

                            case 'cvc':
                                var cvc = new Cleave(input[i], {
                                    numeral: true,
                                    numeralIntegerScale: 3
                                });
                                break;

                            case 'date':
                                var date = new Cleave(input[i], {
                                    date: true,
                                    datePattern: ['m', 'y']
                                });
                                break;

                            case 'date-long':
                                var dateLong = new Cleave(input[i], {
                                    date: true,
                                    delimiter: '-',
                                    datePattern: ['Y', 'm', 'd']
                                });
                                break;

                            case 'time':
                                var time = new Cleave(input[i], {
                                    time: true,
                                    datePattern: ['h', 'm']
                                });
                                break;

                            case 'custom':
                                var custom = new Cleave(input[i], {
                                    delimiter: delimiter,
                                    blocks: blocks
                                });
                                break;

                            default:
                                console.error('Sorry, your format ' + inputFormat + ' is not available. You can add it to the theme object method - inputFormatter in src/js/theme.js or choose one from the list of available formats: card, cvc, date, date-long, time or custom.');
                        }
                    }

                };


                /* stack Animation*/
                var windowScrollTop = window.pageYOffset || document.documentElement.scrollTop;
                var stackLastScroll = 0;
                var stackAnimation = function () {
                    windowScrollTop = window.pageYOffset || document.documentElement.scrollTop;
                    $('.stack-box').each(function () {
                        if ($(window).width() > 1199) {
                            var _this = $(this);
                            var stackItems = _this.find('.stack-item');
                            if (stackItems.length) {
                                if (windowScrollTop > stackLastScroll) {
                                    _this.addClass('forward');
                                    _this.removeClass('reverse');
                                } else {
                                    _this.removeClass('forward');
                                    _this.addClass('reverse');
                                }

                                for (let i = 0; i < stackItems.length - 1; i++) {
                                    var stackBoxHeight = (_this.height() / (_this.find('.stack-item').length)) * i;
                                    var stackTopPosition = _this.offset().top;
                                    if ((windowScrollTop - stackTopPosition) > stackBoxHeight) {
                                        var yMove = windowScrollTop - stackTopPosition - stackBoxHeight;
                                        if (yMove > _this.outerHeight()) {
                                            yMove = _this.outerHeight();
                                        }
                                        $(stackItems[i]).css({ 'height': 'calc(100vh - ' + yMove + 'px)' });
                                        $(stackItems[i]).addClass('active');
                                    } else {
                                        $(stackItems[i]).css({ 'height': 'calc(100vh - 0px)' });
                                        $(stackItems[i]).removeClass('active');
                                    }
                                }
                            }
                        } else {
                            $('.stack-box .stack-item').css({ 'height': 'inherit' });
                        }
                    });

                    stackLastScroll = windowScrollTop;
                }
                $(window).scroll(function () {
                    stackAnimation();
                });


                /* Image tilt 3d effect using atropos*/
                var atroposItems = document.querySelectorAll('[data-atropos]')
                function initAtropos() {
                    if (atroposItems.length && $(window).width() > 1199) {
                        atroposItems.forEach(function (atroposItem) {
                            var myAtropos = Atropos({
                                el: atroposItem
                            });
                        });
                    }
                }
                if (typeof Atropos !== 'undefined' && Atropos !== null) {
                    initAtropos();
                }
                function destroyAtropos() {
                    if (atroposItems.length && $(window).width() > 1199) {
                        atroposItems.forEach(function (atroposItem) {
                            if (atroposItem.__atropos__) {
                                atroposItem.__atropos__.destroy();
                            }
                        });
                    }
                }
                $(window).resize(function () {
                    if ($(window).width() <= 1199) {
                        destroyAtropos();
                        destroySkrollr();
                    } else {
                        if (typeof Atropos !== 'undefined' && typeof Atropos !== null) {
                            initAtropos();
                        }
                    }
                });

                handleAjaxTemplate();
                handleAjaxModal();
                handleInputNumberCustom();
                handleSearch();
                handleTypeaheadSearch();
                handleNotificationsModal();
                handleFormBuilder();
                handleInputFormatter();
                stackAnimation();


            });
        },

        //handleAjaxTemplate: function () {
        //    $.each($("[data-innerload]"), function () {
        //        $.tc.remote($(this), $(this).attr("data-innerload"));
        //    })
        //},


        btnLoading: function (status, $btn) {
            var loading = $btn.attr('data-loading-text') !== '' ? $btn.attr('data-loading-text') : 'loading...',
                label = $btn.text(),
                data = $btn.data();

            if (status != null) {
                if (status == 'loading') {
                    $btn.addClass('disabled');
                    $btn.addClass('loading');
                    $btn.attr('data-btn-label', label);
                    $btn.text(loading);

                } else if ((status == 'reset')) {
                    $btn.removeClass('disabled');
                    $btn.removeClass('loading');
                    $btn.text($btn.attr('data-btn-label'));
                }
            }
        },

        remote: function ($pnl, url) {
            $pnl.load(url);
        },

        timers: function (element, callback) {

            callback = callback || function () { };
            return element.each(function () {

                var countdown = $('.countdown1').text(),
                    interval = 1000;

                var timers = setInterval(function () {
                    var timer = countdown.split(':');
                    //by parsing integer, I avoid all extra string processing
                    var minutes = parseInt(timer[0], 10);
                    var seconds = parseInt(timer[1], 10);
                    --seconds;
                    minutes = (seconds < 0) ? --minutes : minutes;
                    seconds = (seconds < 0) ? 59 : seconds;
                    seconds = (seconds < 10) ? '0' + seconds : seconds;
                    //minutes = (minutes < 10) ?  minutes : minutes;
                    $('.countdown').html(minutes + ':' + seconds);
                    if (minutes < 0) {
                        clearInterval(timers);
                        callback();
                    }

                    //check if both minutes and seconds are 0
                    if ((seconds <= 0) && (minutes <= 0)) {
                        clearInterval(timers);
                        callback();
                    }
                    countdown = minutes + ':' + seconds;
                }, interval);
            });
        },

        userValidtion: function (form) {
            function checkMelliCode(meli_code) {
                if (meli_code.length == 10) {
                    if (meli_code == '1111111111' || meli_code == '0000000000' || meli_code == '2222222222' || meli_code == '3333333333' || meli_code == '4444444444' || meli_code == '5555555555' || meli_code == '6666666666' || meli_code == '7777777777' || meli_code == '8888888888' || meli_code == '9999999999') {
                        return false;
                    }
                    var c = parseInt(meli_code.charAt(9));
                    var n = parseInt(meli_code.charAt(0)) * 10 +
                        parseInt(meli_code.charAt(1)) * 9 +
                        parseInt(meli_code.charAt(2)) * 8 +
                        parseInt(meli_code.charAt(3)) * 7 +
                        parseInt(meli_code.charAt(4)) * 6 +
                        parseInt(meli_code.charAt(5)) * 5 +
                        parseInt(meli_code.charAt(6)) * 4 +
                        parseInt(meli_code.charAt(7)) * 3 +
                        parseInt(meli_code.charAt(8)) * 2;
                    var r = n - parseInt(n / 11) * 11;
                    if ((r == 0 && r == c) || (r == 1 && c == 1) || (r > 1 && c == 11 - r)) {
                        return true;
                    }
                    else {
                        return false;
                    }
                }
                else {
                    return false;
                }
            };

            $.validator.addMethod("NationalCode", function (value, element) {
                if (value.length == 0) {
                    return true;
                } else {

                    return checkMelliCode(value);
                }

            }, "فرمت صحیح شماره ملی را وارد نمایید");

            $.validator.addMethod("CityName", function (value, element) {

                if ($(element).attr('aria-required') && (value == $(element).parents('.row').find('#StateName').val())) {
                    return false;
                } else {
                    return true;
                }
            }, " این فیلد الزامی می باشد");
            // check validation
            $(form).validate({
                errorClass: 'is-invalid text-danger',
                errorElement: 'span',
                errorPlacement: function (error, element) {
                    if (element.attr("name") == "Website") {
                        element.parent(".input-group").after(error);
                    } else if (element.attr("name") == "Location") {
                        element.parents(".form-group").find('.leaflet').after(error);
                    } else if (element.attr("name") == "PhotoUrl") {
                        element.parents("#Registration").find('.FileUploader').after(error);
                    } else if (element.parents('.input-group').length > 0) {
                        element.parents(".input-group").after(error);
                    } else {
                        element.after(error)
                    }
                },
                rules: {
                    Email: {
                        email: true,
                        remote: {
                            url: apiURL + "Public.aspx?act=UserCheck",
                            type: "post",
                            data: {
                                key: "email",
                                value: function () {
                                    return $('#Email').val();
                                },
                                oldValue: function () {
                                    return $('#Email').attr("data-current-email");
                                }
                            },
                        },
                    },
                    CellPhone: {
                        pattern: "09[0-9]{9}", //--> 09(1[0-9]|3[1-9]|2[1-9])-?[0-9]{3}-?[0-9]{4}  
                        remote: {
                            url: apiURL + "Public.aspx?act=UserCheck",
                            type: "post",
                            data: {
                                key: "cellphone",
                                value: function () {
                                    return $('#CellPhone').val();
                                },
                                oldValue: function () {
                                    return $('#CellPhone').attr("data-current-cellphone");
                                }
                            },
                        },
                    },
                    NationalCode: {
                        NationalCode: true,
                    },
                    CityName: {
                        CityName: true
                    }


                },
                // Specify validation error messages
                messages: {
                    Email: {
                        remote: "ایمیل قبلا ثبت گردیده است",
                    },
                    CellPhone: {
                        pattern: "فرمت شماره همراه صحیح نمی باشد. نمونه صحیح: 09121101212",
                        remote: "شماره همراه قبلا ثبت گردیده است",
                    },
                }
            });

            return form.valid();
        },

        initLocation: function () {
            var GetLocation = function (id, FirstItem) {

                if (FirstItem === "")
                    FirstItem = "انتخاب نمایید...";

                $.ajax({
                    url: apiURL + "public.aspx?act=LocationsByParent",
                    type: "POST",
                    data: { "LocationID": id },
                    success: function (result) {
                        if (result == "error") {
                            alert('خطا...!');
                        }
                        else {
                            //alert(result);
                            var obj = JSON.parse(result);
                            $("select[name='CityID'] option").remove();
                            var html = '<option data-id="' + id + '" value="' + id + '">' + FirstItem + '</option>';
                            $.each(obj, function (index, value) {
                                html += '<option data-id="' + value.LocationID + '" value="' + value.LocationID + '">' + value.LocationName + '</option>';
                            });

                            $("select[name='CityID']").append(html);
                            if ($("select[name='CityID']").attr('data-id') !== "" && !(typeof $("select[name='CityID']").attr('data-id') === "undefined")) {
                                $("select[name='CityID'] option[data-id='" + $("select[name='CityID']").attr('data-id') + "']").attr("selected", "selected");
                            }
                        }
                    },
                    beforeSend: function () { },
                    error: function () { alert('خطا...!'); },
                    complete: function () { }
                });
            };

            var id = $("select[name='StateID']").find(":selected").attr('data-id');
            if (typeof id === "undefined") {
                id = 0;
            } else {
                GetLocation(id, "");
            }


            $("select[name='StateID']").change(function () {
                var id = $(this).find(':selected').val();
                GetLocation(id, "");
            });

        },

        Maplocation: function (id, lat, lng, loc, icon) {

            ajaxLocation();

            function ajaxLocation() {
                $.ajax({
                    url: apiURL + "public.aspx?act=IranLocations",
                    type: "POST",
                    data: {
                        "LocationID": id
                    },
                    success: function (result) {
                        if (result == "error") {
                            alert('خطا..!');

                        }
                        else {
                            var obj = JSON.parse(result);
                            createMap(id, lat, lng, loc, icon, obj)

                        }
                    },
                    beforeSend: function () { },
                    error: function () { alert('خطا...!'); },
                    complete: function () { }
                });
            }


            function createMap(id, lat, lng, loc, icon, data) {


                var map = L.map(id).setView(loc, 13);

                L.tileLayer('https://api.mapbox.com/styles/v1/{id}/tiles/{z}/{x}/{y}?access_token=pk.eyJ1IjoibWFwYm94IiwiYSI6ImNpejY4NXVycTA2emYycXBndHRqcmZ3N3gifQ.rJcFIG214AriISLbB6B5aw',
                    {
                        id: 'mapbox/light-v9',
                        tileSize: 512, zoomOffset: -1,
                        attribution: 'Map data &copy; <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors, ' +
                            'Imagery © <a href="https://www.mapbox.com/">Mapbox</a>'
                    }).addTo(map);
                var LeafIcon = L.Icon.extend({
                    options: {
                        iconSize: [64, 64],
                        shadowSize: [0, 0],
                        iconAnchor: [30, 50],
                        shadowAnchor: [0, 0],
                        popupAnchor: [0, 0]
                    }
                });
                var mapIcon = new LeafIcon({ iconUrl: icon });
                var marker = L.marker([lat, lng], { icon: mapIcon }).addTo(map);
                map.on('click', function (e) {
                    $("#Location").val("lat: " + e.latlng.lat + ", lng: " + e.latlng.lng);
                    map.removeLayer(marker);
                    marker = L.marker([e.latlng.lat, e.latlng.lng], { icon: mapIcon }).addTo(map);
                });
                map.scrollWheelZoom.disable();
                var featuresLayer = new L.GeoJSON(data, {
                    style: function (feature) {
                        return { color: feature.properties.color };
                    },
                    onEachFeature: function (feature, marker) {
                        marker.bindPopup('<h4 style="color:' + feature.properties.color + '">' + feature.properties.name + '</h4>');
                    }
                });

                map.addLayer(featuresLayer);

                var searchControl = new L.Control.Search({
                    position: 'topleft',
                    layer: featuresLayer,
                    propertyName: 'name',
                    marker: false,
                    textErr: 'مکان مورد نظر پیدا نشد',	//error message
                    textCancel: 'انصراف',		    //title in cancel button
                    textPlaceholder: 'جستجو...',
                    container: 'input-search',
                    moveToLocation: function (latlng, title, map) {
                        //map.fitBounds( latlng.layer.getBounds() );
                        // var zoom = map.getBoundsZoom(latlng.layer.getBounds());
                        map.setView(latlng, 12); // access the zoom
                    }
                });

                searchControl.on('search:locationfound', function (e) {

                    //console.log('search:locationfound', );

                    //map.removeLayer(this._markerSearch)

                    e.layer.setStyle({ fillColor: '#3f0', color: '#0f0' });
                    if (e.layer._popup)
                        e.layer.openPopup();

                }).on('search:collapsed', function (e) {

                    featuresLayer.eachLayer(function (layer) {	//restore feature color
                        featuresLayer.resetStyle(layer);
                    });
                });

                map.addControl(searchControl);  //inizialize search control
            }
        },

        overlayLoading: function (status) {
            var overlayHtml = "<div id=\"overlay\"><div class=\"overlay-container\" ><i class=\"fas fa-spinner fa-spin\"></i><br />اندکی صبر کنید...</div></div>";
            if ($('#overlay').length == 0)
                $("body").append(overlayHtml);

            //$("#overlay").removeClass();
            //$("#overlay").addClass(status);

            if (status == "show")
                $("#overlay").show();
            else
                $("#overlay").fadeOut();

        },

        AmountMaskE2: function (amount) {
            var i, j, mystring, flag;

            if (amount == '')
                return "";

            i = amount.length;


            mystring = "";
            for (j = 0; j < i; j++) {
                if (amount.substring(j, j + 1) == ",") {
                    flag = true;
                }
            }

            if (flag == true) {
                amount = DAmountMaskE(amount);
            }
            i = amount.length;
            if (i > 3) {
                for (j = i; j > 0; j = j - 3) {

                    if (j > 3) {
                        mystring = "," + amount.substring(j - 3, j) + mystring;

                    } else {
                        mystring = amount.substring(0, j) + mystring;
                    }
                }

                return mystring;
            } else {

                return amount;
            }

        },

        toPersianNumber: function (n) {
            const farsiDigits = ['۰', '۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹'];

            return n
                .toString()
                .replace(/\d/g, x => farsiDigits[x]);
        },


        steps: function (act, i) {
            var steps = $(".steps");
            var current = steps.attr("data-current");
            var tabs = $(".tab-pane");
            var tabs_pill = $(".step");

            switch (act) {
                case "next":
                    $(tabs).removeClass("show active");
                    $(tabs_pill).removeClass("active").removeClass("success");
                    $(tabs_pill[current]).addClass("success");
                    current++;
                    loadFormData(current);
                    break;

                case "prev":
                    $(tabs).removeClass("show active");
                    $(tabs_pill).removeClass("active").removeClass("success");
                    current--;
                    loadFormData(current);
                    break;

                case "on":
                    $(tabs).removeClass("show active");
                    $(tabs_pill).removeClass("active").removeClass("success");
                    current = i;
                    loadFormData(current);
                    break;

                default:
                    loadFormData(current);
            }

            function loadFormData(n) {
                for (var i = 0; i < n - 1; i++) {
                    $(tabs_pill[i]).addClass("success");
                }
                $(tabs_pill[n]).addClass("active");
                steps.attr("data-current", n);
                $(tabs[n]).addClass("show active");

                if ($(tabs[n]).attr("data-url").length > 0)
                    $.tc.remote($(tabs[n]), $(tabs[n]).attr("data-url"));
            }


        },

        InputFormatter: function () {
            debugger;
            var input = document.querySelectorAll('[data-format]');
            if (input.length === 0) return;

            for (var i = 0; i < input.length; i++) {
                var inputFormat = input[i].dataset.format,
                    blocks = input[i].dataset.blocks,
                    delimiter = input[i].dataset.delimiter;
                blocks = blocks !== undefined ? blocks.split(' ').map(Number) : '';
                delimiter = delimiter !== undefined ? delimiter : ' ';

                switch (inputFormat) {
                    case 'number':
                        var number = new Cleave(input[i], {
                            numeral: true,
                            numeralThousandsGroupStyle: 'thousand'
                        });
                        break;

                    case 'card':
                        var card = new Cleave(input[i], {
                            creditCard: true
                        });
                        break;

                    case 'cvc':
                        var cvc = new Cleave(input[i], {
                            numeral: true,
                            numeralIntegerScale: 3
                        });
                        break;

                    case 'date':
                        var date = new Cleave(input[i], {
                            date: true,
                            datePattern: ['m', 'y']
                        });
                        break;

                    case 'date-long':
                        var dateLong = new Cleave(input[i], {
                            date: true,
                            delimiter: '/',
                            datePattern: ['Y', 'm', 'd']
                        });
                        break;

                    case 'time':
                        var time = new Cleave(input[i], {
                            time: true,
                            datePattern: ['h', 'm']
                        });
                        break;

                    case 'custom':
                        var custom = new Cleave(input[i], {
                            delimiter: delimiter,
                            blocks: blocks
                        });
                        break;

                    default:
                        console.error('Sorry, your format ' + inputFormat + ' is not available. You can add it to the theme object method - inputFormatter in src/js/theme.js or choose one from the list of available formats: card, cvc, date, date-long, time or custom.');
                }
            }
        },


        components: {}

    }

});

$.tc.init();


$('body').on('click', '.step-prev', function () {
    $.tc.steps("prev");
});
$('body').on('click', '.step-next', function () {
    $.tc.steps("next");
});

$('body').on('click', '.step-on', function () {
    $.tc.steps("on", $(this).attr("data-on"));
});
