/* ########## Tell (copyright e2see.de) ##########
<script>
$(document).ready(function(){
    
});
</script>
*/

$.fn.tell_connect = function(){

    var thisOb = this;


    if (thisOb.is('[data-tell-name]')){
        var mainElem  = thisOb,
            name      = mainElem.attr('data-tell-name'),
            container = mainElem.closest('form');

        if (container.length != 1){
            var container = $('body');
        }

        if (mainElem.is('[data-tell-value]')){
            // setze value ins form element
            var value    = mainElem.attr('data-tell-value'),
                nameArr  = name.split('|'),
                valueArr = value.split('|');

            $.each(nameArr, function(i, iName){

                var targetElemList = container.find('input[name="'+iName+'"], select[name="'+iName+'"]');

                mainElem.on('click.tell', function(){
                    var clickedElemValue = '';
                    if (i in valueArr){
                        clickedElemValue = valueArr[i];
                    }
                    targetElemList.each(function(){
                        if ($(this).is('select')){
                            var rightOption = $(this).find('option[value="'+clickedElemValue+'"]');
                            if (rightOption.length == 1){
                                $(this).val( clickedElemValue );
                                $(this).trigger('change');
                                $(this).trigger('tell.set');
                            }
                        } else if ($(this).is('input[type="checkbox"], input[type="radio"]')){
                            if ($(this).val() == clickedElemValue){
                                $(this).prop('checked', true);
                                $(this).trigger('change');
                                $(this).trigger('tell.set');
                            }
                        } else {
                            $(this).val( clickedElemValue );
                            $(this).trigger('change');
                            $(this).trigger('tell.set');
                        }
                    });
                });
            });

        } else {

            mainElem.attr('data-tell-content', 'clear');

            //setze formvalue ins textelement
            var targetElemList = container.find('input[name="'+name+'"], select[name="'+name+'"]');

            setTimeout(function(){
                /* damit document ready die später kommen hören könenn*/
                targetElemList.eq(-1).tell_initText(mainElem, container); /*nur letzte sehr wichtig für vorschau, wegen array postnamen*/
            }, 20);


            targetElemList.each(function(){

                if ($(this).is('select')){
                    $(this).on('change.tell', function(){
                        $(this).tell_initText(mainElem, container);
                    });
                } else if ($(this).is('input[type="checkbox"], input[type="radio"]')){
                    $(this).on('change.tell', function(){
                        $(this).tell_initText(mainElem, container);
                    });
                } else {
                    $(this).on('change.tell', function(){
                        $(this).tell_initText(mainElem, container);
                    });
                }
            });
        }
    }


}
$.fn.tell_initText = function(textElem, container){


    var txt          = '';
    var formElem     = $(this);
    var formElemName = formElem.attr('name');
    var previewBox   = container.find('.tell').filter('[data-tell-preview="'+ formElemName +'"]');

    if (previewBox.length > 0){
        previewBox.empty();
    }

    if (formElem.is('[name$="[]"]')){
        // name ist ein array element, nimm alle
        formElemList = container.find('input,select,textarea').filter('[name="'+formElemName+'"]');
    } else {
        formElemList = formElem;
    }
    var arrTxt             = [];
    var arrFileCount       = [];
    var arrFileSize        = [];
    var arrFileList        = [];
    var arrFileBase64List  = [];

    formElemList.each(function(){
            var txt = false;
            if ($(this).is('select')){

                var el = $(this).find('option[value="'+ $(this).val() +'"]').eq(0);
                if (el.is('[data-tell]')){
                    txt = el.attr('data-tell');
                } else {
                    txt = el.text();
                }
                if (txt != false){
                    arrTxt.push(txt);
                }

            } else if ($(this).is('input[type="checkbox"], input[type="radio"]')){

                if ($(this).is(':checked')){

                    if ($(this).is('[data-tell]')){
                        txt = $(this).attr('data-tell');
                    }else if ($(this).parent('label').length == 1){
                        txt = $(this).parent('label').text();
                    }

                }

                if (txt != false){
                    arrTxt.push(txt);
                }

            } else if ($(this).is('input[type="range"]')){


                if ($(this).val() != ''){
                    txt = $(this).val();
                } else {
                    txt = 'drg';
                }

                arrTxt.push(txt);


            } else if ($(this).is('input[type="file"]')){

                var txt = '';
                if ($(this).is('[data-tell]')){

                    txt = $(this).attr('data-tell');
                } else {

                    var allCount = 0;

                    if ($(this)[0].files.length > 0){

                        arrFileCount.push($(this)[0].files.length);

                        $.each($(this)[0].files, function(key, fl){
                            // wenn meherer datein im input vorhanden

                            if (fl) {


                                arrFileSize.push(fl.size);
                                arrFileList.push(fl.name);

                                if (previewBox.length > 0){
                                    /*#########################################################*/
                                    var $thmb = $('<span class="tell-loading" title="'+ fl.name +'" data-tell-type="'+ fl.type +'"></span>');

                                    if (fl.type.match('image.*')) {
                                        // wenn bild
                                        var reader = new FileReader();
                                        reader.readAsDataURL(fl);

                                        $thmb.appendTo(previewBox);

                                        reader.addEventListener('load', function(){
                                            $thmb.removeClass('tell-loading').css('background-image', 'url('+reader.result+')');
                                        }, false);

                                    } else {
                                        //wenn kein bild
                                        $thmb.removeClass('tell-loading').html(fl.name).appendTo(previewBox);

                                    }

                                }

                            }
                        });

                    }

                }

            } else {

                if ($(this).val() != ''){
                    txt = $(this).val();
                }
                if (txt != false){
                    arrTxt.push(txt);
                }
            }
    });


    if (formElem.is('[type="file"]')){


        var completeCount = 0;
        for (var i = 0; i < arrFileCount.length; i++) {
            completeCount = completeCount + arrFileCount[i];
        }

        var completeSize = 0;
        for (var i = 0; i < arrFileSize.length; i++) {
            completeSize = completeSize + arrFileSize[i];
        }

        if (completeSize > 1000000000){
            var sizeText = (completeSize / 1000000000).toFixed(2) + ' GB';
        } else if (completeSize > 1000000){
            var sizeText = (completeSize / 1000000).toFixed(2) + ' MB';
        } else{
            var sizeText = (completeSize / 1000).toFixed(2) + ' KB';
        }
        var endText = 'en';
        if (completeCount == 1){
            endText = '';
        }

        if (completeCount == 0){
            textElem.attr('data-tell-content', 'clear');
            textElem.text('');
            textElem.trigger('tell.clear');
        } else {
            textElem.attr('data-tell-content', 'set');
            textElem.text(completeCount+' Datei'+endText+' / '+sizeText);
            textElem.trigger('tell.set', {
                                text:          completeCount+' Datei'+endText+' / '+sizeText,
                                count:         completeCount,
                                size:          completeSize,
                                fileList:      arrFileList,
                                fileBase64List:arrFileBase64List,
                                });

        }


    } else {

        var completeTxt = arrTxt.join(', ');
        textElem.text(completeTxt);

        if (completeTxt == ''){
            textElem.attr('data-tell-content', 'clear');
            textElem.trigger('tell.clear');
        } else {
            textElem.attr('data-tell-content', 'set');
            textElem.trigger('tell.set', {
                                text:      completeTxt,
                                textList:  arrTxt
                                });
        }


    }


}





/* cdn 1ms */