﻿/*  ----------------------------------------------------------------------------------------------------------------------
    "MaisCommunicationSignUpForm" nesnesi, "params" nesnesi içinde aşağıdaki değerleri gerektirir:
   
    container:
        İletişimi formunun içinde gösterileceği HTML elemanının ID'si.
    formID:
        ASP.NET formunun ID'si.   
    formCaption:
        "Form Başlığı    
    submitFunction:
        Formun submit edilmesi için bir javascript fonksiyonu. function() { doPostBack(...) } gibi parametresiz tanımlanmış olmalı.
    errorMessage:
        Hata var ise "Üzgünüz, .... hata oluştu." gibi bir mesaj içermeli. Hata yoksa tanımlanmamalı!
    successMessage:
        Form submit edildikten sonra gösterilecek mesaj. Yalnızca submit işlemi başarılıysa tanımlanmalı!
    successRedirectUrl:
        Form submit edildikten ve teşekkür mesajı gösterildikten sonra gidilecek hedef URL.
    ----------------------------------------------------------------------------------------------------------------------*/

/* --- EXT FIX TO MAKE F5, CTRL+C, CTRL+V KEYS WORK --- */
var myFilterKeys = function(e)  {     
    var k = e.getKey();

    if ((e.keyCode == e.F5 && e.charCode === 0) ||
        (e.keyCode === 0 && e.ctrlKey && (e.charCode == 118 || e.charCode == 99))) {
        return;
    }

    if(!Ext.isIE && (e.isNavKeyPress() || k == e.BACKSPACE || (k == e.DELETE && e.button == -1))) {
        return;
    }
    
    var c = e.getCharCode();
    var cc = String.fromCharCode(c);
    
    if (Ext.isIE && (e.isSpecialKey() || !cc)){
        return;
    }
    
    if (!this.maskRe.test(cc)) {
        e.stopEvent();
    }
};

var phoneRegEx = /^(?:\([2-9][0-9]{2}\)|[2-9][0-9]{2})(?:\s|)[1-9][0-9]{2}(?:\s|)[0-9]{2}(?:\s|)[0-9]{2}$/;
var phoneRegExError = 'Telefon geçerli değil. Lütfen (216) 323 87 65 gibi alan koduyla birlikte giriniz.';
var phoneMinOne = 'En az bir telefon girmelisiniz.';
var mobilePhoneRequired = 'Cep telefonunuzu girlmelisiniz.';

var MaisCommunicationSignUpForm_Form = null;
var MaisCommunicationSignUpForm_Params = null;

