/*_________________________
 * Menu uses jQuery to Run.
 */

var menu_default;
var selected;
var mouseOver;
var menu_arrow;
var faderMsgsTimers = []

$(document).ready(function () {

    menu_default = $("nav_workout");
    getMenuDefault();

    selected = menu_default;
    mouseOver = undefined;
    var timeOutObject;

    //menu_arrow = document.getElementById("menuarrow");

    checkMouseOver();

    $("#menubot").hover(function() {
        mouseOver = $(this);
        clearTimeout(timeOutObject);
    }, function() {
        mouseOver = undefined;
        clearTimeout(timeOutObject);
        timeOutObject = setTimeout("checkMouseOver()", 1000);
    });

    $("#navlist > li").each(function (i) {

        $(this).mouseover(function () {
            if (selected != $(this)) {

                mouseOver = $(this);
                clearTimeout(timeOutObject);
                timeOutObject = setTimeout("checkMouseOver()", 300);
            }
        });

        $(this).mouseout(function () {
            mouseOver = undefined;
            clearTimeout(timeOutObject);
            timeOutObject = setTimeout("checkMouseOver()", 1000);

        });

    });

});

function checkMouseOver() {

    if (mouseOver == undefined) {
          selectedSubNav = $("#" + "sub" + selected.attr("id"));
          selectedSubNav.css("display", "none");
		  $(selected).children().removeClass("current");
          selected = menu_default;
		  $(selected).children().addClass("current");
          $("#" + "sub" + selected.attr("id")).css("display", "block");
          //menu_arrow.style.left = selected.get(0).offsetLeft+selected.get(0).offsetWidth/2-2+"px";
    } else if (mouseOver == $("#menubot")) {

    }
    else {
        selectedSubNav = $("#" + "sub" + selected.attr("id"));
        selectedSubNav.css("display", "none");
		$(selected).children().removeClass("current");
        selected = mouseOver;
		$(selected).children().addClass("current");
        var get = $("#"+"sub"+selected.attr("id")); //subnav menu id string
        get.css("display", "block");
        //menu_arrow.style.left = selected.get(0).offsetLeft+selected.get(0).offsetWidth/2-2+"px";
    }
}

// Fade in, pause then fade out a message
function showFaderMsg(parms) {
    // Get the parms or set default ones
    msg = '';
    msgContainer = '';
    fadeInDur = 1000;
    fadeOutDur = 1000;
    pauseDur = 4000;
    msgIsErr = true;

    // Get the message
    if (parms.msg) {
        if (parms.msg.length < 1) {
            // We don't do empty messages
            return;
        }

        msg = parms.msg;
    }

    // Get the message container
    if (parms.msgContainer) {
        if (parms.msgContainer.length < 1) {
            // We don't do anything if we have no container
            return;
        }

        msgContainer = parms.msgContainer;
    }

    // See if the message is an error or not
    msgIsErr = parms.msgIsErr

    // Get the durations
    if (parms.fadeInDur) {
        fadeInDur = parms.fadeInDur;
    }

    if (parms.fadeOutDur) {
        fadeOutDur = parms.fadeOutDur;
    }

    if (parms.pauseDur) {
        pauseDur = parms.pauseDur;
    }

    // Fix the closure issue we have if we don't assign the container variable to a new one
    var tempMsgContainer = msgContainer;

    // Start showing the message
    clearTimeout(faderMsgsTimers[tempMsgContainer]); // Stop any fade out for this container from happening
    $(tempMsgContainer).empty().hide();

    if (msgIsErr) {
        $(tempMsgContainer).addClass('errMsg').removeClass('statMsg');
    } else {
        $(tempMsgContainer).addClass('statMsg').removeClass('errMsg');
    }

    $(tempMsgContainer).append(msg);
    $(tempMsgContainer).fadeIn(fadeInDur);
    faderMsgsTimers[tempMsgContainer] = setTimeout(function() {
                                                   $(tempMsgContainer).fadeOut(fadeOutDur);
                                                   //delete faderMsgsTimers[tempMsgContainer];
                                               }, pauseDur);

    return;
}

