/*=========================================================================================

	File Name: miscellaneous.js

	Description: miscellaneous.

	----------------------------------------------------------------------------------------

	Item Name: Modern Admin - Clean Bootstrap 4 Dashboard HTML Template

	Author: Pixinvent

	Author URL: hhttp://www.themeforest.net/user/pixinvent

==========================================================================================*/



/* scrollToBottom plugin, chainable */



$(document).ready(function () {



  //      Copy Clipboard Script     //

  // -------------------------------



  var userText = $(".copy-to-clipboard");

  var btnCopy = $(".copy-btn");



  // copy text on click

  btnCopy.on("click", function () {

    userText.select();

    document.execCommand("copy");

  })



  //     ContextMenu Script      //

  // -------------------------------



  // Basic Context Menu

  $.contextMenu({

    selector: ".basic-context-menu",

    callback: function (key, options) {

      var r = "clicked " + key;

      toastr.success(r);

    },

    items: {

      "Option 1": {

        name: "Option 1"

      },

      "Option 2": {

        name: "Option 2"

      },

    }

  })



  // Left Click Trigger

  $.contextMenu({

    selector: '.left-click-context-menu',

    trigger: "left",

    callback: function (key, options) {

      var r = "clicked " + key

      toastr.success(r);

    },

    items: {

      "Option 1": {

        name: "Option 1"

      },

      "Option 2": {

        name: "Option 2"

      },

    }

  });



  // Hover Trigger

  $.contextMenu({

    selector: '.hover-context-menu',

    trigger: 'hover',

    autoHide: true,

    callback: function (key, options) {

      var r = "clicked " + key

      toastr.success(r);

    },

    items: {

      "Option 1": {

        name: "Option 1"

      },

      "Option 2": {

        name: "Option 2"

      },

    }

  });



  // Submenu

  $.contextMenu({

    selector: '.submenu-context-menu',

    callback: function (key, options) {

      var r = "clicked " + key

      toastr.success(r);

    },

    items: {

      "Option 1": {

        name: "Option 1"

      },

      "name": {

        name: "Option 2"

      },

      "fold1": {

        "name": "Sub Group",

        "items": {

          "Foo Bar": {

            "name": "Foo bar"

          },

          "fold1a": {

            "name": "Other group",

            "items": {

              "Echo": {

                "name": "echo"

              },

              "Foxtrot": {

                "name": "foxtrot"

              },

              "Golf": {

                "name": "golf"

              }

            }

          }

        }

      }

    }

  })



  //    scroll top for idle timer   //

  // --------------------------------

  $.fn.scrollToBottom = function () {

    this.scrollTop(this[0].scrollHeight);

    return this;

  };

  //     Elements script idle timer     //

  // ------------------------------------

  var elementTimeout = 3000;

  /*

  Handle raised idle/active events

   */

  $('.elStatus').on("idle.idleTimer", function (event, elem, obj) {

    //If you dont stop propagation it will bubble up to document event handler

    event.stopPropagation();



    $('.elStatus').val(function (i, v) {

      return v + "Idle @ " + moment().format() + " \n";

    }).removeClass("alert-success").addClass("alert-warning").scrollToBottom();



  });

  $('.elStatus').on("active.idleTimer", function (event) {

    //If you dont stop propagation it will bubble up to document event handler

    event.stopPropagation();



    $('.elStatus')

      .val(function (i, v) {

        return v + "Active @ " + moment().format() + " \n";

      }).addClass("alert-success").removeClass("alert-warning").scrollToBottom();

  });



  /*

  Handle button events

  */

  $(".btReset").click(function () {

    $('.elStatus')

      .idleTimer("reset")

      .val(function (i, v) {

        return v + "Reset @ " + moment().format() + " \n";

      }).scrollToBottom();



    //Apply classes for default state

    if ($(".elStatus").idleTimer("isIdle")) {

      $(".elStatus").removeClass("alert-success").addClass("alert-warning");

    } else {

      $(".elStatus")

        .addClass("alert-success").removeClass("alert-warning");

    }

    $(this).blur();

    return false;

  });

  $(".btRemaining").click(function () {

    $('.elStatus').val(function (i, v) {

      return v + "Remaining: " + $(".elStatus").idleTimer("getRemainingTime") + " \n";

    }).scrollToBottom();

    $(this).blur();

    return false;

  });

  $(".btLastActive").click(function () {

    $('.elStatus')

      .val(function (i, v) {

        return v + "LastActive: " + $(".elStatus").idleTimer("getLastActiveTime") + " \n";

      }).scrollToBottom();

    $(this).blur();

    return false;

  });

  $(".btState").click(function () {

    $('.elStatus').val(function (i, v) {

      return v + "State: " + ($(".elStatus").idleTimer("isIdle") ? "idle" : "active") + " \n";

    }).scrollToBottom();

    $(this).blur();

    return false;

  });



  //Clear value if there was one cached & start time

  $('.elStatus').val('').idleTimer({

    timeout: elementTimeout,

    timerSyncId: "element-timer-demo"

  });



  //For demo purposes, show initial state

  if ($(".elStatus").idleTimer("isIdle")) {

    $(".elStatus").val(function (i, v) {

      return v + "Initial Idle @ " + moment().format() + " \n";

    }).removeClass("alert-success").addClass("alert-warning").scrollToBottom();

  } else {

    $('.elStatus')

      .val(function (i, v) {

        return v + "Initial Active @ " + moment().format() + " \n";

      }).addClass("alert-success").removeClass("alert-warning").scrollToBottom();

  }



  // Display the actual timeout on the page

  $('.elTimeout').text(elementTimeout / 1000);



  //    documents script idle timer   //

  // ---------------------------------

  var docTimeout = 5000;



  /*

  Handle raised idle/active events

  */

  $(document).on("idle.idleTimer", function (event, elem, obj) {

    $(".docStatus")

      .val(function (i, v) {

        return v + "Idle @ " + moment().format() + " \n";

      }).removeClass("alert-success").addClass("alert-warning").scrollToBottom();

  });

  $(document).on("active.idleTimer", function (event, elem, obj, e) {

    $('.docStatus')

      .val(function (i, v) {

        return v + "Active [" + e.type + "] [" + e.target.nodeName + "] @ " + moment().format() + " \n";

      }).addClass("alert-success").removeClass("alert-warning").scrollToBottom();

  });



  /*

  Handle button events

  */

  $(".btPause").click(function () {

    $(document).idleTimer("pause");

    $('.docStatus').val(function (i, v) {

      return v + "Paused @ " + moment().format() + " \n";

    }).scrollToBottom();

    $(this).blur();

    return false;

  });

  $(".btResume").click(function () {

    $(document).idleTimer("resume");

    $('.docStatus').val(function (i, v) {

      return v + "Resumed @ " + moment().format() + " \n";

    }).scrollToBottom();

    $(this).blur();

    return false;

  });

  $(".btElapsed").click(function () {

    $('.docStatus').val(function (i, v) {

      return v + "Elapsed (since becoming active): " + $(document).idleTimer("getElapsedTime") + " \n";

    }).scrollToBottom();

    $(this).blur();

    return false;

  });

  $(".btDestroy").click(function () {

    $(document).idleTimer("destroy");

    $('.docStatus').val(function (i, v) {

      return v + "Destroyed: @ " + moment().format() + " \n";

    }).removeClass("alert-success").removeClass("alert-warning").scrollToBottom();

    $(this).blur();

    return false;

  });

  $(".btInit").click(function () {

    // for demo purposes show init with just object

    $(document).idleTimer({

      timeout: docTimeout

    });

    $('.docStatus').val(function (i, v) {

        return v + "Init: @ " + moment().format() + " \n";

      })

      .scrollToBottom();



    //Apply classes for default state

    if ($(document).idleTimer("isIdle")) {

      $('.docStatus').removeClass("alert-success").addClass("alert-warning");

    } else {

      $('.docStatus').addClass("alert-success").removeClass("alert-warning");

    }

    $(this).blur();

    return false;

  });



  //Clear old statuses

  $('.docStatus').val('');



  //Start timeout, passing no options

  $(document).idleTimer({

    timeout: docTimeout,

    timerSyncId: "document-timer-demo"

  });



  //For demo purposes, style based on initial state

  if ($(document).idleTimer("isIdle")) {

    $(".docStatus")

      .val(function (i, v) {

        return v + "Initial Idle State @ " + moment().format() + " \n";

      }).removeClass("alert-success").addClass("alert-warning").scrollToBottom();

  } else {

    $('.docStatus')

      .val(function (i, v) {

        return v + "Initial Active State @ " + moment().format() + " \n";

      }).addClass("alert-success").removeClass("alert-warning").scrollToBottom();

  }



  // display the actual timeout on the page

  $('.docTimeout').text(docTimeout / 1000);



  //     Numeral Js  script     //

  // ----------------------------



  // default Value

  $(".dNum").text(numeral(974).value());

  // formate

  $(".fnum").text(numeral(1230974).format('0.0a'));

  // currency

  $(".fcurrecy").text(numeral(1000.234).format("$0,0.000"));

  // bytes

  $(".fbytes").text(numeral(3467479682787).format('0.000ib'));

  // percentages

  $(".fpercent").text(numeral(0.974878234).format('0.000%'));

  // time

  $(".ftime").text(numeral(63846).format('00:00:00'));

  // exponential

  $(".fexponential").text(numeral(1123456789).format('0,0e+0'));

});

