/*
 * isim  : jQuery KalanKarakter eklentisi
 * sürüm : v2.0  (27 Temmuz 2008)
 * adres : http://www.eburhan.com/araclar/
 * yazar : Erhan BURHAN (eburhan)
 *
 * Telif Hakkı (c) 2008 eburhan
 * MIT ve GPL lisansları altında kullanılabilir
 * http://www.opensource.org/licenses/mit-license.php
 * http://www.gnu.org/licenses/gpl.html
 */

(function($) {

    $.fn.kalanKarakter = function(opt){

        // varsayılan seçenekler
        def = {
         limit: 250,
         mesaj: 'kalan karakter: #1',
         kapsa: '<div></div>',
         uyari: function(){}
        };

        // varsayılan seçenekleri, kullanıcının seçenekleri ile değiştir
        var Ayar = $.extend({}, def, opt); 

        // herbir nesne için işlemleri uygula
        this.each(function(i, currObj){
            var thisID = $(currObj).attr('id');

            // ID'si olmayanlar varsa ID ata ( JKK = jQuery Kalan Karakter)
            if( ! thisID ) {
                thisID = 'text_' + (Math.random() * Math.pow(10,18));
                $(currObj).attr('id', thisID);
            }

            // text alanını kapsayan nesneni ID özniteliği
            var kapsaID = 'JKK_' + thisID;

            // başlar başlamaz karakter durumuna bak
            kalanKarakterDurumu(currObj);

            // Geçerli nesnede kalan karakter sayısı
            var KKS = kalanKarakterSayisi(currObj);

            // Kalan karakter sayısının gösterildiği yer
            var Kapsa = $(Ayar.kapsa).attr('id', kapsaID).html( Ayar.mesaj.replace(/#1/, KKS) );

            $(currObj).after(Kapsa).keyup(function(){ kalanKarakterYazdir(kapsaID, currObj) })
        });

        // Text alanında limiti aşan karakterleri temizle
        function kalanKarakterDurumu(obj) {
            $(obj).val( $(obj).val().substr(0, Ayar.limit) );
        }

        // Text alanında kalan karakter sayısını hesapla
        function kalanKarakterSayisi(obj) {
            return Ayar.limit - $(obj).val().length;
        }

        // Text alanının altına, kalan karakter sayısını yazdır
        function kalanKarakterYazdir(kapsaID, obj) {
            var KKS = kalanKarakterSayisi(obj);

            if( KKS >= 0) {
                $('#'+kapsaID).html(Ayar.mesaj.replace(/#1/, KKS));
            } else {
                kalanKarakterDurumu(obj);
                $('#'+kapsaID).html(Ayar.mesaj.replace(/#1/, '0'));
                Ayar.uyari();
            }
        }

        // Yalnızca eklentiyi geliştirirken kullanılır
        function log(obj) {
            if(window.console) {
                console.log(obj);
            } else {
                alert(obj);
            }
        }

        // zincirleme için
        return this;

    }// eklenti sonu

})(jQuery);