﻿/*  ----------------------------------------------------------------------------------------------------------------------
    "CommunicationForm" 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.
    formType:
        1..14 arasında form tipi ID'si.
    formCaption:
        "Kasko yaptırmak istiyorum" gibi form tipine karşılık gelen başlık.
    cityList:
        [[34, "İstanbul"], [06, "Ankara"]] gibi [CityID, CityName] ikililerinden oluşan şehir listesi.
    modelList:
        [[89, "Renault"], [47, "Dacia"]] gibi [ModelID, ModelName] ikililerinden oluşan model listesi.
    modelTestList:
        [[89, "Renault"], [47, "Dacia"]] gibi [ModelID, ModelName] ikililerinden oluşan model test listesi.
    otherBrandList:
        [[89, "Renault"], [47, "Dacia"]] gibi [OtherBrandID, OtherBrandName] ikililerinden oluşan model test listesi.
    buyingDateList:
        [[1, '1-5 Ay Arası'], [6, '6-11 Ay Arası'], [0, 'Bilmiyorum']] gibi [BuyingDateID, BuyingDate] ikilileri listesi.
    fuelTypeList:
        [[1, 'Benzin'], [2, 'Dizel'], [3, 'LPG']] gibi [FuelTypeID, FuelType] ikilileri listesi.
    modelYearList:
        [[1998], [1999], [2000], ...] gibi bir dizi
    selectedModelID:
        741 gibi bir model numarası. Öndeğer olarak bir model seçili gelmeyecekse verilmeyebilir.
    getDealersUrl:
        "/get_dealers.aspx" gibi bir sayfa.
    getOtherModelsUrl:
        "/get_other_models.aspx" gibi bir sayfa.
    siteBrand:
        "Renault" gibi form altındaki onaylıyorum kutusunda gösterilecek marka.
    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.
    ----------------------------------------------------------------------------------------------------------------------*/
/* --- FORM TYPES --- */
var ftBuyNewVehicle = 1;
var ftBuySecondHandVehicle = 2;
var ftTestDrive = 3;
var ftBrochureRequest = 4;
var ftBookletRequest = 5;
var ftServiceRequest = 6;
var ftBuyAccessories = 7;
var ftAdditionalWarranty = 8;
var ftInsurance = 9;
var ftMagazineSubscription = 10;
var ftMagazineUnsubscription = 11;
var ftConsultancy = 12;
var ftComplaint = 13;
var ftSuggestion = 14;
var ftSecurity = 15;
var ftAppointment = 16;
var ftDakik = 17;
var ftAestethic = 18;

function updateTimes(field, minVal, maxVal) {
    var min = field.parseDate(minVal);
    if (!min) {
        min = new Date().clearTime();
    }
    var max = field.parseDate(maxVal);
    if (!max) {
        max = new Date().clearTime().add('mi', (24 * 60) - 1);
    }
    var times = [];
    while (min <= max) {
        times.push([min.dateFormat(field.format)]);
        min = min.add('mi', field.increment);
    }

    field.store.removeAll();
    field.store.loadData(times);
};

Ext.override(Ext.form.TimeField,
    {
        setMinValue: function(newval) {
            this.minValue = (typeof newval == "string" ? this.parseDate(newval) : newval);
            this.setValue(newval);
        },
        setMaxValue: function(newval) {
            this.maxValue = (typeof newval == "string" ? this.parseDate(newval) : newval);
        }
    });


    Ext.apply(Ext.form.VTypes, {
        pastdate: function(val, field) {
            var date = field.parseDate(val).clearTime();
            var date2 = field.parseDate(new Date().clearTime()).clearTime();
            if (date < date2)
                return false;

            return true;
        },
        pastdateText: 'Geçmiş bir tarih belirtilemez lütfen kontrol ediniz.',

        futuredate: function(val, field) {
            var date = field.parseDate(val).clearTime();
            var date2 = field.parseDate(new Date().clearTime()).clearTime();
            if (date > date2)
                return false;

            return true;
        },
        futuredateText: 'İlerki bir tarih belirtilemez lütfen kontrol ediniz.'
    });