// Format a date and time in a standard way. Pass in the date/time. The following
// are optional, but can be specified in an object as the second parameter:
//
// dateTime: '' (default) -- this is the date/time to format
// monthAsNumber: true/false (default = false) -- month is a number or month name
// dayAsText: true/false (default = false) -- day will be day name or date
// use24HourTime: true/false (default = false) -- 24-hour time or 12-hour time
// includeSeconds: true/false (default = false) -- include the seconds
// formatString: "M/D/Y H:N:S E" (default) -- specifiy the output format (not case sensitive)
//      M = month, D = day, Y = year, H = hour, N = minute, S = second, E = AM/PM
function formatDateTime(parms) {
    // Set some defaults
    var dayAsText = parms.dayAsText;
    var monthAsNumber = parms.monthAsNumber;
    var use24HourTime = parms.use24HourTime;
    var includeSeconds = parms.includeSeconds;
    var formatString = (parms.formatString == undefined) ? '(M) (D), (Y) (H):(N) (E)' : parms.formatString.toUpperCase();

    var tempDateTime = null;
    var months = ['January', 'February', 'March', 'April', 'May', 'June',
                  'July', 'August', 'September', 'October', 'November', 'December'] ;
    var days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];

    try {
        if (!parms.dateTime) {
            tempDateTime = new Date();
        } else {
            dateTime = parms.dateTime;
            if (isNaN(Date.parse(dateTime))) {
                // Assume this is a MySQL-formatted date
                // in the form of: YYYY-MM-DD HH:MM:SS
                tempDateTime = new Date(dateTime.slice(0, 4), parseInt(dateTime.slice(5, 7), 10) - 1, dateTime.slice(8, 10),
                                        dateTime.slice(11, 13), dateTime.slice(14, 16), dateTime.slice(17, 19));
            } else {
                tempDateTime = new Date(parms.dateTime);
            }
        }
    } catch(e) {
        return '';
    }

    // Calculate the parts of the date and time
    var yr = da = mo = hr = mn = se = ex = '';

    yr = tempDateTime.getFullYear() + '';

    if (!dayAsText) {
        da = tempDateTime.getDate() + '';
    } else {
        da = days[tempDateTime.getDay()];
    }

    if (monthAsNumber) {
        mo = (tempDateTime.getMonth() + 1) + '';
    } else {
        mo = months[tempDateTime.getMonth()];
    }

    hr = tempDateTime.getHours();
    if (!use24HourTime) {
        if (hr > 11) {
            ex = 'pm';
        } else {
            ex = 'am';
        }

        if (hr > 12) {
            hr -= 12;
        }

        hr = hr + '';
    } else {
        hr = hr + '';
        hr = (hr.length < 2) ? '0' + hr : hr;
    }

    mn = tempDateTime.getMinutes() + '';
    mn = (mn.length < 2) ? '0' + mn : mn;

    if (includeSeconds) {
        se = tempDateTime.getSeconds() + '';
        se = (se.length < 2) ? '0' + se : se;
    }

    // Build the formatted date string
    output = formatString;
    output = output.replace('(Y)', yr);
    output = output.replace('(M)', mo);
    output = output.replace('(D)', da);
    output = output.replace('(H)', hr);
    output = output.replace('(N)', mn);
    output = output.replace('(S)', se);
    output = output.replace('(E)', ex);

    return output;
}

// The following function builds the JSON needed to pass in as the "synlist" value
function genS(arr) {
    var out = '';

    for(var i=0; i<arr.length; i++) {
        if (out.length > 0) {
            out += ',';
        }

        out += ('"' + arr[i] + '"');
    }

    return '{"parms":[' + out + ']}';
}

// The following function is used for security purposes. It requires the md5.js file
// to be included as well. This function takes a string and creates an md5 hash for
// it so the server can check the validity of the data being sent.
function genH(data) {
    return hex_md5(SYN + data);
}
