
$(function(){
    $('#mesaj').kalanKarakter({
        limit: 2000,
        mesaj: 'kalan karakter: #1',
        kapsa: $('#kalanKarakter'),
        uyari: function(){
            myAlert('Karakter limitini aştınız. Lütfen mesajınızı kontrol edin!');
        }
    });

    // global
    Bildirim = new FormBildirim();
    adSoyad = new adSoyadKontrol();
    ePosta = new ePostaKontrol();
    mesaj = new mesajKontrol();

    $('#adSoyad').keyup(function(){
        adSoyad.kontrol();
    }).blur(function(){
        adSoyad.kontrol();
    });

    $('#ePosta').keyup(function(){
        ePosta.kontrol();
    }).blur(function(){
        ePosta.kontrol();
    });  

    $('#mesaj').keyup(function(){
        mesaj.kontrol();
    }).blur(function(){
        mesaj.kontrol();
    });

    $('#iletisimFormu')
        .before('<div id="formBildirim" />')
            .submit(iletisimFormuKontrol);


    /* h1'in tıklanabilmesini sağlıyoruz */
    $('#ustNav h1')
        .mouseover(function(){
            $(this).attr('title', 'Sayfayı yenilemek için tıklayın...');
        })
        .click(function(){
            location.reload();
        });

    /* Gönder butonunu üzerine geldiğimizde */
	$('#gonderButonu').hover(
        // mouse over
        function(){ $(this).stop().animate({backgroundPosition:"(0px 30px)"}, {duration:500}); },
        // mouse out
        function(){ $(this).stop().animate({backgroundPosition:"(0px 0px)"}, {duration:500}); }
	);

});

function iletisimFormuGonder()
{
    var Form = $('#iletisimFormu form:first');
    var Html = $('#gonderButonu').html();

    $.ajax({
        type: 'POST',
        data: Form.serialize(),
        url: Form.attr('action'),
        dataType: 'json',
        beforeSend: function(){
            $('#formBildirim').fadeOut(200, function(){
                $('#spin img').fadeIn(200);
            });
            $('#gonderButonu')
                .html('Gönderiliyor...')
                    .attr('disabled', 'disabled')
                        .css('cursor', 'wait');
        },
        success: function(json){            
            Bildirim.classTur(json.tur);
            Bildirim.mesajUst(json.ust);
            Bildirim.mesajAlt(json.alt);
            Bildirim.gosterim();
            if( json.tur === 'tamam' ) {
                $('#adSoyad, #ePosta, #mesaj').val('');
            }
        },
        error: function(XMLHttpRequest, textStatus, errorThrown){
            Bildirim.classTur('hata');
            Bildirim.mesajUst('Sistem Hatası Var');
            Bildirim.mesajAlt(['Bilinmeyen bir hata oluştu. Lütfen daha sonra deneyin!']);
            Bildirim.gosterim();
            $('#spin img').fadeOut(200);
        },
        complete: function(){
            $('#gonderButonu')
                .html(Html)
                    .removeAttr('disabled')
                        .css('cursor', 'pointer');            
            $('#spin img').fadeOut(200);
        }
    });
}

function iletisimFormuKontrol()
{
    var gecersizAlan = 0;
    var mesajlar = [];

    if( ! adSoyad.dogrulat() ){
        adSoyad.gecersiz();
        mesajlar.push( adSoyad.mesajVer() );
        gecersizAlan++;
    }

    if( ! ePosta.dogrulat() ){
        ePosta.gecersiz();
        mesajlar.push( ePosta.mesajVer() );
        gecersizAlan++;
    }

    if( ! mesaj.dogrulat() ){
        mesaj.gecersiz();
        mesajlar.push( mesaj.mesajVer() );
        gecersizAlan++;
    }

    // tüm alanlar geçerliyse formu gönder
    if( gecersizAlan === 0 ) {
        iletisimFormuGonder();
        return false;
    }

    // formda geçersiz alanlar mevcut ise
    // Mevcut-Mustafa SANDAL (güzel şarkıdır ha)
    Bildirim.classTur('hata');
    Bildirim.mesajUst('Formda Hata Var');
    Bildirim.mesajAlt(mesajlar);
    Bildirim.gosterim();

    return false;
}


var FormBildirim = Class.extend({
    init: function(){
        this.tur = '';
        this.ust = '';
        this.alt = [];
    },
    classTur: function(tur){
        this.tur = tur;
    },
    mesajUst: function(str){
        this.ust = str;
    },
    mesajAlt: function(arr){
        this.alt = arr;
    },
    gosterim: function(){
        var str = '';
        str += '<div class="cf '+this.tur+'">';
        str += '<h4>'+this.ust+'</h4>';
        str += '<ul>';

        for(var i=0; i<this.alt.length; ++i)        
            str += '<li>'+this.alt[i]+'</li>';

        str += '</ul>';
        str += '</div>';

        $('#formBildirim').hide().html(str).fadeIn(250);
    }
});



var formKontrol = Class.extend({
    init: function(){
        this.obj = null;
        this.msg = null;
    },
    dogrulat: function(){
        var len = this.obj.val().length;
        return (len>5 && len<25);
    },
    bosMu: function(){
        return (this.obj.val().length == 0);  
    },
    mesajVer: function(){
        return this.msg;
    },
    uyariVer: function(){
        myAlert(this.msg);
        this.obj.focus();
        return this;
    },
    gerekli: function(){
        this.obj
            .css('border', '1px solid #fff')
                .siblings('span')
                    .attr('class', 'gerekli');
            
    },
    gecersiz: function(){
        this.obj
            .css('border', '1px solid #f10002')
                .siblings('span')
                    .attr('class', 'gecersiz');
            
    },
    gecerli: function(){
        this.obj
            .css('border', '1px solid #fff')
                .siblings('span')
                    .attr('class', 'gecerli');        
    },
    kontrol: function(){
        if( this.dogrulat() ){
            this.gecerli();
        } else {
            this.gecersiz();
        }

        if( this.bosMu() ){
            this.gerekli();
        }
    }
});

var adSoyadKontrol = formKontrol.extend({
    init: function(){
        this.obj = $('#adSoyad');
        this.msg = "Adınız ve Soyadınız hatalı gözüküyor !";
    },
    dogrulat: function(){
        var val = this.obj.val();
        return (val.match(/[a-zA-ZığüşöçİĞÜŞÖÇ]{2,12}(?:\s[a-zA-ZığüşöçİĞÜŞÖÇ]{2,12})?/));
    }
});

var ePostaKontrol = formKontrol.extend({
    init: function(){
        this.obj = $('#ePosta');
        this.msg = "E-posta adresiniz hatalı gözüküyor !";
    },
    dogrulat: function(){
        var val = this.obj.val();
        return val.match(/\b[A-Z0-9._%+-]+@(?:[A-Z0-9-]+\.)+[A-Z]{2,4}\b/i);
    }
});

var mesajKontrol = formKontrol.extend({
    init: function(){
        this.obj = $('#mesaj');
        this.msg = "Mesajınızın uzunluğu 10 karakter ile 2000 karakter arasında olmalıdır !";
    },
    dogrulat: function(){
        var len = this.obj.val().length;
        return (len>10 && len<2001);
    }
});

