var errors, oStore;

function getCommonName(str) {
    var CNpos = str.indexOf("CN=");
    if (CNpos >= 0) {
        var CName = str.substring(CNpos + 3, str.length);
        var Commapos = CName.indexOf(",");
        if (Commapos >= 0) {
            return CName.substring(0, Commapos);
        }
        return CName;
    }
    return "";
}
function getG(str) {
    var Gpos = str.indexOf("G=");
    if (Gpos >= 0) {
        var Gname = str.substring(Gpos + 2, str.length);
        var Commapos = Gname.indexOf(",");
        if (Commapos >= 0) {
            return Gname.substring(0, Commapos);
        }
        return Gname;
    }
    return "";
}
function getT(str) {
    var Tpos = str.indexOf(" T=");
    if (Tpos >= 0) {
        var Tname = str.substring(Tpos + 3, str.length);
        var Commapos = Tname.indexOf(",");
        if (Commapos >= 0) {
            return Tname.substring(0, Commapos);
        }
        return Tname;
    }
    return "";
}
function getEmail(str) {
    var Epos = str.indexOf("E=");
    if (Epos >= 0) {
        var Email = str.substring(Epos + 2, str.length);
        var Commapos = Email.indexOf(",");
        if (Commapos >= 0) {
            return Email.substring(0, Commapos);
        }
        return Email;
    }
    return "";
}
function getSecondName(str) {
    var SNpos = str.indexOf("SN=");
    if (SNpos >= 0) {
        var Sname = str.substring(SNpos + 3, str.length);
        var Commapos = Sname.indexOf(",");
        if (Commapos >= 0) {
            return Sname.substring(0, Commapos);
        }
        return Sname;
    }
    return "";
}
function getINN(str){
    var CNpos = str.indexOf("ИНН=");
    if (CNpos >= 0){
        var CName = str.substring(CNpos+4, str.length);
        var Commapos = CName.indexOf(",");
        if (Commapos >= 0){
            return CName.substring(0,Commapos);
        }
        return CName;
    }
    return "";
}
function getOGRN(str){
    var CNpos = str.indexOf("ОГРН=");
    if (CNpos >= 0){
        var CName = str.substring(CNpos+5, str.length);
        var Commapos = CName.indexOf(",");
        if (Commapos >= 0){
            return CName.substring(0,Commapos);
        }
        return CName;
    }
    return "";
}

function objCreator(name) {
    if (document.getElementById("IeDetector")) {
        return new ActiveXObject(name);
    } else {
        var cadesobject = document.getElementById('cadesplugin');
        return cadesobject.CreateObject(name);
    }
}
function selectCert(){
    var userCert = {},
        CAPICOM_CURRENT_USER_STORE = 2,
        CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED = 2,
        CAPICOM_ROOT_STORE = 'My'; //Коллекция ЛИЧНЫХ сертификатов
    try{
        //oStore = objCreator('CAdESCOM.Store');
        oStore = objCreator('CAPICOM.Store');
        oStore.Open(CAPICOM_CURRENT_USER_STORE, CAPICOM_ROOT_STORE, CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED);
        var Certificates = oStore.Certificates;
        userCert = Certificates.Select('Список', 'Выберите сертификат из хранилища "Личные"', false);
        if(userCert.Count == 0) return false;
        else return userCert.Item(1);
    } catch (e){}
    return false;
}
function completeForm(){
    var userCert = selectCert();
    if(userCert && userCert.SubjectName){
        var CN = getCommonName(userCert.SubjectName);
        if(CN) document.getElementsByName("orgName")[0].value = CN;

        var ogrn = getOGRN(userCert.SubjectName);
        if(ogrn) document.getElementsByName("ogrn")[0].value = ogrn;

        var inn = getINN(userCert.SubjectName);
        if(inn.length > 10 && inn.substring(0, 2) == "00") inn = inn.substring(2, inn.length);
        if(inn) document.getElementsByName("inn")[0].value = inn;

        var position = getT(userCert.SubjectName);
        if(position) document.getElementsByName("position")[0].value = position;

        var SN = getSecondName(userCert.SubjectName), G = getG(userCert.SubjectName);
        if(SN && G) document.getElementsByName("fio")[0].value = (SN + " " + G).trim();

        var email = getEmail(userCert.SubjectName);
        if(email) document.getElementsByName("email")[0].value = email;
    } else {
        alert("Сертификат не выбран");
    }
}

