﻿var BindingEntity = function(options) {

    /*options = 
    {
    MinimumNumber:1,
    MaximumNumber: 10000000,
    FormId: "testForm",
    ErrorIdPrefix: "topErr",
    StarIdPrefix: "star",
    PostItemName: "Order",
    ConfirmText: "Сохранить изменения в ТОП?",
    ListName  : "listTop"
    }*/
    this.IsChangeNotSave = false;
    this.IsConfirmed = false;
    this.RegNum = new RegExp('^(\\d{1,})$');

    this.Change = function(id, index) {
        this.IsChangeNotSave = true;
        var val = $('input[name="' + options.ListName + '[' + index + '].' + options.PostItemName + '"]').val();

        var spanStart = $('span[id="' + options.StarIdPrefix + id + '"]');
        var spanError = $('span[id="' + options.ErrorIdPrefix + id + '"]');
        if (val == '' || (this.RegNum.test(val) && parseInt(val, 10) >= options.MinimumNumber && parseInt(val, 10) <= options.MaximumNumber)) {
            $(spanStart).show();
            $(spanError).hide();
        }
        else {
            $(spanError).html('<font style="color: Red;">Введите число от ' + options.MinimumNumber + ' до ' + options.MaximumNumber + '</font>');
            $(spanError).show();
        }
    }

    this.Save = function() {
        if (this.IsValid()) {
            this.IsChangeNotSave = false;
            var form = $('form[id="' + options.FormId + '"]')[0];
            if (options.FormAction != form.action) {
                form.action = options.FormAction;
                form.submit();
            }

        }
    }

    this.IsValid = function() {
        var res = true;
        var regex = this.RegNum;
        // validate all TOP numbers
        var list = $('input[name^="' + options.ListName + '"][type="text"][name $= "' + options.PostItemName + '"]');
        $(list).each(function(i, order) {
            var val = $(order).val();
            if ((val != '' && !regex.test(val)) || (parseInt(val, 10) < options.MinimumNumber || parseInt(val, 10) > options.MaximumNumber))
                res = false;
        });
        return res;
    }

    this.IsCanPage = function(isConfirm) {
        if (this.IsChangeNotSave) {
            if (isConfirm) {
                this.IsConfirmed = true;
                var isSave = confirm(options.ConfirmText);

                if (isSave) {
                    this.Save();
                    return false;
                }
                else
                    this.IsChangeNotSave = false;
            }
            else
                this.IsChangeNotSave = false;
        }
        return !this.IsChangeNotSave;
    }
}


oCompanyCatalog = function(urlTop, urlGetP, urlSetP) {
    this.UrlTop = urlTop;
    this.UrlGetP = urlGetP;
    this.UrlSetP = urlSetP;
    this.IdPopUpP = "#popUpPremium";
    window.CompanyCatalog = this;
    this.SetTop = function(id, o) {
        var isTop = o.checked;
        $.ajax({
            type: 'POST',
            url: this.UrlTop,
            data: { userId: id, isTop: isTop },
            dataType: 'json',
            success: function(data) {
                if (!data) {
                    alert(isTop ? "Компания установлена как топовая!" : "Компания удалена из спика топ-компаний!");
                    location.href = location.href;

                } else {
                    alert("Компания не может быть установлена как топовая!");
                    o.checked = !o.checked;
                }
            }
        })
    };
    this.PremiumHide = function() {
        $(this.IdPopUpP).remove();
        this.PremiumId = null;
    };
    this.PremiumShow = function(id) {
        $.ajax({
            type: 'POST',
            url: this.UrlGetP,
            data: { userId: id },
            dataType: 'html',
            success: function(data) {
                CompanyCatalog.PremiumHide();
                CompanyCatalog.PremiumId = id;
                $("body").append(data);
                $(document).ready(function() { $("#iStartDate").click(calendarFix); $("#iFinalDate").click(calendarFix); })
            }
        });
    }
    this.PremiumSave = function() {
        if (this.PremiumId) {
            $.ajax({
                type: 'POST',
                url: this.UrlSetP,
                data: { userId: this.PremiumId, dateStart: $("#StartDate").val(), dateEnd: $("#FinalDate").val() },
                dataType: 'html',
                success: function(data) {
                    CompanyCatalog.PremiumHide();
                    CompanyCatalog.PremiumId = null;
                    alert("Компания установлена как премиум!");
                    location.href = location.href;
                }
            });
            this.PremiumId = null;
        }
    }
    this.SetToolTip = function(tooltip, o) {
        if (!o.hastip) {
            ShowToolTip($(o), tooltip, 'tooltipfilter ' + o.id);
            var e = $('div[class="tooltipfilter ' + o.id + ' fixed"]');
            e.remove();
            $("body").append(e);
            $(o).simpletip().show()
            o.hastip = true;
        }
    }
    this.GoTo = function(url) {
        location.href = url;
    }
}


