/**
 * Gerber JavaScript functions.
 */

// jQuery functions
$(document).ready(function() {

    if ($.browser.msie) {
        $("body").addClass("ie");

        // Wrap the "first" and "last" TH elements in extra div.
        $("thead")
			.find("th:last").wrapInner('<div class="th-inner th-last-inner"></div>').end()
			.find("th:first").wrapInner('<div class="th-inner th-first-inner"></div>');
    }


    // Add "box-landing-odd" to odd boxes on homepage.
    $("body#home #content-secondary .box:even").addClass("box-odd");

    // Wrap A class "link-button" into additional markup.
    initLinkButtons();

    // Wrap contents of th.first and th.last into additional markup
    //$("th.first").wrapInner('<div class="theader"></div>');
    //$("th.last").wrapInner('<div class="theader"></div>');

    // Expand collapsed table rows
    initTableCollapser();

    // Show all nutrients - Profile page.
    initShowAllNutrients();

    // Menu page functions.
    initMenuPage();

    // Set default settings for all modals
    $.nyroModalSettings({
        bgColor: '#f0fafc',
        endFillContent: initModalContent
    });

    // Trigger overlay from select dropdown
    initSelectTriggers();

    // Good To Know.
    initGoodToKnow();

    //Day Detail Edit Meal Modal
    initDayEditMeal();

    // Add Onclick to Logout
    logOut();

    // Add Roundies
    if ($.browser.msie) {
        DD_roundies.addRule('.rounded', '6px', false);
        DD_roundies.addRule('a.link-button-big', '8px', true);
        DD_roundies.addRule('.hero-image', '11px', true);
        DD_roundies.addRule('.profile-info', '5px', true);
        DD_roundies.addRule('#page .box-rounded', '14px 14px 0 0', true);
        DD_roundies.addRule('#page .box-tip', '7px', true);
        DD_roundies.addRule('#page .box-tip-header', '6px 6px 0 0', true);
    } else {
        DD_roundies.addRule('.rounded', '6px', false);
        DD_roundies.addRule('.box-rounded', '14px 14px 0 0', true);
        DD_roundies.addRule('.box-tip', '7px', true);
        DD_roundies.addRule('.box-tip-header', '6px 6px 0 0', true);
        DD_roundies.addRule('a.link-button-big', '8px', true);
        DD_roundies.addRule('.hero-image', '11px', true);
        DD_roundies.addRule('.profile-info', '5px', true);
    }
    /*if(ua.ie){
    curvyCorners({tl:{radius:6},tr:{radius:6},br:{radius:6},bl:{radius:6},antiAlias:true},'.rounded');
    curvyCorners({tl:{radius:14},tr:{radius:14},antiAlias:true},'.box-rounded');
    curvyCorners({tl:{radius:7},tr:{radius:7},br:{radius:7},bl:{radius:7},antiAlias:true},'.box-tip');
    curvyCorners({tl:{radius:6},tr:{radius:6},antiAlias:true},'.box-tip-header');
    curvyCorners({tl:{radius:8},tr:{radius:8},br:{radius:8},bl:{radius:8},antiAlias:true},'a.link-button-big');
    curvyCorners({tl:{radius:11},tr:{radius:11},br:{radius:11},bl:{radius:11},antiAlias:true},'.hero-image');
    curvyCorners({tl:{radius:5},tr:{radius:5},br:{radius:5},bl:{radius:5},antiAlias:true},'.profile-info');
    curvyCorners({tl:{radius:10},antiAlias:true},'div.th-first-inner');
    curvyCorners({tr:{radius:10},antiAlias:true},'div.th-last-inner');
    }*/
    if (!$.browser.msie) {
        DD_roundies.addRule('#nyroModalContent, #nyroModalLoading', '15px', true);
        DD_roundies.addRule('table.data th.first', '10px 0 0 0', true);
        DD_roundies.addRule('table.data th.last', '0 10px 0 0', true);
    } else {
        DD_roundies.addRule('div.th-first-inner', '10px 0 0 0', true);
        DD_roundies.addRule('div.th-last-inner', '0 10px 0 0', true);
    } //
});


/**
 * Run init functions on the nyroModal.
 */
function initModalContent(elts, settings) {
    initLinkButtons(elts.content);

    // Add class to all inputs type="text" and type="checkbox"
    $("input:text, input:password").addClass("input-text");
    $("input:checkbox").addClass("input-checkbox");
}


