var article = {};
var event = {};
var user = {};
var userdata = {};
var pageParms = {};
var searchArgs = {};
// Turns article date yyyy-mm-dd hh:mm:ss into displayable date Monthname dd, yyyy
function makeArticleDateString(dtstr) {
    var dateparts = dtstr.substring(0,10).split("-");
    var timeparts = dtstr.substring(11).split(":");
    d = new Date(dateparts[0],dateparts[1]-1,dateparts[2],timeparts[0],timeparts[1],timeparts[2]);
    var dtstr = d.toLocaleDateString();
    return(dtstr.substring(dtstr.indexOf(" ")+1));
}
// Extracts the date part of the article date timestamp
function articleDateFormatter(cellvalue, options, rowObject ) {
    return (cellvalue.substring(0,10));
};
// Turns a date string returned from the server into a UTC date
function makeUTCDate(dtstr) {
        dateparts = dtstr.substring(0,10).split("-");
        var timeparts = dtstr.substring(11).split(":");
        d = new Date(Date.UTC(dateparts[0],dateparts[1]-1,dateparts[2],timeparts[0],timeparts[1],timeparts[2]));
        return(d);
}
// Then turns the UTC date into a local date string for display.  This has the effect of converting the server dates stored in GMT time to local time.
function makeLocalDateString(dt) {
    if (dt) {
        return(makeUTCDate(dt).toLocaleString());
    }
    else return("");
}
// convert function
function convert2LocalDate(cellvalue, options, rowObject) {
    if ((cellvalue) && cellvalue !== "null") {
        var dp = new Array();
        var dtinUTC = makeUTCDate(cellvalue);
        dp[0] = dtinUTC.getFullYear();
        dp[1] = dtinUTC.getMonth() + 1;
        dp[2] = dtinUTC.getDate();
        dp[3] = dtinUTC.getHours();
        dp[4] = dtinUTC.getMinutes();
        dp[5] = dtinUTC.getSeconds();
        for (var inx=0; inx<=dp.length; inx++) {
            if (dp[inx] < 10) {dp[inx] = "0" + dp[inx];}
        }
        return(dp[0] + "-" + dp[1] + "-" + dp[2] + " " + dp[3] + ":" + dp[4] + ":" + dp[5]);
    }
    else 
        return("");
}

// Creates a short synopsis for the article by condensing the first lines.
function createArticleSynopsis(a) {
    $("#synopsis_hidden").html(a);
    $("#synopsis_hidden").condense(
        {
            condensedLength: 90,
            moreText: '',
            lessText: '',
            ellipsis: "..."
        }
    );
    return ($("#synopsis_hidden").text());
}
// Sets all the article content from the input form when add or modify preview or submit hit
function getArticleContent() {
    article.DATE = $("input[name='article_date']").val();
    $.datepicker.formatDate(article.DATE);
    var dateparts = article.DATE.split("-");
    article.ARTICLE_DATETIME = dateparts[2] + "-" + dateparts[0] + "-" + dateparts[1] + " 00:00:00";
    article.DATE = makeArticleDateString(article.ARTICLE_DATETIME);
    article.AUTHOR = $("input[name='author']").val();
    article.HEADLINE = $("input[name='headline']").val();
    article.ARTICLE_BODY = $("textarea[name='article_content']").html();
    article.SYNOPSIS = createArticleSynopsis(article.ARTICLE_BODY);
    var d = new Date();
    // Update last modified date/time to current date/time.
    article.LAST_MODIFIED_DATETIME = d;
    article.LAST_MODIFIED_DATETIME_Str = d.toLocaleString();
    // No create date/time means this is probably and "add" -- set create date/time to current date and time.
    if (!article.CREATE_DATETIME) {
        article.CREATE_DATETIME = article.LAST_MODIFIED_DATETIME;
        article.CREATE_DATETIME_Str = article.LAST_MODIFIED_DATETIME_Str;
    }
    if ($('#tweet_flag').is(':checked')) {
        article.TWEET_FLAG = "Y";
    }
    else {
        article.TWEET_FLAG = "N";
    }
}
function make12HourTime(t) {
    var timeparts = t.split(":");
    if (parseInt(timeparts[0],10) > 12) {
        timeparts[0] = parseInt(timeparts[0],10) - 12;
        timeparts[2] = " pm";
    }
    else {
        timeparts[0] = parseInt(timeparts[0],10);
        timeparts[2] = " am";
    }
    if (parseInt(timeparts[0]) !== 0) {
        return (timeparts[0] + ":" + timeparts[1] + timeparts[2]);
    }
    else {
        return ("");
    }
}
function make24HourTime(t) {
    var t1 = t.split(" ");
    var timeparts = t1[0].split(":");
    if (t1[1] == "pm" && parseInt(timeparts[0],10) < 12) {
        timeparts[0] = parseInt(timeparts[0],10) + 12;
    }
    else if (t1[1] == "am" && parseInt(timeparts[0],10) == 12) {
        timeparts[0] = parseInt(timeparts[0],10) - 12;
    }
    if (timeparts[0] < 10) {
        timeparts[0] = "0" + timeparts[0];
    }
    return (timeparts[0] + ":" + timeparts[1] + ":00");
}