// JavaScript Document
var MaisCommunicationSignupForm = function(params) {
    if (params.successMessage &&
        params.successMessage.length > 0) {
        new Ext.Panel({
            applyTo: params.container,
            autoHeight: true,
            bodyStyle: 'text-align:center;background-color:#DFE8F6;padding:10px',
            buttonAlign: 'center',
            buttons: [
                new Ext.Button({
                    text: 'Tamam',
                    handler: function() {
                    }
                })
            ],
            html: '<br/>' + params.successMessage + '<br /><br />'
        });

        return;
    }

    var formLabelWidth = 140;
    var formEditorWidth = 230;

    Ext.QuickTips.init();

    // turn on validation errors beside the field globally
    Ext.form.Field.prototype.msgTarget = 'side';

    var hasCalledValidator = false;

    var phoneValidator = function(val) {
        var parent = this.ownerCt;
        var fields = parent.items;

        var oneTelNonEmpty = false;
        var i = 0;

        for (i = 0; i < fields.getCount(); i++) {

            var item = fields.itemAt(i);
            if (!Ext.isEmpty(item.getValue()))
                oneTelNonEmpty = true;

            if (!hasCalledValidator && item != this) {
                hasCalledValidator = true;
                try {
                    item.validateValue(item.getValue());
                }
                finally {
                    hasCalledValidator = false;
                }
            }
        }

        if (Ext.isEmpty(val)) {
            if (oneTelNonEmpty)
                return true;
            else
                return phoneMinOne;
        }
        else if (phoneRegEx.test(val))
            return true;
        else
            return phoneRegExError;
    };

    var fields = [
        {
            id: 'name',
            name: 'name',
            fieldLabel: 'Adınız<sup>*</sup>',
            maxLength: 50,
            allowBlank: false,
            vtype: 'alpha'
        },
        {
            id: 'surname',
            name: 'surname',
            fieldLabel: 'Soyadınız<sup>*</sup>',
            maxLength: 50,
            allowBlank: false,
            vtype: 'alpha'
        },
        {
            id: 'email',
            name: 'email',
            fieldLabel: 'E-Posta *',
            maxLength: 50,
            allowBlank: false,
            vtype: 'email'
        },
        {
            id: 'mobile_phone',
            name: 'mobile_phone',
            fieldLabel: 'Cep Telefonu<sup>*</sup>',
            maxLength: 10,
            minLength: 10,
            allowBlank: false,
            xtype: 'textfield',
            regexText: mobilePhoneRequired,
            maskRe: /^[()0-9\s]?$/,
            regex: /^[1-9]([0-9]){9}$/,
            regexText: 'Alan kodunuzu 0 ile başlamadan ve sadece rakam girmelisiniz.'
        }
    ];

    function inSet(s) {
        if (s.indexOf(params.formType) >= 0)
            return true;
    }

    /* fields.push({
    id: 'check_agree',
    name: 'check_agree',
    xtype: 'checkbox',
    inputValue : 1,
    allowBlank: false,
    validateValue: function () { return this.checked; },
    value: 1,
    autoWidth: true,
    checked: true,
    hideLabel: true,
    boxLabel: '* E-Bülten kullanım koşullarını kabul ediyorum'           
    });*/

    var MyExtPanel = Ext.extend(Ext.FormPanel, {

        getLayoutTarget: function() {
            return this.body;
        },

        onRender: function(ct, position) {
            this.initFields();

            Ext.FormPanel.superclass.onRender.call(this, ct, position);
            this.form.initEl(params.formID);
        }
    });

    var showError = function(msg, title) {
        title = title || 'Hata!';
        Ext.Msg.show({
            title: title,
            msg: msg,
            modal: true,
            icon: Ext.Msg.ERROR,
            buttons: Ext.Msg.OK
        });
    };

    var showMessage = function(msg, title, callback) {
        title = title || 'Bilgi';
        Ext.Msg.show({
            title: title,
            msg: msg,
            modal: true,
            icon: Ext.Msg.INFO,
            buttons: Ext.Msg.OK,
            fn: callback
        });
    };

    var onSubmit = function() {
        frm.getForm().submit({
            url: document.location,
            scope: this,
            success: function(form, action) {
                showMessage(action.result.message, undefined, function() {
                    frm.form.reset();
                });

            },
            failure: function(form, action) {
                showError(action.result.error);
            },
            params: {
                ajax_cmd: 'submit',
                ajax_target: params.container
            },
            waitMsg: 'Lütfen bekleyiniz...'
        });
    };

    var onSubmitUnsubscribe = function() {
        frm.getForm().submit({
            url: document.location,
            scope: this,
            success: function(form, action) {
                showMessage(action.result.message, undefined, function() {

                });
            },
            failure: function(form, action) {
                showError(action.result.error);
            },
            params: {
                ajax_cmd: 'unsubscribe',
                ajax_target: params.container
            },
            waitMsg: 'Lütfen bekleyiniz...'
        });
    };

    var frm = new MyExtPanel({
        labelWidth: formLabelWidth, // label settings here cascade unless overridden
        layout: 'form',
        autoHeight: true,
        frame: true,
        monitorValid: true,
        applyTo: params.container,
        title: params.formCaption,
        bodyStyle: 'padding:5px 5px 0',
        width: formLabelWidth + formEditorWidth + 55,
        defaults: {
            width: formEditorWidth,
            labelSeparator: ''
        },
        defaultType: 'textfield',
        items: fields,
        buttons: [{
            id: 'submit',
            text: "Kayıt",
            handler: onSubmit,
            formBind: true
}/*,
        {
            id: 'unsubscribe',
            text: "E-Bülten Üyeliğinden Çık",
            handler: onSubmitUnsubscribe,
            formBind: true
        }*/
        ]
        });

        Ext.override(Ext.form.TextField, {
            validateValue: function(value) {
                if (typeof this.validator == "function") {
                    var msg = this.validator(value);
                    if (msg !== true) {
                        this.markInvalid(msg);
                        return false;
                    }
                }

                if (value.length < 1 || value === this.emptyText) { // if it's blank
                    if (this.allowBlank) {
                        this.clearInvalid();
                        return true;
                    }
                    else {
                        this.markInvalid(this.blankText);
                        return false;
                    }
                }

                if (value.length < this.minLength) {
                    this.markInvalid(String.format(this.minLengthText, this.minLength));
                    return false;
                }

                if (value.length > this.maxLength) {
                    this.markInvalid(String.format(this.maxLengthText, this.maxLength));
                    return false;
                }

                if (this.vtype) {
                    var vt = Ext.form.VTypes;
                    if (!vt[this.vtype](value, this)) {
                        this.markInvalid(this.vtypeText || vt[this.vtype + 'Text']);
                        return false;
                    }
                }

                if (this.regex && !this.regex.test(value)) {
                    this.markInvalid(this.regexText);
                    return false;
                }
                return true;
            }
        });

        // new Ext.ToolTip({ target: 'gsm_phone', html: '(532) 456 78 90 gibi alan koduyla birlikte giriniz.' });
        // new Ext.ToolTip({ target: 'work_phone', html: '(212) 345 67 89 gibi alan koduyla birlikte giriniz.' });
        // new Ext.ToolTip({ target: 'home_phone', html: '(216) 456 12 23 gibi alan koduyla birlikte giriniz.' });

        Ext.util.CSS.swapStyleSheet('theme', document.URL.substr(0, document.URL.lastIndexOf("/") + 1) + "zip.axd/js/ext.zip/resources/css/xtheme-gray.css");
    };
