/*
    CUSTOM FORM ELEMENTS FOR jQuery 1.3.2+ v0.65
    Created by Anton Zaycev www.antonzaycev.ru
    Big thanks to a2design.biz (http://a2design.biz)
	
	for activate write:
    $('select, input[type=radio], input[type=checkbox], input[type=password], input[type=file]').cfe(); 
*/

(function($){
    $.fn.cfe = function(o) {
        var _this = this,
            text,span,name,type

        o = $.extend({
            files : true,
            select : {
                doubleWrp : true
            }
        }, o);

        _this.each(function(){ // enumerates all the selected items
            var t = $(this); // current element

            type = String(t.get(0).tagName).toLowerCase(); // element's tag
            if (type == 'input') {
                type = t.attr('type');
            }

            var inputName = t.attr('name');
            name = inputName.replace(/(\]\[)|(\])|(\[)/gi,'_') || t.attr('id');

            var span_class = type + '_cfe';

            switch(type){
                
                case 'select':
                    if (t.attr('multiple')) return;
                    t.wrap('<span id="'+name+'_wrp" class="cfe_'+type+'_wrp" />');
//                    t.css({
//                      'opacity':0,
//                      'position':'relative',
//                      'filter': 'alpha(opacity=0)',
//                      'z-index': '5'
//                    });

                    text = t.find('option:selected').text();

                    if (!t.attr("disabled")) {
                        t.change(function(){
                            t.prev().text(t.find('option:selected').text());
                        });
                        t.keyup(function(){
                            t.prev().text(t.find('option:selected').text());
                        });
                    }
                    else {
                        t.prev().addClass("disabled");
                    }
                    if (!text) {text = t.val();}
                    if (o.select.doubleWrp) {
                        text = $("<span/>", {
                            'class' : span_class+'2',
                            'text' : text
                        })
                    }
                    break;

                case 'checkbox':
                    t.wrap('<span id="'+name+'_wrp" class="cfe_'+type+'_wrp" />');
                    t.css({
                      'opacity'  : 0,
                      'position' : 'relative',
                      'filter'   : 'alpha(opacity=0)',
                      'z-index'  : '5',
                      'float'    : 'none'
                    });
                    text = '';

                    if (t.is(':checked')) {
                        span_class += ' checked';
                    }

                    t.click(function(){
                        if ($(this).is(':checked')) {
                            $(this).prev().addClass('checked');
                        }
                        else {
                            $(this).prev().removeClass('checked');
                        }
                    });
                    break;

                case 'radio':
                    t.wrap('<span id="'+name+'wrp" class="cfe_'+type+'_wrp" />');
                    t.css({
                      'opacity'  : 0,
                      'position' : 'relative',
                      'filter'   : 'alpha(opacity=0)',
                      'z-index'  : '5',
                      'float'    : 'none'
                    });
                    text = '';

                    if (t.is(':checked')) {
                        span_class += ' checked';
                    }

                    t.click(function(){
                        var cur = $(this);
                        cur.parent().siblings().find('input').each(function(){
                            $(this).prev().removeClass('checked')
                        })
                        cur.prev().addClass('checked');
                    });
                    break;

                case 'file':
                    if (o.files === false) {break;}
                    t.wrap('<div id="'+t.get(0).id+'_wrp" class="cfe_file_wrp" />')
                     .after('<div title="Выбрать файл" class="fakeButton" />'+
                            '<div class="fileNamePlaceHolder" /> <!--сюда мы будем вставлять имя файла и иконку-->')
                     .addClass('cfe_file')
                     .wrap('<span class="'+t.get(0).id+'_input_wrp" />')

                    t.bind('change', function() {
                        
                        var file = $(this).val(),
                            fileName = $(this).parent().parent().find('.fileNamePlaceHolder'),
                            reWin = /.*\\(.*)/,
                            reUnix = /.*\/(.*)/,
                            fileTitle,
                            pos

                        fileTitle = file.replace(reWin, "$1"); //выдираем название файла для windows
                        fileTitle = fileTitle.replace(reUnix, "$1"); //выдираем название файла для unix-систем
                        fileName.html(fileTitle);

                        if (fileTitle.length == 0) {
                            fileName.hide()
                            return;
                        }
                        var RegExExt =/.*.(\..*)/;
                        var ext = fileTitle.replace(RegExExt, "$1");//и его расширение

                        if (ext) {
                            ext = ext.toLowerCase().substr(1);
                            switch (ext) {
                                case 'doc':pos = '0';break;
                                case 'bmp':pos = '16';break;
                                case 'jpg':case 'jpeg':pos = '32';break;
                                case 'png':pos = '48';break;
                                case 'gif':pos = '64';break;
                                case 'psd':pos = '80';break;
                                case 'mp3':case 'wav':case 'ogg':pos = '96';break;
                                case 'avi':case 'wmv':case 'flv':pos = '112';break;
                                case 'pdf':pos = '128';break;
                                case 'exe':pos = '144';break;
                                case 'txt':pos = '160';break;
                                default:pos = '176';break;
                            }

                            fileName
                                .show()
                                .css({'background-position' : '0 -'+pos+'px'});
                        }
                    });
                    text = '';

                    break;
            }

            span = $("<span/>")
                  .addClass(span_class)
                  .html(text);
            t.before(span);
        });

        return this;
    }
})(jQuery);