// Sets all the event content from the input form when add or modify preview or submit hit
function getEventContent() {
    event.EVENT_DATE = $("input[name='event_date']").val();
    $.datepicker.formatDate(event.EVENT_DATE);
    var dateparts = event.EVENT_DATE.split("-");
    event.EVENT_DATE = dateparts[2] + "-" + dateparts[0] + "-" + dateparts[1];
    event.DATE = makeArticleDateString(event.EVENT_DATE + "00:00:00");
    event.EVENT_START_TIME_12hr = $("input[name='event_start']").val();
    event.EVENT_END_TIME_12hr = $("input[name='event_end']").val();
    event.EVENT_START_TIME = make24HourTime(event.EVENT_START_TIME_12hr);
    event.EVENT_END_TIME = make24HourTime(event.EVENT_END_TIME_12hr);
    event.EVENT_TITLE = $("input[name='event_title']").val();
    event.EVENT_LOCATION = $("input[name='event_location']").val();
    event.EVENT_LINK = $("input[name='event_link']").val();
    event.EVENT_DESCRIPTION = $("textarea[name='event_description']").val();
    if (!event.EVENT_AUTHOR) {
        event.EVENT_AUTHOR = signedOnUser.username;
    }
    var d = new Date();
    // Update last modified date/time to current date/time.
    event.EVENT_LAST_MODIFIED_DATETIME = d;
    event.EVENT_LAST_MODIFIED_DATETIME_Str = d.toLocaleString();
    // No create date/time means this is probably and "add" -- set create date/time to current date and time.
    if (!event.EVENT_CREATE_DATETIME) {
        event.EVENT_CREATE_DATETIME = event.EVENT_LAST_MODIFIED_DATETIME;
        event.EVENT_CREATE_DATETIME_Str = event.EVENT_LAST_MODIFIED_DATETIME_Str;
    }
}
function generatePassword(length, special) {
  var iteration = 0;
  var password = "";
  var randomNumber;
  if(special == undefined){
      var special = false;
  }
  while(iteration < length){
    randomNumber = (Math.floor((Math.random() * 100)) % 94) + 33;
    if(!special){
      if ((randomNumber >=33) && (randomNumber <=47)) { continue; }
      if ((randomNumber >=58) && (randomNumber <=64)) { continue; }
      if ((randomNumber >=91) && (randomNumber <=96)) { continue; }
      if ((randomNumber >=123) && (randomNumber <=126)) { continue; }
    }
    iteration++;
    password += String.fromCharCode(randomNumber);
  }
  return password;
}
function hashPassword(p,u) {
    var dtp = Date.parse(new Date()).toString(16);
    var rn = Math.floor(Math.random() * Math.pow(10,6)).toString(16);
    u.USER_PW_SALT = $.md5(dtp + rn);
    u.USER_HASHED_PW = $.sha1(p+u.USER_PW_SALT);    
    return;
}
// This function verifies that the user exists in the database and obtains critical user information support authentication.
function verifyUser() {
    user = {};
    $.ajaxSetup({
        async: false
    });
    user.USER_ID = $("input[name='userid']").val();
    user.columns = "USER_ID,USER_PW_ATTEMPTS,USER_DEFAULT_PW_FLAG,USER_PW_SALT";
    var dataString = $.toJSON(user);
    // Go verify user and get challenge salt for authentication.
    $.post('php/verify_user.php',
        {data: dataString},
        function(result)
        {
            var res = {};
            if (result) {
                res = $.secureEvalJSON(result);
            }
            else res.STATUS = "FAILURE";
            // User is successfully verified and session is pending.
            if (res.STATUS == "SUCCESS") {
                userdata = res.user;
                verifyPassword();
            }
            // There was some sort of error.  Display a message to the user.
            else {
                signInFailure(res.MESSAGE);
            }
        });
    return;
}
// This function verifies the user's password and sets up a session for ongoing access and authentication.
function verifyPassword() {
    user = {};
    $.ajaxSetup({
        async: false
    });
    var pswd = $("input[name='password']").val();
    // Create a double hashed password with the user's password salt and the current challenge salt.
    user.USER_VERIFY_PW = $.sha1($.sha1(pswd+userdata.USER_PW_SALT) + userdata.CHALLENGE_SALT);
    user.USER_ID = userdata.USER_ID;
    user.columns = "USER_ID,USER_NAME,USER_HASHED_PW,USER_ROLE,USER_PW_ATTEMPTS,USER_DEFAULT_PW_FLAG";
    var dataString = $.toJSON(user);
    // Go verify the password and complete setup of the session.
    $.post('php/authenticate_user.php',
        {data: dataString},
        function(result)
        {
            var res = {};
            if (result) {
                res = $.secureEvalJSON(result);
            }
            else res.STATUS = "FAILURE";
            // Password verified successfully and the session was created.
            if (res.STATUS == "SUCCESS") {
                userdata = res.user;
                if ($('#change_pw_flag').is(':checked')) {
                    userdata.USER_OPTIONAL_CHANGE_PW = "Y";
                }
                else {
                    userdata.USER_OPTIONAL_CHANGE_PW = "N";
                }
                if (userdata.USER_DEFAULT_PW_FLAG == "Y" || userdata.USER_OPTIONAL_CHANGE_PW == "Y") {
                    changePassword(userdata);
                }
                else {
                    // Complete the sign in process.
                    completeSignIn("");
                }                
                
            }
            // Either the password did not verify or there was some sort of system error that prevented the session from being established.
            else {
                signInFailure(res.MESSAGE);
            }
            // Success or failure, hide the sign in menu.
            $(".signin").removeClass("menu-open");
            $("fieldset#signin_menu").hide();
        });
    return;
}
// This function displays a diaplg to let user enter a new password and then executes the change of password at the server.
function changePassword(u) {
    var password_changed = false;
    $("input[name='new_password']").attr("maxlength",config.PasswordOptions.maxlen);
    $("input[name='repeat_password']").attr("maxlength",config.PasswordOptions.maxlen);
    $("input[name='new_password']").val("");
    config.PasswordOptions.maxattempts
    // Display the input form height 265, width 275
    $( "#change-password-form" ).dialog({
        height: 265,
        width: 275,
        modal: true,

        buttons: {
            // Process the "change password" button.
            "Send": function() {
                if ($("input[name='new_password']").val().length < config.PasswordOptions.minlen) {
                    $("#cpw-error").text("Password must be at least " + config.PasswordOptions.minlen + " characters.");
                    return false;
                }
                $.ajaxSetup({
                    async: false
                });
                user = {};
                user.USER_ID = userdata.USER_ID;
                user.ADMIN_USER = userdata.USER_ID;
                hashPassword($("input[name='new_password']").val(),user);
                var dataString = $.toJSON(user);
                // Go record the changed password
                $.post('php/change_password.php',
                    {data: dataString},
                    function(result) {
                        var res = {};
                        if (result) {
                            res = $.secureEvalJSON(result);
                        }
                        else res.STATUS = "FAILURE";
                        // If the password change was successful, complete the sign in process.
                        if (res.STATUS == "SUCCESS") {
                            // Complete the sign in process.
                            password_changed = true;
                        }
                        
                    });
                    $( this ).dialog( "close" );
                },
            Cancel: function() {
                $( this ).dialog( "close" );
                }
            },
        close: function() {
            if (password_changed) {
                completeSignIn("Password changed.")
            }
            else if (u.USER_DEFAULT_PW_FLAG == "Y") {
                signInFailure("Unable to change password.");
                }
                else {
                    completeSignIn("Password not changed.")
                }
        }

    });
  
}
function signInFailure(msgtext) {
    $("#signin-failure-msg").text(msgtext);
    $( "#signin-failure" ).dialog({
        modal: true,
        buttons: {
            Ok: function() {
            $( this ).dialog( "close" );
            }
        }
    });
    completeSignOut(false);
}
function completeSignIn(msgtext) {
    $("#signin-signout").text("Sign Out");
    $("#signin-container a").removeClass("signin");
    $("#signin-container a").removeClass("menu-open");
    $(".signin").unbind("click");
    $("#signin-container a").addClass("signout");
    signedOnUser.userid = userdata.USER_ID;
    signedOnUser.username = userdata.USER_NAME;
    signedOnUser.userrole = userdata.USER_ROLE;
    // Enable the content administration menu
    $("#admin-menu").show();
    if (signedOnUser.userrole == "admin" || signedOnUser.userrole == "super") {
        $("#user-admin").show();
        $("#config-admin").show();
        if (signedOnUser.userrole == "super") {
            $("#twitter-auth").show();
        }
    }
    $("#signin-success-msg").text(msgtext);
    $( "#signin-success" ).dialog({
        modal: true,
        buttons: {
            Ok: function() {
            $( this ).dialog( "close" );
            }
        }
    });
}
function completeSignOut(msgflag) {
    user = {};
    $.ajaxSetup({
        async: false
    });
    user.USER_ID = signedOnUser.userid;
    $("#signin-signout").text("Member Signin");
    $("#signin-container a").removeClass("signout");
    $(".signout").unbind("click");
    $("#signin-container a").addClass("signin");
    signedOnUser = {};
    // Hide the content administration menu
    $("#admin-menu").hide();
    $("#user-admin").hide();
    $("#config-admin").hide();
    $("#twitter-auth").hide();
    var dataString = $.toJSON(user);
    // Go verify user and get challenge salt for authentication.
    $.post('php/signout_user.php',
        {data: dataString},
        function(result) {
            if (msgflag) {
                $( "#signout-success" ).dialog({
                    modal: true,
                    buttons: {
                        Ok: function() {
                        $( this ).dialog( "close" );
                        }
                    }
                });
            }
        });
    state = {};
    state.group = "home";
    state.page = "";
    var dt = new Date();
    state.time = dt.getTime();
    $.bbq.pushState(state, 2);
}
function loadAnalytics(profileID) {
    if (config.AnalyticsOptions.tracking == "on") {
        $.ga.load(profileID, function(pageTracker) {
        });
    }
}
function trackPage(pagename) {
    if (config.AnalyticsOptions.tracking == "on") {
        $.ga.trackPageview(pagename);
    }
}
function trackEvent(category, action, opt_label) {
    if (config.AnalyticsOptions.tracking == "on") {
        $.ga.trackEvent(category,action,opt_label);
    }
}