/**
 * PROFILE PAGE.
 * Trigger overlay from select dropdown.
 */
function initSelectTriggers() {
	var select_triggers = $('body select.trigger');
	if (select_triggers.length > 0) {
		select_triggers.val("").change(function() {
			quickJump($(this));
		});
	}
} // select dropdown triggers


/**
 * QUICK JUMP FUNCITON
 */
function quickJump(input) {
	var content = input.val();
	var actions = content.split('::');
	if (actions.length > 0) {
		switch (actions[0]) {

			// Open a modal.    
			case 'modal':
				$.nyroModalManual({
					url: actions[1],
					modal: true
				});
				break;
			case 'redirect':
				window.location = actions[1];
				break;

			case 'redirectnew':
				window.open(actions[1], 'print');
				break;

			default:
				break;
		}
		
		// Reset the input to the original state.
		input.val("");
	}
}


/**
 * PROFILE PAGE.
 * Expand Table Rows
 */
function initTableCollapser() {
	var table_collapsers = $("body table.table-collapser");
	if (table_collapsers.length > 0) {
		
		// Add click listener to each table-collapser.
		table_collapsers.click(function(e){
			
			// Which tag was clicked?
			var clicked_tag_name = e.target.tagName.toUpperCase();
			var clicked_tag = $(e.target);
			
			if (clicked_tag_name == 'A') {
				
				// If "open" link was clicked.
				if (clicked_tag.hasClass("open")) {
					clicked_tag.siblings('a.close').show();
					clicked_tag.parents('tr').next('tr.tr-collapsed')
						.show().removeClass('tr-collapsed').addClass('tr-expanded')
						.find('td div').slideDown();
				}
				
				// If "close" tag was clicked.
				if (clicked_tag.hasClass("close")) {
					clicked_tag.hide();
					var tr = clicked_tag.parents('tr').next('tr.tr-expanded');
					tr.find('td div').slideUp("normal", function(){
						tr.hide().removeClass('tr-expanded').addClass('tr-collapsed');
					});
				}
			}
		});
	}
} // expand table rows


/**
 * PROFILE PAGE.
 * Show All nutrients
 */
function initShowAllNutrients() {
	var link_expander = $("#link-show-all-nutrients");
	if (link_expander.length > 0) {
		var trs = $(link_expander.attr("href")).find('tr.hide-able');
		link_expander.toggle(
			function(e) {
				e.preventDefault();
				link_expander.text('Show only featured nutrients').addClass('link-collapser');
				trs.removeClass('nutrient-hide').addClass('nutrient-show');
			},
			function(e) {
				e.preventDefault();
				link_expander.text('Show more nutrients').removeClass('link-collapser');
				trs.removeClass('nutrient-show').addClass('nutrient-hide').each(function() {
					$(this).find("a.close").hide();
					$(this).next('tr.tr-expanded').hide().removeClass('tr-expanded').addClass('tr-collapsed');
				});
			}
		);
	}
} // show all nutrients


/**
 * ALL PAGES.
 * Wrap A class "link-button" into additional markup for presentation.
 */
function initLinkButtons(element) {
	if (typeof element == "undefined") {
		element = $('body');
    }
	element.find("a.link-button:not(.link-button-wrapped)").wrapInner('<span class="span1"><span class="span2"></span></span>').addClass("link-button-wrapped");
} // init link buttons


/**
 * MENU PAGE.
 * Functions for the main menu page.
 */
function initMenuPage() {
	var menu_table = $("#menu-table");
	if (menu_table.length > 0) {
		
		// Collapse entire meals.
		initMenuCollapsing();
		
		// Add tooltip to meal hover and modal onclick.
		initMenuMeals();
	}
}


/**
 * MENU PAGE.
 * Menu Meal Collapser
 * A tag has the tbody ID in the HREF for the fastest DOM access.
 */
function initMenuCollapsing() {
	$("#menu-table a.menu-collapser").toggle(
		function(e){
			e.preventDefault();
			$(this).addClass("menu-collapser-closed");
			$($(this).attr("href")).hide();
		},
		function(e){
			e.preventDefault();
			$($(this).attr("href")).show();
			$(this).removeClass("menu-collapser-closed");
		}
	);
}


/**
 * MENU PAGE.
 * Add tooltip and modal popup to meals on menu page.
 */