oOrderService = function(cntUrl, saveUrl) {
    this.CntrUrl = cntUrl;
    this.SaveUrl = saveUrl;
    this.GetImageCaptcha = oCommentsItem.prototype.GetImageCaptcha;
    this.Data = new Object();
    this.Elm = "#OrderServiceId";
    wOrderService = this;

    this.Hide = function() {
        $(this.Elm).remove();
        wOrderService.Data.CompanyTypeId = null;
        wOrderService.Data.CompanyImage = null;
    };

    this.GetData = function() {
        var list = $(this.Elm).find("[name^=Order.]");
        validationRules.beginErrGroup();
        list.change();
        if (validationRules.endErrGroup())
            return false;
        list.each(function(i, e) { wOrderService.Data[e.name.replace("Order.", "")] = $(e).val(); });
        if ($(this.Elm).find("[name=Captch.ImageNumber]").length > 0)
            this.Data.Captch.ImageNumber = $(this.Elm).find("[name=Captch.ImageNumber]").val();
        return true;
    };

    this.Show = function(id, companyImage) {
        this.Data.CompanyTypeId = id;
        this.Data.CompanyImage = companyImage;
        $.ajax({
            type: 'POST',
            url: this.CntrUrl,
            data: this.Data,
            dataType: 'html',
            success: function(data) {
                $(wOrderService.Elm).remove();
                $("body").append(data);
                $(document).ready(function() {
                    validationRules.Prepare();
                });
            }
        });
    }

    this.Save = function() {
        if (this.GetData())
            $.ajax({
                type: 'POST',
                url: this.SaveUrl,
                data: $.toJSON({ model: this.Data }),
                dataType: 'json',
                contentType: "application/json; charset=utf-8",
                success: function(data) {
                    if (data.d.IsSuccess) {
                        alert("Ваш заказ обрабатывается. Ожидайте, когда с вами свяжутся представители компании!");
                        wOrderService.Hide();
                        wOrderService.Data.CompanyTypeId = null;
                        wOrderService.Data.CompanyImage = null;
                    }
                    else {
                        if (data.d.Param && data.d.Param > ' ') {
                            wOrderService.CaptchUrl = data.d.Param;
                            wOrderService.GetImageCaptcha();
                        }
                        if (data.d.OutMessage && data.d.OutMessage > ' ')
                            alert(data.d.OutMessage);
                    }
                }
            })
    };
}

oConpanyTypeEmails = function(updtUrl) {
    this.UpdateUrl = updtUrl;
    wConpanyTypeEmails = this;

    this.GetData = function(id) {
        var list = $("#email" + id);
        validationRules.beginErrGroup();
        list.change();
        if (validationRules.endErrGroup())
            return false;
        return true;
    };

    this.Edit = function(id) {
        $("#email" + id).attr("disabled", "");
        $("#save" + id).show();
        $("#cnsl" + id).show();
        $("#edit" + id).hide();
    }

    this.Cansel = function(id) {
        $("#email" + id).attr("disabled", "disabled");
        $("#save" + id).hide();
        $("#cnsl" + id).hide();
        $("#edit" + id).show();
    }

    this.Save = function(id) {
        if (this.GetData(id))
            $.ajax({
                type: 'POST',
                url: this.UpdateUrl,
                data: { id: id, email: $("#email" + id).val() },
                dataType: 'json',
                success: function(data) {
                    wConpanyTypeEmails.Cansel(id);
                }
            })
    };
}

oConpanyTypeEmails = function(updtUrl) {
    this.UpdateUrl = updtUrl;
    wConpanyTypeEmails = this;

    this.GetData = function(id) {
        var list = $("#email" + id);
        validationRules.beginErrGroup();
        list.change();
        if (validationRules.endErrGroup())
            return false;
        return true;
    };

    this.Edit = function(id) {
        $("#email" + id).attr("disabled", "");
        $("#save" + id).show();
        $("#cnsl" + id).show();
        $("#edit" + id).hide();
    }

    this.Cansel = function(id) {
        $("#email" + id).attr("disabled", "disabled");
        $("#save" + id).hide();
        $("#cnsl" + id).hide();
        $("#edit" + id).show();
    }

    this.Save = function(id) {
        if (this.GetData(id))
            $.ajax({
                type: 'POST',
                url: this.UpdateUrl,
                data: { id: id, email: $("#email" + id).val() },
                dataType: 'json',
                success: function(data) {
                    wConpanyTypeEmails.Cansel(id);
                }
            })
    };
}

