﻿(function($) {
    $.NordicInvest = $.NordicInvest || {};

    $.extend($.NordicInvest, {
        Config: {
            ConfirmAction: "Are you sure you want to continue?",
            ConfirmCustom: "Are you sure you want to {0}?",
            FilterSelector: ".value-filter"
        }
    });

    $.extend($.NordicInvest, {
        securityTransactionTimer: null,

        init: function() {
            $.NordicInvest.initConfirmAction();
            $.NordicInvest.initFundFilterHijax();
            $.NordicInvest.initTimeSpanEvents();
            $.NordicInvest.initSecurityTransactionHijax();
            $.NordicInvest.initSaleTransactionHijax();
            $.NordicInvest.initFocus();
            $.NordicInvest.initDividendType();
            $.NordicInvest.initClientPolicySelect();
            $.NordicInvest.initTableFormatting();
            $.NordicInvest.initMyPageNavigation();
        },

		initMyPageNavigation: function() {
			$("ul.my-pages-navigation").append("<li class='print'><a href='#'>Print</a></li>");
			$("ul.my-pages-navigation .print").live("click", function(e) {
				window.print();
				e.preventDefault();
			});
		},

		initTableFormatting: function() {
			var styleRules = "";
			$("table").each(function(tableIndex) {
				var matchCount = 0;
				$(this).find("th").each(function(thIndex) {
					if ($(this).hasClass("money")) {
						matchCount++;
						var tableSelector = ".table-with-money-" + tableIndex;
						styleRules += tableSelector + " td:nth-child(" + (thIndex + 1) + ") { text-align: right; } ";
						styleRules += tableSelector + " th:nth-child(" + (thIndex + 1) + ") { text-align: right; } ";
					}
				});
				if (matchCount > 0) {
					$(this).addClass("table-with-money-" + tableIndex);
				}
			});
			$("head").append("<style type='text/css'>" + styleRules + "</style>");
		},

        initFocus: function() {
            var firstElement = $(".form-item:visible:first input").get(0);
            if (firstElement == null) firstElement = $(".form-item:first select").get(0);
            if (firstElement == null) firstElement = $(".form-item:first textarea").get(0);
            if (firstElement != null) firstElement.focus();
        },

        initClientPolicySelect: function() {
            $("#Policy-Selection input[type='submit']").hide();
            $("#Policy-Selection select").live("change", function() {
                $("#Policy-Selection form").submit();
            })
        },
        
        initSaleTransactionHijax: function() {
            $("#Sale-Security-Selection .form-actions").hide();
            $("#Sale-Security-Selection .form-item select").live("change", function() {
                var id = $(this).val();
                if (id && id > 0) {
                    var url = $("#Sale-Security-Selection form").attr("action") + "/" + id + "/json";
                    $.getJSON(url, function(data) {
                        $("#Selected-Security .security").html(data.ticker);
                        $("#Selected-Security input").attr("value", data.id);
                        $("#Sale-Transaction .security-currency").html(data.currency);
                        $("#Sale-Transaction").show();
                        $("#Sale-Transaction .form-item:first input").focus();
                    });
                }
            });
            $("#Sale-Security-Selection form").submit(function(e) { e.preventDefault(); });
            $("#Sale-Transaction").hide();
        },

        initSecurityTransactionHijax: function() {
            if (document.location.href.indexOf("securitytransaction") <= 0) {
                $("#Security-Search .form-item input[type='text']").keyup($.NordicInvest.triggerSecurityTransactionTimer);
                $("#Security-Search .form-actions").hide();
                $("#Security-Search-Results tbody tr").live("click", $.NordicInvest.selectSecurity)
                $("#Security-Search form").submit(function(e) { e.preventDefault(); });
                $("#Security-Transaction").hide();
            } else {
                $("#Security-Search").hide();
                $.NordicInvest.initFocus();
            }
        },

        triggerSecurityTransactionTimer: function() {
            var value = $(this).val();
            if (value.length > 2) {
                if ($.NordicInvest.securityTransactionTimer) clearTimeout($.NordicInvest.securityTransactionTimer);
                $.NordicInvest.securityTransactionTimer = setTimeout($.NordicInvest.searchSecurity, 500);
            }
        },

        searchSecurity: function() {
            var url = $("#Security-Search form").attr("action");
            var dataToSend = $("#Security-Search form").serialize(); // + "&" + $("#Security-Transaction form").serialize();
            $("#Security-Search .form-item:first").append("<span class='loading' />");
            $.ajax({
                type: "POST",
                url: url,
                data: dataToSend,
                success: function(data) {
                    $("#Security-Search .loading").remove();
                    $("#Security-Search-Results").remove();
                    $("#Security-Search fieldset").append(data);
                },
                error: function() {
                    document.location.href = url + "?" + dataToSend;
                }
            });
            $("#Security-Search-Results table a").live("click", function(e) { e.preventDefault() });
        },

        selectSecurity: function() {
            var id = $(this).find("td.id").html();
            var ticker = $(this).find("td.ticker a").html();
            var currency = $(this).find("td.currency").html();
            $("#Selected-Security .security").html(ticker);
            $("#Selected-Security input").attr("value", id);
            $("#Security-Transaction .security-currency").html(currency);
            $("#Security-Search-Results").hide();
            $("#Security-Search input").focus(function() {
                $("#Security-Search-Results").show();
            });
            $("#Security-Transaction").show();
            $("#Security-Transaction .form-item:first input").focus();
        },

        initDividendType: function() {
            var setDividendType = function() {
                var divType = $(".dividend-type input:checked[type='radio'][name='DividendType']").val();
                if (divType == "Amount") {
					$(".dividend-type input[type='radio'][name='DividendType'][value='Amount']").attr("checked", true);
                    $(".dividend-type-amount").show();
                    $(".dividend-type-units").hide();
                    $(".dividend-type-units #Units").val(0);
                }
                else {
					$(".dividend-type input[type='radio'][name='DividendType'][value='Units']").attr("checked", true);
                    $(".dividend-type-amount").hide();
                    $(".dividend-type-units").show();
                    $(".dividend-type-amount #Amount").val(0);
                }
            };

            $(".dividend-type").show(setDividendType);
            $(".dividend-type input[type='radio'][name='DividendType']").live("change", setDividendType);
            setDividendType();
        },

        initConfirmAction: function() {
            $(".confirm-action").click($.NordicInvest.confirmAction);
        },

        initFundFilterHijax: function() {
            $($.NordicInvest.Config.FilterSelector + " #Year").live("change", function() {
                var formSelector = $.NordicInvest.Config.FilterSelector + " form";
                var url = $(formSelector).attr("action");
                var data = $(formSelector).serialize();
                $.ajax({
                    type: "POST",
                    url: url,
                    data: data,
                    success: $.NordicInvest.fundFilterLoadSuccess,
                    error: $.NordicInvest.fundFilterLoadError
                });
                $(formSelector).fadeOut(500);
            });
        },

        initTimeSpanEvents: function() {

            $.NordicInvest.enableDisableFundFilterDropdowns();

            $($.NordicInvest.Config.FilterSelector + " #Quarter").live("change", function() {
                var selectdQuarter = $($.NordicInvest.Config.FilterSelector + " #Quarter").val();

                if (selectdQuarter == "0") {
                    $($.NordicInvest.Config.FilterSelector + " #Month").removeAttr("disabled");
                    $($.NordicInvest.Config.FilterSelector + " #Week").removeAttr("disabled");
                }
                else {
                    $($.NordicInvest.Config.FilterSelector + " #Month").attr("disabled", "disabled");
                    $($.NordicInvest.Config.FilterSelector + " #Week").attr("disabled", "disabled");
                }
            })
            $($.NordicInvest.Config.FilterSelector + " #Month").live("change", function() {
                var selectdQuarter = $($.NordicInvest.Config.FilterSelector + " #Month").val();

                if (selectdQuarter == "0") {
                    $($.NordicInvest.Config.FilterSelector + " #Quarter").removeAttr("disabled");
                    $($.NordicInvest.Config.FilterSelector + " #Week").removeAttr("disabled");
                }
                else {
                    $($.NordicInvest.Config.FilterSelector + " #Quarter").attr("disabled", "disabled");
                    $($.NordicInvest.Config.FilterSelector + " #Week").attr("disabled", "disabled");
                }
            })
            $($.NordicInvest.Config.FilterSelector + " #Week").live("change", function() {
                var selectdQuarter = $($.NordicInvest.Config.FilterSelector + "  #Week").val();

                if (selectdQuarter == "0") {
                    $($.NordicInvest.Config.FilterSelector + " #Month").removeAttr("disabled");
                    $($.NordicInvest.Config.FilterSelector + " #Quarter").removeAttr("disabled");
                }
                else {
                    $($.NordicInvest.Config.FilterSelector + " #Month").attr("disabled", "disabled");
                    $($.NordicInvest.Config.FilterSelector + " #Quarter").attr("disabled", "disabled");
                }
            })
        },

        enableDisableFundFilterDropdowns: function() {

            var selectdQuarter = $($.NordicInvest.Config.FilterSelector + " #Quarter").val();
            if (selectdQuarter != "0") {
                $($.NordicInvest.Config.FilterSelector + " #Month").attr("disabled", "disabled");
                $($.NordicInvest.Config.FilterSelector + " #Week").attr("disabled", "disabled");
                return;
            }

            var selectdQuarter = $($.NordicInvest.Config.FilterSelector + " #Month").val();
            if (selectdQuarter != "0") {
                $($.NordicInvest.Config.FilterSelector + " #Quarter").attr("disabled", "disabled");
                $($.NordicInvest.Config.FilterSelector + " #Week").attr("disabled", "disabled");
                return;
            }

            var selectdQuarter = $($.NordicInvest.Config.FilterSelector + "  #Week").val();
            if (selectdQuarter != "0") {
                $($.NordicInvest.Config.FilterSelector + " #Month").attr("disabled", "disabled");
                $($.NordicInvest.Config.FilterSelector + " #Quarter").attr("disabled", "disabled");
            }
        },

        confirmAction: function() {
            var title = $(this).attr("title");

            if (title && title.length > 0) {
                title = title.substr(0, 1).toLowerCase() + title.substr(1, title.length - 1);
                var message = $.NordicInvest.Config.ConfirmCustom.replace("{0}", title);
                return confirm(message);
            }

            return confirm($.NordicInvest.Config.ConfirmAction);
        },

        fundFilterLoadSuccess: function(data) {
            var formSelector = $.NordicInvest.Config.FilterSelector + " form";
            $(formSelector).remove();
            $($.NordicInvest.Config.FilterSelector).append($(data).find("form").hide());
            $(formSelector).fadeIn(300);
            $.NordicInvest.enableDisableFundFilterDropdowns();
        },

        fundFilterLoadError: function() {
            $(formSelector).fadeIn(300);
            $.NordicInvest.enableDisableFundFilterDropdowns();
        }
    });


})(jQuery);

$(document).ready($.NordicInvest.init);