function initMenuMeals() {

	// @todo: This text should come from some sort of config.
	var meal_tooltip_html = '<div class="tooltip-source">Edit Meal</div>';
	var day_tooltip_html = '<div class="tooltip-source">Edit Day</div>';
	
	var meals = $("#menu-table td.meal-day");
	if (meals.length > 0) {
		meals.append(meal_tooltip_html).tooltip({ width: '100px;' });
		
		// Add the modal.
		meals.click(function(e) {
			$.nyroModalManual({
				url: nmnpSettings.urls.MEAL_MODAL + "/?vars=" + $(this).attr("id") + "#page-content",
				modal: true
			});
		});
		
		// Run the fractional regex on meals.
		formatFractionals(meals.find("li"));
	}

	//var day_headers = $("#menu-table th.day-header, #menu-table td.day-rating");
	var day_headers = $("#menu-table th.day-header");
	if (day_headers.length > 0) {
		day_headers.append(day_tooltip_html).tooltip({ width: '100px;' });
		
		// Add the modal.
		day_headers.click(function(e) {
			//$.nyroModalManual({
			//	url: nmnpSettings.urls.DAY_SCORECARD + '?vars=' + $(this).find("span.hidden").text() + "#page-content",
			//	modal: true
			//});
			e.preventDefault();
			location.href = $(this).find("span.hidden").text();
		});
		
		// Main star rating.
		//$("#box-tip-star-rating div.box-tip-content")
			//.append('<div class="tooltip-source">Learn More</div>') // @todo: text should come from config
			//.tooltip({ width: '100px;' })
			//.click(function() {
				//location.href = nmnpSettings.urls.WEEK_SCORECARD + '?vars=' + $(this).find("span.hidden").text();
				/*
				$.nyroModalManual({
				url: nmnpSettings.urls.WEEK_SCORECARD + '?vars=' + $(this).find("span.hidden").text() + "#page-content",
				modal: true
				});
				*/
			//});

		// Main star rating.
		$("#box-tip-star-rating div.box-tip-content").click(explainStarRating);
	}
}


/**
 * EXPLAIN STAR RATING
 */
function explainStarRating() {
	$.nyroModalManual({
		url: "/Menus/FiveStarRatingSystem#page-content",
		modal: true
	});
}


/**
 * GOOD TO KNOW
 */
function initGoodToKnow() {
    var gtn = $("body div.box-good-to-know");
    if (gtn.length > 0) {
        gtn.each(function() {
            var self = $(this);
            var lis = self.find("ul.good-to-know-list li");

            var total = lis.length;
            if (lis.length > 1) {
                var prev = self.find("a.pager-prev-link");
                var next = self.find("a.pager-next-link");
                var current = self.find("span.current");

                next.click(function() {
                    var cur_i = parseInt(current.text());
                    var next_i = cur_i + 1;
                    if (next_i > total) {
                        next_i = 1;
                    }
                    var next_real_i = next_i - 1;

                    current.text(next_i);
                    lis.eq(cur_i - 1).hide("slide", { direction: "left" }, 500);
                    lis.eq(next_real_i).show("slide", { direction: "right" }, 500);
                });

                prev.click(function() {
                    var cur_i = parseInt(current.text());
                    var prev_i = cur_i - 1;
                    if (prev_i == 0) {
                        prev_i = total;
                    }
                    var prev_real_i = prev_i - 1;

                    current.text(prev_i);
                    lis.eq(cur_i - 1).hide("slide", { direction: "right" }, 500);
                    lis.eq(prev_real_i).show("slide", { direction: "left" }, 500);
                });
            }
        });
    }
}


function initDayEditMeal() {

    var dayEdit = $('#table-day-details a.day-edit-meal');
    if (dayEdit.length > 0) {

        $('a.day-edit-meal').click(function() {
            var modalUrl = $(this).attr('href');
            $.nyroModalManual({
                ajax: {
                    url: modalUrl
                },
                modal: true,
                endRemove: function() { window.location.reload(); }
            });
            return false;
        });
        
    }

}

function logOut() {

    $('ul#nav-user a').click(function(e) {
        if ($(this).text() == 'Logout') {
            e.preventDefault();
            $(document.body).append('<IFRAME id="logoutFrame" width="0" height="0" style="display:none">');
            $('iframe#logoutFrame').attr('src', hostpath + '/service/logout.ashx');
            $('iframe#logoutFrame').load(function() {
                window.location.href = "/LoginRegister/Logout";
            });
        }
    });
    
}