oBanks4Admin = function(updtUrl, imgDir) {
    this.UpdateUrl = updtUrl;
    this.ImgDir = imgDir;
    wBanks4Admin = this;
    this.CountAdded = 0;
    this.Table = "#tbBanks";
    this.ParseList = [{ name: "Name", parseC: "value" },
                      { name: "Image", parseC: "value" },
                      { name: "FakeId", parseV: "toInt" },
                      { name: "CreditRate", parseV: "toDecimal", maxV: 100, dec: 2 },
                      { name: "Description", parseC: "value" },
                      { name: "Period", parseV: "toDecimal", maxV: 100, dec: 1 },
                      { name: "FirstPayment", parseV: "toDecimal", maxV: 100, dec: 2 },
                      { name: "Main", parseC: "checked"}]

    this.GetData = function() {
        var list = $(this.Table + " input");
        validationRules.beginErrGroup();
        list.change();
        if (validationRules.endErrGroup())
            return null;
        var list = $(this.Table).find("[id^='Image']");
        if (list.length > list.has("img").length) {
            alert('Не заполнено поле "Логотип банка" !')
            return null;
        }
        var data = new Array();
        var alrt = "";
        $(this.Table + " tr[id^=cmp_]").each(function(i, e) {
            var elm = { Id: e.id.replace("cmp_", "").toInt() };
            data.push(elm);
            $(wBanks4Admin.ParseList).each(function(j, x) {
                var y = $(e).find("input[name=" + x.name + "]")[0];
                elm[x.name] = x.parseC ? y[x.parseC] : y.value[x.parseV]();
                if (x.maxV && elm[x.name] > x.maxV) {
                    alrt += "Значение не может быть болше " + x.maxV + "!\n";
                    y.focus();
                } else if (x.dec) {
                    y.value = elm[x.name].toFixed(x.dec);
                    elm[x.name] = y.value.toDecimal();
                }

            });

        });
        if (alrt > " ") {
            alert(alrt);
            return null;
        }
        return data.length > 0 ? data : null;
    };

    this.SetMain = function(o) {
        var table = o.parentNode.parentNode.parentNode;
        if ($(table).find("tr").length > 2) {
            var e = $(table).find("tr")[1];
            var oo = o.parentNode.parentNode;
            if (oo == e)
                return
            $(e).find("input[type=checkbox]")[0].checked = false;
            table.removeChild(e);
            table.insertBefore(e, oo);
            table.removeChild(oo);
            table.insertBefore(oo, $(table).find("tr")[1]);
        }
    };

    this.ImageControl = function(bankId, o, fakeId) {
        $(document).ready(function() {
            $(o).uploadify({
                buttonImg: "http://img.address.ua/img/a_plus.png",
                cancelImg: "http://img.address.ua/img/1x1.gif",
                fileDesc: "Файлы изображений (*.gif, *.jpg, *.jpeg, *.png)",
                fileExt: "*.gif;*.jpg;*.jpeg;*.png",
                multi: false,
                auto: true,
                queueID: "imgQueue",
                sizeLimit: 5242880,
                script: "/soobshestvo/UploadImages/?fakeid=" + fakeId,
                scriptData: { fileDir: wBanks4Admin.ImgDir + "/Fake", isWithWatermark: false },
                uploader: "/img/uploadify.swf",
                height: 15,
                width: 16,
                onSelect: pleaseWait.Show,
                onComplete: function(event, id, obj, response) {
                    var t = new Date();
                    pleaseWait.Hide(); $("#Image" + bankId).html("<img src='" + response + "?" + t.getMilliseconds() + "' alt='uploaded' />");
                }
            });
        });
    };

    this.Delete = function(id) {
        $(this.Table + " #cmp_" + id).remove();
    };

    this.Save = function() {
        var data = this.GetData();
        if (data != null)
            $.ajax({
                type: 'POST',
                url: this.UpdateUrl,
                data: $.toJSON({ banks: data }),
                contentType: "application/json; charset=utf-8",
                success: function() {
                    alert("Данные о банках сохранены!");
                    location.href = location.href;
                }
            })
    };

    this.AddBank = function() {
        this.CountAdded--;
        var t = new Date();
        var fakeId = (t.getDate() % 10) * 88400000 + t.getHours() * 3600000 + t.getMinutes() * 60000 + t.getSeconds() * 100 + t.getMilliseconds();
        $(this.Table).append('<tr id="cmp_' + this.CountAdded + '"> <td><input type="text" validation = "Length" length="255" validation1="notempty" name="Name" /></td><td><input type="hidden" name="Image" value=""/><input type="hidden" name="FakeId" value="' + fakeId + '"/><div id="Image' + this.CountAdded + '"></div><input type="file" id="fileUpl' + this.CountAdded + '" style="display:none;" /></td><td><input type="text" maxlength="5" validation = "onlydecimal" validation1="notempty" name="CreditRate" /></td><td><input type="text" value="" maxlength="100"  name="Description" /></td><td><input type="text" maxlength="4" validation = "onlynumeric" validation1="notempty" name="Period" /></td><td><input type="text" maxlength="5" validation = "onlydecimal" validation1="notempty"  name="FirstPayment" /></td><td><input type="checkbox" name="Main" onclick="wBanks4Admin.SetMain(this);"/></td><td><img src="http://img.address.ua/img/delete.gif" onclick="wBanks4Admin.Delete(<%=item.Id %>);" title="Удалить" alt="удалить"/></td></tr>');
        this.ImageControl(this.CountAdded, "#fileUpl" + this.CountAdded, fakeId);
        $(document).ready(validationRules.Prepare);
    };
}
