﻿/*
Forms customization for jQuery
Copyright (c) 2009 Rafael Assis (crystaldevelop.com)
Version: 2.0.0 (28/10/2009 13:15:00)
*/
(function($) {
   var elCount = 0;
   var all = null;
   $.fn.coolforms = function(options) {
      var opts = $.fn.extend(true, $.fn.coolforms, $.fn.coolforms.defaults, options);
      elCount = $(this).length;
      all = this;
      return this.each(function() {
         var obj = $(this);
         if ($(obj).data('cool-form') == null || !$(obj).data('cool-form')) {
            $(obj).data('cool-form', true);
            var hasObj = obj.attr('id') ? true : false;
            var objType = hasObj ? this.nodeName.toLowerCase() : '';
            if (obj.is('select')) {
               return $.fn.coolforms.customizeSelect(obj, opts);
            } else if (obj.is('a') || obj.is('input[type="button"]') || obj.is('input[type="submit"]') || obj.is('input[type="reset"]')) {
               return $.fn.coolforms.customizeButton(obj, opts);
            } else if (obj.is('input[type="text"]') || obj.is('input[type="password"]')) {
               return $.fn.coolforms.customizeInputText(obj, opts);
            } else if (obj.is('input[type="radio"]')) {
               return $.fn.coolforms.customizeInputRadio(obj, opts);
            } else if (obj.is('input[type="checkbox"]')) {
               return $.fn.coolforms.customizeInputCheckbox(obj, opts);
            } else if (obj.is('textarea')) {
               return $.fn.coolforms.customizeTextarea(obj, opts);
            }
         }
         //Fim
      });
   }

   $.fn.coolforms.defaults = {
      select: {
         onChange: null,
         css: {
            backgroundImage: "url('pngs/bgSelect.png')",
            fontSize: '11px',
            color: '#FFFFFF',
            paddingRight: '18px',
            marginLeft: '3px',
            height: '21px',
            border: 'solid 1px #999999',
            backgroundColor: '#FFFFFF'
         },
         item: {
            maxVisible: 10,
            height: 16,
            fontColor: {
               Over: '#FFFFFF',
               Out: '#FFFFFF',
               Up: '#FFFFFF',
               Down: '#FFFFFF'
            }
         }
      },
      button: {
         onClick: null,
         buttonHeight: 21,
         fontColor: {
            Over: '#FFFFFF',
            Out: '#FFFFFF',
            Up: '#FFFFFF',
            Down: '#FFFFFF'
         }
      },
      inputText: {
         onChange: null,
         css: {
            backgroundImage: "url('pngs/bgInputBox.png')",
            fontSize: '13px',
            color: '#999999',
            marginRight: '5px',
            height: '22px'
         },
         colorFocus: '#666666',
         colorDisabled: '#CCCCCC'
      },
      inputRadio: {
         onChange: null,
         onClick: null,
         labelPosition: 'right',
         css: {
            backgroundImage: "url('pngs/radioButton.png')",
            width: '13px',
            height: '13px',
            color: '#333333'
         }
      },
      inputCheckbox: {
         onChange: null,
         onClick: null,
         labelPosition: 'right',
         css: {
            backgroundImage: "url('pngs/checkBox.png')",
            width: '12px',
            height: '12px'
         }
      },
      textarea: {
         onChange: null,
         backgroundImagePattern: "pngs/textArea[0].png",
         css: {
            fontSize: '13px',
            color: '#999999',
            padding: '5px'
         },
         colorFocus: '#666666',
         colorDisabled: '#CCCCCC'
      }
   };

   var selectOpts;
   var buttonOpts;
   var inputTextOpts;
   var inputRadioOpts;
   var inputCheckboxOpts;
   var textAreaOpts;

   $.fn.coolforms.prototype = {
      select: {
         cancelClear: function(selected) {
            if (!$(selected).data('cancelClear')) {
               $(selected).data('search', '');
               $(selected).data('cancelClear', true);
            } else {
               $(selected).data('cancelClear', false);
               setTimeout(function() { $.fn.coolforms.prototype.select.cancelClear(selected) }, 2000);
            }
         },
         openOptions: function(e, div, selectOpts) {
            //var selectOpts = $.fn.coolforms.select;

            var normalPos = 0;
            var normalColor = selectOpts.item.fontColor.Out;
            var overPos = parseInt(selectOpts.css.height.replace('px', ''));
            var overColor = selectOpts.item.fontColor.Over;
            var downPos = overPos * 2;
            var downColor = selectOpts.item.fontColor.Down;
            var upColor = selectOpts.item.fontColor.Up;

            var selected = $(div).children('.selected');
            var downPos = parseInt(selectOpts.css.height.replace('px', '')) * 2;
            if ($(div).data('opened')) {
               $(selected).next('.options').slideUp('fast');
            } else {
               //Fechando outros selects abertos
               $('.cool_select').each(function() {
                  if ($(this).data('opened')) {
                     $(this).data('opened', false).children('.options').slideUp('fast');
                     $(this).children('.selected').css({ backgroundPosition: 'right ' + normalPos + 'px', color: normalColor });
                     $(this).children('.selected').children('span.bg').css({ backgroundPosition: 'left ' + normalPos + 'px' });
                  }
               });
               //Abrindo opções
               $(selected).css({ backgroundPosition: 'right -' + downPos + 'px', color: downColor });
               $(selected).next('.options').slideDown('fast');
               $(selected).children('span.bg').css({ backgroundPosition: 'left -' + downPos + 'px' });
               $(div).data('opened', !$(div).data('opened'));
               //Previne execução da tecla na tela
               e.preventDefault();
               e.stopPropagation();
            }
         },
         setSelected: function(obj, div, onChange, selectOpts) {
            //var selectOpts = $.fn.coolforms.select;

            var normalPos = 0;
            var normalColor = selectOpts.item.fontColor.Out;
            var overPos = parseInt(selectOpts.css.height.replace('px', ''));
            var overColor = selectOpts.item.fontColor.Over;
            var downPos = overPos * 2;
            var downColor = selectOpts.item.fontColor.Down;
            var upColor = selectOpts.item.fontColor.Up;

            var ul = $(div).children('.options').children('ul');
            var selected = $(div).children('.selected');
            var normalPos = 0;
            //Limpa seleção de todos os items
            $(ul).children('li').removeClass('selected');
            //Define item selecionado
            $(obj).addClass('selected');
            //Muda texto e guarda valor no 'a'
            var maxChar = $(selected).css('width').replace('px', '');
            maxChar = Math.round(maxChar / 6);
            var txt = $(obj).html().replace(/^\s+|\s+$/g, "");
            if (txt.length > maxChar) {
               txt = txt.substring(0, maxChar) + '...';
            }
            $(selected).data('value', $(obj).data('value'));
            $(selected).children('.text').html(txt);
            //Garda valor no hidden
            $('#' + $(selected).data('id')).val($(selected).data('value'));
            //Faz rolagem até o item
            if ($(div).children('.options').scrollTo) $(div).children('.options').scrollTo($(obj));
            if (!$(div).data('opened')) {
               //Fecha items se necessário
               $(div).children('.options').slideUp('fast', function() {
                  if (onChange) onChange($('#' + $(selected).data('id')));
               });
               $(selected).css({ backgroundPosition: 'right ' + normalPos + 'px', color: normalColor });
               $(selected).children('span.bg').css({ backgroundPosition: 'left ' + normalPos + 'px' });
            }
         }
      }
   }

   $.fn.extend($.fn.coolforms, {
      /*== Select ========================================================================================================*/
      customizeSelect: function(sel, opts) {
         selectOpts = opts.select;

         var normalPos = 0;
         var normalColor = selectOpts.item.fontColor.Out;
         var overPos = parseInt(selectOpts.css.height.replace('px', ''));
         var overColor = selectOpts.item.fontColor.Over;
         var downPos = overPos * 2;
         var downColor = selectOpts.item.fontColor.Down;
         var upColor = selectOpts.item.fontColor.Up;

         if (selectOpts.item.maxVisible > 0 && selectOpts.item.maxVisible < 3) selectOpts.item.maxVisible = 3;

         var onChange = selectOpts.onChange ? selectOpts.onChange : ($(sel).data('events') ? $(sel).data('events').change : null);
         if (onChange) {
            $.each(onChange, function(d, v) {
               onChange = v;
               return;
            });
         }

         //----------------------------------------------------------------------------------------------------------------
         $(document).bind('click', function(e) {
            $('.cool_select').each(function() {
               if ($(this).data('opened')) {
                  $(this).data('opened', false).children('.options').slideUp('fast', function() {
                     if ($(this).blur) $(this).blur();
                  });

                  $(this).children('.selected').css({ backgroundPosition: 'right ' + normalPos + 'px', color: normalColor });
                  $(this).children('.selected').children('span.bg').css({ backgroundPosition: 'left ' + normalPos + 'px' });
               }
            });
         }).keydown(function(e) {
            var isOpened = false;
            $('.cool_select').each(function() {
               if ($(this).data('opened')) {
                  isOpened = true;
                  return false;
               }
            });
            if (isOpened) {
               if (e.keyCode == 38 || e.keyCode == 40) {
                  if (e.preventDefault)
                     e.preventDefault();
                  else
                     e.returnValue = false;
               }
            }
         });
         $('*').focus(function(e) {
            $('.cool_select').each(function() {
               if ($(this).data('opened')) {
                  $(this).data('opened', false).children('.options').slideUp('fast', function() {
                     if ($(this).blur) $(this).blur();
                  });

                  $(this).children('.selected').css({ backgroundPosition: 'right ' + normalPos + 'px', color: normalColor });
                  $(this).children('.selected').children('span.bg').css({ backgroundPosition: 'left ' + normalPos + 'px' });
               }
            });
         });
         //----------------------------------------------------------------------------------------------------------------


         var sel_options = $(sel).children('option');
         var sel_selected = $(sel).children('option:selected');

         //Definindo variaveis iniciais do select
         var id = $(sel).attr('id');
         var index = $(all).index(sel);
         var style = $(sel).attr('style');
         if (style == undefined) {
            style = '';
         }
         var disabled = '';
         if ($(sel).attr('disabled')) disabled = ' disabled';

         //Criando container do select
         $(sel).wrap('<div id="dv_' + id + '" class="cool_select' + disabled + '"></div>');

         $(sel).remove();

         var div = $('#dv_' + id);

         $(div).blur(function() {
            if (onChange) onChange();
         });

         $(div).css('z-index', parseInt(elCount) - parseInt(index));

         //Criando hidden para guardar valor do select
         $(div).append('<input type="hidden" id="' + id + '" name="' + id + '" value="" />')
         //Criando skin do select
               .append('<a id="sel_' + id + '" href="javascript:;" class="selected" style="' + style + '"><span class="bg"></span><span class="text">' + $(sel_selected).html() + '</span></a>');

         var selected = $('#sel_' + id);

         //Definindo css do skin do select
         $(selected).data('id', id)
                    .css(selectOpts.css)
                    .css({ lineHeight: selectOpts.css.height, border: '' });

         $(selected).children('.text')
                    .css({ paddingLeft: selectOpts.css.marginLeft.replace('px', '') - 1 + 'px' });

         $(selected).children('.bg')
                    .css(selectOpts.css)
                    .css({
                       marginLeft: '-' + selectOpts.css.marginLeft,
                       paddingRight: '',
                       width: selectOpts.css.marginLeft,
                       border: ''
                    });

         //Criando container da lista de opções
         $(div).append('<div id="opt_' + id + '" class="options"><ul id="opts_' + id + '"></ul></div>');

         var options = $('#opt_' + id);

         var selectedWidth = 0;
         if ($(selected).css('width') != undefined) {
            selectedWidth = parseInt($(selected).css('width').replace('px', '')) + parseInt($(selected).css('paddingRight').replace('px', ''));
         } else {
            selectedWidth = parseInt($(selected).outerWidth());
         }

         //Definindo css do container da lista de opções
         $(div).children('.options')
               .width(selectedWidth)
               .css({
                  top: selectOpts.css.height.replace('px', '') - 3 + 'px',
                  border: selectOpts.css.border,
                  backgroundColor: selectOpts.css.backgroundColor,
                  fontSize: selectOpts.css.fontSize
               })
               .hide();
         if ($.browser.msie && parseInt($.browser.version) == 8) {
            $(div).children('.options').css('top', selectOpts.css.height.replace('px', '') - 14 + 'px');
         } else if ($.browser.msie && parseInt($.browser.version) == 7) {
            $(div).children('.options').css('top', selectOpts.css.height.replace('px', '') + 'px');
         }

         //Definindo minimo padrão para exibição
         if (selectOpts.item.maxVisible > 0) $(div).children('.options').css({ maxHeight: selectOpts.item.maxVisible * selectOpts.item.height + 'px' });

         var ul = $(div).children('.options').children('ul');

         //Montado lista
         $('#' + id).bind('addItens', function(e, select_options) {
            var id = $(this).attr('id').replace('sel_', '');
            var div = $('#dv_' + id);
            var ul = $(div).children('.options').children('ul');
            var selected = $('#sel_' + id);
            $(select_options).each(function() {
               var sel = '';
               var cls = $(this).attr('class').split(';');
               if ($(this).is(':selected')) {
                  sel = ' class="selected"';
                  $(selected).data('value', $(this).val());
                  $('#' + $(selected).data('id')).val($(selected).data('value'));
               }
               $(ul).append('<li' + sel + '>' + $(this).html() + '</li>');
               $($(ul).children('li').get($(ul).children('li').length - 1)).data('value', $(this).val());
               for (var i = 0; i < cls.length; i++) {
                  if (cls[i].indexOf('dt_') == 0) {
                     var ar = cls[i].replace('dt_', '').split('=');
                     $($(ul).children('li').get($(ul).children('li').length - 1)).data(ar[0], ar[1]);
                  }
               }
            });
            $(ul).children('li').css({ lineHeight: selectOpts.item.height + 'px' })
            .bind('click', function(e) {
               $(div).data('opened', false);
               $.fn.coolforms.prototype.select.setSelected($(this), div, onChange, selectOpts);
               e.preventDefault();
               e.stopPropagation();
            });
         });
         $('#' + id).bind('addItensAjax', function(e, ajaxData) {
            var id = $(this).attr('id').replace('sel_', '');
            var div = $('#dv_' + id);
            var ul = $(div).children('.options').children('ul');
            var selected = $('#sel_' + id);
            $.ajax({
               type: 'post',
               url: ajaxData.url,
               data: ajaxData.data,
               success: function(html) {
                  $(ul).html('');
                  if (ajaxData.onComplete) ajaxData.onComplete();
                  $(ul).append(html);
                  $(ul).children('li').css({ lineHeight: selectOpts.item.height + 'px' })
                  .bind('click', function(e) {
                     $(div).data('opened', false);
                     $.fn.coolforms.prototype.select.setSelected($(this), div, onChange, selectOpts);
                     e.preventDefault();
                     e.stopPropagation();
                  });
               },
               error: function(XMLHttpRequest, textStatus, errorThrown) {
                  //alert(XMLHttpRequest.status + "|" + textStatus + "|" + errorThrown);
               }
            });
         });
         $('#' + id).trigger('addItens', [sel_options]);

         //End Construction

         //.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.

         //Events

         $(selected).data('search', '').data('cancelClear', false)
         .bind('mouseover focus', function() {
            if ($(this).parents().hasClass('disabled')) return;
            $(this).css({ backgroundPosition: 'right -' + overPos + 'px', color: overColor });
            $(this).children('span.bg').css({ backgroundPosition: 'left -' + overPos + 'px' });
         }).bind('focus', function() {
            if ($(this).parents().hasClass('disabled')) return;
            //Fechando outros selects abertos
            $('.cool_select').each(function() {
               if ($(this).data('opened')) {
                  $(this).data('opened', false).children('.options').slideUp('fast');
                  $(this).children('.selected').css({ backgroundPosition: 'right ' + normalPos + 'px', color: normalColor });
                  $(this).children('.selected').children('span.bg').css({ backgroundPosition: 'left ' + normalPos + 'px' });
               }
            });
         }).bind('mouseout blur', function() {
            if ($(this).parents().hasClass('disabled')) return;
            if ($(div).data('opened')) return;
            $(this).css({ backgroundPosition: 'right ' + normalPos + 'px', color: normalColor });
            $(this).children('span.bg').css({ backgroundPosition: 'left ' + normalPos + 'px' });
         }).bind('mousedown keypress', function(e) {
            //Pegando o keyCode correto
            var keyCode;
            if (e.keyCode > 0) {
               keyCode = e.keyCode;
            } else if (typeof (e.charCode) != "undefined") {
               keyCode = e.charCode;
            }

            if ($(this).parents().hasClass('disabled') || keyCode == 9) return;
            $(this).css({ backgroundPosition: 'right -' + downPos + 'px', color: downColor });
            $(this).children('span.bg').css({ backgroundPosition: 'left -' + downPos + 'px' });

            if (keyCode != undefined && (keyCode == 38 || keyCode == 40 || keyCode == 13 || keyCode == 32)) {
               if (!$(div).data('opened')) {
                  $.fn.coolforms.prototype.select.openOptions(e, div, selectOpts);
               }
               var i = 0;
               var ok = false;
               $(selected).data('cancelClear', false);
               $.fn.coolforms.prototype.select.cancelClear(selected)
               $(ul).children('li').each(function() {
                  if ($(this).hasClass('selected')) {
                     $(this).removeClass('selected');
                     var n = i;
                     if (keyCode == 38) {
                        //Botao Cima
                        if (i - 1 > 0) {
                           n = i - 1; ;
                        } else {
                           n = 0;
                        }
                     } else if (keyCode == 40) {
                        //Botao Baixo
                        if (i + 1 < $(ul).children('li').length) {
                           n = i + 1;
                        } else {
                           n = $(ul).children('li').length - 1;
                        }
                     }
                     var newSelection = $($(ul).children('li').get(n));
                     $.fn.coolforms.prototype.select.setSelected(newSelection, div, onChange, selectOpts);
                     return false;
                  }
                  i++;
               });
            } else if (keyCode != undefined && keyCode != 0) {
               $(selected).data('cancelClear', true);
               if (keyCode != 8) {
                  var key = String.fromCharCode(keyCode).toLowerCase();

                  $(selected).data('search', $(selected).data('search') + key);
               } else {
                  $(selected).data('search', $(selected).data('search').substring(0, $(selected).data('search').length - 1));
               }

               var n = 0;
               var found = false;
               $(ul).children('li').each(function() {
                  var s = $(this).html();
                  if (s.substring(0, $(selected).data('search').length).toLowerCase() == $(selected).data('search').toLowerCase()) {
                     $(ul).children('li').removeClass('selected');
                     found = true;
                     return false;
                  }
                  n++;
               });

               setTimeout(function() { $.fn.coolforms.prototype.select.cancelClear(selected) }, 2000);
               if (found) {
                  var newSelection = $($(ul).children('li').get(n));
                  $.fn.coolforms.prototype.select.setSelected(newSelection, div, onChange, selectOpts);
               }
               return false;
            }
         }).bind('mouseup keyup', function(e) {
            if ($(this).parents().hasClass('disabled')) return;
            if ($(div).data('opened')) return;
            if (!$(div).data('opened')) {
               $(this).css({ backgroundPosition: 'right -' + overPos + 'px', color: upColor });
               $(this).children('span.bg').css({ backgroundPosition: 'left -' + overPos + 'px' });
            }
         }).bind('click', function(e) {
            if ($(this).parents().hasClass('disabled')) return;
            $.fn.coolforms.prototype.select.openOptions(e, div, selectOpts);
         });
      },
      /*== Fim Select ====================================================================================================*/

      /*== Buttom ========================================================================================================*/
      customizeButton: function(obj, opts) {
         buttonOpts = opts.button;

         var normalPos = 0;
         var normalColor = buttonOpts.fontColor.Out;
         var overPos = parseInt(buttonOpts.buttonHeight);
         var overColor = buttonOpts.fontColor.Over;
         var downPos = overPos * 2;
         var downColor = buttonOpts.fontColor.Down;
         var upColor = buttonOpts.fontColor.Up;

         var btn = obj;
         var myOnClick = null;
         if (obj.is('input[type="button"]') || obj.is('input[type="submit"]') || obj.is('input[type="reset"]')) {
            var id = $(obj).attr('id');
            myOnClick = $(obj).attr('onclick');
            $(obj).wrap('<a id="' + id + '" href="javascript:;" class="' + $(obj).attr('class') + '">' + $(obj).val() + '</a>');
            $(obj).remove();

            btn = $('#' + id);
            if (obj.is('input[type="submit"]')) {
               myOnClick = function() {
                  $(btn).parent('form').submit();
               };
            } else if (obj.is('input[type="reset"]')) {
               myOnClick = function() {
                  $(btn).parent('form').each(function() {
                     this.reset();
                     $('.cool_inputCheckbox, .cool_inputRadio').removeClass('checked');
                     $('.cool_inputCheckbox').each(function() {
                        if ($(this).hasClass('checked')) {
                           $(this).css({ backgroundPosition: 'left -' + parseInt(opts.inputCheckbox.css.height.replace('px', '')) * 2 + 'px' });
                        } else {
                           $(this).css({ backgroundPosition: 'left 0px' });
                        }
                     });
                     $('.cool_inputRadio').each(function() {
                        if ($(this).hasClass('checked')) {
                           $(this).css({ backgroundPosition: 'left -' + parseInt(opts.inputRadio.css.height.replace('px', '')) * 2 + 'px' });
                        } else {
                           $(this).css({ backgroundPosition: 'left 0px' });
                        }
                     });
                  });
               };
            } else {
               myOnClick = buttonOpts.onClick;
            }
         } else {
            myOnClick = buttonOpts.onClick;
         }
         var txt = $(btn).html();
         $(btn).addClass('cool_button');
         $(btn).html('');
         style = $(btn).attr('style');
         $(btn).attr('style', '')
         $(btn).append('<span class="bg"></span><span class="text" style="' + style + '">' + txt + '</span>');

         $(btn).bind('mouseover focus', function() {
            if ($(this).hasClass('disabled')) return;
            $(this).css({ backgroundPosition: 'right -' + overPos + 'px', color: overColor });
            $(this).children('span.bg').css({ backgroundPosition: 'left -' + overPos + 'px' });
         }).bind('mouseout blur', function() {
            if ($(this).hasClass('disabled')) return;
            $(this).css({ backgroundPosition: 'right ' + normalPos + 'px', color: normalColor });
            $(this).children('span.bg').css({ backgroundPosition: 'left ' + normalPos + 'px' });
         }).bind('mousedown keypress', function(e) {
            //Pegando o keyCode correto
            var keyCode;
            if (e.keyCode > 0) {
               keyCode = e.keyCode;
            } else if (typeof (e.charCode) != "undefined") {
               keyCode = e.charCode;
            }

            if ($(this).hasClass('disabled') || keyCode == 9) return;

            if ((keyCode == 32 || keyCode == 13) || (keyCode == undefined || keyCode == 0)) {
               $(this).css({ backgroundPosition: 'right -' + downPos + 'px', color: downColor });
               $(this).children('span.bg').css({ backgroundPosition: 'left -' + downPos + 'px' });
               if (myOnClick) myOnClick();
               else if (buttonOpts.onClick) buttonOpts.onClick();
            }
         }).bind('mouseup keyup', function() {
            if ($(this).hasClass('disabled')) return;
            $(this).css({ backgroundPosition: 'right -' + overPos + 'px', color: upColor });
            $(this).children('span.bg').css({ backgroundPosition: 'left -' + overPos + 'px' });
         }).bind('click', function() {
            //return false;
            /*if (myOnClick) myOnClick();
            else if (buttonOpts.onClick) buttonOpts.onClick();*/
         });
      },
      /*== Fim Buttom ====================================================================================================*/

      /*== InputText ====================================================================================================*/
      customizeInputText: function(txt, opts) {
         inputTextOpts = opts.inputText;

         $(txt).wrap('<div class="cool_inputText"></div>').parents('.cool_inputText').append('<span class="bg"></span>');
         $(txt).parents('.cool_inputText').css(inputTextOpts.css);
         $(txt).parents('.cool_inputText').children('span.bg').css(inputTextOpts.css)
         .css({
            width: inputTextOpts.css.marginRight,
            right: '-' + inputTextOpts.css.marginRight,
            marginRight: ''
         });
         $(txt).css({
            color: inputTextOpts.css.color,
            left: inputTextOpts.css.marginRight
         });
         if ($(txt).attr('disabled')) {
            $(txt).parents('.cool_inputText').addClass('disabled');
            $(txt).css({
               color: inputTextOpts.colorDisabled
            });
         }
         $(txt).parents('.cool_inputText').width($(txt).css('width'));
         $(txt).width($(txt).parents('.cool_inputText').width() - (parseInt(inputTextOpts.css.marginRight.replace('px', '')) + 1));

         $(txt).data('focused', false);
         $(txt).bind('focus', function() {
            $(txt).data('focused', true);
            $(this).css({ color: inputTextOpts.colorFocus });
            $(this).parents('.cool_inputText').css({ backgroundPosition: 'left -22px' });
            $(this).parents('.cool_inputText').children('span.bg').css({ backgroundPosition: 'right -22px' });
         }).bind('blur', function() {
            $(txt).data('focused', false);
            $(this).css({ color: inputTextOpts.css.color });
            $(this).parents('.cool_inputText').css({ backgroundPosition: 'left 0px' });
            $(this).parents('.cool_inputText').children('span.bg').css({ backgroundPosition: 'right 0px' });
         }).hover(function() {
            $(this).css({ color: inputTextOpts.colorFocus });
            $(this).parents('.cool_inputText').css({ backgroundPosition: 'left -22px' });
            $(this).parents('.cool_inputText').children('span.bg').css({ backgroundPosition: 'right -22px' });
         }, function() {
            if (!$(txt).data('focused')) {
               $(this).css({ color: inputTextOpts.css.color });
               $(this).parents('.cool_inputText').css({ backgroundPosition: 'left 0px' });
               $(this).parents('.cool_inputText').children('span.bg').css({ backgroundPosition: 'right 0px' });
            }
         }).bind('change', function() {
            if (inputTextOpts.onChange) inputTextOpts.onChange(txt);
         });
      },
      /*== Fim InputText ================================================================================================*/

      /*== InputRadio ===================================================================================================*/
      customizeInputRadio: function(opt, opts) {
         inputRadioOpts = opts.inputRadio;

         var normalPos = 0;
         var overPos = parseInt(inputRadioOpts.css.height.replace('px', ''));
         var normalCheckedPos = overPos * 2;
         var overCheckedPos = overPos * 3;

         var id = $(opt).attr('id');
         var name = $(opt).attr('name');
         var disabled = '';
         if ($(opt).attr('disabled')) disabled = ' disabled';
         if (inputRadioOpts.labelPosition == 'left') {
            $('<a id="coolRadio_' + id + '" name="' + name + '" class="cool_inputRadio' + disabled + '" href="javascript:;"><span class="label"></span><span class="radio"></span></a>').insertBefore(opt);
            $('#coolRadio_' + id + ' > .radio')
            .css(inputRadioOpts.css)
            .css({
               paddingRight: '2px'
            });
         } else {
            $('<a id="coolRadio_' + id + '" name="' + name + '" class="cool_inputRadio' + disabled + '" href="javascript:;"><span class="radio"></span><span class="label"></span></a>').insertBefore(opt);
            $('#coolRadio_' + id + ' > .radio')
            .css(inputRadioOpts.css)
            .css({
               //paddingLeft: parseInt(inputRadioOpts.css.width.replace('px', '')) + 2 + 'px'
               paddingLeft: '2px'
            });
         }
         if ($('label[for="' + id + '"]').length) {
            $('#coolRadio_' + id + ' > .label').html($('label[for="' + id + '"]').html());
            $(opt).hide();
            $('label[for="' + id + '"]').hide();
            $('#coolRadio_' + id + ' > .label').css({
               color: inputRadioOpts.css.color
            });
         }
         /*$('#coolRadio_' + id).css(inputRadioOpts.css)
         .css({ paddingLeft: parseInt(inputRadioOpts.css.width.replace('px', '')) + 2 + 'px' });*/

         if ($(opt).attr('checked')) {
            $('#coolRadio_' + id).addClass('checked');
            $('#coolRadio_' + id).children('.radio').css({ backgroundPosition: 'left -' + normalCheckedPos + 'px' });
         } else {
            $('#coolRadio_' + id).children('.radio').css({ backgroundPosition: 'left 0px' });
         }

         $('#coolRadio_' + id).bind('focus mouseover', function() {
            if ($(this).hasClass('disabled')) return;

            if ($(this).hasClass('checked')) {
               $(this).children('.radio').css({ backgroundPosition: 'left -' + overCheckedPos + 'px' });
            } else {
               $(this).children('.radio').css({ backgroundPosition: 'left -' + overPos + 'px' });
            }
         }).bind('blur mouseout', function() {
            if ($(this).hasClass('disabled')) return;

            if ($(this).hasClass('checked')) {
               $(this).children('.radio').css({ backgroundPosition: 'left -' + normalCheckedPos + 'px' });
            } else {
               $(this).children('.radio').css({ backgroundPosition: 'left 0px' });
            }
         }).bind('mousedown keypress', function(e) {
            //Pegando o keyCode correto
            var keyCode;
            if (e.keyCode > 0) {
               keyCode = e.keyCode;
            } else if (typeof (e.charCode) != "undefined") {
               keyCode = e.charCode;
            }
            var rightclick = false;
            if (!e) var e = window.event;
            if (e.which) rightclick = (e.which == 3);
            else if (e.button) rightclick = (e.button == 2);

            if ($(this).hasClass('disabled') || keyCode == 9) return;

            var isClick = false;
            if (keyCode != undefined && keyCode > 0) {
               if (keyCode == 32 || keyCode == 13) isClick = true;
            } else {
               isClick = true;
            }
            //alert(keyCode + "|" + isClick + "|" + rightclick);
            if (isClick && !rightclick) {
               $('.cool_inputRadio[name="' + $(this).attr('name') + '"]').removeClass('checked');
               $('.cool_inputRadio[name="' + $(this).attr('name') + '"]').children('.radio').css({ backgroundPosition: 'left top' });
               $('.cool_inputRadio[name="' + $(this).attr('name') + '"]').next('input[type="radio"]').attr('checked', false);
               $(this).addClass('checked');
               $(this).children('.radio').css({ backgroundPosition: 'left -' + overCheckedPos + 'px' });
               $(this).next('input[type="radio"]').attr('checked', true);
               if ($(this).next('input[type="radio"]').change) $(this).next('input[type="radio"]').trigger('change');
            }
         });
      },
      /*== Fim InputRadio ===============================================================================================*/

      /*== InputCheckbox ================================================================================================*/
      customizeInputCheckbox: function(opt, opts) {
         inputCheckboxOpts = opts.inputCheckbox;

         var normalPos = 0;
         var overPos = parseInt(inputCheckboxOpts.css.height.replace('px', ''));
         var normalCheckedPos = overPos * 2;
         var overCheckedPos = overPos * 3;

         var id = $(opt).attr('id');
         var name = $(opt).attr('name');
         var disabled = '';
         if ($(opt).attr('disabled')) disabled = ' disabled';
         if (inputCheckboxOpts.labelPosition == 'left') {
            $('<a id="coolCheck_' + id + '" name="' + name + '" class="cool_inputCheckbox' + disabled + '" href="javascript:;"><span class="label"></span><span class="check"></span></a>').insertBefore(opt);
            $('#coolCheck_' + id + ' > .check')
            .css(inputCheckboxOpts.css)
            .css({
               paddingRight: '2px'
            });
            /*$('#coolCheck_' + id).css({
            paddingRight: parseInt(inputCheckboxOpts.css.width.replace('px', '')) + 2 + 'px'
            });*/
         } else {
            $('<a id="coolCheck_' + id + '" name="' + name + '" class="cool_inputCheckbox' + disabled + '" href="javascript:;"><span class="check"></span><span class="label"></span></a>').insertBefore(opt);
            $('#coolCheck_' + id + ' > .check')
            .css(inputCheckboxOpts.css)
            .css({
               paddingLeft: '2px'
            });
            /*$('#coolCheck_' + id).css({
            paddingLeft: parseInt(inputCheckboxOpts.css.width.replace('px', '')) + 2 + 'px'
            });*/
         }
         if ($('label[for="' + id + '"]').length) {
            $('#coolCheck_' + id + ' > .label').html($('label[for="' + id + '"]').html());
            $(opt).hide();
            $('label[for="' + id + '"]').hide();

            $('#coolCheck_' + id + ' > .label').css({
               color: inputCheckboxOpts.css.color
            });
         }

         /*$('#coolCheck_' + id).css(inputCheckboxOpts.css)
         .css({ paddingLeft: parseInt(inputCheckboxOpts.css.width.replace('px', '')) + 2 + 'px' });*/

         if ($(opt).attr('checked')) {
            $('#coolCheck_' + id).addClass('checked');
            $('#coolCheck_' + id).children('.check').css({ backgroundPosition: 'left -' + normalCheckedPos + 'px' });
         }

         $('#coolCheck_' + id).bind('focus mouseover', function() {
            if ($(this).hasClass('disabled')) return;

            if ($(this).hasClass('checked')) {
               $(this).children('.check').css({ backgroundPosition: 'left -' + overCheckedPos + 'px' });
            } else {
               $(this).children('.check').css({ backgroundPosition: 'left -' + overPos + 'px' });
            }
         }).bind('blur mouseout', function() {
            if ($(this).hasClass('disabled')) return;

            if ($(this).hasClass('checked')) {
               $(this).children('.check').css({ backgroundPosition: 'left -' + normalCheckedPos + 'px' });
            } else {
               $(this).children('.check').css({ backgroundPosition: 'left 0px' });
            }
         }).bind('mousedown keypress', function(e) {
            //Pegando o keyCode correto
            var keyCode;
            if (e.keyCode > 0) {
               keyCode = e.keyCode;
            } else if (typeof (e.charCode) != "undefined") {
               keyCode = e.charCode;
            }
            var rightclick = false;
            if (!e) var e = window.event;
            if (e.which) rightclick = (e.which == 3);
            else if (e.button) rightclick = (e.button == 2);

            if ($(this).hasClass('disabled') || keyCode == 9) return;

            var isClick = false;
            if (keyCode != undefined && keyCode > 0) {
               if (keyCode == 32 || keyCode == 13) isClick = true;
            } else {
               isClick = true;
            }
            if (isClick && !rightclick) {
               //$('a[name="' + name + '"]').removeClass('checked').css({ backgroundPosition: 'left 0px' });
               if (!$(this).hasClass('checked')) {
                  $(this).addClass('checked');
                  $(this).children('.check').css({ backgroundPosition: 'left -' + overCheckedPos + 'px' });
                  $(this).next('input[type="checkbox"]').attr('checked', true);
               } else {
                  $(this).removeClass('checked');
                  $(this).children('.check').css({ backgroundPosition: 'left -' + overPos + 'px' });
                  $(this).next('input[type="checkbox"]').attr('checked', false);
               }
               if ($(this).next('input[type="checkbox"]').change) $(this).next('input[type="checkbox"]').trigger('change');
            }
         });
      },
      /*== Fim InputCheckbox ============================================================================================*/

      /*== Textarea ======================================================================================================*/
      customizeTextarea: function(txt, opts) {
         textareaOpts = opts.textarea;

         var id = $(txt).attr('id');
         $(txt).wrap('<div class="cool_textArea"></div>');
         var content = $(txt).parent();
         $(content).append('<span class="cool_textArea_lt"></span>')
                   .append('<span class="cool_textArea_l"></span>')
                   .append('<span class="cool_textArea_lb"></span>')
                   .append('<span class="cool_textArea_t"></span>')
                   .append('<span class="cool_textArea_b"></span>')
                   .append('<span class="cool_textArea_rt"></span>')
                   .append('<span class="cool_textArea_r"></span>')
                   .append('<span class="cool_textArea_rb"></span>');

         $(content).css(textareaOpts.css)
                   .width($(txt).outerWidth());

         //Definindo background
         $(content).children('.cool_textArea_lt').css({
            backgroundImage: "url('" + textareaOpts.backgroundImagePattern.replace('[0]', '-lt') + "')"
         });
         $(content).children('.cool_textArea_l').css({
            backgroundImage: "url('" + textareaOpts.backgroundImagePattern.replace('[0]', '-l') + "')",
            height: $(content).outerHeight() - 10
         });
         $(content).children('.cool_textArea_lb').css({
            backgroundImage: "url('" + textareaOpts.backgroundImagePattern.replace('[0]', '-lb') + "')"
         });
         $(content).children('.cool_textArea_t').css({
            backgroundImage: "url('" + textareaOpts.backgroundImagePattern.replace('[0]', '-t') + "')",
            width: $(content).outerWidth() - 10
         });
         $(content).children('.cool_textArea_b').css({
            backgroundImage: "url('" + textareaOpts.backgroundImagePattern.replace('[0]', '-b') + "')",
            width: $(content).outerWidth() - 10
         });
         $(content).children('.cool_textArea_rt').css({
            backgroundImage: "url('" + textareaOpts.backgroundImagePattern.replace('[0]', '-rt') + "')"
         });
         $(content).children('.cool_textArea_r').css({
            backgroundImage: "url('" + textareaOpts.backgroundImagePattern.replace('[0]', '-r') + "')",
            height: $(content).outerHeight() - 10
         });
         $(content).children('.cool_textArea_rb').css({
            backgroundImage: "url('" + textareaOpts.backgroundImagePattern.replace('[0]', '-rb') + "')"
         });

         $(txt).css({
            color: textareaOpts.css.color,
            fontSize: textareaOpts.css.fontSize
         });

         var normalPos = 0;
         var focusPos = '-' + textareaOpts.css.padding;

         $(txt).data('focused', false);
         $(txt).bind('focus', function() {
            $(txt).data('focused', true);
            $(this).css({ color: textareaOpts.colorFocus });
            setBgPosition(focusPos);
         }).bind('blur', function() {
            $(txt).data('focused', false);
            $(this).css({ color: textareaOpts.css.color });
            setBgPosition(normalPos);
         }).hover(function() {
            $(this).css({ color: textareaOpts.colorFocus });
            setBgPosition(focusPos);
         }, function() {
            if (!$(txt).data('focused')) {
               $(this).css({ color: textareaOpts.css.color });
               $(this).parents('.cool_textArea').css({ backgroundPosition: 'left 0px' });
               $(this).parents('.cool_textArea').children('span.bg').css({ backgroundPosition: 'right 0px' });
               setBgPosition(normalPos);
            }
         }).bind('change', function() {
            if (textareaOpts.onChange) textareaOpts.onChange(txt);
         });

         function setBgPosition(pos) {
            $(content).children('.cool_textArea_lt').css({
               backgroundPosition: '0 ' + pos
            });
            $(content).children('.cool_textArea_l').css({
               backgroundPosition: pos + ' top'
            });
            $(content).children('.cool_textArea_lb').css({
               backgroundPosition: 'left ' + pos
            });
            $(content).children('.cool_textArea_t').css({
               backgroundPosition: 'left ' + pos
            });
            $(content).children('.cool_textArea_b').css({
               backgroundPosition: 'right ' + pos
            });
            $(content).children('.cool_textArea_rt').css({
               backgroundPosition: 'right ' + pos
            });
            $(content).children('.cool_textArea_r').css({
               backgroundPosition: pos + ' top'
            });
            $(content).children('.cool_textArea_rb').css({
               backgroundPosition: 'right ' + pos
            });
         }
      }
      /*== Fim Textarea ==================================================================================================*/
   });

   $.fn.coolforms_setSelectDisabled = function(text, disabled) {
      if (disabled == undefined) disabled = true;

      var id = $(this).attr('id');
      var div = $('#dv_' + id);
      var selected = $(div).children('.selected');
      var options = $(div).children('.options');


      if (disabled) {
         var disabledPos = parseInt($.fn.coolforms.select.css.height.replace('px', '')) * 3;
         $(selected).children('.text').html(text);
         $(div).addClass('disabled');
         $(selected).css({ backgroundPosition: 'right -' + disabledPos + 'px', color: '#666666' });
         $(selected).children('span.bg').css({ backgroundPosition: 'left -' + disabledPos + 'px' });
         $(options).children('ul').html('<li value="" class="selected">Selecione um Estado</li>');
      } else {
         var normalColor = $.fn.coolforms.select.item.fontColor.Out;
         if ($(div).children('.options').scrollTo) $(div).children('.options').show().scrollTo('0px').hide();
         $(selected).children('.text').html(text);
         $(div).removeClass('disabled');
         $(selected).css({ backgroundPosition: 'right 0px', color: normalColor });
         $(selected).children('span.bg').css({ backgroundPosition: 'left 0px' });
      }
   }
})(jQuery);