/* --- 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 CommunicationForm_Form = null;
var CommunicationForm_Params = null;

// JavaScript Document
var CommunicationForm = 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() {
                        document.location = params.successRedirectUrl
                    }
                })
            ],
            html: '<br/>' + params.successMessage + '<br /><br />'
        });

        return;
    }

    var formLabelWidth = 140;
    var formEditorWidth = 340;

    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 isAppointment = false;
    if (inSet([ftAppointment])) {
        isAppointment = true;
    }

    var emailRequired = true;
    var emailText = "E-Posta *";
    if (isAppointment) {
        emailRequired = false;
        emailText = "E-Posta";
    }

    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: emailText,
            maxLength: 50,
            allowBlank: !emailRequired,
            vtype: 'email'
        }
        ];

    if (inSet([ftTestDrive]) | inSet([ftAppointment])) {
        if (inSet([ftTestDrive])) {
            fields.push({
                id: 'model',
                name: 'model_id',
                hiddenName: 'model_id',
                fieldLabel: 'Test aracı<sup>*</sup>',
                allowBlank: false,
                displayField: 'name',
                valueField: 'id',
                mode: 'local',
                triggerAction: 'all',
                editable: true,
                forceSelection: true,
                emptyText: '---seçiniz---',
                xtype: 'combo',
                store: new Ext.data.SimpleStore({
                    fields: ['id', 'name'],
                    data: params.modelTestList
                })
            });
        }

        if (params.selectedModelID &&
            params.modelTestList.toString().indexOf(params.selectedModelID) >= 0) {
            fields[fields.length - 1].value = params.selectedModelID;
        }

        var increment = 30;
        var max = 18;
        var min = 8;
        var minValue = min + ':00';
        var maxValue = max + ':00';

        var testDate = new Ext.form.DateField({
            id: 'test_date',
            name: 'test_date',
            fieldLabel: 'Tercih ettiğiniz tarih<sup>*</sup>',
            allowBlank: false,
            editable: false,
            forceSelection: true,
            invalidText: '{0} geçersiz bir tarihdir. Tarih formatı gg.aa.yyyy şeklinde olmalıdır.',
            format: 'd.m.Y',
            xtype: 'datefield',
            vtype: 'pastdate',
            menuListeners: Ext.applyIf({
                select: function(o, d) {
                    Ext.form.DateField.prototype.menuListeners.select.apply(this, arguments);
                    if (isAppointment) {
                        if (params.min_time) {
                            if (this.value <= params.next_day) {
                                if ((params.min_time < max && params.min_time > min) || params.min_time <= min) {
                                    minValue = params.min_time + ':00';
                                    if (params.min_time <= min)
                                        minValue = min + ':00';
                                    this.setValue(params.next_day);
                                    updateTimes(testTime, minValue, maxValue);
                                    testTime.setMinValue(minValue);
                                }
                                else {
                                    var myDate = new Date();
                                    myDate.setDate(myDate.getDate() + 2)
                                    this.setValue(myDate);
                                    minValue = min + ':00';
                                    updateTimes(testTime, minValue, maxValue);
                                    testTime.minValue = minValue;
                                    testTime.setMinValue(minValue);
                                }
                            }
                            else {
                                updateTimes(testTime, min + ':00', maxValue);
                                testTime.setMinValue(min + ':00');
                            }
                        }
                    }
                }
            }, Ext.form.DateField.prototype.menuListeners)
        });

        if (isAppointment) {
            if (params.next_day) {
                testDate.value = params.next_day;
                if (params.min_time) {
                    if ((params.min_time < max && params.min_time > min) || params.min_time <= min) {
                        minValue = params.min_time + ':00';
                        if (params.min_time <= min)
                            minValue = min + ':00';
                    }
                    else {
                        var myDate = new Date();
                        myDate.setDate(myDate.getDate() + 2)
                        testDate.value = myDate;
                        minValue = min + ':00';
                    }
                }
            }
        }

        var testTime = new Ext.form.TimeField({
            id: 'test_time',
            name: 'test_time',
            fieldLabel: 'Tercih ettiğiniz saat<sup>*</sup>',
            allowBlank: false,
            minValue: minValue,
            maxValue: maxValue,
            minText: 'En erken {0} olabilir.',
            maxText: 'En geç {0} olabilir.',
            invalidText: '{0} geçerli bir saat değildir.',
            format: 'H:i',
            increment: increment,
            editable: true,
            forceSelection: true,
            xtype: 'timefield'
        });

        fields.push(testDate);
        fields.push(testTime);

        if (isAppointment) {
            var timeNote = new Ext.form.Field({
                autoCreate: { tag: 'div', cn: { tag: 'div'} },
                dataIndex: 'timeNote', // if you using Form.load, this would work
                id: 'timeNote',
                value: true,
                setValue: function(val) {
                    this.value = val;
                    if (this.rendered) {
                        this.el.child('div').update(
                                '<span style=";font-size:11px;height:17px;display:block;">En erken 24 saat sonrasına randevu alabilirsiniz.</span>'
                           );
                    }
                },
                getRawValue: function() {
                    return this.value;
                }
            });
            fields.push(timeNote);
        }
    }

    var phoneFields = new Ext.form.FieldSet({
        title: 'Telefonlar',
        autoHeight: true,
        autoWidth: true,
        labelWidth: formLabelWidth - 11,
        id: 'phones',
        defaultType: 'textfield',
        defaults: {
            width: formEditorWidth,
            maxLength: 30,
            labelSeparator: '',
            validator: phoneValidator,
            xtype: 'textfield',
            maskRe: /^[()0-9\s]?$/,
            filterKeys: myFilterKeys
        },
        items: [
                {
                    id: 'gsm_phone',
                    name: 'gsm_phone',
                    fieldLabel: 'Cep Telefonu'
                },
                {
                    id: 'work_phone',
                    name: 'work_phone',
                    fieldLabel: 'İş Telefonu'
                },
                {
                    id: 'home_phone',
                    name: 'home_phone',
                    fieldLabel: 'Ev Telefonu'
                }
            ]
    })
    if (inSet([ftAppointment])) {
        phoneFields = new Ext.form.FieldSet({
            title: 'Telefonlar',
            autoHeight: true,
            autoWidth: true,
            labelWidth: formLabelWidth - 11,
            id: 'phones',
            defaults: {
                width: formEditorWidth,
                labelSeparator: ''
            },
            items: [
                {
                    id: 'gsm_phone',
                    name: 'gsm_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.'
                },
                {
                    id: 'work_phone',
                    name: 'work_phone',
                    fieldLabel: 'İş Telefonu',
                    xtype: 'textfield',
                    maxLength: 10,
                    maskRe: /^[()0-9\s]?$/,
                    regex: /^[1-9]([0-9]){9}$/,
                    regexText: 'Sadece rakam girmelisiniz.'
                },
                {
                    id: 'home_phone',
                    name: 'home_phone',
                    fieldLabel: 'Ev Telefonu',
                    xtype: 'textfield',
                    maxLength: 10,
                    maskRe: /^[()0-9\s]?$/,
                    regex: /^[1-9]([0-9]){9}$/,
                    regexText: 'Sadece rakam girmelisiniz.'
                }
            ]
        })
    }



    function inSet(s) {
        if (s.indexOf(params.formType) >= 0)
            return true;
    }

    var ftAddress = inSet([ftBrochureRequest, ftBookletRequest, ftMagazineSubscription, ftMagazineUnsubscription]);

    if (ftAddress) {
        fields.push(
            {
                id: 'address',
                name: 'address',
                fieldLabel: 'Adres<sup>*</sup>',
                allowBlank: false,
                maxLength: 250,
                xtype: 'textarea'
            },
            {
                id: 'postcode',
                name: 'postcode',
                fieldLabel: 'Posta Kodu',
                maxLength: 10,
                xtype: 'textfield',
                vtype: 'alphanum'
            }
        );
    }

    var dealersShown = inSet([ftBuyNewVehicle, ftBuySecondHandVehicle, ftTestDrive, ftAppointment, ftBookletRequest,
        ftServiceRequest, ftBuyAccessories, ftInsurance, ftBrochureRequest, ftAestethic, ftDakik]);

    var lstCityID = new Ext.form.ComboBox({
        id: 'city',
        name: 'city',
        hiddenName: 'city_id',
        fieldLabel: 'Şehir<sup>*</sup>',
        allowBlank: false,
        displayField: 'name',
        valueField: 'id',
        mode: 'local',
        triggerAction: 'all',
        editable: true,
        forceSelection: true,
        emptyText: '---seçiniz---',
        store: new Ext.data.SimpleStore({
            fields: ['id', 'name'],
            data: params.cityList
        })
    });

    fields.push(lstCityID);

    if (ftAddress) {
        fields.push({
            id: 'province',
            name: 'province',
            fieldLabel: 'İlçe',
            maxLength: 50,
            xtype: 'textfield',
            vtype: 'alpha'
        });
    }

    if (params.selectedCityID &&
        params.cityList.toString().indexOf(params.selectedCityID) >= 0) {
        fields[fields.length - 1].value = params.selectedCityID;
    }

    if (dealersShown) {
        var dealerStore = new Ext.data.JsonStore({
            url: params.getDealersUrl,
            root: 'dealers',
            fields: ['id', 'name']
        });

        var lstDealer = new Ext.form.ComboBox({
            id: 'dealer',
            name: 'dealer',
            hiddenName: 'dealer_id',
            fieldLabel: 'Yetkili noktamız<sup>*</sup>',
            allowBlank: false,
            displayField: 'name',
            valueField: 'id',
            mode: 'local',
            triggerAction: 'all',
            editable: true,
            forceSelection: true,
            emptyText: '---şehir seçiniz---',
            store: dealerStore
        });

        fields.push(lstDealer);

        lstCityIDSelect = function() {
            dealerStore.load({
                params: {
                    cityID: lstCityID.getValue(),
                    parent_id: ((params.selectedDealerID) && (params.selectedCityID == lstCityID.getValue())) ? params.selectedDealerID : ""
                },
                callback: function(r, options, success) {

                    if (r.length && r.length > 0) {
                        lstDealer.emptyText = '---seçiniz---';
                    }
                    else
                        lstDealer.emptyText = '---başka bir yakın şehir seçiniz---';

                    if ((params.selectedDealerID) && (params.selectedCityID == lstCityID.getValue())) {
                        lstDealer.setValue(params.selectedDealerID);
                    }
                    else
                        lstDealer.setValue("");
                }
            });
        };

        if (params.selectedDealerID)
            lstCityIDSelect();

        lstCityID.on("select", lstCityIDSelect);
    }

    if (inSet([ftBuyNewVehicle, ftBuySecondHandVehicle, ftBrochureRequest])) {
        fields.push({
            id: 'model',
            name: 'model',
            hiddenName: 'model_id',
            fieldLabel: 'Araçlar<sup>*</sup>',
            allowBlank: false,
            displayField: 'name',
            valueField: 'id',
            mode: 'local',
            triggerAction: 'all',
            editable: true,
            forceSelection: true,
            emptyText: '---seçiniz---',
            xtype: 'combo',
            store: new Ext.data.SimpleStore({
                fields: ['id', 'name'],
                data: params.modelList
            })
        });

        if (params.selectedModelID &&
            params.modelList.toString().indexOf(params.selectedModelID) >= 0) {
            fields[fields.length - 1].value = params.selectedModelID;
        }
    }

    if (inSet([ftBuyNewVehicle])) {
        fields.push({
            id: 'predicted_buying_date',
            name: 'predicted_buying_date',
            hiddenName: 'predicted_buying_date_id',
            fieldLabel: 'Ne zaman almayı planlıyorsunuz?<sup>*</sup>',
            allowBlank: false,
            displayField: 'name',
            valueField: 'id',
            mode: 'local',
            triggerAction: 'all',
            editable: false,
            forceSelection: true,
            emptyText: '---seçiniz---',
            xtype: 'combo',
            store: new Ext.data.SimpleStore({
                fields: ['id', 'name'],
                data: params.buyingDateList
            })
        });
    }

    /**/

    if (isAppointment) {
        fields.push({
            id: 'appointment_type',
            name: 'appointment_type',
            hiddenName: 'appointment_type_id',
            fieldLabel: 'Telep edilen hizmet<sup>*</sup>',
            allowBlank: false,
            displayField: 'name',
            valueField: 'id',
            mode: 'local',
            triggerAction: 'all',
            editable: false,
            forceSelection: true,
            emptyText: '---seçiniz---',
            xtype: 'combo',
            store: new Ext.data.SimpleStore({
                fields: ['id', 'name'],
                data: params.appointmentTypes
            })
        });
    }

    var msgLabel = 'Mesaj';

    if (isAppointment)
        msgLabel = 'Diğer';

    fields.push({
        id: 'message',
        name: 'message',
        fieldLabel: msgLabel,
        maxLength: 1000,
        allowBlank: true,
        xtype: 'textarea'
    });

    fields.push(phoneFields);

    var lstOtherBrand = new Ext.form.ComboBox({
        id: 'other_brand_name',
        fieldLabel: 'Marka<sup>*</sup>',
        name: 'other_brand_name',
        hiddenName: 'other_brand_id',
        allowBlank: false,
        displayField: 'name',
        valueField: 'id',
        mode: 'local',
        triggerAction: 'all',
        editable: true,
        forceSelection: true,
        emptyText: '---seçiniz---',
        store: new Ext.data.SimpleStore({
            fields: ['id', 'name'],
            data: params.otherBrandList
        })
    });

    var otherModelsStore = new Ext.data.JsonStore({
        url: params.getOtherModelsUrl,
        root: 'models',
        fields: ['id', 'name']
    });

    var lstOtherModel = new Ext.form.ComboBox({
        id: 'other_model',
        name: 'other_model',
        hiddenName: 'other_model_id',
        fieldLabel: 'Model<sup>*</sup>',
        allowBlank: false,
        displayField: 'name',
        valueField: 'id',
        mode: 'local',
        editable: true,
        forceSelection: true,
        emptyText: '---marka seçiniz---',
        store: otherModelsStore
    });

    lstOtherBrandSelect = function() {
        otherModelsStore.load({
            params: {
                brandID: lstOtherBrand.getValue()
            },
            callback: function(r, options, success) {
                if (r.length && r.length > 0)
                    lstOtherModel.emptyText = '---seçiniz---';
                else
                    lstOtherModel.emptyText = '---bu marka altında araç yoktur---';
                lstOtherModel.setValue("");
            }
        });
    };

    lstOtherBrand.on("select", lstOtherBrandSelect);

    if (params.siteBrand) {
        lstOtherBrand.setValue(params.otherBrandList[0][0]);
        lstOtherBrandSelect();
        lstOtherBrand.setDisabled(true);
    }

    var vehicleRequired = false;
    vehicleRequired = inSet([ftBookletRequest, ftAppointment]);

    var rdgIsSecondHand = new Ext.ux.RadioGroup({
        id: 'is_second_hand',
        name: 'is_second_hand',
        fieldLabel: 'Alış şekli<sup>*</sup>',
        horizontal: true,
        radios: [
            {
                boxLabel: 'Yeni',
                checked: true,
                value: '0',
                disabled: !vehicleRequired
            },
            {
                boxLabel: 'İkinci El',
                value: '1',
                disabled: !vehicleRequired
            }
        ]
    });

    var chassisRequired = false;
    var chasissLabel = "Şasi No";
    chassisRequired = inSet([ftMagazineSubscription, ftConsultancy, ftSuggestion, ftMagazineUnsubscription, ftComplaint]);
    if (chassisRequired)
        chasissLabel += "<sup>*</sup>";


    var onOwnCarExpand = function() {
        this.items.each(
                function(item, index, length) {
                    item.setDisabled(false);
                    return true;
                });
        lstOtherBrand.setDisabled(false);
        lstOtherModel.setDisabled(false);
        rdgIsSecondHand.setDisabled(false);
    }

    var onOwnCarCollapse = function() {
        this.items.each(
        function(item, index, length) {
            if (item.xtype)
                item.setDisabled(true);
            return true;
        });
        lstOtherBrand.setDisabled(true);
        lstOtherModel.setDisabled(true);
        rdgIsSecondHand.setDisabled(true);
    }

    var trafficDate = {
        id: 'traffic_date',
        fieldLabel: 'Trafiğe çıkış tarihi',
        name: 'traffic_date',
        format: 'd.m.Y',
        invalidText: '{0} geçersiz bir tarihdir. Tarih formatı gg.aa.yyyy şeklinde olmalıdır.',
        editable: true,
        forceSelection: true,
        xtype: 'datefield',
        vtype: 'futuredate'
    }

    var kilometrage = {
        id: 'kilometrage',
        name: 'kilometrage',
        fieldLabel: 'Kilometre',
        maxLength: 10,
        xtype: 'textfield',
        regex: /^[0-9]{0,10}$/,
        regexText: 'Sadece rakam girmelisiniz.'
    }

    var fuelType = {
        id: 'fuel_type',
        name: 'fuel_type',
        hiddenName: 'fuel_type_id',
        fieldLabel: 'Yakıt Tipi',
        displayField: 'name',
        valueField: 'id',
        mode: 'local',
        triggerAction: 'all',
        editable: true,
        forceSelection: true,
        emptyText: '---seçiniz---',
        xtype: 'combo',
        store: new Ext.data.SimpleStore({
            fields: ['id', 'name'],
            data: params.fuelTypeList
        })
    }

    var licensePlate = {
        id: 'license_plate',
        name: 'license_plate',
        allowBlank: false,
        fieldLabel: 'Plaka<sup>*</sup>',
        maxLength: 30,
        xtype: 'textfield',
        vtype: 'alphanum'
    }

    var chasisNo = {
        id: 'chassis_no',
        name: 'chassis_no',
        fieldLabel: chasissLabel,
        maxLength: 50,
        xtype: 'textfield',
        vtype: 'alphanum',
        allowBlank: !chassisRequired
    }

    var engine = {
        id: 'engine',
        name: 'engine',
        fieldLabel: 'Motor',
        maxLength: 15,
        xtype: 'textfield',
        vtype: 'alphanum'
    }

    var modelYear = {
        id: 'model_year',
        name: 'model_year',
        fieldLabel: 'Model yılı<sup>*</sup>',
        allowBlank: false,
        displayField: 'id',
        valueField: 'id',
        mode: 'local',
        triggerAction: 'all',
        editable: true,
        forceSelection: true,
        emptyText: '---seçiniz---',
        xtype: 'combo',
        store: new Ext.data.SimpleStore({
            fields: ['id'],
            data: params.modelYearList
        })
    }


    var elements = [lstOtherBrand, lstOtherModel, modelYear, licensePlate, kilometrage]

    if (!inSet([ftAppointment])) {

        elements = [rdgIsSecondHand, lstOtherBrand, lstOtherModel, modelYear, licensePlate, engine, chasisNo, fuelType, kilometrage, trafficDate];

        var pnlOwnCar = new Ext.form.FieldSet({
            title: vehicleRequired ? 'Var Olan Aracınız' : 'Aracınız var mı?',
            autoHeight: true,
            autoWidth: true,
            collapsed: !vehicleRequired,
            checkboxToggle: !vehicleRequired,
            checkboxName: 'owncar',
            labelWidth: formLabelWidth - 11,
            id: 'owncar',
            defaults: {
                width: formEditorWidth,
                labelSeparator: ''
            },
            collapse: onOwnCarCollapse,
            expand: onOwnCarExpand,
            items: elements
        });
    }
    else {
        var pnlOwnCar = new Ext.form.FieldSet({
            title: 'Araç Bilgileri',
            autoHeight: true,
            autoWidth: true,
            defaultType: 'textField',
            labelWidth: formLabelWidth - 11,
            id: 'owncar',
            defaults: {
                width: formEditorWidth,
                labelSeparator: ''
            },
            items: elements
        });

        pnlOwnCar.disable = false;
        pnlOwnCar.enable();
        pnlOwnCar.show();
        pnlOwnCar.setVisible(true);
    }

    fields.push(pnlOwnCar);

    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: '* Bu formda belirtmiş olduğum konu hakkında bilgilenmem için, ' +
            params.siteBrand +
            " Şube ve Yetkili Servisi'nin beni arayarak ticari iletişimde bulunmasını kabul ediyorum."
    });

    var pnlNote = new Ext.form.Label({
        text: "Not : *  doldurulması zorunlu alanlar"
    })

    fields.push(pnlNote);


    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() {
                    document.location = action.result.redirect;
                });
            },
            failure: function(form, action) {
                showError(action.result.error);
            },
            params: {
                ajax_cmd: 'submit',
                ajax_target: params.container
            },
            waitMsg: 'Lütfen bekleyiniz...'
        });
    };

    var btnText = params.formCaption;
    if (isAppointment)
        btnText = 'Randevu Al';

    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: btnText,
            handler: onSubmit,
            formBind: true
}]
        });

        /*if (params.formValues)
        {
        frm.getForm().setValues(params.formValues);        
        lstCityIDSelect();
        lstOtherBrandSelect();
        //pnlOwnCar.setChecked(true);
        CommunicationForm_Form = frm;
        CommunicationForm_Params = params;
        window.setTimeout("CommunicationForm_Form.getForm().setValues(CommunicationForm_Params.formValues);", 500);
        }*/

       

        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: '5324567890 gibi alan koduyla sadece rakam olarak giriniz.' });
        new Ext.ToolTip({ target: 'work_phone', html: '2123456789 gibi alan koduyla sadece rakam olarak giriniz.' });
        new Ext.ToolTip({ target: 'home_phone', html: '2164561223 gibi alan koduyla sadece rakam olarak giriniz.' });

        Ext.util.CSS.swapStyleSheet('theme', document.URL.substr(0, document.URL.lastIndexOf("/") + 1) + "zip.axd/js/ext.zip/xtheme-gray.css");
    };