function reloadCaptcha() {
    $("#captcha").attr("src", "/captcha.php?" + new Date().getTime());
}
function showError(errorId, errorText) {
    $('#' + errorId).text(errorText);
    $('#' + errorId).show();
    errors = true;
}
function hideError(errorId) {
    $('#' + errorId).hide();
}
if (typeof String.prototype.trim !== 'function') {
    String.prototype.trim = function () {
        return this.replace(/^\s+|\s+$/g, '');
    }
}
$('document').ready(function () {
    if(jQuery.browser['msie']) $("#autoComplete").show();
    var captcha = $('input[name=captcha]', 'form'),
        inn = $('input[name=inn]', 'form'),
        ogrn = $('input[name=ogrn]', 'form'),
        email = $('input[name=email]', 'form'),
        fio = $('input[name=fio]', 'form'),
        orgName = $('input[name=orgName]', 'form');

    $("form").find(":input").each(function () {
        $(this).focus(function () {
            hideError($(this).attr("name") + 'Error');
            $(this).css('border', 'gray 1px solid');
        });
    });

    inn.blur(function () {
        var innV = inn.val().trim();
        if (innV.length == 0 || (/^\d{10}$/.exec(innV) == null)) {
            showError('innError', 'Поле ИНН должно содержать 10 цифр без пробелов и дефисов');
            return false;
        }
        var inputNumber = innV + '';
        //преобразуем в массив
        inputNumber = inputNumber.split('');
        //для ИНН в 10 знаков
        if ((inputNumber[9] == ((2 * inputNumber[0] + 4 * inputNumber[1] + 10 * inputNumber[2] + 3 * inputNumber[3] + 5 * inputNumber[4] + 9 * inputNumber[5] + 4 * inputNumber[6] + 6 * inputNumber[7] + 8 * inputNumber[8]) % 11) % 10)) {
            return true;
        } else {
            showError('innError', 'Проверьте правильность введенного значения')
        }
    });

    ogrn.blur(function () {
        var ogrnV = ogrn.val().trim();
        if (ogrnV.length == 0 || (/^\d{13}$/.exec(ogrnV) == null)) {
            showError('ogrnError', 'Поле ОГРН должно содержать 13 цифр без пробелов и дефисов');
            return false;
        }
        if (parseInt((ogrnV.slice(12, 13))) != (parseInt(ogrnV.slice(0, 12)) % 11) % 10) {
            showError('ogrnError', 'Проверьте правильность введенного значения');
        }
    });

    email.blur(function () {
        var emailV = email.val().trim();
        if (/^[0-9a-z_\-\.]+@[0-9a-z_\-\.]+\.[a-z]{2,3}$/i.exec(emailV) == null && emailV.length != 0) showError('emailError', 'Проверьте правильность введенного адреса электронной почты');
    });

    fio.blur(function () {
        var fioV = fio.val().trim();
        if (/^[а-яА-ЯёЁ\s-]+$/i.exec(fioV) == null && fioV.length != 0) showError('fioError', 'Проверьте правильность введенного ФИО');
    });

    $('#refresh_captcha').click(function () {
        reloadCaptcha();
    });

    $('input[name=mailType]', 'form').change(function () {
        if ($(this).val() == 'mail') {
            $('input[name=subRf]', 'form').prop("disabled", false);
            $('input[name=address]', 'form').prop("disabled", false);
            $('input[name=city]', 'form').prop("disabled", false);
            $('input[name=postcode]', 'form').prop("disabled", false);
            $('input[name=email]', 'form').prop("disabled", true);
            $('input[name=email]', 'form').css('border', 'gray 1px solid');
        } else {
            $('input[name=subRf]', 'form').prop("disabled", true);
            $('input[name=address]', 'form').prop("disabled", true);
            $('input[name=address]', 'form').css('border', 'gray 1px solid');
            $('input[name=city]', 'form').prop("disabled", true);
            $('input[name=city]', 'form').css('border', 'gray 1px solid');
            $('input[name=postcode]', 'form').prop("disabled", true);
            $('input[name=postcode]', 'form').css('border', 'gray 1px solid');
            $('input[name=email]', 'form').prop("disabled", false);
        }
    });

    //disable enter key submit
    function stopRKey(evt) {
        var evt = (evt) ? evt : ((event) ? event : null);
        var node = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null);
        if ((evt.keyCode == 13) && ((node.type!="textarea")) )  {return false;}
    }
    document.onkeypress = stopRKey;

    $('form').submit(function () {
        errors = false;
        var incorrectCaptcha = false;

        if ($('input[name=mailType]:checked', 'form').val() == 'mail') {
            var field = new Array("orgName", "inn", "ogrn", "position", "fio", "request", "address", "city", "postcode", "captcha");
            var postcode = $('input[name=postcode]', 'form').val(),
                address = $('input[name=address]', 'form').val(),
                city = $('input[name=city]', 'form').val();
            if (/^\d{6}$/.exec(postcode) == null && postcode.length != 0) showError('postcodeError', 'Поле "Индекс" должно содержать 6 цифр без пробелов и дефисов');
            if (address.length == 1) showError('addressError', 'Данное поле должно содержать больше 1 символа');
            if (city.length == 1) showError('cityError', 'Данное поле должно содержать больше 1 символа');

        } else {
            var field = new Array("orgName", "inn", "ogrn", "position", "fio", "request", "email", "captcha");
            var email = $('input[name=email]', 'form').val();
            if (/^[0-9a-z_\-\.]+@[0-9a-z_\-\.]+\.[a-z]{2,3}$/i.exec(email) == null && email.length != 0) showError('emailError', 'Проверьте правильность введенного адреса электронной почты');
        }

        $("form").find(":input").each(function () {
            for (var i = 0; i < field.length; i++) {
                if ($(this).attr("name") == field[i]) {
                    if (!$(this).val()) {
                        $(this).css('border', 'red 1px solid');
                        errors = true;
                    }
                    if (field[i] == "captcha" && !$(this).val()) {
                        incorrectCaptcha = true;
                    }
                }
            }
        })

        var captcha = $('#captcha_pass').val(),
            inn = $('input[name=inn]', 'form').val(),
            ogrn = $('input[name=ogrn]', 'form').val(),
            fio = $('input[name=fio]', 'form').val(),
            orgName = $('input[name=orgName]', 'form').val(),
            position = $('input[name=position]', 'form').val();

        if (/^\d{6}$/.exec(captcha) == null && captcha.length != 0) {
            showError('captchaError', 'Поле "Цифры с картинки" должно содержать 6 цифр без пробелов и дефисов');
            incorrectCaptcha = true;
        }

        if (orgName.length == 1) showError('orgNameError', 'Данное поле должно содержать больше 1 символа');
        if (position.length == 1) showError('positionError', 'Данное поле должно содержать больше 1 символа');
        if (/^\d{10}$/.exec(inn) == null && inn.length != 0) showError('innError', 'Поле ИНН должно содержать 10 цифр без пробелов и дефисов');
        if (/^\d{13}$/.exec(ogrn) == null && ogrn.length != 0) showError('ogrnError', 'Поле ОГРН должно содержать 13 цифр без пробелов и дефисов');

        if (/^[а-яА-ЯёЁ\s-]+$/i.exec(fio) == null && fio.length != 0) showError('fioError', 'Проверьте правильность введенного ФИО');

        if (!incorrectCaptcha) {
            $.ajax({
                url: '/supportController.php',
                type: 'POST',
                data: "captcha_pass=" + captcha,
                dataType: 'json',
                async: false,
                success: function (ajaxResponse) {
                    if (!ajaxResponse['success']) {
                        showError('captchaError', 'Цифры с картинки введены неверно');
                    }
                }
            })
        }

        if (errors) {
            reloadCaptcha();
            return false;
        }

        $('#doSave').attr("disabled", "true").addClass('blue_button_disabled').removeClass('blue_button'); //disable button
        return true;
    })
});