﻿(function ($) {

    var vendorsDb = {};
    var isInit = false;

    var methods = {
        init: function (data) {
            if (data.route != null) {
                $.getJSON(data.route, null, function (ret) {
                    vendorsDb = ret;
                });
            }
            else {
                vendorsDb = data;
            }
        },
        get: function (item, type, status, data) {
            return GetVendors(item, type, status, data);
        },

        getVendorById: function (id) {
            ret = null;
            //alert(id);
            $.each(vendorsDb.Vendors, function (i, vendor) {
                //alert(vendor.Id);
                if (vendor.Id == id)
                    ret = vendor;
            });

            return ret;
        },
        writeReview: function (id, isLogged) {


            RenderWriteReview(id);


        },
        open: function (item, type, status, jsonData) {

            var data = jsonData;

            var vendors = GetVendors(item, type, status, data);

            if (vendors == null)
                return;

            if (vendors.length == 1) {
                var a_url = vendors[0].RedirectUrl;

                if (a_url.indexOf("%domain%") != -1) {
                    a_url = a_url.replace("%domain%", item);
                }



                window.open(a_url);
                TE('/search/buy/redirect/' + vendors[0].Status + "/" + vendors[0].Id);
                ShowThanksPage(item, vendors[0]);

                Feedback($("#searchBoxResults").val(), item, vendors[0].Status, vendors[0].Id);

                return;
            }

            //var popup = $('<div style="display:none"><div id="__vendors_box" class="nuance"><div class="titleRegistrar"><h2>You have found a great domain. Now choose your registrar to get it!</h2></div> </div></div>');



            var popup = $('<div style="display:none"></div>');

            popup.viewManager("get", "dealsPage", { model: { Vendors: vendors, ShowDeals: (status == "forsale" ? false : true)} });

            popup.appendTo('body');


            popup.find('a[bind="buyAction"]').click(function () {

                var t_ven = $().Vendors("getVendorById", $(this).attr("vendorId"));

                var r_url = t_ven.RedirectUrl;

                if (r_url.indexOf("%domain%") != -1) {
                    r_url = r_url.replace("%domain%", item);
                }


                window.open(r_url);
                TE('/search/buy/redirect/' + t_ven.Status + "/" + t_ven.Id);

                ShowThanksPage(item, t_ven);
                Feedback($("#searchBoxResults").val(), item, t_ven.Status, t_ven.Id);
                return;
            });

            /*$.each(vendors, function (i, vendor) {

            var regLink = $('<a><img src="' + vendor.LogoUrl + '" alt="' + vendor.Name + '" vendorId="' + vendor.Id + '" /></a>');

            regLink.click(function () {

            var t_ven = $().Vendors("getVendorById", $(this).find("img").attr("vendorId"));

            var r_url = t_ven.RedirectUrl;

            if (r_url.indexOf("%domain%") != -1) {
            r_url = r_url.replace("%domain%", item);
            }


            window.open(r_url);
            TE('/search/buy/redirect/' + vendor.Status + "/" + vendor.Id);
            ShowThanksPage(item, t_ven);
            return;
            });
            var ven_v = $('<div style="width:220px;float:left; height:148px"></div>');
            var ven_a = $('<div class="loghi_registrar"></div>');
            ven_a.appendTo(ven_v);
            regLink.appendTo(ven_a);
            if (vendor.Deal != "") {
            var deal = $("<div><span style='font-size:xx-small;color:grey; margin-left:5px'>" + vendor.Deal + "</span></div>");
            deal.appendTo(ven_v);
            }


            $("#__vendors_box").append(ven_v);

            });*/



            if (type == "domain" && status == "available") {
                RenderCheckAvailable(item);

                $.getJSON("/Results/IsDomainAvailable?domain=" + item, function (res) {
                    //alert(res);
                    //alert(res.Status);
                    if (res.Success == true && res.IsFinal == true && res.Status == "registered") {
                        alert("We are sorry but the domain you selected is not available anymore");
                        TE("/search/buy/notavailablecheck");
                    }
                    else {
                        //$.fancybox.close();

                        RenderChooseVendors(popup);
                        TE("/search/buy/vendors/show");
                    }
                });
            }
            else {
                RenderChooseVendors(popup);
                TE("/search/buy/vendors/show");
            }


        }

    };


    $.fn.Vendors = function (method) {
        if (methods[method]) {


            return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
        } else if (typeof method === 'object' || !method) {
            return methods.init.apply(this, arguments);
        } else {
            $.error('Method ' + method + ' does not exist on jQuery.Vendor');
        }
    };

    function RenderChooseVendors(popup) {
        $("#__vendors_box").append($('<div class="dragger"></div>'));


        var dummy_a = $('<a href="#__vendors_box"></a>');

        dummy_a.css("display", "none");
        dummy_a.appendTo('body');

        $(dummy_a).fancybox({
            'hideOnContentClick': false,
            'onClosed': function () {

                popup.html = "";
                popup.remove();

                dummy_a.remove();

            },
            'titlePosition': 'inside',
            'transitionIn': 'none',
            'transitionOut': 'none'
        });

        $(dummy_a).click();
        $("#fancybox-wrap").width($("#fancybox-wrap").width() - 20);
        $("#fancybox-content").css("border-width", "0px");

        $("#fancybox-outer").addClass("roundcorners-5px");
        $("#fancybox-outer").addClass("radius_5");

        $("#__vendors_box").addClass("roundcorners-5px");
        $("#__vendors_box").addClass("radius_5");
    };

    function RenderCheckAvailable(domain) {

        var popup = $('<div style="display:none"><div id="__check_available">Checking....</div></div>');

        popup.appendTo('body');
        var dummy_a = $('<a href="#__check_available"></a>');

        dummy_a.css("display", "none");
        dummy_a.appendTo('body');

        $(dummy_a).fancybox({
            'hideOnContentClick': false,
            'onClosed': function () {
                popup.remove();
                dummy_a.remove();

            },
            'titlePosition': 'inside',
            'transitionIn': 'none',
            'transitionOut': 'none'
        });

        $(dummy_a).click();
        $("#fancybox-wrap").width($("#fancybox-wrap").width() - 20);
        $("#fancybox-content").css("border-width", "0px");

        $("#fancybox-outer").addClass("roundcorners-5px");
        $("#fancybox-outer").addClass("radius_5");

        $("#__vendors_box").addClass("roundcorners-5px");
        $("#__vendors_box").addClass("radius_5");
    };

    // {Id, Name, LogoUrl, Type, Status, RedirectUrl }
    function GetVendors(item, type, status, data) {
        var ret = new Array();

        if (type == "domain" && status == "forsale") {


            var selectedVendors = data;

            $.each(vendorsDb.Vendors, function (i, vendor) {
                if (vendor.Type == type && vendor.Status == status && $.inArray(vendor.Id, selectedVendors) > -1)
                    ret.push(vendor);
            });
            //alert(ret.length);
        }
        else {

            $.each(vendorsDb.Vendors, function (i, vendor) {
                //alert(type + " " + status);
                if (vendor.Type == type && vendor.Status == status) {
                    ret.push(vendor);
                }
            });

        }
        if (ret.length == 0)
            return null;
        return ret;

    };

    function ShowThanksPage(domain, vendor) {
        $("#__vendors_box").remove();
        var popup = $('<div style="display:none"><div id="__thanks_page" ></div></div>');
        popup.appendTo('body');
        $("#__thanks_page").viewManager("get", "thankspage", { model: { Name: domain, Vendor: vendor} });
        var dummy_a = $('<a href="#__thanks_page"></a>');
        dummy_a.css("display", "none");
        dummy_a.appendTo('body');

        $(dummy_a).fancybox({
            'hideOnContentClick': false,
            'onClosed': function () {
                popup.remove();
                dummy_a.remove();
            }
        });


        $('a[bind="thanks"][name="fb"]').click(function () {
            //$.fancybox.close();

            $("body").scrollTop(0);
            FB.ui({ method: 'feed',

                link: 'http://www.domainsbot.com',
                display: 'popup',
                method: 'feed',
                name: 'DomainsBot',
                picture: 'http://www.domainsbot.com/Content/img/logo.jpg',
                caption: 'I have just found an awesome domain using DomainsBot!'
            });
            TE('/search/buy/share/dialog/facebook');
        });

        $(dummy_a).click();

        TE('/search/buy/share/dialog');
    }

    function RenderWriteReview(id) {

        var popup = $('<div style="display:none"><div id="__write_review_form" ></div></div>');

        popup.appendTo('body');
        $("#__write_review_form").viewManager("get", "writereview", null);


        $('input.star').rating();
        $.watermarker.setDefaults({ fallback: true });
        $('input[bind="ratearegistrar"][name="nicknamebox"]').watermark();

        var dummy_a = $('<a href="#__write_review_form"></a>');
        dummy_a.css("display", "none");
        dummy_a.appendTo('body');

        $(dummy_a).fancybox({
            'hideOnContentClick': false,
            'onClosed': function () {
                popup.remove();
                dummy_a.remove();
            }
        });


        $('a[bind="ratearegistrar"][name="send"]').click(function () {

            var t = $('textarea[bind="ratearegistrar"][name="reviewbox"]').val();
            var _title = $('input[bind="ratearegistrar"][name="titlebox"]').val();
            var nick = $('input[bind="ratearegistrar"][name="nicknamebox"]').val();

            var easeVal = FindRadioValue($('input[type="radio"][name="reviewEase"]'));
            var offeringsVal = FindRadioValue($('input[type="radio"][name="reviewOfferings"]'));
            var priceVal = FindRadioValue($('input[type="radio"][name="reviewPrice"]'));
            var servicesVal = FindRadioValue($('input[type="radio"][name="reviewServices"]'));

            $('a[bind="ratearegistrar"][name="send"]').css("display", "none");
            $('img[bind="ratearegistrar"][name="send_loading"]').css("display", "block");

            if (t == "" || _title == "" || nick == "") {
                $('a[bind="ratearegistrar"][name="send"]').css("display", "block");
                $('img[bind="ratearegistrar"][name="send_loading"]').css("display", "none");
                return;
            }

            $.post("/RateARegistrar/SubmitReview", { id: id, ease: easeVal, offerings: offeringsVal, price: priceVal, services: servicesVal, nickname: nick, text: t, title: _title }, function (res) {

                if (res.Success) {

                    alert("Your are done! Your review is pending for approval by our staff");
                    TE('/RateARegistrar/SubmitReview/' + id);
                    $.fancybox.close();

                }
                else {
                    if (res.Logged = false)
                        $().Errors("show", "Login error\t/RateARegistrar/SubmitReview");
                    else
                        $().Errors("show", "Insert error\t/RateARegistrar/SubmitReview");
                }

            }, "json");

        });


        $(dummy_a).click();


        $("#fancybox-wrap").width($("#fancybox-wrap").width() - 20);
        $("#fancybox-content").css("border-width", "0px");

        $("#fancybox-outer").addClass("roundcorners-5px");
        $("#fancybox-outer").addClass("radius_5");

    }

    function FindRadioValue(radios) {

        var ret = "";

        $.each(radios, function () {

            if ($(this).is(':checked'))
                ret = $(this).val();

        });

        return ret;
    }

    //  ...
    // end of closure
})(jQuery);
