Bladeren bron

added new notification
added ping ms
this is still WIP

causefx 8 jaren geleden
bovenliggende
commit
19571a2f98

+ 5 - 1
api/config/default.php

@@ -155,5 +155,9 @@ return array(
 	'adminPingRefresh' => '60000',
 	'otherPingRefresh' => '600000',
 	'pingOfflineSound' => 'plugins/sounds/default/open-ended.mp3',
-	'pingOnlineSound' => 'plugins/sounds/default/awareness.mp3'
+	'pingOnlineSound' => 'plugins/sounds/default/awareness.mp3',
+	'pingMs' => false,
+	'pingAuthMs' => '1',
+	'notificationBackbone' => 'toastr',
+	'notificationPosition' => 'br'
 );

+ 48 - 0
api/functions/option-functions.php

@@ -41,6 +41,54 @@ function optionLimit()
 	);
 }
 
+function optionNotificationTypes()
+{
+	return array(
+		array(
+			'name' => 'Style 1',
+			'value' => 'toastr'
+		),
+		array(
+			'name' => 'Style 2',
+			'value' => 'izi'
+		),
+	);
+}
+
+function optionNotificationPositions()
+{
+	return array(
+		array(
+			'name' => 'Bottom Right',
+			'value' => 'br'
+		),
+		array(
+			'name' => 'Bottom Left',
+			'value' => 'bl'
+		),
+		array(
+			'name' => 'Bottom Center',
+			'value' => 'bc'
+		),
+		array(
+			'name' => 'Top Right',
+			'value' => 'tr'
+		),
+		array(
+			'name' => 'Top Left',
+			'value' => 'tl'
+		),
+		array(
+			'name' => 'Top Center',
+			'value' => 'tc'
+		),
+		array(
+			'name' => 'Center',
+			'value' => 'c'
+		),
+	);
+}
+
 function optionTime()
 {
 	return array(

+ 35 - 0
api/functions/organizr-functions.php

@@ -45,8 +45,14 @@ function organizrSpecialSettings()
 			'offlineSound' => $GLOBALS['pingOfflineSound'],
 			'auth' => $GLOBALS['pingAuth'],
 			'authMessage' => $GLOBALS['pingAuthMessage'],
+			'authMs' => $GLOBALS['pingAuthMs'],
+			'ms' => $GLOBALS['pingMs'],
 			'adminRefresh' => $GLOBALS['adminPingRefresh'],
 			'everyoneRefresh' => $GLOBALS['otherPingRefresh'],
+		),
+		'notifications' => array(
+			'backbone' => $GLOBALS['notificationBackbone'],
+			'position' => $GLOBALS['notificationPosition']
 		)
 	);
 }
@@ -477,6 +483,19 @@ function getSettingsMain()
 				'value' => $GLOBALS['pingOfflineSound'],
 				'options' => getSounds()
 			),
+			array(
+				'type' => 'switch',
+				'name' => 'pingMs',
+				'label' => 'Show Ping Time',
+				'value' => $GLOBALS['pingMs']
+			),
+			array(
+				'type' => 'select',
+				'name' => 'pingAuthMs',
+				'label' => 'Minimum Authentication for Time Display',
+				'value' => $GLOBALS['pingAuthMs'],
+				'options' => groupSelect()
+			),
 			array(
 				'type' => 'select',
 				'name' => 'adminPingRefresh',
@@ -785,6 +804,22 @@ function getCustomizeAppearance()
 					)
 				)
 			),
+			'Notifications' => array(
+				array(
+					'type' => 'select',
+					'name' => 'notificationBackbone',
+					'label' => 'Type',
+					'value' => $GLOBALS['notificationBackbone'],
+					'options' => optionNotificationTypes()
+				),
+				array(
+					'type' => 'select',
+					'name' => 'notificationPosition',
+					'label' => 'Position',
+					'value' => $GLOBALS['notificationPosition'],
+					'options' => optionNotificationPositions()
+				),
+			),
 			'FavIcon' => array(
 				array(
 					'type' => 'textbox',

+ 5 - 5
api/pages/wizard.php

@@ -129,19 +129,19 @@ $pageWizard = '
                     if(html.data == true){
                         location.reload();
                     }else if(html.data == \'token\'){
-                        message("",window.lang.translate(\'Could not create Token\'),"bottom-right","#FFF","error","3500");
+                        message("",window.lang.translate(\'Could not create Token\'),activeInfo.settings.notifications.position,"#FFF","error","3500");
 						console.error(\'Organizr Function: Could not create Token\');
 					}else if(html.data == \'db\'){
-						message("",window.lang.translate(\'Could not create DB - check permissions\'),"bottom-right","#FFF","error","3500");
+						message("",window.lang.translate(\'Could not create DB - check permissions\'),activeInfo.settings.notifications.position,"#FFF","error","3500");
 						console.error(\'Organizr Function: Could not create DB - check permissions\');
 					}else if(html.data == \'admin\'){
-						message("",window.lang.translate(\'Could not create admin acct\'),"bottom-right","#FFF","error","3500");
+						message("",window.lang.translate(\'Could not create admin acct\'),activeInfo.settings.notifications.position,"#FFF","error","3500");
 						console.error(\'Organizr Function: Could not create admin acct\');
 					}else if(html.data == \'config\'){
-						message("",window.lang.translate(\'Could not create config files - check permissions\'),"bottom-right","#FFF","error","3500");
+						message("",window.lang.translate(\'Could not create config files - check permissions\'),activeInfo.settings.notifications.position,"#FFF","error","3500");
 						console.error(\'Organizr Function: Could not create config files - check permissions\');
 					}else{
-						message("",window.lang.translate(\'Sign-up Error Occurred\'),"bottom-right","#FFF","error","3500");
+						message("",window.lang.translate(\'Sign-up Error Occurred\'),activeInfo.settings.notifications.position,"#FFF","error","3500");
                         console.error(\'Organizr Function: Sign-up Error Occurred\');
                     }
             	}).fail(function(xhr) {

+ 14 - 14
api/plugins/js/invites.js

@@ -86,13 +86,13 @@ function joinPlex(){
     var password = $('#invitePlexJoinPassword');
     if(username.val() == ''){
         username.focus();
-        message('Invite Error',' Please Enter Username','bottom-right','#FFF','warning','5000');
+        message('Invite Error',' Please Enter Username',activeInfo.settings.notifications.position,'#FFF','warning','5000');
     }else if(email.val() == ''){
         email.focus();
-        message('Invite Error',' Please Enter Email','bottom-right','#FFF','warning','5000');
+        message('Invite Error',' Please Enter Email',activeInfo.settings.notifications.position,'#FFF','warning','5000');
     }else if(password.val() == ''){
         password.focus();
-        message('Invite Error',' Please Enter Passowrd','bottom-right','#FFF','warning','5000');
+        message('Invite Error',' Please Enter Passowrd',activeInfo.settings.notifications.position,'#FFF','warning','5000');
     }
     if(email.val() !== '' && username.val() !== '' && password.val() !== ''){
         organizrAPI('POST','api/?v1/plex/join',{username:username.val(), email:email.val(), password:password.val()}).success(function(data) {
@@ -100,11 +100,11 @@ function joinPlex(){
             if(response.data === true){
                 $('.invite-step-3-plex-no').toggleClass('hidden');
                 $('.invite-step-3-plex-yes').toggleClass('hidden');
-                message('Invite Function',' User Created','bottom-right','#FFF','success','5000');
+                message('Invite Function',' User Created',activeInfo.settings.notifications.position,'#FFF','success','5000');
                 $('#inviteUsernameInvite').val(username.val());
                 hasPlexUsername();
             }else{
-                message('Invite Error',' '+response.data,'bottom-right','#FFF','warning','5000');
+                message('Invite Error',' '+response.data,activeInfo.settings.notifications.position,'#FFF','warning','5000');
             }
     	}).fail(function(xhr) {
     		console.error("Organizr Function: API Connection Failed");
@@ -131,7 +131,7 @@ function hasPlexUsername(){
     var username = $('#inviteUsernameInvite');
     if(username.val() == ''){
         username.focus();
-        message('Invite Error',' Please Enter Username','bottom-right','#FFF','warning','5000');
+        message('Invite Error',' Please Enter Username',activeInfo.settings.notifications.position,'#FFF','warning','5000');
     }else{
         var post = {
             plugin:'Invites/codes',
@@ -149,7 +149,7 @@ function hasPlexUsername(){
             		local('remove', 'invite');
             	}
             }else{
-                message('Invite Error',' Code Incorrect','bottom-right','#FFF','warning','5000');
+                message('Invite Error',' Code Incorrect',activeInfo.settings.notifications.position,'#FFF','warning','5000');
             }
             ajaxloader();;
         }).fail(function(xhr) {
@@ -172,7 +172,7 @@ function verifyInvite(){
             $('.invite-step-1').toggleClass('hidden');
             $('.invite-step-2').toggleClass('hidden');
         }else{
-            message('Invite Error',' Code Incorrect','bottom-right','#FFF','warning','5000');
+            message('Invite Error',' Code Incorrect',activeInfo.settings.notifications.position,'#FFF','warning','5000');
         }
         if(local('get', 'invite')){
             local('remove', 'invite');
@@ -204,10 +204,10 @@ function createNewInvite(){
     var email = $('#new-invite-form-inputEmail');
     if(username.val() == ''){
         username.focus();
-        message('Invite Error',' Please Enter Username','bottom-right','#FFF','warning','5000');
+        message('Invite Error',' Please Enter Username',activeInfo.settings.notifications.position,'#FFF','warning','5000');
     }else if(email.val() == ''){
         email.focus();
-        message('Invite Error',' Please Enter Email','bottom-right','#FFF','warning','5000');
+        message('Invite Error',' Please Enter Email',activeInfo.settings.notifications.position,'#FFF','warning','5000');
     }
 
     if(email.val() !== '' && username.val() !== ''){
@@ -223,11 +223,11 @@ function createNewInvite(){
             var response = JSON.parse(data);
             $.magnificPopup.close();
             ajaxloader();
-            message('Invite',' Invite Created','bottom-right','#FFF','success','5000');
+            message('Invite',' Invite Created',activeInfo.settings.notifications.position,'#FFF','success','5000');
         }).fail(function(xhr) {
             console.error("Organizr Function: API Connection Failed");
             ajaxloader();
-            message('Invite Error',' An Error Occured','bottom-right','#FFF','error','5000');
+            message('Invite Error',' An Error Occured',activeInfo.settings.notifications.position,'#FFF','error','5000');
         });
     }
 
@@ -244,11 +244,11 @@ function deleteInvite(id){
         $('#inviteItem-'+id).remove();
         //$.magnificPopup.close();
         ajaxloader();
-        message('Invite',' Invite Deleted','bottom-right','#FFF','success','5000');
+        message('Invite',' Invite Deleted',activeInfo.settings.notifications.position,'#FFF','success','5000');
     }).fail(function(xhr) {
         console.error("Organizr Function: API Connection Failed");
         ajaxloader();
-        message('Invite Error',' An Error Occured','bottom-right','#FFF','error','5000');
+        message('Invite Error',' An Error Occured',activeInfo.settings.notifications.position,'#FFF','error','5000');
     });
 
 }

+ 8 - 8
api/plugins/js/php-mailer.js

@@ -48,11 +48,11 @@ function sendMail(){
     var subject = $('#sendEmailSubjectInput').val();
     var body = tinyMCE.get('sendEmail').getContent();
     if(to == ''){
-        messageSingle('','Please Enter Email','bottom-right','#FFF','error','5000');
+        messageSingle('','Please Enter Email',activeInfo.settings.notifications.position,'#FFF','error','5000');
     }else if(subject == ''){
-        messageSingle('','Please Enter Subject','bottom-right','#FFF','error','5000');
+        messageSingle('','Please Enter Subject',activeInfo.settings.notifications.position,'#FFF','error','5000');
     }else if(body == ''){
-        messageSingle('','Please Enter Body','bottom-right','#FFF','error','5000');
+        messageSingle('','Please Enter Body',activeInfo.settings.notifications.position,'#FFF','error','5000');
     }
     if(to !== '' && subject !== '' && body !== ''){
         var post = {
@@ -66,9 +66,9 @@ function sendMail(){
             var response = JSON.parse(data);
             if(response.data == true){
                 $.magnificPopup.close();
-                messageSingle('',window.lang.translate('Email Sent Successful'),'bottom-right','#FFF','success','5000');
+                messageSingle('',window.lang.translate('Email Sent Successful'),activeInfo.settings.notifications.position,'#FFF','success','5000');
             }else{
-                messageSingle('',response.data,'bottom-right','#FFF','error','5000');
+                messageSingle('',response.data,activeInfo.settings.notifications.position,'#FFF','error','5000');
             }
         }).fail(function(xhr) {
             console.error("Organizr Function: API Connection Failed");
@@ -300,7 +300,7 @@ $(document).on('click', '#PHPMAILER-settings-button', function() {
 });
 // SEND TEST EMAIL
 $(document).on('click', '.phpmSendTestEmail', function() {
-    messageSingle('',window.lang.translate('Sending Test E-Mail'),'bottom-right','#FFF','info','5000');
+    messageSingle('',window.lang.translate('Sending Test E-Mail'),activeInfo.settings.notifications.position,'#FFF','info','5000');
     var post = {
         plugin:'PHPMailer/send/test', // used for switch case in your API call
     };
@@ -308,9 +308,9 @@ $(document).on('click', '.phpmSendTestEmail', function() {
     organizrAPI('POST','api/?v1/plugin',post).success(function(data) {
         var response = JSON.parse(data);
         if(response.data == true){
-            messageSingle('',window.lang.translate('Email Test Successful'),'bottom-right','#FFF','success','5000');
+            messageSingle('',window.lang.translate('Email Test Successful'),activeInfo.settings.notifications.position,'#FFF','success','5000');
         }else{
-            messageSingle('',response.data,'bottom-right','#FFF','error','5000');
+            messageSingle('',response.data,activeInfo.settings.notifications.position,'#FFF','error','5000');
         }
     }).fail(function(xhr) {
         console.error("Organizr Function: API Connection Failed");

+ 61 - 8
css/organizr.css

@@ -896,12 +896,12 @@ i.fa.fa-life-ring.fa-fw {
 }
 .ping .heartbit {
     position: absolute;
-    top: -20px;
+    top: -15px;
     left: 15px;
-    height: 30px;
-    width: 30px;
+    height: 25px;
+    width: 25px;
     z-index: 10;
-    border: 5px solid #EF5350;
+    border: 5px solid #ff7676;
     border-radius: 70px;
     -moz-animation: heartbit 1s ease-out;
     -moz-animation-iteration-count: infinite;
@@ -912,18 +912,71 @@ i.fa.fa-life-ring.fa-fw {
     animation-iteration-count: infinite;
 }
 .ping .point {
-    width: 10px;
-    height: 10px;
+    width: 6px;
+    height: 6px;
     -webkit-border-radius: 30px;
     -moz-border-radius: 30px;
     border-radius: 30px;
-    background-color: #F44336;
+    background-color: #ff7676;
     position: absolute;
     left: 25px;
-    top: -10px;
+    top: -5px;
 }
 .sidebar .arrow {
     position: absolute;
     right: 20px;
     top: 17px;
+}
+/* NOTIFY ALTERS */
+.iziToast.success-notify>.iziToast-body .iziToast-icon {
+    color: rgb(0, 255, 184);
+}
+.iziToast.success-notify>.iziToast-body .iziToast-title,
+.iziToast.success-notify>.iziToast-body .iziToast-message {
+    color: white;
+}
+.success-notify .iziToast-progressbar div {
+    background: rgb(0, 255, 184);
+}
+.iziToast.success-notify.iziToast-layout2 {
+    background: #1b1a1a;
+}
+.iziToast.info-notify>.iziToast-body .iziToast-icon {
+    color: #3A83F0;
+}
+.iziToast.info-notify>.iziToast-body .iziToast-title,
+.iziToast.info-notify>.iziToast-body .iziToast-message {
+    color: white;
+}
+.info-notify .iziToast-progressbar div {
+    background: #3A83F0;
+}
+.iziToast.info-notify.iziToast-layout2 {
+    background: #1b1a1a;
+}
+.iziToast.warning-notify>.iziToast-body .iziToast-icon {
+    color: #FFEB3B;
+}
+.iziToast.warning-notify>.iziToast-body .iziToast-title,
+.iziToast.warning-notify>.iziToast-body .iziToast-message {
+    color: white;
+}
+.warning-notify .iziToast-progressbar div {
+    background: #FFEB3B;
+}
+.iziToast.warning-notify.iziToast-layout2 {
+    background: #1b1a1a;
+}
+.iziToast.error-notify>.iziToast-body .iziToast-icon {
+    color: #F44336;
+}
+.iziToast.error-notify>.iziToast-body .iziToast-title,
+.iziToast.error-notify>.iziToast-body .iziToast-message {
+    color: white;
+}
+.error-notify .iziToast-progressbar div {
+    background: #F44336;
+}
+.iziToast.error-notify.iziToast-layout2 {
+    background: #1b1a1a;
 }

File diff suppressed because it is too large
+ 0 - 0
css/organizr.min.css


+ 0 - 2
index.php

@@ -12,7 +12,6 @@
     <title>Organizr v2</title>
     <link href="bootstrap/dist/css/bootstrap.min.css" rel="stylesheet">
     <link href="plugins/bower_components/sidebar-nav/dist/sidebar-nav.min.css" rel="stylesheet">
-    <link href="plugins/bower_components/toast-master/css/jquery.toast.css" rel="stylesheet">
     <link href="plugins/bower_components/jquery-wizard-master/css/wizard.css" rel="stylesheet">
     <link href="plugins/bower_components/datatables/jquery.dataTables.min.css" rel="stylesheet" type="text/css"/>
     <link href="plugins/bower_components/jquery-wizard-master/libs/formvalidation/formValidation.min.css"
@@ -130,7 +129,6 @@
 <script src="plugins/bower_components/sidebar-nav/dist/sidebar-nav.js"></script>
 <script src="js/jquery.slimscroll.js"></script>
 <script src="js/waves.js"></script>
-<script src="plugins/bower_components/toast-master/js/jquery.toast.js"></script>
 <script src="plugins/bower_components/styleswitcher/jQuery.style.switcher.js"></script>
 <script src="plugins/bower_components/moment/moment.js"></script>
 <script src="plugins/bower_components/moment/moment-timezone.js"></script>

+ 44 - 49
js/custom.js

@@ -9,7 +9,7 @@ $(document).ready(function () {
     pageLoad();
     var clipboard = new Clipboard('.clipboard');
     clipboard.on('success', function(e) {
-        message('Clipboard',e.text,'bottom-right','#FFF','info','5000');
+        message('Clipboard',e.text,activeInfo.settings.notifications.position,'#FFF','info','5000');
         e.clearSelection();
     });
     "use strict";
@@ -215,7 +215,7 @@ function pageLoad(){
                 if($.magnificPopup.instance.currItem.inlineElement.find('.rubberBand').length !== 0){
                     if(!$.magnificPopup.instance.currItem.inlineElement.find('.rubberBand').hasClass('hidden')){
                         var magIndex = $.magnificPopup.instance.currItem.index;
-                        message('You forgot to save','<a class="mouse" onclick="$(\'.popup-with-form\').magnificPopup(\'open\','+magIndex+')">Would you like to go back?</a>','bottom-right','#FFF','warning','5000');
+                        message('You forgot to save','<a class="mouse" onclick="$(\'.popup-with-form\').magnificPopup(\'open\','+magIndex+')">Would you like to go back?</a>',activeInfo.settings.notifications.position,'#FFF','warning','5000');
                     }
                 }
             },
@@ -341,8 +341,7 @@ $(document).on("click", ".login-button", function(e) {
             location.reload();
         }else if(html.data == 'mismatch'){
             $('div.login-box').unblock({});
-            $.toast().reset('all');
-            message('Login Error',' Wrong username/email/password combo','bottom-right','#FFF','warning','10000');
+            message('Login Error',' Wrong username/email/password combo',activeInfo.settings.notifications.position,'#FFF','warning','10000');
             console.error('Organizr Function: Login failed - wrong username/email/password');
         }
     }).fail(function(xhr) {
@@ -358,12 +357,10 @@ $(document).on("click", ".register-button", function(e) {
         if(html.data == true){
             location.reload();
         }else if(html.data == 'mismatch'){
-            $.toast().reset('all');
-            message('Registration Error',' Wrong Registration Password','bottom-right','#FFF','warning','10000');
+            message('Registration Error',' Wrong Registration Password',activeInfo.settings.notifications.position,'#FFF','warning','10000');
             console.error('Organizr Function: Registration failed - Wrong Registration Password');
         }else if(html.data == 'username taken'){
-            $.toast().reset('all');
-            message('Registration Error',' Registration Error - Username/Email Taken','bottom-right','#FFF','warning','10000');
+            message('Registration Error',' Registration Error - Username/Email Taken',activeInfo.settings.notifications.position,'#FFF','warning','10000');
             console.error('Organizr Function: Registration Failed - Username/Email Taken');
         }
     }).fail(function(xhr) {
@@ -380,22 +377,20 @@ $(document).on("click", ".reset-button", function(e) {
         organizrAPI('POST','api/?v1/recover',post).success(function(data) {
             var html = JSON.parse(data);
             if(html.data == true){
-                message('Recover Password',' Email Sent','bottom-right','#FFF','success','10000');
+                message('Recover Password',' Email Sent',activeInfo.settings.notifications.position,'#FFF','success','10000');
                 $('#leave-recover').trigger('click');
             }else if(html.data == 'an error occured'){
-                $.toast().reset('all');
-                message('Recover Error',' User Error','bottom-right','#FFF','warning','10000');
+                message('Recover Error',' User Error',activeInfo.settings.notifications.position,'#FFF','warning','10000');
                 console.error('Organizr Function: Recover failed - Wrong Registration Password');
             }else if(html.data == 'username taken'){
-                $.toast().reset('all');
-                message('Recover Error',' Registration Error - Username/Email Taken','bottom-right','#FFF','warning','10000');
+                message('Recover Error',' Registration Error - Username/Email Taken',activeInfo.settings.notifications.position,'#FFF','warning','10000');
                 console.error('Organizr Function: Recover Failed - Username/Email Taken');
             }
         }).fail(function(xhr) {
             console.error("Organizr Function: Login Failed");
         });
     }else{
-        message('Recover Error','Enter Email','bottom-right','#FFF','warning','10000');
+        message('Recover Error','Enter Email',activeInfo.settings.notifications.position,'#FFF','warning','10000');
     }
 });
 $(document).on("click", ".open-close", function () {
@@ -423,13 +418,13 @@ $(document).on("click", ".editGroup", function () {
         error:'Organizr Function: User Group API Connection Failed'
     };
     if (typeof post.id == 'undefined' || post.id == '') {
-        message('New Group Error',' Could not get Group ID','bottom-right','#FFF','error','5000');
+        message('New Group Error',' Could not get Group ID',activeInfo.settings.notifications.position,'#FFF','error','5000');
     }
     if (typeof post.groupName == 'undefined' || post.groupName == '') {
-        message('New Group Error',' Please set a Group Name','bottom-right','#FFF','warning','5000');
+        message('New Group Error',' Please set a Group Name',activeInfo.settings.notifications.position,'#FFF','warning','5000');
     }
     if (typeof post.groupImage == 'undefined' || post.groupImage == '') {
-        message('New Group Error',' Please set a Group Image','bottom-right','#FFF','warning','5000');
+        message('New Group Error',' Please set a Group Image',activeInfo.settings.notifications.position,'#FFF','warning','5000');
     }
     if(post.id !== '' && post.groupName !== '' && post.groupImage !== '' ){
         var callbacks = $.Callbacks();
@@ -489,13 +484,13 @@ $(document).on("click", ".addNewGroup", function () {
         error:'Organizr Function: User Group API Connection Failed'
     };
     if (typeof post.newGroupID == 'undefined' || post.newGroupID == '') {
-        message('New Group Error',' Could not get next Group ID','bottom-right','#FFF','error','5000');
+        message('New Group Error',' Could not get next Group ID',activeInfo.settings.notifications.position,'#FFF','error','5000');
     }
     if (typeof post.newGroupName == 'undefined' || post.newGroupName == '') {
-        message('New Group Error',' Please set a Group Name','bottom-right','#FFF','warning','5000');
+        message('New Group Error',' Please set a Group Name',activeInfo.settings.notifications.position,'#FFF','warning','5000');
     }
     if (typeof post.newGroupImage == 'undefined' || post.newGroupImage == '') {
-        message('New Group Error',' Please set a Group Image','bottom-right','#FFF','warning','5000');
+        message('New Group Error',' Please set a Group Image',activeInfo.settings.notifications.position,'#FFF','warning','5000');
     }
     if(post.newGroupID !== '' && post.newGroupName !== '' && post.newGroupImage !== '' ){
         var callbacks = $.Callbacks();
@@ -519,13 +514,13 @@ $(document).on("click", ".addNewUser", function () {
         error:'Organizr Function: User API Connection Failed'
     };
     if (typeof post.username == 'undefined' || post.username == '') {
-        message('New User Error',' Please set a Username','bottom-right','#FFF','error','5000');
+        message('New User Error',' Please set a Username',activeInfo.settings.notifications.position,'#FFF','error','5000');
     }
     if (typeof post.email == 'undefined' || post.email == '') {
-        message('New User Error',' Please set an Email','bottom-right','#FFF','warning','5000');
+        message('New User Error',' Please set an Email',activeInfo.settings.notifications.position,'#FFF','warning','5000');
     }
     if (typeof post.password == 'undefined' || post.password == '') {
-        message('New User Error',' Please set a Password','bottom-right','#FFF','warning','5000');
+        message('New User Error',' Please set a Password',activeInfo.settings.notifications.position,'#FFF','warning','5000');
     }
     if(post.username !== '' && post.email !== '' && post.password !== '' ){
         var callbacks = $.Callbacks();
@@ -556,16 +551,16 @@ $(document).on("click", ".editUserAdmin", function () {
         error:'Organizr Function: API Connection Failed'
     };
     if (typeof post.id == 'undefined' || post.id == '') {
-        message('Edit User Error',' Could not get User ID','bottom-right','#FFF','error','5000');
+        message('Edit User Error',' Could not get User ID',activeInfo.settings.notifications.position,'#FFF','error','5000');
     }
     if (typeof post.username == 'undefined' || post.username == '') {
-        message('Edit User Error',' Please set a Username','bottom-right','#FFF','warning','5000');
+        message('Edit User Error',' Please set a Username',activeInfo.settings.notifications.position,'#FFF','warning','5000');
     }
     if (typeof post.email == 'undefined' || post.email == '') {
-        message('Edit User Error',' Please set a User Email','bottom-right','#FFF','warning','5000');
+        message('Edit User Error',' Please set a User Email',activeInfo.settings.notifications.position,'#FFF','warning','5000');
     }
     if (post.password !== '' && post.password !== $('#edit-user-form [name=password2]').val()){
-        message('Edit User Error',' Passwords do not match!','bottom-right','#FFF','warning','5000');
+        message('Edit User Error',' Passwords do not match!',activeInfo.settings.notifications.position,'#FFF','warning','5000');
     }
     if(post.id !== '' && post.username !== '' && post.email !== '' ){
         var callbacks = $.Callbacks();
@@ -810,16 +805,16 @@ $(document).on("click", ".editTab", function () {
         error:'Organizr Function: Tab Editor API Connection Failed'
     };
     if (typeof post.id == 'undefined' || post.id == '') {
-        message('Edit Tab Error',' Could not get Tab ID','bottom-right','#FFF','error','5000');
+        message('Edit Tab Error',' Could not get Tab ID',activeInfo.settings.notifications.position,'#FFF','error','5000');
     }
     if (typeof post.tabName == 'undefined' || post.tabName == '') {
-        message('Edit Tab Error',' Please set a Tab Name','bottom-right','#FFF','warning','5000');
+        message('Edit Tab Error',' Please set a Tab Name',activeInfo.settings.notifications.position,'#FFF','warning','5000');
     }
     if (typeof post.tabImage == 'undefined' || post.tabImage == '') {
-        message('Edit Tab Error',' Please set a Tab Image','bottom-right','#FFF','warning','5000');
+        message('Edit Tab Error',' Please set a Tab Image',activeInfo.settings.notifications.position,'#FFF','warning','5000');
     }
     if (typeof post.tabURL == 'undefined' || post.tabURL == '') {
-        message('Edit Tab Error',' Please set a Tab URL','bottom-right','#FFF','warning','5000');
+        message('Edit Tab Error',' Please set a Tab URL',activeInfo.settings.notifications.position,'#FFF','warning','5000');
     }
     if(post.id !== '' && post.tabName !== '' && post.tabImage !== '' && post.tabURL !== '' ){
         var callbacks = $.Callbacks();
@@ -849,16 +844,16 @@ $(document).on("click", ".addNewTab", function () {
         error:'Organizr Function: Tab API Connection Failed'
     };
     if (typeof post.tabOrder == 'undefined' || post.tabOrder == '') {
-        message('New Tab Error',' Could not get next Group ID','bottom-right','#FFF','error','5000');
+        message('New Tab Error',' Could not get next Group ID',activeInfo.settings.notifications.position,'#FFF','error','5000');
     }
     if (typeof post.tabName == 'undefined' || post.tabName == '') {
-        message('New Tab Error',' Please set a Tab Name','bottom-right','#FFF','error','5000');
+        message('New Tab Error',' Please set a Tab Name',activeInfo.settings.notifications.position,'#FFF','error','5000');
     }
     if (typeof post.tabURL == 'undefined' || post.tabURL == '') {
-        message('New Tab Error',' Please set a Tab URL','bottom-right','#FFF','warning','5000');
+        message('New Tab Error',' Please set a Tab URL',activeInfo.settings.notifications.position,'#FFF','warning','5000');
     }
     if (typeof post.tabImage == 'undefined' || post.tabImage == '') {
-        message('New Tab Error',' Please set a Tab Image','bottom-right','#FFF','warning','5000');
+        message('New Tab Error',' Please set a Tab Image',activeInfo.settings.notifications.position,'#FFF','warning','5000');
     }
     if(post.tabOrder !== '' && post.tabName !== '' && post.tabURL !== '' && post.tabImage !== '' ){
         var callbacks = $.Callbacks();
@@ -889,16 +884,16 @@ $(document).on("click", ".addNewCategory", function () {
     };
     console.log(post);
     if (typeof post.categoryID == 'undefined' || post.categoryID == '') {
-        message('New Category Error',' Could not get next Category ID','bottom-right','#FFF','error','5000');
+        message('New Category Error',' Could not get next Category ID',activeInfo.settings.notifications.position,'#FFF','error','5000');
     }
     if (typeof post.categoryName == 'undefined' || post.categoryName == '') {
-        message('New Category Error',' Please set a Category Name','bottom-right','#FFF','error','5000');
+        message('New Category Error',' Please set a Category Name',activeInfo.settings.notifications.position,'#FFF','error','5000');
     }
     if (typeof post.categoryOrder == 'undefined' || post.categoryOrder == '') {
-        message('New Category Error',' Could not get Category Order','bottom-right','#FFF','warning','5000');
+        message('New Category Error',' Could not get Category Order',activeInfo.settings.notifications.position,'#FFF','warning','5000');
     }
     if (typeof post.categoryImage == 'undefined' || post.categoryImage == '') {
-        message('New Category Error',' Please set a Category Image','bottom-right','#FFF','warning','5000');
+        message('New Category Error',' Please set a Category Image',activeInfo.settings.notifications.position,'#FFF','warning','5000');
     }
     if(post.categoryID !== '' && post.categoryName !== '' && post.categoryOrder !== '' && post.categoryImage !== '' ){
         var callbacks = $.Callbacks();
@@ -959,13 +954,13 @@ $(document).on("click", ".editCategory", function () {
     };
     console.log(post);
     if (typeof post.id == 'undefined' || post.id == '') {
-        message('Edit Tab Error',' Could not get Tab ID','bottom-right','#FFF','error','5000');
+        message('Edit Tab Error',' Could not get Tab ID',activeInfo.settings.notifications.position,'#FFF','error','5000');
     }
     if (typeof post.name == 'undefined' || post.name == '') {
-        message('Edit Tab Error',' Please set a Tab Name','bottom-right','#FFF','warning','5000');
+        message('Edit Tab Error',' Please set a Tab Name',activeInfo.settings.notifications.position,'#FFF','warning','5000');
     }
     if (typeof post.image == 'undefined' || post.image == '') {
-        message('Edit Tab Error',' Please set a Tab Image','bottom-right','#FFF','warning','5000');
+        message('Edit Tab Error',' Please set a Tab Image',activeInfo.settings.notifications.position,'#FFF','warning','5000');
     }
     if(post.id !== '' && post.name !== '' && post.image !== ''){
         var callbacks = $.Callbacks();
@@ -1411,15 +1406,15 @@ $(document).on("click", ".closeErrorPage", function () {
 $(document).on("click", ".testPath", function () {
     var path = $("#form-location").val();
     if (typeof path == 'undefined' || path == '') {
-        message('Path Error',' Please enter a path for DB','bottom-right','#FFF','warning','10000');
+        message('Path Error',' Please enter a path for DB',activeInfo.settings.notifications.position,'#FFF','warning','10000');
     }else{
         organizrAPI('POST','api/?v1/wizard_path',{path:path}).success(function(data) {
             var html = JSON.parse(data);
             console.log(html);
             if(html.data == true){
-                message('Path',' Path is good to go','bottom-right','#FFF','success','10000');
+                message('Path',' Path is good to go',activeInfo.settings.notifications.position,'#FFF','success','10000');
             }else{
-                message('Path Error',' Path is not writable','bottom-right','#FFF','warning','10000');
+                message('Path Error',' Path is not writable',activeInfo.settings.notifications.position,'#FFF','warning','10000');
             }
         }).fail(function(xhr) {
             console.error("Organizr Function: Connection Failed");
@@ -1513,7 +1508,7 @@ $(document).on("click", ".playlist-filter li>a", function () {
 });
 // refresh cache image
 $(document).on("click", ".refreshImage", function(e) {
-    message('',' Refreshing Image...','bottom-right','#FFF','success','1000');
+    message('',' Refreshing Image...',activeInfo.settings.notifications.position,'#FFF','success','1000');
     e.preventDefault;
     var original = $(this).attr('data-image');
     var type = $(this).attr('data-type');
@@ -1534,7 +1529,7 @@ $(document).on("click", ".refreshImage", function(e) {
     //console.log(orginalElement)
     //console.log('replaced image with : '+original);
     setTimeout(function(){
-        message('Image Refreshed ',' Clear Cache Please','bottom-right','#FFF','success','3000');
+        message('Image Refreshed ',' Clear Cache Please',activeInfo.settings.notifications.position,'#FFF','success','3000');
     }, 1000);
 });
 // open tab code
@@ -1624,7 +1619,7 @@ $(document).on("click", ".downloader", function(e) {
 $(document).on("click", ".testTab", function () {
     var input = $('#new-tab-form-inputURLNew');
     if(input.val() == ''){
-        message('','Please enter a URL','bottom-right','#FFF','warning','5000');
+        message('','Please enter a URL',activeInfo.settings.notifications.position,'#FFF','warning','5000');
     }
     if(input.val() !== ''){
         var post = {
@@ -1648,7 +1643,7 @@ $(document).on("click", ".testTab", function () {
 $(document).on("click", ".testEditTab", function () {
     var input = $('#edit-tab-form-inputURL');
     if(input.val() == ''){
-        message('','Please enter a URL','bottom-right','#FFF','warning','5000');
+        message('','Please enter a URL',activeInfo.settings.notifications.position,'#FFF','warning','5000');
     }
     if(input.val() !== ''){
         var post = {

File diff suppressed because it is too large
+ 0 - 0
js/custom.min.js


+ 285 - 57
js/functions.js

@@ -204,14 +204,13 @@ function noTabs(arrayItems){
 	}
 }
 function logout(){
-	message('',' Goodbye!','bottom-right','#FFF','success','10000');
+	message('',' Goodbye!',activeInfo.settings.notifications.position,'#FFF','success','10000');
 	organizrAPI('GET','api/?v1/logout').success(function(data) {
 		var html = JSON.parse(data);
 		if(html.data == true){
 			location.reload();
 		}else{
-			$.toast().reset('all');
-			message('Logout Error',' An Error Occured','bottom-right','#FFF','warning','10000');
+			message('Logout Error',' An Error Occured',activeInfo.settings.notifications.position,'#FFF','warning','10000');
 			console.error('Organizr Function: Logout failed');
 		}
 	}).fail(function(xhr) {
@@ -470,30 +469,6 @@ function closeCurrentTab(){
 			console.error('Tab Function: Action not set');
 	}
 }
-function message(heading,text,position,color,icon,timeout){
-	$.toast({
-		heading: heading,
-		text: text,
-		position: position,
-		loaderBg: color,
-		icon: icon,
-		hideAfter: timeout,
-		stack: 6,
-		showHideTransition: 'slide',
-	});
-}
-function messageSingle(heading,text,position,color,icon,timeout){
-	$.toast({
-		heading: heading,
-		text: text,
-		position: position,
-		loaderBg: color,
-		icon: icon,
-		hideAfter: timeout,
-		stack: 1,
-		showHideTransition: 'slide',
-	});
-}
 function tabActions(event,name, type){
 	if(event.ctrlKey){
 		popTab(cleanClass(name), type);
@@ -978,7 +953,7 @@ function settingsAPI(post, callbacks=null){
 	organizrAPI('POST',post.api,post).success(function(data) {
 		var response = JSON.parse(data);
 		console.log(response);
-		message(post.messageTitle,post.messageBody,"bottom-right","#FFF","success","5000");
+		message(post.messageTitle,post.messageBody,activeInfo.settings.notifications.position,"#FFF","success","5000");
 		if(callbacks){ callbacks.fire(); }
 	}).fail(function(xhr) {
 		console.error(post.error);
@@ -1013,7 +988,7 @@ function buildLanguage(replace=false,newLang=null){
 	`;
 	if(replace == true){
 		$('#languageDropdown').replaceWith(lang);
-		message("",window.lang.translate('Changed Language To')+": "+newLang,"bottom-right","#FFF","success","3500");
+		message("",window.lang.translate('Changed Language To')+": "+newLang,activeInfo.settings.notifications.position,"#FFF","success","3500");
 	}else if(replace == 'wizard'){
 		$(lang).appendTo('.navbar-right');
 	}else{
@@ -1030,9 +1005,9 @@ function removeFile(path,name){
 		organizrAPI('POST','api/?v1/remove/file',post).success(function(data) {
 			var response = JSON.parse(data);
 			if(response.data == true){
-				messageSingle('',window.lang.translate('Removed File')+' - '+name,'bottom-right','#FFF','success','5000');
+				messageSingle('',window.lang.translate('Removed File')+' - '+name,activeInfo.settings.notifications.position,'#FFF','success','5000');
 			}else{
-				messageSingle('','File Removal Error','bottom-right','#FFF','error','5000');
+				messageSingle('','File Removal Error',activeInfo.settings.notifications.position,'#FFF','error','5000');
 			}
 		}).fail(function(xhr) {
 			console.error("Organizr Function: API Connection Failed");
@@ -1048,7 +1023,7 @@ function updateUserInformation(){
 	var password2 = $('#accountPassword2').val();
 	if(password1 != password2){
 		passwordMatch = false;
-		messageSingle('','Passwords do not match','bottom-right','#FFF','error','5000');
+		messageSingle('','Passwords do not match',activeInfo.settings.notifications.position,'#FFF','error','5000');
 	}
 	if(username !== '' && email !== '' && passwordMatch == true){
 		var post = {
@@ -1061,9 +1036,9 @@ function updateUserInformation(){
 			var response = JSON.parse(data);
 			if(response.data == true){
 				$.magnificPopup.close();
-				messageSingle('',window.lang.translate('User Info Updated'),'bottom-right','#FFF','success','5000');
+				messageSingle('',window.lang.translate('User Info Updated'),activeInfo.settings.notifications.position,'#FFF','success','5000');
 			}else{
-				messageSingle('',response.data,'bottom-right','#FFF','error','5000');
+				messageSingle('',response.data,activeInfo.settings.notifications.position,'#FFF','error','5000');
 			}
 		}).fail(function(xhr) {
 			console.error("Organizr Function: API Connection Failed");
@@ -1172,7 +1147,7 @@ function userMenu(user){
 		`;
 	}
 	$(menuList).appendTo('.navbar-right').html;
-	message("",window.lang.translate('Welcome')+" "+user.data.user.username,"bottom-right","#FFF","success","3500");
+	message("",window.lang.translate('Welcome')+" "+user.data.user.username,activeInfo.settings.notifications.position,"#FFF","success","3500");
 	console.log(window.lang.translate('Welcome')+" "+user.data.user.username);
 }
 function menuExtras(active){
@@ -1221,7 +1196,8 @@ function buildInternalContainer(name,url,type){
 	return `<div id="internal-`+cleanClass(name)+`" data-type="`+type+`" class="internal-container frame-`+cleanClass(name)+` hidden" data-url="`+url+`" data-name="`+cleanClass(name)+`"></div>`;
 }
 function buildMenuList(name,url,type,icon,ping=null){
-    var ping = (ping !== null) ? `<div class="menu-`+cleanClass(ping)+`-ping" data-tab-name="`+name+`" data-previous-state=""></div>` : '';
+    var ping = (ping !== null) ? `<small class="menu-`+cleanClass(ping)+`-ping-ms hidden-xs label label-rouded label-inverse pull-right hidden">
+</small><div class="menu-`+cleanClass(ping)+`-ping" data-tab-name="`+name+`" data-previous-state=""></div>` : '';
 	return `<li id="menu-`+cleanClass(name)+`" type="`+type+`" data-url="`+url+`"><a class="waves-effect" onclick="tabActions(event,'`+cleanClass(name)+`',`+type+`);">`+iconPrefix(icon)+`<span class="hide-menu">`+name+`</span>`+ping+`</a></li>`;
 }
 function splashMenu(arrayItems){
@@ -1709,7 +1685,7 @@ function updateCheck(){
 		}
 		if(latest !== currentVersion){
 			console.log('Update Function: Update to '+latest+' is available');
-			message(window.lang.translate('Update Available'),latest+' '+window.lang.translate('is available, goto')+' <a href="javascript:void(0)" onclick="tabActions(event,\'Settings\',0);$.toast().reset(\'all\');$(\'#update-button\').click()"><span lang="en">Update Tab</span></a>','bottom-right','#FFF','update','60000');
+			message(window.lang.translate('Update Available'),latest+' '+window.lang.translate('is available, goto')+' <a href="javascript:void(0)" onclick="tabActions(event,\'Settings\',0);$(\'#update-button\').click()"><span lang="en">Update Tab</span></a>',activeInfo.settings.notifications.position,'#FFF','update','60000');
 		}
 		$('#githubVersions').html(buildVersion(reverseObject(json)));
 	}).fail(function(xhr) {
@@ -1752,47 +1728,47 @@ function updateNow(){
 	console.log('Organizr Function: Starting Update Process');
 	$(updateBar()).appendTo('.organizr-area');
 	updateUpdateBar('Starting Download','5%');
-	messageSingle(window.lang.translate('[DO NOT CLOSE WINDOW]'),window.lang.translate('Starting Update Process'),'bottom-right','#FFF','success','60000');
+	messageSingle(window.lang.translate('[DO NOT CLOSE WINDOW]'),window.lang.translate('Starting Update Process'),activeInfo.settings.notifications.position,'#FFF','success','60000');
 	organizrAPI('POST','api/?v1/update', {branch:activeInfo.branch,stage:1}).success(function(data) {
 		var json = JSON.parse(data);
 		if(json.data == true){
 			updateUpdateBar('Starting Unzip','50%');
-			messageSingle(window.lang.translate('[DO NOT CLOSE WINDOW]'),window.lang.translate('Update File Downloaded'),'bottom-right','#FFF','success','60000');
+			messageSingle(window.lang.translate('[DO NOT CLOSE WINDOW]'),window.lang.translate('Update File Downloaded'),activeInfo.settings.notifications.position,'#FFF','success','60000');
 			organizrAPI('POST','api/?v1/update', {branch:activeInfo.branch,stage:2}).success(function(data) {
 				var json = JSON.parse(data);
 				if(json.data == true){
 					updateUpdateBar('Starting Copy','70%');
-					messageSingle(window.lang.translate('[DO NOT CLOSE WINDOW]'),window.lang.translate('Update File Unzipped'),'bottom-right','#FFF','success','60000');
+					messageSingle(window.lang.translate('[DO NOT CLOSE WINDOW]'),window.lang.translate('Update File Unzipped'),activeInfo.settings.notifications.position,'#FFF','success','60000');
 					organizrAPI('POST','api/?v1/update', {branch:activeInfo.branch,stage:3}).success(function(data) {
 						var json = JSON.parse(data);
 						if(json.data == true){
 							updateUpdateBar('Starting Cleanup','90%');
-							messageSingle(window.lang.translate('[DO NOT CLOSE WINDOW]'),window.lang.translate('Update Files Copied'),'bottom-right','#FFF','success','60000');
+							messageSingle(window.lang.translate('[DO NOT CLOSE WINDOW]'),window.lang.translate('Update Files Copied'),activeInfo.settings.notifications.position,'#FFF','success','60000');
 							organizrAPI('POST','api/?v1/update', {branch:activeInfo.branch,stage:4}).success(function(data) {
 								var json = JSON.parse(data);
 								if(json.data == true){
 									updateUpdateBar('Restarting Organizr in','100%', true);
-									messageSingle(window.lang.translate('[DO NOT CLOSE WINDOW]'),window.lang.translate('Update Cleanup Finished'),'bottom-right','#FFF','success','60000');
+									messageSingle(window.lang.translate('[DO NOT CLOSE WINDOW]'),window.lang.translate('Update Cleanup Finished'),activeInfo.settings.notifications.position,'#FFF','success','60000');
 								}else{
-									message('',window.lang.translate('Update Cleanup Failed'),'bottom-right','#FFF','error','10000');
+									message('',window.lang.translate('Update Cleanup Failed'),activeInfo.settings.notifications.position,'#FFF','error','10000');
 								}
 							}).fail(function(xhr) {
 								console.error("Organizr Function: API Connection Failed");
 							});
 						}else{
-							message('',window.lang.translate('Update File Copy Failed'),'bottom-right','#FFF','error','10000');
+							message('',window.lang.translate('Update File Copy Failed'),activeInfo.settings.notifications.position,'#FFF','error','10000');
 						}
 					}).fail(function(xhr) {
 						console.error("Organizr Function: API Connection Failed");
 					});
 				}else{
-					message('',window.lang.translate('Update File Unzip Failed'),'bottom-right','#FFF','error','10000');
+					message('',window.lang.translate('Update File Unzip Failed'),activeInfo.settings.notifications.position,'#FFF','error','10000');
 				}
 			}).fail(function(xhr) {
 				console.error("Organizr Function: API Connection Failed");
 			});
 		}else{
-			message('',window.lang.translate('Update File Download Failed'),'bottom-right','#FFF','error','10000');
+			message('',window.lang.translate('Update File Download Failed'),activeInfo.settings.notifications.position,'#FFF','error','10000');
 		}
 	}).fail(function(xhr) {
 		console.error("Organizr Function: API Connection Failed");
@@ -2149,7 +2125,7 @@ function checkMessage(){
 	if(check){
 		local('remove', 'message');
 		var message = check.split('|');
-		messageSingle(window.lang.translate(message[0]),window.lang.translate(message[1]),'bottom-right','#FFF',message[2],'10000');
+		messageSingle(window.lang.translate(message[0]),window.lang.translate(message[1]),activeInfo.settings.notifications.position,'#FFF',message[2],'10000');
 	}
 }
 function setError(error){
@@ -2914,14 +2890,14 @@ function ombiActions(id,action,type){
 			homepageRequests();
 			if(action !== 'add'){
 				$.magnificPopup.close();
-				message("",window.lang.translate('Updated Request Item'),"bottom-right","#FFF","success","3500");
+				message("",window.lang.translate('Updated Request Item'),activeInfo.settings.notifications.position,"#FFF","success","3500");
 			}else{
 				ajaxloader();
-				message("",window.lang.translate('Added Request Item'),"bottom-right","#FFF","success","3500");
+				message("",window.lang.translate('Added Request Item'),activeInfo.settings.notifications.position,"#FFF","success","3500");
 			}
 		}else{
 			ajaxloader();
-			message("",msg,"bottom-right","#FFF","error","3500");
+			message("",msg,activeInfo.settings.notifications.position,"#FFF","error","3500");
 		}
 	}).fail(function(xhr) {
 		ajaxloader();
@@ -3585,18 +3561,18 @@ function homepageRequests(timeout){
 	timeouts['ombi'] = setTimeout(function(){ homepageRequests(timeout); }, timeout);
 }
 function testAPIConnection(service){
-    messageSingle('',' Testing now...','bottom-right','#FFF','success','10000');
+    messageSingle('',' Testing now...',activeInfo.settings.notifications.position,'#FFF','info','10000');
     organizrAPI('POST','api/?v1/test/api/connection',{action:service}).success(function(data) {
         var response = JSON.parse(data);
         if(response.data == true){
-            messageSingle('',' API Connection Success','bottom-right','#FFF','success','10000');
+            messageSingle('',' API Connection Success',activeInfo.settings.notifications.position,'#FFF','success','10000');
         }else{
-            messageSingle('API Connection Failed',response.data,'bottom-right','#FFF','error','10000');
+            messageSingle('API Connection Failed',response.data,activeInfo.settings.notifications.position,'#FFF','error','10000');
         }
         console.log(response);
     }).fail(function(xhr) {
         console.error("Organizr Function: API Connection Failed");
-        message('',' Organizr Error','bottom-right','#FFF','error','10000');
+        message('',' Organizr Error',activeInfo.settings.notifications.position,'#FFF','error','10000');
     });
 }
 function homepageCalendar(timeout){
@@ -3941,6 +3917,7 @@ function pingUpdate(pingList,timeout){
             });
             $.each(response.data, function(i,v) {
                 var elm = $('.menu-'+cleanClass(i)+'-ping');
+                var elmMs = $('.menu-'+cleanClass(i)+'-ping-ms');
                 var catElm = elm.parent().parent().parent().parent().children('a').find('.menu-category-ping');
                 var error = '<div class="ping"><span class="heartbit"></span><span class="point"></span></div>';
                 var success = '';
@@ -3949,24 +3926,26 @@ function pingUpdate(pingList,timeout){
                 var previousState = (elm.attr('data-previous-state') == "") ? '' : elm.attr('data-previous-state');
                 var tabName = elm.attr('data-tab-name');
                 var status = (v == false) ? 'down' : 'up';
+                var ms = (v == false) ? 'down' : v+'ms';
                 var sendMessage = (previousState !== status && previousState !== '' && activeInfo.user.groupID <= activeInfo.settings.ping.authMessage) ? true : false;
                 var audioDown = new Audio(activeInfo.settings.ping.offlineSound);
                 var audioUp = new Audio(activeInfo.settings.ping.onlineSound);
                 elm.attr('data-previous-state', status);
+                if(activeInfo.user.groupID <= activeInfo.settings.ping.authMs && activeInfo.settings.ping.ms){ elmMs.removeClass('hidden').html(ms); }
                 switch (status){
                     case 'down':
                         if(catElm.length > 0){ badCount = badCount + 1; catElm.attr('data-bad', badCount); }
                         elm.html(error);
                         catElm.html(error);
                         elm.parent().find('img').addClass('grayscale');
-                        var msg = (sendMessage) ? message(tabName,'Server Down','bottom-right','#FFF','error','600000') : '';
+                        var msg = (sendMessage) ? message(tabName,'Server Down',activeInfo.settings.notifications.position,'#FFF','error','600000') : '';
                         var audio = (sendMessage) ? audioDown.play() : '';
                         break;
                     default:
                         if(catElm.length > 0){ goodCount = goodCount + 1; catElm.attr('data-good', goodCount); if(badCount == 0){ catElm.html(success); } }
                         elm.html(success);
                         elm.parent().find('img').removeClass('grayscale');
-                        var msg = (sendMessage) ? message(tabName,'Server Back Online','bottom-right','#FFF','success','600000') : '';
+                        var msg = (sendMessage) ? message(tabName,'Server Back Online',activeInfo.settings.notifications.position,'#FFF','success','600000') : '';
                         var audio = (sendMessage) ? audioUp.play() : '';
                 }
             });
@@ -3978,12 +3957,260 @@ function pingUpdate(pingList,timeout){
     if(typeof timeouts[timeoutTitle] !== 'undefined'){ clearTimeout(timeouts[timeoutTitle]); }
     timeouts[timeoutTitle] = setTimeout(function(){ pingUpdate(pingList,timeout); }, timeout);
 }
+function include(filename) {
+    var type = filename.split('.').pop();
+    switch (type){
+        case 'js':
+            var body = document.getElementsByTagName('body')[0];
+            var script = document.createElement('script');
+            script.src = filename;
+            script.type = 'text/javascript';
+            body.appendChild(script);
+            break;
+        case 'css':
+            var head = document.getElementById('style');
+            var script = document.createElement('link');
+            script.href = filename;
+            script.type = 'text/css';
+            script.rel = 'stylesheet';
+            head.appendChild(script);
+            break;
+        default:
+            return false;
+    }
+    return false;
+}
+function defineNotification(){
+    switch(activeInfo.settings.notifications.backbone){
+        case 'toastr':
+            include('plugins/bower_components/toast-master/css/jquery.toast.css');
+            include('plugins/bower_components/toast-master/js/jquery.toast.js');
+            window.notificationFunction = '$.toast';
+            break;
+        case 'izi':
+            include('plugins/bower_components/iziToast/css/iziToast.min.css');
+            include('plugins/bower_components/iziToast/js/iziToast.min.js');
+            window.notificationFunction = 'iziToast';
+            break;
+        default:
+            return false
+    }
+    window.notificationsReady = true;
+    return false;
+}
+function messagePositions(){
+    return {
+        "br":{
+            "toastr":"bottom-right",
+            "izi":"bottomRight",
+        },
+        "bl":{
+            "toastr":"bottom-left",
+            "izi":"bottomLeft",
+        },
+        "bc":{
+            "toastr":"bottom-center",
+            "izi":"bottomCenter",
+        },
+        "tr":{
+            "toastr":"top-right",
+            "izi":"topRight",
+        },
+        "tl":{
+            "toastr":"top-left",
+            "izi":"topLeft",
+        },
+        "tc":{
+            "toastr":"top-center",
+            "izi":"topCenter",
+        },
+        "c":{
+            "toastr":"center",
+            "izi":"center",
+        }
+    };
+}
+function message(heading,text,position,color,icon,timeout){
+    var bb = activeInfo.settings.notifications.backbone;
+    switch (bb) {
+        case 'toastr':
+            var ready = (eval( notificationFunction) !== undefined) ? true :false;
+            break;
+        case 'izi':
+            try {
+                var ready = (typeof eval(notificationFunction) !== undefined) ? true :false;
+            } catch (e) {
+                if (e instanceof SyntaxError) {
+                    setTimeout(function(){ message(heading,text,position,color,icon,timeout); }, 100);
+                }
+            }
+            break;
+        default:
+            var ready = false;
+    }
+    if(notificationsReady && ready){
+
+        position = messagePositions()[position][bb];
+        switch (bb) {
+            case 'toastr':
+                $.toast({
+                    heading: heading,
+                    text: text,
+                    position: position,
+                    loaderBg: color,
+                    icon: icon,
+                    hideAfter: timeout,
+                    stack: 6,
+                    showHideTransition: 'slide',
+                });
+                break;
+            case 'izi':
+                iziToast.settings({
+                    timeout: 4000,
+                    // closeOnClick: true,
+                    // closeOnEscape: true,
+                    close: true,
+                    progressBar: true,
+                    progressBarEasing: 'ease',
+                    // pauseOnHover: false,
+                    // zindex: 900,
+                    // maxWidth: 400,
+                    // rtl: true,
+                    // layout: 2,
+                    // resetOnHover: true,
+                    // imageWidth: 50,
+                    // balloon: true,
+                    // target: '.target',
+                    // icon: 'material-icons',
+                    // iconText: 'face',
+                    // animateInside: false,
+                    // transitionIn: 'flipInX',
+                    // transitionOut: 'fadeOutLeft',
+                    // titleSize: 20,
+                    // titleLineHeight: 20,
+                    // messageSize: 20,
+                    // messageLineHeight: 20,
+                });
+                switch (icon){
+                    case 'success':
+                        var msg = {
+                            class: icon+'-notify',
+                            title: heading,
+                            message: text,
+                            position: position,
+                            timeout: timeout,
+                            icon: 'mdi mdi-check-circle-outline',
+                            layout: 2,
+                            transitionIn: 'flipInX',
+                            transitionOut: 'flipOutX',
+                        };
+                        break;
+                    case 'info':
+                        var msg ={
+                            class: icon+'-notify',
+                            title: heading,
+                            message: text,
+                            position: position,
+                            timeout: timeout,
+                            icon: 'mdi mdi-information-outline',
+                            layout: 2,
+                            transitionIn: 'flipInX',
+                            transitionOut: 'flipOutX',
+                        };
+                        break;
+                    case 'error':
+                        var msg ={
+                            class: icon+'-notify',
+                            title: heading,
+                            message: text,
+                            position: position,
+                            timeout: timeout,
+                            theme: 'dark',
+                            icon: 'mdi mdi-close-circle-outline',
+                            layout: 2,
+                            iconColor: 'rgb(171, 11, 11)',
+                            transitionIn: 'flipInX',
+                            transitionOut: 'flipOutX',
+                            progressBarColor: 'rgb(171, 11, 11)',
+                        };
+                        break;
+                    case 'warning':
+                        var msg ={
+                            class: icon+'-notify',
+                            title: heading,
+                            message: text,
+                            position: position,
+                            timeout: timeout,
+                            backgroundColor: '#24292e',
+                            icon: 'mdi mdi-alert-circle-outline',
+                            layout: 2,
+                            iconColor: '#FFEB3B',
+                            transitionIn: 'flipInX',
+                            transitionOut: 'flipOutX',
+                            progressBarColor: '#FFEB3B',
+                        };
+                        break;
+                    default:
+                        var msg ={
+                            class: icon+'-notify',
+                            title: heading,
+                            message: text,
+                            position: position,
+                            timeout: timeout
+                        };
+                }
+                iziToast.show(msg);
+                break;
+            default:
+                console.log('msg not setup')
+        }
+
+    }else{
+        setTimeout(function(){ message(heading,text,position,color,icon,timeout); }, 100);
+    }
+
+}
+function messageSingle(heading,text,position,color,icon,timeout){
+    var bb = activeInfo.settings.notifications.backbone;
+    switch (bb) {
+        case 'toastr':
+            var ready = (eval( notificationFunction) !== undefined) ? true :false;
+            break;
+        case 'izi':
+            try {
+                var ready = (typeof eval(notificationFunction) !== undefined) ? true :false;
+            } catch (e) {
+                if (e instanceof SyntaxError) {
+                    setTimeout(function(){ messageSingle(heading,text,position,color,icon,timeout); }, 100);
+                }
+            }
+            break;
+        default:
+            var ready = false;
+    }
+    if(notificationsReady && ready){
+        switch (bb) {
+            case 'toastr':
+                $.toast().reset('all');
+                break;
+            case 'izi':
+                iziToast.destroy();
+                break;
+            default:
+                return false;
+        }
+        message(heading,text,position,color,icon,timeout);
+
+    }else{
+        setTimeout(function(){ messageSingle(heading,text,position,color,icon,timeout); }, 100);
+    }
+}
 function launch(){
 	organizrConnect('api/?v1/launch_organizr').success(function (data) {
         try {
             var json = JSON.parse(data);
         } catch (e) {
-            message('FATAL ERROR',data,'bottom-right','#FFF','error','60000');
+            message('FATAL ERROR',data,activeInfo.settings.notifications.position,'#FFF','error','60000');
             return false;
         }
 		if(json.data.user == false){ location.reload(); }
@@ -4013,6 +4240,7 @@ function launch(){
 		console.log("%cOrganizr","color: #66D9EF; font-size: 24px; font-family: Monospace;");
 		console.log("%cVersion: "+currentVersion,"color: #AD80FD; font-size: 12px; font-family: Monospace;");
 		console.log("%cStarting Up...","color: #F92671; font-size: 12px; font-family: Monospace;");
+		defineNotification();
 		checkMessage();
 		errorPage();
 		changeStyle(activeInfo.style);

+ 1738 - 0
plugins/bower_components/iziToast/css/iziToast.css

@@ -0,0 +1,1738 @@
+/*
+* iziToast | v1.3.0
+* http://izitoast.marcelodolce.com
+* by Marcelo Dolce.
+*/
+.iziToast-capsule {
+  font-size: 0;
+  height: 0;
+  width: 100%;
+  transform: translateZ(0);
+  backface-visibility: hidden;
+  transition: transform 0.5s cubic-bezier(0.25, 0.8, 0.25, 1), height 0.5s cubic-bezier(0.25, 0.8, 0.25, 1);
+}
+.iziToast-capsule,
+.iziToast-capsule * {
+  box-sizing: border-box;
+}
+.iziToast-overlay {
+  display: block;
+  position: fixed;
+  top: -100px;
+  left: 0;
+  right: 0;
+  bottom: -100px;
+  z-index: 997;
+}
+.iziToast {
+  display: inline-block;
+  clear: both;
+  position: relative;
+  font-family: 'Lato', Tahoma, Arial;
+  font-size: 14px;
+  padding: 8px 45px 9px 0;
+  background: rgba(238,238,238,0.9);
+  border-color: rgba(238,238,238,0.9);
+  width: 100%;
+  pointer-events: all;
+  cursor: default;
+  transform: translateX(0);
+  -webkit-touch-callout: none /* iOS Safari */;
+  -webkit-user-select: none /* Chrome/Safari/Opera */;
+  -khtml-user-select: none /* Konqueror */;
+  -moz-user-select: none /* Firefox */;
+  -ms-user-select: none /* Internet Explorer/Edge */;
+  user-select: none;
+  min-height: 54px;
+}
+.iziToast > .iziToast-progressbar {
+  position: absolute;
+  left: 0;
+  bottom: 0;
+  width: 100%;
+  z-index: 1;
+  background: rgba(255,255,255,0.2);
+}
+.iziToast > .iziToast-progressbar > div {
+  height: 2px;
+  width: 100%;
+  background: rgba(0,0,0,0.3);
+  border-radius: 0 0 3px 3px;
+}
+.iziToast.iziToast-balloon:before {
+  content: '';
+  position: absolute;
+  right: 8px;
+  left: auto;
+  width: 0px;
+  height: 0px;
+  top: 100%;
+  border-right: 0px solid transparent;
+  border-left: 15px solid transparent;
+  border-top: 10px solid #000;
+  border-top-color: inherit;
+  border-radius: 0;
+}
+.iziToast.iziToast-balloon .iziToast-progressbar {
+  top: 0;
+  bottom: auto;
+}
+.iziToast.iziToast-balloon > div {
+  border-radius: 0 0 0 3px;
+}
+.iziToast > .iziToast-cover {
+  position: absolute;
+  left: 0;
+  top: 0;
+  bottom: 0;
+  height: 100%;
+  margin: 0;
+  background-size: 100%;
+  background-position: 50% 50%;
+  background-repeat: no-repeat;
+  background-color: rgba(0,0,0,0.1);
+}
+.iziToast > .iziToast-close {
+  position: absolute;
+  right: 0;
+  top: 0;
+  border: 0;
+  padding: 0;
+  opacity: 0.6;
+  width: 42px;
+  height: 100%;
+  background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAJPAAACTwBcGfW0QAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAD3SURBVFiF1ZdtDoMgDEBfdi4PwAX8vLFn0qT7wxantojKupmQmCi8R4tSACpgjC2ICCUbEBa8ingjsU1AXRBeR8aLN64FiknswN8CYefBBDQ3whuFESy7WyQMeC0ipEI0A+0FeBvHUFN8xPaUhAH/iKoWsnXHGegy4J0yxialOfaHJAz4bhRzQzgDvdGnz4GbAonZbCQMuBm1K/kcFu8Mp1N2cFFpsxsMuJqqbIGExGl4loARajU1twskJLLhIsID7+tvUoDnIjTg5T9DPH9EBrz8rxjPzciAl9+O8SxI8CzJ8CxKFfh3ynK8Dyb8wNHM/XDqejx/AtNyPO87tNybAAAAAElFTkSuQmCC") no-repeat 50% 50%;
+  background-size: 8px;
+  cursor: pointer;
+  outline: none;
+}
+.iziToast > .iziToast-close:hover {
+  opacity: 1;
+}
+.iziToast > .iziToast-body {
+  position: relative;
+  padding: 0 0 0 10px;
+  height: auto;
+  min-height: 36px;
+  margin: 0 0 0 15px;
+  text-align: left;
+}
+.iziToast > .iziToast-body:after {
+  content: "";
+  display: table;
+  clear: both;
+}
+.iziToast > .iziToast-body .iziToast-texts {
+  margin: 10px 0 0 0;
+  padding-right: 2px;
+  display: inline-block;
+  float: left;
+}
+.iziToast > .iziToast-body .iziToast-inputs {
+  min-height: 19px;
+  float: left;
+  margin: 3px -2px;
+}
+.iziToast > .iziToast-body .iziToast-inputs > input:not([type=checkbox]):not([type=radio]),
+.iziToast > .iziToast-body .iziToast-inputs > select {
+  position: relative;
+  display: inline-block;
+  margin: 2px;
+  border-radius: 2px;
+  border: 0;
+  padding: 4px 7px;
+  font-size: 13px;
+  letter-spacing: 0.02em;
+  background: rgba(0,0,0,0.1);
+  color: #000;
+  box-shadow: 0 0 0 1px rgba(0,0,0,0.2);
+  min-height: 26px;
+}
+.iziToast > .iziToast-body .iziToast-inputs > input:not([type=checkbox]):not([type=radio]):focus,
+.iziToast > .iziToast-body .iziToast-inputs > select:focus {
+  box-shadow: 0 0 0 1px rgba(0,0,0,0.6);
+}
+.iziToast > .iziToast-body .iziToast-buttons {
+  min-height: 17px;
+  float: left;
+  margin: 4px -2px;
+}
+.iziToast > .iziToast-body .iziToast-buttons > a,
+.iziToast > .iziToast-body .iziToast-buttons > button,
+.iziToast > .iziToast-body .iziToast-buttons > input:not([type=checkbox]):not([type=radio]) {
+  position: relative;
+  display: inline-block;
+  margin: 2px;
+  border-radius: 2px;
+  border: 0;
+  padding: 5px 10px;
+  font-size: 12px;
+  letter-spacing: 0.02em;
+  cursor: pointer;
+  background: rgba(0,0,0,0.1);
+  color: #000;
+}
+.iziToast > .iziToast-body .iziToast-buttons > a:hover,
+.iziToast > .iziToast-body .iziToast-buttons > button:hover,
+.iziToast > .iziToast-body .iziToast-buttons > input:not([type=checkbox]):not([type=radio]):hover {
+  background: rgba(0,0,0,0.2);
+}
+.iziToast > .iziToast-body .iziToast-buttons > a:focus,
+.iziToast > .iziToast-body .iziToast-buttons > button:focus,
+.iziToast > .iziToast-body .iziToast-buttons > input:not([type=checkbox]):not([type=radio]):focus {
+  box-shadow: 0 0 0 1px rgba(0,0,0,0.6);
+}
+.iziToast > .iziToast-body .iziToast-buttons > a:active,
+.iziToast > .iziToast-body .iziToast-buttons > button:active,
+.iziToast > .iziToast-body .iziToast-buttons > input:not([type=checkbox]):not([type=radio]):active {
+  top: 1px;
+}
+.iziToast > .iziToast-body .iziToast-icon {
+  height: 100%;
+  position: absolute;
+  left: 0;
+  top: 50%;
+  display: table;
+  font-size: 23px;
+  line-height: 24px;
+  margin-top: -12px;
+  color: #000;
+}
+.iziToast > .iziToast-body .iziToast-icon.ico-info {
+  background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAAflBMVEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACCtoPsAAAAKXRSTlMA6PsIvDob+OapavVhWRYPrIry2MxGQ97czsOzpJaMcE0qJQOwVtKjfxCVFeIAAAI3SURBVFjDlJPZsoIwEETnCiGyb8q+qmjl/3/wFmGKwjBROS9QWbtnOqDDGPq4MdMkSc0m7gcDDhF4NRdv8NoL4EcMpzoJglPl/KTDz4WW3IdvXEvxkfIKn7BMZb1bFK4yZFqghZ03jk0nG8N5NBwzx9xU5cxAg8fXi20/hDdC316lcA8o7t16eRuQvW1XGd2d2P8QSHQDDbdIII/9CR3lUF+lbucfJy4WfMS64EJPORnrZxtfc2pjJdnbuags3l04TTtJMXrdTph4Pyg4XAjugAJqMDf5Rf+oXx2/qi4u6nipakIi7CsgiuMSEF9IGKg8heQJKkxIfFSUU/egWSwNrS1fPDtLfon8sZOcYUQml1Qv9a3kfwsEUyJEMgFBKzdV8o3Iw9yAjg1jdLQCV4qbd3no8yD2GugaC3oMbF0NYHCpJYSDhNI5N2DAWB4F4z9Aj/04Cna/x7eVAQ17vRjQZPh+G/kddYv0h49yY4NWNDWMMOMUIRYvlTECmrN8pUAjo5RCMn8KoPmbJ/+Appgnk//Sy90GYBCGgm7IAskQ7D9hFKW4ApB1ei3FSYD9PjGAKygAV+ARFYBH5BsVgG9kkBSAQWKUFYBRZpkUgGVinRWAdUZQDABBQdIcAElDVBUAUUXWHQBZx1gMAGMprM0AsLbVXHsA5trZe93/wp3svQ0YNb/jWV3AIOLsMtlznSNOH7JqjOpDVh7z8qCZR10ftvO4nxeOvPLkpSuvfXnxzKtvXr7j+v8C5ii0e71At7cAAAAASUVORK5CYII=") no-repeat 50% 50%;
+  background-size: 85%;
+  width: 24px;
+  height: 24px;
+}
+.iziToast > .iziToast-body .iziToast-icon.ico-warning {
+  background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEQAAABECAMAAAAPzWOAAAAAkFBMVEUAAAAAAAABAAIAAAABAAIAAAMAAAABAAIBAAIBAAIAAAIAAAABAAIAAAABAAICAAICAAIAAAIAAAAAAAAAAAABAAIBAAIAAAMAAAABAAIBAAMBAAECAAIAAAIAAAIAAAABAAIBAAIBAAMBAAIBAAEAAAIAAAMAAAAAAAABAAECAAICAAIAAAIAAAMAAAQAAAE05yNAAAAAL3RSTlMAB+kD7V8Q+PXicwv7I9iYhkAzJxnx01IV5cmnk2xmHfzexsK4eEw5L7Gei39aRw640awAAAHQSURBVFjD7ZfJdoJAEEWJgCiI4oDiPM8m7///LidErRO7sHrY5u7YXLr7vKqu9kTC0HPmo9n8cJbEQOzqqAdAUHeUZACQuTkGDQBoDJwkHZR0XBz9FkpafXuHP0SJ09mGeJLZ5wwlTmcbA0THPmdEK7XPGTG1zxmInn3OiJ19zkB0jSVTKExMHT0wjAwlWzC0fSPHF1gWRpIhWMYm7fYTFcQGlbemf4dFfdTGg0B/KXM8qBU/3wntbq7rSGqvJ9kla6IpueFJet8fxfem5yhykjyOgNaWF1qSGd5JMNNxpNF7SZQaVh5JzLrTCZIEJ1GyEyVyd+pClMjdaSJK5O40giSRu5PfFiVyd1pAksjdKRnrSsbVdbiHrgT7yss315fkVQPLFQrL+4FHeOXKO5YRFEKv5AiFaMlKLlBpJuVCJlC5sJfvCgztru/3NmBYccPgGTxRAzxn1XGEMUf58pXZvjoOsOCgjL08+b53mtfAM/SVsZcjKLtysQZPqIy9HPP3m/3zKItRwT0LyQo8sTr26tcO83DIUMWIJjierHLsJda/tbNBFY0BP/bKtcM8HNIWCK3aYR4OMzgxo5w5EFLOLKDExXAm9gI4E3iAO94/Ct/lKWuM2LMGbgAAAABJRU5ErkJggg==") no-repeat 50% 50%;
+  background-size: 85%;
+  width: 24px;
+  height: 24px;
+}
+.iziToast > .iziToast-body .iziToast-icon.ico-error {
+  background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAAeFBMVEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVyEiIAAAAJ3RSTlMA3BsB98QV8uSyWVUFz7+kcWMM2LuZioBpTUVBNcq2qaibj4d1azLZZYABAAACZElEQVRYw7WX25KCMAyGAxUoFDkpiohnV97/DXeGBtoOUprZ2dyo1K82fxKbwJJVp+KQZ7so2mX5oThVQLKwjDe9YZu4DF3ptAn6rxY0qQPOEq9fNC9ha3y77a22ba24v+9Xbe8v8x03dPOC2/NdvB6xeSreLfGJpnx0TyotKqLm2s7Jd/WO6ivXNp0tCy02R/aFz5VQ5wUPlUL5fIfj5KIlVGU0nWHm/5QtoTVMWY8mzIVu1K9O7XH2JiU/xnOOT39gnUfj+lFHddx4tFjL3/H8jjzaFCy2Rf0c/fdQyQszI8BDR973IyMSKa4krjxAiW/lkRvMP+bKK9WbYS1ASQg8dKjaUGlYPwRe/WoIkz8tiQchH5QAEMv6T0k8MD4mUyWr4E7jAWqZ+xWcMIYkXvlwggJ3IvFK+wIOcpXAo8n8P0COAaXyKH4OsjBuZB4ew0IGu+H1SebhNazsQBbWm8yj+hFuUJB5eMsN0IUXmYendAFFfJB5uEkRMYwxmcd6zDGRtmQePEykAgubymMRFmMxCSIPCRbTuFNN5OGORTjmNGc0Po0m8Uv0gcCry6xUhR2QeLii9tofbEfhz/qvNti+OfPqNm2Mq6105FUMvdT4GPmufMiV8PqBMkc+DdT1bjYYbjzU/ew23VP4n3mLAz4n8Jtv/Ui3ceTT2mzz5o1mZt0gnBpmsdjqRqVlmplcPdqa7X23kL9brdm2t/uBYDPn2+tyu48mtIGD10JTuUrukVrbCFiwDzcHrPjxKt7PW+AZQyT/WESO+1WL7f3o+WLHL2dYMSZsg6dg/z360ofvP4//v1NPzgs28WlWAAAAAElFTkSuQmCC") no-repeat 50% 50%;
+  background-size: 80%;
+  width: 24px;
+  height: 24px;
+}
+.iziToast > .iziToast-body .iziToast-icon.ico-success {
+  background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABABAMAAABYR2ztAAAAIVBMVEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABt0UjBAAAACnRSTlMApAPhIFn82wgGv8mVtwAAAKVJREFUSMft0LEJAkEARNFFFEw1NFJb8CKjAy1AEOzAxNw+bEEEg6nyFjbY4LOzcBwX7S/gwUxoTdIn+Jbv4Lv8bx446+kB6VsBtK0B+wbMCKxrwL33wOrVeeChX28n7KTOTjgoEu6DRSYAgAAAAkAmAIAAAAIACQIkMkACAAgAIACAyECBKAOJuCagTJwSUCaUAEMAABEBRwAAEQFLbCJgO4bW+AZKGnktR+jAFAAAAABJRU5ErkJggg==") no-repeat 50% 50%;
+  background-size: 85%;
+  width: 24px;
+  height: 24px;
+}
+.iziToast > .iziToast-body .iziToast-icon.ico-question {
+  background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAQAAAAAYLlVAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0QAAKqNIzIAAAAJcEhZcwAADdcAAA3XAUIom3gAAAAHdElNRQfhCQkUEhFovxTxAAAEDklEQVRo3s2ZTWgTQRTHf03ipTRUqghNSgsRjHgQrFUQC6JgD1Kak3gQUUoPqRdBglf1oBehBws9Cn4cGk+1SOmh2upBxAYVoeJHrR9tgq0i1Cq0lqYeks7MbpPdmU00/c8hm9n33v/t7Nt5M2+qMEWQI0QIibZKRrQpHvLL2KI2wnQzzBKrDm2RIeKEy01dTYKUI7G1ZRknQXV5yP10kTYgly1NF/5S6duZ8ES+1iZodyaocrjXxE0OFeifYYgp0mRIkwFChAkRJsIxGgrIP+I0n82fvZW5dc/zkss0O2o1c5mX6/TmaDWl77RFe5YkUW3tKEmyFv0lOvXJ/fTYnmCEFuMRbGHEZqVHLyT9DFjUJmkzJl9DG5MWWwM6Llif/gF1nukB6nhgGwUXdFrE+wiURA8QoM9i0zEWWpXQW+ZsyeRrOMuyEo5Fv4gmy4dXPvqcC+pH2VRYaMwy+OWG+iLGCgm0W0Kv9HdvR8ASjmKCXpuK/bxiV/76A/v5UdDIZuKcJGjrnec5KZ7wwsWFOp6xPX/9mt2sqDe7FO+Kf/fXHBPPDWpdXGhTpLvUG9VKwh1xMDDjkvu+cNDFBTk7ptX1QkKZ850m3duu6fcrWxwdaFFyREJ2j4vOpKP6Du6z4uJCv8sYJIVkCnJBGGZaBONO3roY2EqNrSfIPi7SKP4fdXyNUd6I6wbSAHEl33tFLe+FlSsusnK90A0+oEPcuufZgXnOi+u9LrKSJQZQw6LwqBnv2CKsfHORbFbyQhA6xN/pEuihSdj56Co7LWRjPiKie6gkB2LiKuUqK5kiPkLiz1QJ9K1cNXBAMoUCigNpQ9IqDtMI1HKA4/jyvUsaoSyZLA5kjOjDPFZen8Ql5TsvBskUgjciIPSX3QAXC86DT7VWvlEh/xZ+ij9BDVWJ0QL0SbZq6QaFxoLPcXPmBLveLCc4wXdDK6s+6/vwhCSniFLPXW0NJe5UB8zKCsviqpc7vGPVQFcyZbyPwGD+d5ZnxmNWlhG4xSBZZjivjIWHEQgoDkSMjMwTo54569JSE5IpA7EyJSMTyGTUAUFlO1ZKOtaHTMeL1PhYYFTcihmY2cQ5+ullj7EDkiVfVez2sCTz8yiv84djhg7IJVk81xFWJlPdfHBG0flkRC/zQFZ+DSllNtfDdUsOMCliyGX5uOzU3ZhIXFDof4m1gDuKbEx0t2YS25gVGpcMnr/I1kx3c6piB8P8ZoqEwfMX3ZyCXynJTmq/U7NUXqfUzCbWL1wqVKBQUeESzQYoUlW8TAcVL1RCxUu1G6BYXfFyfQ4VPbDI4T8d2WzgQ6sc/vmxnTsqfHCZQzUJxm1h5dxS5Tu6lQgTZ0ipqRVqSwzTbbLHMt+c19iO76tsx/cLZub+Ali+tYC93olEAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE3LTA5LTA5VDIwOjE4OjE3KzAyOjAwjKtfjgAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxNy0wOS0wOVQyMDoxODoxNyswMjowMP325zIAAAAZdEVYdFNvZnR3YXJlAHd3dy5pbmtzY2FwZS5vcmeb7jwaAAAAAElFTkSuQmCC") no-repeat 50% 50%;
+  background-size: 85%;
+  width: 24px;
+  height: 24px;
+}
+.iziToast > .iziToast-body .iziToast-title {
+  padding: 0;
+  margin: 0;
+  line-height: 16px;
+  font-size: 14px;
+  text-align: left;
+  float: left;
+  color: #000;
+  white-space: normal;
+}
+.iziToast > .iziToast-body .iziToast-message {
+  padding: 0;
+  margin: 0 0 10px 0;
+  font-size: 14px;
+  line-height: 16px;
+  text-align: left;
+  float: left;
+  color: rgba(0,0,0,0.6);
+  white-space: normal;
+}
+.iziToast.iziToast-animateInside .iziToast-title,
+.iziToast.iziToast-animateInside .iziToast-message,
+.iziToast.iziToast-animateInside .iziToast-icon,
+.iziToast.iziToast-animateInside .iziToast-buttons-child,
+.iziToast.iziToast-animateInside .iziToast-inputs-child {
+  opacity: 0;
+}
+.iziToast-target {
+  position: relative;
+  width: 100%;
+  margin: 0 auto;
+}
+.iziToast-target .iziToast-capsule {
+  overflow: hidden;
+}
+.iziToast-target .iziToast-capsule:after {
+  visibility: hidden;
+  display: block;
+  font-size: 0;
+  content: " ";
+  clear: both;
+  height: 0;
+}
+.iziToast-target .iziToast-capsule .iziToast {
+  width: 100%;
+  float: left;
+}
+.iziToast-wrapper {
+  z-index: 99999;
+  position: fixed;
+  width: 100%;
+  pointer-events: none;
+  display: flex;
+  flex-direction: column;
+}
+.iziToast-wrapper .iziToast.iziToast-balloon:before {
+  border-right: 0 solid transparent;
+  border-left: 15px solid transparent;
+  border-top: 10px solid #000;
+  border-top-color: inherit;
+  right: 8px;
+  left: auto;
+}
+.iziToast-wrapper-bottomLeft {
+  left: 0;
+  bottom: 0;
+  text-align: left;
+}
+.iziToast-wrapper-bottomLeft .iziToast.iziToast-balloon:before {
+  border-right: 15px solid transparent;
+  border-left: 0 solid transparent;
+  right: auto;
+  left: 8px;
+}
+.iziToast-wrapper-bottomRight {
+  right: 0;
+  bottom: 0;
+  text-align: right;
+}
+.iziToast-wrapper-topLeft {
+  left: 0;
+  top: 0;
+  text-align: left;
+}
+.iziToast-wrapper-topLeft .iziToast.iziToast-balloon:before {
+  border-right: 15px solid transparent;
+  border-left: 0 solid transparent;
+  right: auto;
+  left: 8px;
+}
+.iziToast-wrapper-topRight {
+  top: 0;
+  right: 0;
+  text-align: right;
+}
+.iziToast-wrapper-topCenter {
+  top: 0;
+  left: 0;
+  right: 0;
+  text-align: center;
+}
+.iziToast-wrapper-bottomCenter {
+  bottom: 0;
+  left: 0;
+  right: 0;
+  text-align: center;
+}
+.iziToast-wrapper-center {
+  top: 0;
+  bottom: 0;
+  left: 0;
+  right: 0;
+  text-align: center;
+  justify-content: center;
+  flex-flow: column;
+  align-items: center;
+}
+.iziToast-rtl {
+  direction: rtl;
+  padding: 8px 0 9px 45px;
+  font-family: Tahoma, 'Lato', Arial;
+}
+.iziToast-rtl .iziToast-cover {
+  left: auto;
+  right: 0;
+}
+.iziToast-rtl .iziToast-close {
+  right: auto;
+  left: 0;
+}
+.iziToast-rtl .iziToast-body {
+  padding: 0 10px 0 0;
+  margin: 0 16px 0 0;
+  text-align: right;
+}
+.iziToast-rtl .iziToast-body .iziToast-buttons,
+.iziToast-rtl .iziToast-body .iziToast-inputs,
+.iziToast-rtl .iziToast-body .iziToast-texts,
+.iziToast-rtl .iziToast-body .iziToast-title,
+.iziToast-rtl .iziToast-body .iziToast-message {
+  float: right;
+  text-align: right;
+}
+.iziToast-rtl .iziToast-body .iziToast-icon {
+  left: auto;
+  right: 0;
+}
+@media only screen and (min-width: 568px) {
+  .iziToast-wrapper {
+    padding: 10px 15px;
+  }
+  .iziToast-cover {
+    border-radius: 3px 0 0 3px;
+  }
+  .iziToast {
+    margin: 5px 0;
+    border-radius: 3px;
+    width: auto;
+  }
+  .iziToast:after {
+    content: '';
+    z-index: -1;
+    position: absolute;
+    top: 0;
+    left: 0;
+    width: 100%;
+    height: 100%;
+    border-radius: 3px;
+    box-shadow: inset 0 -10px 20px -10px rgba(0,0,0,0.2), inset 0 0 5px rgba(0,0,0,0.1), 0 8px 8px -5px rgba(0,0,0,0.25);
+  }
+  .iziToast.iziToast-color-dark:after {
+    box-shadow: inset 0 -10px 20px -10px rgba(255,255,255,0.3), 0 10px 10px -5px rgba(0,0,0,0.25);
+  }
+  .iziToast.iziToast-balloon .iziToast-progressbar {
+    background: transparent;
+  }
+  .iziToast.iziToast-balloon:after {
+    box-shadow: 0 10px 10px -5px rgba(0,0,0,0.25), inset 0 10px 20px -5px rgba(0,0,0,0.25);
+  }
+  .iziToast-target .iziToast:after {
+    box-shadow: inset 0 -10px 20px -10px rgba(0,0,0,0.2), inset 0 0 5px rgba(0,0,0,0.1);
+  }
+}
+.iziToast.iziToast-theme-dark {
+  background: #565c70;
+  border-color: #565c70;
+}
+.iziToast.iziToast-theme-dark .iziToast-title {
+  color: #fff;
+}
+.iziToast.iziToast-theme-dark .iziToast-message {
+  color: rgba(255,255,255,0.7);
+  font-weight: 300;
+}
+.iziToast.iziToast-theme-dark .iziToast-close {
+  background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAQAAADZc7J/AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0QAAKqNIzIAAAAJcEhZcwAADdcAAA3XAUIom3gAAAAHdElNRQfgCR4OIQIPSao6AAAAwElEQVRIx72VUQ6EIAwFmz2XB+AConhjzqTJ7JeGKhLYlyx/BGdoBVpjIpMJNjgIZDKTkQHYmYfwmR2AfAqGFBcO2QjXZCd24bEggvd1KBx+xlwoDpYmvnBUUy68DYXD77ESr8WDtYqvxRex7a8oHP4Wo1Mkt5I68Mc+qYqv1h5OsZmZsQ3gj/02h6cO/KEYx29hu3R+VTTwz6D3TymIP1E8RvEiiVdZfEzicxYLiljSxKIqlnW5seitTW6uYnv/Aqh4whX3mEUrAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE2LTA5LTMwVDE0OjMzOjAyKzAyOjAwl6RMVgAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxNi0wOS0zMFQxNDozMzowMiswMjowMOb59OoAAAAZdEVYdFNvZnR3YXJlAHd3dy5pbmtzY2FwZS5vcmeb7jwaAAAAAElFTkSuQmCC") no-repeat 50% 50%;
+  background-size: 8px;
+}
+.iziToast.iziToast-theme-dark .iziToast-icon {
+  color: #fff;
+}
+.iziToast.iziToast-theme-dark .iziToast-icon.ico-info {
+  background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAAflBMVEUAAAD////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////vroaSAAAAKXRSTlMA6PsIvDob+OapavVhWRYPrIry2MxGQ97czsOzpJaMcE0qJQOwVtKjfxCVFeIAAAI3SURBVFjDlJPZsoIwEETnCiGyb8q+qmjl/3/wFmGKwjBROS9QWbtnOqDDGPq4MdMkSc0m7gcDDhF4NRdv8NoL4EcMpzoJglPl/KTDz4WW3IdvXEvxkfIKn7BMZb1bFK4yZFqghZ03jk0nG8N5NBwzx9xU5cxAg8fXi20/hDdC316lcA8o7t16eRuQvW1XGd2d2P8QSHQDDbdIII/9CR3lUF+lbucfJy4WfMS64EJPORnrZxtfc2pjJdnbuags3l04TTtJMXrdTph4Pyg4XAjugAJqMDf5Rf+oXx2/qi4u6nipakIi7CsgiuMSEF9IGKg8heQJKkxIfFSUU/egWSwNrS1fPDtLfon8sZOcYUQml1Qv9a3kfwsEUyJEMgFBKzdV8o3Iw9yAjg1jdLQCV4qbd3no8yD2GugaC3oMbF0NYHCpJYSDhNI5N2DAWB4F4z9Aj/04Cna/x7eVAQ17vRjQZPh+G/kddYv0h49yY4NWNDWMMOMUIRYvlTECmrN8pUAjo5RCMn8KoPmbJ/+Appgnk//Sy90GYBCGgm7IAskQ7D9hFKW4ApB1ei3FSYD9PjGAKygAV+ARFYBH5BsVgG9kkBSAQWKUFYBRZpkUgGVinRWAdUZQDABBQdIcAElDVBUAUUXWHQBZx1gMAGMprM0AsLbVXHsA5trZe93/wp3svQ0YNb/jWV3AIOLsMtlznSNOH7JqjOpDVh7z8qCZR10ftvO4nxeOvPLkpSuvfXnxzKtvXr7j+v8C5ii0e71At7cAAAAASUVORK5CYII=") no-repeat 50% 50%;
+  background-size: 85%;
+}
+.iziToast.iziToast-theme-dark .iziToast-icon.ico-warning {
+  background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEQAAABECAMAAAAPzWOAAAAAllBMVEUAAAD////+//3+//3+//3///////z+//3+//3+//3////////////9//3////+//39//3///3////////////+//3+//39//3///z+//z+//7///3///3///3///3////////+//3+//3+//3+//z+//3+//7///3///z////////+//79//3///3///z///v+//3///+trXouAAAAMHRSTlMAB+j87RBf+PXiCwQClSPYhkAzJxnx05tSyadzcmxmHRbp5d7Gwrh4TDkvsYt/WkdQzCITAAAB1UlEQVRYw+3XaXKCQBCGYSIIighoxCVqNJrEPfly/8vFImKXduNsf/Mc4K1y7FnwlMLQc/bUbj85R6bA1LXRDICg6RjJcZa7NQYtnLUGTpERSiOXxrOPkv9s30iGKDmtbYir3H7OUHJa2ylAuvZzRvzUfs7Ii/2cgfTt54x82s8ZSM848gJmYtroQzA2jHwA+LkBIEuMGt+QIng1igzlyMrkuP2CyOi47axRaYTL5jhDJehoR+aovC29s3iIyly3Eb+hRCvZo2qsGTnhKr2cLDS+J73GsqBI9W80UCmWWpEuhIjh6ZRGjyNRarjzKGJ2Ou2himCvjHwqI+rTqQdlRH06TZQR9ek0hiqiPp06mV4ke7QPX6ERUZxO8Uo3sqrfhxvoRrCpvXwL/UjR9GRHMIvLgke4d5QbiwhM6JV2YKKF4vIl7XIBkwm4keryJVmvk/TfwcmPwQNkUQuyA2/sYGwnXL7GPu4bW1jYsmevrNj09/MGZMOEPXslQVqO8hqykD17JfPHP/bmo2yGGpdZiH3IZvzZa7B3+IdDjjpjesHJcvbs5dZ/e+cddVoDdvlq7x12Nac+iN7e4R8OXTjp0pw5CGnOLNDEzeBs5gVwFniAO+8f8wvfeXP2hyqnmwAAAABJRU5ErkJggg==") no-repeat 50% 50%;
+  background-size: 85%;
+}
+.iziToast.iziToast-theme-dark .iziToast-icon.ico-error {
+  background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAAeFBMVEUAAAD////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////GqOSsAAAAJ3RSTlMA3BsB98QV8uSyWVUFz6RxYwzYvbupmYqAaU1FQTXKv7abj4d1azKNUit3AAACZElEQVRYw7WXaZOCMAyGw30UORRQBLxX/v8/3BkaWjrY2szO5otKfGrzJrEp6Kw6F8f8sI+i/SE/FucKSBaWiT8p5idlaEtnXTB9tKDLLHAvdSatOan3je93k9F2vRF36+mr1a6eH2NFNydoHq/ieU/UXcWjjk9XykdNWq2ywtp4tXL6Wb2T/MqtzzZutsrNyfvA51KoQROhVCjfrnASIRpSVUZiD5v4RbWExjRdJzSmOsZFvzYz59kRSr6V5zE+/QELHkNdb3VRx45HS1b1u+zfkkcbRAZ3qJ9l/A4qefHUDMShJe+6kZKJDD2pLQ9Q4lu+5Q7rz7Plperd7AtQEgIPI6o2dxr2D4GXvxqCiKcn8cD4gxIAEt7/GYkHL16KqeJd0NB4gJbXfgVnzCGJlzGcocCVSLzUvoAj9xJ4NF7/R8gxoVQexc/hgBpSebjPjgPs59cHmYfn7NkDb6wXmUf1I1ygIPPw4gtgCE8yDw8eAop4J/PQcBExjQmZx37MsZB2ZB4cLKQCG5vKYxMWSzMxIg8pNtOyUkvkocEmXGo69mh8FgnxS4yBwMvDrJSNHZB4uC3ayz/YkcIP4lflwVIT+OU07ZSjrbTkZQ6dTPkYubZ8GC/Cqxu6WvJZII93dcCw46GdNqdpTeF/tiMOuDGB9z/NI6NvyWetGPM0g+bVNeovBmamHXWj0nCbEaGeTMN2PWrqd6cM26ZxP2DeJvj+ph/30Zi/GmRbtlK5SptI+nwGGnvH6gUruT+L16MJHF+58rwNIifTV0vM8+hwMeOXAb6Yx0wXT+b999WXfvn+8/X/F7fWzjdTord5AAAAAElFTkSuQmCC") no-repeat 50% 50%;
+  background-size: 80%;
+}
+.iziToast.iziToast-theme-dark .iziToast-icon.ico-success {
+  background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABABAMAAABYR2ztAAAAIVBMVEUAAAD////////////////////////////////////////PIev5AAAACnRSTlMApAPhIFn82wgGv8mVtwAAAKVJREFUSMft0LEJAkEARNFFFEw1NFJb8CKjAy1AEOzAxNw+bEEEg6nyFjbY4LOzcBwX7S/gwUxoTdIn+Jbv4Lv8bx446+kB6VsBtK0B+wbMCKxrwL33wOrVeeChX28n7KTOTjgoEu6DRSYAgAAAAkAmAIAAAAIACQIkMkACAAgAIACAyECBKAOJuCagTJwSUCaUAEMAABEBRwAAEQFLbCJgO4bW+AZKGnktR+jAFAAAAABJRU5ErkJggg==") no-repeat 50% 50%;
+  background-size: 85%;
+}
+.iziToast.iziToast-theme-dark .iziToast-icon.ico-question {
+  background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAQAAAAAYLlVAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0QAAKqNIzIAAAAJcEhZcwAADdcAAA3XAUIom3gAAAAHdElNRQfhCQkUEg18vki+AAAETUlEQVRo3s1ZTWhbRxD+VlIuxsLFCYVIIQYVopBDoK5bKDWUBupDMNbJ5FBKg/FBziUQdE9yaC+FHBrwsdCfQ9RTGoLxwWl+DqHEojUFFydxnB9bInZDqOsErBrr6yGvs/ueX97bldTKo4Pe7puZb3Z33s7srIIjMY1jyCEjP6ImvyX8pF64arSHznKC06wzijY5xSKz7YbuYokV2lODsyyxqz3gSY6z6gCuqcpxJluFH+Z8U+D/0jyHoxFUBHgfvsGHIS9WMIUlVFFDFTUAGWSRQRY5HMeBEP6b+Ew9dh/7INd2jGeO59kfKdXP85zbIbfGQVf4sYC3N1hm3lo6zzIbPvk6x+zBk7wQGMEMB5xncIAzAS0XrFySSV72iS1yyBVcdA1x0afrsoUJgdFfY2+z8ADAXl7zz0KcwJiPfZKpVuABgClO+nRG+QIHDdfb4qlWwUXvKW4Z7vi6L4J9vg+vbfCeCeZH2RfOdMOc/HbCA4BvIW6EMQz7XK/ltd+hP+VzR9mgva2YSfyGI17fA7ynnocqeQNFfIJ0oHsdv6CC2+rXGBN6cQdveY3fcVRtmy/HDete+93zy8jA8zV7YkwYMrjHzRddRsCdiVCwwmh6wg9iTNC7Y9XIF1iS7kbUpsvvGEdPuTfSgAEjRpR096x0liPFD/Eqt2NMuBQzB2XhrACAApjFsuQFh9XdGAX70B3oSuNdnMVBaX+sopYxjwVpHFBVACyKTXNoktjD+6Ll8xhenS9MAAkAI/Lux2YNUOs4I413Ypg1SgEAu7kpFvWjaeJe0fJHDGe/cNaZBkekudw8PMA+0fMwlndZeAsJ5KR/qhUDUJCnSiyvRsolkJHGUgvjH8QXDgZopEzKMKDqCKrwEQ4C6MH7GEXC665buLJG8hlQc4LP4paxfJrOqYVYYY2UARfEIazTbgDg2dB98GebzJd54b8L/iWNdLyooeR6CHyZ+6xk0yKxkYg6nEVSUG4VJ9QJ9cxRCxO+9WiOyvgUeexXP1hLGH5nGuBWVtiSp4vqe3VP0UFWI9Wan4Er3v8q7jjPWVtm4FtcQQMrOKO2nOQCM5AyDMi56FDrKHA/1nyppS1ppBpYaE8wciEjGI2AaeM41kI4doDX4XiT3Qm1gevyruCgZg9P8xIv8m1nCzTKq6oiJ9xTMiZ505P5m8cdZ0CnZMVXHVljM7WMBzxpyDxygtdxoCEFTaMIWbZU85UvBjgUMYy0fBaAF8V1Lj9qWQ1aMZ5f4k9r+AGMSkMP1vZoZih6k6sicc5h/OFHM9vDqU/VIU7zJZdYYsKGH4g4nAJMGiXZRds1pVMoZ69RM5vfkbh0qkBhsnS2RLMLilQdL9MBHS9UAh0v1e6CYnXHy/WeeCcvLDwl/9OVze69tPKM+M+v7eJN6OzFpWdEF0ucDbhVNFXadnVrmJFlkVNGTS2M6pzmhMvltfPhnN2B63sVuL7fcNP3D1TSk2ihosPrAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE3LTA5LTA5VDIwOjE4OjEzKzAyOjAweOR7nQAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxNy0wOS0wOVQyMDoxODoxMyswMjowMAm5wyEAAAAZdEVYdFNvZnR3YXJlAHd3dy5pbmtzY2FwZS5vcmeb7jwaAAAAAElFTkSuQmCC") no-repeat 50% 50%;
+  background-size: 85%;
+}
+.iziToast.iziToast-theme-dark .iziToast-buttons > a,
+.iziToast.iziToast-theme-dark .iziToast-buttons > button,
+.iziToast.iziToast-theme-dark .iziToast-buttons > input {
+  color: #fff;
+  background: rgba(255,255,255,0.1);
+}
+.iziToast.iziToast-theme-dark .iziToast-buttons > a:hover,
+.iziToast.iziToast-theme-dark .iziToast-buttons > button:hover,
+.iziToast.iziToast-theme-dark .iziToast-buttons > input:hover {
+  background: rgba(255,255,255,0.2);
+}
+.iziToast.iziToast-theme-dark .iziToast-buttons > a:focus,
+.iziToast.iziToast-theme-dark .iziToast-buttons > button:focus,
+.iziToast.iziToast-theme-dark .iziToast-buttons > input:focus {
+  box-shadow: 0 0 0 1px rgba(255,255,255,0.6);
+}
+.iziToast.iziToast-color-red {
+  background: rgba(255,175,180,0.9);
+  border-color: rgba(255,175,180,0.9);
+}
+.iziToast.iziToast-color-orange {
+  background: rgba(255,207,165,0.9);
+  border-color: rgba(255,207,165,0.9);
+}
+.iziToast.iziToast-color-yellow {
+  background: rgba(255,249,178,0.9);
+  border-color: rgba(255,249,178,0.9);
+}
+.iziToast.iziToast-color-blue {
+  background: rgba(157,222,255,0.9);
+  border-color: rgba(157,222,255,0.9);
+}
+.iziToast.iziToast-color-green {
+  background: rgba(166,239,184,0.9);
+  border-color: rgba(166,239,184,0.9);
+}
+.iziToast.iziToast-layout2 .iziToast-body .iziToast-texts,
+.iziToast.iziToast-layout2 .iziToast-body .iziToast-message {
+  width: 100%;
+}
+.iziToast.iziToast-layout3 {
+  border-radius: 2px;
+}
+.iziToast.iziToast-layout3::after {
+  display: none;
+}
+.iziToast.revealIn,
+.iziToast .revealIn {
+  -webkit-animation: iziT-revealIn 1s cubic-bezier(0.25, 1.6, 0.25, 1) both;
+  -moz-animation: iziT-revealIn 1s cubic-bezier(0.25, 1.6, 0.25, 1) both;
+  animation: iziT-revealIn 1s cubic-bezier(0.25, 1.6, 0.25, 1) both;
+}
+.iziToast.slideIn,
+.iziToast .slideIn {
+  -webkit-animation: iziT-slideIn 1s cubic-bezier(0.16, 0.81, 0.32, 1) both;
+  -moz-animation: iziT-slideIn 1s cubic-bezier(0.16, 0.81, 0.32, 1) both;
+  animation: iziT-slideIn 1s cubic-bezier(0.16, 0.81, 0.32, 1) both;
+}
+.iziToast.bounceInLeft {
+  -webkit-animation: iziT-bounceInLeft 0.7s ease-in-out both;
+  animation: iziT-bounceInLeft 0.7s ease-in-out both;
+}
+.iziToast.bounceInRight {
+  -webkit-animation: iziT-bounceInRight 0.85s ease-in-out both;
+  animation: iziT-bounceInRight 0.85s ease-in-out both;
+}
+.iziToast.bounceInDown {
+  -webkit-animation: iziT-bounceInDown 0.7s ease-in-out both;
+  animation: iziT-bounceInDown 0.7s ease-in-out both;
+}
+.iziToast.bounceInUp {
+  -webkit-animation: iziT-bounceInUp 0.7s ease-in-out both;
+  animation: iziT-bounceInUp 0.7s ease-in-out both;
+}
+.iziToast.fadeIn,
+.iziToast .fadeIn {
+  -webkit-animation: iziT-fadeIn 0.5s ease both;
+  animation: iziT-fadeIn 0.5s ease both;
+}
+.iziToast.fadeInUp {
+  -webkit-animation: iziT-fadeInUp 0.7s ease both;
+  animation: iziT-fadeInUp 0.7s ease both;
+}
+.iziToast.fadeInDown {
+  -webkit-animation: iziT-fadeInDown 0.7s ease both;
+  animation: iziT-fadeInDown 0.7s ease both;
+}
+.iziToast.fadeInLeft {
+  -webkit-animation: iziT-fadeInLeft 0.85s cubic-bezier(0.25, 0.8, 0.25, 1) both;
+  animation: iziT-fadeInLeft 0.85s cubic-bezier(0.25, 0.8, 0.25, 1) both;
+}
+.iziToast.fadeInRight {
+  -webkit-animation: iziT-fadeInRight 0.85s cubic-bezier(0.25, 0.8, 0.25, 1) both;
+  animation: iziT-fadeInRight 0.85s cubic-bezier(0.25, 0.8, 0.25, 1) both;
+}
+.iziToast.flipInX {
+  -webkit-animation: iziT-flipInX 0.85s cubic-bezier(0.35, 0, 0.25, 1) both;
+  animation: iziT-flipInX 0.85s cubic-bezier(0.35, 0, 0.25, 1) both;
+}
+.iziToast.fadeOut {
+  -webkit-animation: iziT-fadeOut 0.7s ease both;
+  animation: iziT-fadeOut 0.7s ease both;
+}
+.iziToast.fadeOutDown {
+  -webkit-animation: iziT-fadeOutDown 0.7s cubic-bezier(0.4, 0.45, 0.15, 0.91) both;
+  animation: iziT-fadeOutDown 0.7s cubic-bezier(0.4, 0.45, 0.15, 0.91) both;
+}
+.iziToast.fadeOutUp {
+  -webkit-animation: iziT-fadeOutUp 0.7s cubic-bezier(0.4, 0.45, 0.15, 0.91) both;
+  animation: iziT-fadeOutUp 0.7s cubic-bezier(0.4, 0.45, 0.15, 0.91) both;
+}
+.iziToast.fadeOutLeft {
+  -webkit-animation: iziT-fadeOutLeft 0.5s ease both;
+  animation: iziT-fadeOutLeft 0.5s ease both;
+}
+.iziToast.fadeOutRight {
+  -webkit-animation: iziT-fadeOutRight 0.5s ease both;
+  animation: iziT-fadeOutRight 0.5s ease both;
+}
+.iziToast.flipOutX {
+  -webkit-backface-visibility: visible !important;
+  backface-visibility: visible !important;
+  -webkit-animation: iziT-flipOutX 0.7s cubic-bezier(0.4, 0.45, 0.15, 0.91) both;
+  animation: iziT-flipOutX 0.7s cubic-bezier(0.4, 0.45, 0.15, 0.91) both;
+}
+.iziToast-overlay.fadeIn {
+  -webkit-animation: iziT-fadeIn 0.5s ease both;
+  animation: iziT-fadeIn 0.5s ease both;
+}
+.iziToast-overlay.fadeOut {
+  -webkit-animation: iziT-fadeOut 0.7s ease both;
+  animation: iziT-fadeOut 0.7s ease both;
+}
+@-webkit-keyframes iziT-revealIn {
+  0% {
+    opacity: 0;
+    -webkit-transform: scale3d(0.3, 0.3, 1);
+  }
+  100% {
+    opacity: 1;
+  }
+}
+@-moz-keyframes iziT-revealIn {
+  0% {
+    opacity: 0;
+    -moz-transform: scale3d(0.3, 0.3, 1);
+  }
+  100% {
+    opacity: 1;
+  }
+}
+@-webkit-keyframes iziT-slideIn {
+  0% {
+    opacity: 0;
+    -webkit-transform: translateX(50px);
+  }
+  100% {
+    opacity: 1;
+    -webkit-transform: translateX(0);
+  }
+}
+@-moz-keyframes iziT-slideIn {
+  0% {
+    opacity: 0;
+    -moz-transform: translateX(50px);
+  }
+  100% {
+    opacity: 1;
+    -moz-transform: translateX(0);
+  }
+}
+@-webkit-keyframes iziT-bounceInLeft {
+  0% {
+    opacity: 0;
+    -webkit-transform: translateX(280px);
+  }
+  50% {
+    opacity: 1;
+    -webkit-transform: translateX(-20px);
+  }
+  70% {
+    -webkit-transform: translateX(10px);
+  }
+  100% {
+    -webkit-transform: translateX(0);
+  }
+}
+@-webkit-keyframes iziT-bounceInRight {
+  0% {
+    opacity: 0;
+    -webkit-transform: translateX(-280px);
+  }
+  50% {
+    opacity: 1;
+    -webkit-transform: translateX(20px);
+  }
+  70% {
+    -webkit-transform: translateX(-10px);
+  }
+  100% {
+    -webkit-transform: translateX(0);
+  }
+}
+@-webkit-keyframes iziT-bounceInDown {
+  0% {
+    opacity: 0;
+    -webkit-transform: translateY(-200px);
+  }
+  50% {
+    opacity: 1;
+    -webkit-transform: translateY(10px);
+  }
+  70% {
+    -webkit-transform: translateY(-5px);
+  }
+  100% {
+    -webkit-transform: translateY(0);
+  }
+}
+@-webkit-keyframes iziT-bounceInUp {
+  0% {
+    opacity: 0;
+    -webkit-transform: translateY(200px);
+  }
+  50% {
+    opacity: 1;
+    -webkit-transform: translateY(-10px);
+  }
+  70% {
+    -webkit-transform: translateY(5px);
+  }
+  100% {
+    -webkit-transform: translateY(0);
+  }
+}
+@-webkit-keyframes iziT-fadeIn {
+  from {
+    opacity: 0;
+  }
+  to {
+    opacity: 1;
+  }
+}
+@-webkit-keyframes iziT-fadeInUp {
+  from {
+    opacity: 0;
+    -webkit-transform: translate3d(0, 100%, 0);
+    transform: translate3d(0, 100%, 0);
+  }
+  to {
+    opacity: 1;
+    -webkit-transform: none;
+    transform: none;
+  }
+}
+@-webkit-keyframes iziT-fadeInDown {
+  from {
+    opacity: 0;
+    -webkit-transform: translate3d(0, -100%, 0);
+    transform: translate3d(0, -100%, 0);
+  }
+  to {
+    opacity: 1;
+    -webkit-transform: none;
+    transform: none;
+  }
+}
+@-webkit-keyframes iziT-fadeInLeft {
+  from {
+    opacity: 0;
+    -webkit-transform: translate3d(300px, 0, 0);
+    transform: translate3d(300px, 0, 0);
+  }
+  to {
+    opacity: 1;
+    -webkit-transform: none;
+    transform: none;
+  }
+}
+@-webkit-keyframes iziT-fadeInRight {
+  from {
+    opacity: 0;
+    -webkit-transform: translate3d(-300px, 0, 0);
+    transform: translate3d(-300px, 0, 0);
+  }
+  to {
+    opacity: 1;
+    -webkit-transform: none;
+    transform: none;
+  }
+}
+@-webkit-keyframes iziT-flipInX {
+  from {
+    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
+    transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
+    opacity: 0;
+  }
+  40% {
+    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
+    transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
+  }
+  60% {
+    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 10deg);
+    transform: perspective(400px) rotate3d(1, 0, 0, 10deg);
+    opacity: 1;
+  }
+  80% {
+    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -5deg);
+    transform: perspective(400px) rotate3d(1, 0, 0, -5deg);
+  }
+  to {
+    -webkit-transform: perspective(400px);
+    transform: perspective(400px);
+  }
+}
+@-webkit-keyframes iziT-fadeOut {
+  from {
+    opacity: 1;
+  }
+  to {
+    opacity: 0;
+  }
+}
+@-webkit-keyframes iziT-fadeOutDown {
+  from {
+    opacity: 1;
+  }
+  to {
+    opacity: 0;
+    -webkit-transform: translate3d(0, 100%, 0);
+    transform: translate3d(0, 100%, 0);
+  }
+}
+@-webkit-keyframes iziT-fadeOutUp {
+  from {
+    opacity: 1;
+  }
+  to {
+    opacity: 0;
+    -webkit-transform: translate3d(0, -100%, 0);
+    transform: translate3d(0, -100%, 0);
+  }
+}
+@-webkit-keyframes iziT-fadeOutLeft {
+  from {
+    opacity: 1;
+  }
+  to {
+    opacity: 0;
+    -webkit-transform: translate3d(-200px, 0, 0);
+    transform: translate3d(-200px, 0, 0);
+  }
+}
+@-webkit-keyframes iziT-fadeOutRight {
+  from {
+    opacity: 1;
+  }
+  to {
+    opacity: 0;
+    -webkit-transform: translate3d(200px, 0, 0);
+    transform: translate3d(200px, 0, 0);
+  }
+}
+@-webkit-keyframes iziT-flipOutX {
+  from {
+    -webkit-transform: perspective(400px);
+    transform: perspective(400px);
+  }
+  30% {
+    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
+    transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
+    opacity: 1;
+  }
+  to {
+    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
+    transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
+    opacity: 0;
+  }
+}
+@-moz-keyframes iziT-revealIn {
+  0% {
+    opacity: 0;
+    transform: scale3d(0.3, 0.3, 1);
+  }
+  100% {
+    opacity: 1;
+  }
+}
+@-webkit-keyframes iziT-revealIn {
+  0% {
+    opacity: 0;
+    transform: scale3d(0.3, 0.3, 1);
+  }
+  100% {
+    opacity: 1;
+  }
+}
+@-o-keyframes iziT-revealIn {
+  0% {
+    opacity: 0;
+    transform: scale3d(0.3, 0.3, 1);
+  }
+  100% {
+    opacity: 1;
+  }
+}
+@keyframes iziT-revealIn {
+  0% {
+    opacity: 0;
+    transform: scale3d(0.3, 0.3, 1);
+  }
+  100% {
+    opacity: 1;
+  }
+}
+@-moz-keyframes iziT-slideIn {
+  0% {
+    opacity: 0;
+    transform: translateX(50px);
+  }
+  100% {
+    opacity: 1;
+    transform: translateX(0);
+  }
+}
+@-webkit-keyframes iziT-slideIn {
+  0% {
+    opacity: 0;
+    transform: translateX(50px);
+  }
+  100% {
+    opacity: 1;
+    transform: translateX(0);
+  }
+}
+@-o-keyframes iziT-slideIn {
+  0% {
+    opacity: 0;
+    transform: translateX(50px);
+  }
+  100% {
+    opacity: 1;
+    transform: translateX(0);
+  }
+}
+@keyframes iziT-slideIn {
+  0% {
+    opacity: 0;
+    transform: translateX(50px);
+  }
+  100% {
+    opacity: 1;
+    transform: translateX(0);
+  }
+}
+@-moz-keyframes iziT-bounceInLeft {
+  0% {
+    opacity: 0;
+    transform: translateX(280px);
+  }
+  50% {
+    opacity: 1;
+    transform: translateX(-20px);
+  }
+  70% {
+    transform: translateX(10px);
+  }
+  100% {
+    transform: translateX(0);
+  }
+}
+@-webkit-keyframes iziT-bounceInLeft {
+  0% {
+    opacity: 0;
+    transform: translateX(280px);
+  }
+  50% {
+    opacity: 1;
+    transform: translateX(-20px);
+  }
+  70% {
+    transform: translateX(10px);
+  }
+  100% {
+    transform: translateX(0);
+  }
+}
+@-o-keyframes iziT-bounceInLeft {
+  0% {
+    opacity: 0;
+    transform: translateX(280px);
+  }
+  50% {
+    opacity: 1;
+    transform: translateX(-20px);
+  }
+  70% {
+    transform: translateX(10px);
+  }
+  100% {
+    transform: translateX(0);
+  }
+}
+@keyframes iziT-bounceInLeft {
+  0% {
+    opacity: 0;
+    transform: translateX(280px);
+  }
+  50% {
+    opacity: 1;
+    transform: translateX(-20px);
+  }
+  70% {
+    transform: translateX(10px);
+  }
+  100% {
+    transform: translateX(0);
+  }
+}
+@-moz-keyframes iziT-bounceInRight {
+  0% {
+    opacity: 0;
+    transform: translateX(-280px);
+  }
+  50% {
+    opacity: 1;
+    transform: translateX(20px);
+  }
+  70% {
+    transform: translateX(-10px);
+  }
+  100% {
+    transform: translateX(0);
+  }
+}
+@-webkit-keyframes iziT-bounceInRight {
+  0% {
+    opacity: 0;
+    transform: translateX(-280px);
+  }
+  50% {
+    opacity: 1;
+    transform: translateX(20px);
+  }
+  70% {
+    transform: translateX(-10px);
+  }
+  100% {
+    transform: translateX(0);
+  }
+}
+@-o-keyframes iziT-bounceInRight {
+  0% {
+    opacity: 0;
+    transform: translateX(-280px);
+  }
+  50% {
+    opacity: 1;
+    transform: translateX(20px);
+  }
+  70% {
+    transform: translateX(-10px);
+  }
+  100% {
+    transform: translateX(0);
+  }
+}
+@keyframes iziT-bounceInRight {
+  0% {
+    opacity: 0;
+    transform: translateX(-280px);
+  }
+  50% {
+    opacity: 1;
+    transform: translateX(20px);
+  }
+  70% {
+    transform: translateX(-10px);
+  }
+  100% {
+    transform: translateX(0);
+  }
+}
+@-moz-keyframes iziT-bounceInDown {
+  0% {
+    opacity: 0;
+    transform: translateY(-200px);
+  }
+  50% {
+    opacity: 1;
+    transform: translateY(10px);
+  }
+  70% {
+    transform: translateY(-5px);
+  }
+  100% {
+    transform: translateY(0);
+  }
+}
+@-webkit-keyframes iziT-bounceInDown {
+  0% {
+    opacity: 0;
+    transform: translateY(-200px);
+  }
+  50% {
+    opacity: 1;
+    transform: translateY(10px);
+  }
+  70% {
+    transform: translateY(-5px);
+  }
+  100% {
+    transform: translateY(0);
+  }
+}
+@-o-keyframes iziT-bounceInDown {
+  0% {
+    opacity: 0;
+    transform: translateY(-200px);
+  }
+  50% {
+    opacity: 1;
+    transform: translateY(10px);
+  }
+  70% {
+    transform: translateY(-5px);
+  }
+  100% {
+    transform: translateY(0);
+  }
+}
+@keyframes iziT-bounceInDown {
+  0% {
+    opacity: 0;
+    transform: translateY(-200px);
+  }
+  50% {
+    opacity: 1;
+    transform: translateY(10px);
+  }
+  70% {
+    transform: translateY(-5px);
+  }
+  100% {
+    transform: translateY(0);
+  }
+}
+@-moz-keyframes iziT-bounceInUp {
+  0% {
+    opacity: 0;
+    transform: translateY(200px);
+  }
+  50% {
+    opacity: 1;
+    transform: translateY(-10px);
+  }
+  70% {
+    transform: translateY(5px);
+  }
+  100% {
+    transform: translateY(0);
+  }
+}
+@-webkit-keyframes iziT-bounceInUp {
+  0% {
+    opacity: 0;
+    transform: translateY(200px);
+  }
+  50% {
+    opacity: 1;
+    transform: translateY(-10px);
+  }
+  70% {
+    transform: translateY(5px);
+  }
+  100% {
+    transform: translateY(0);
+  }
+}
+@-o-keyframes iziT-bounceInUp {
+  0% {
+    opacity: 0;
+    transform: translateY(200px);
+  }
+  50% {
+    opacity: 1;
+    transform: translateY(-10px);
+  }
+  70% {
+    transform: translateY(5px);
+  }
+  100% {
+    transform: translateY(0);
+  }
+}
+@keyframes iziT-bounceInUp {
+  0% {
+    opacity: 0;
+    transform: translateY(200px);
+  }
+  50% {
+    opacity: 1;
+    transform: translateY(-10px);
+  }
+  70% {
+    transform: translateY(5px);
+  }
+  100% {
+    transform: translateY(0);
+  }
+}
+@-moz-keyframes iziT-fadeIn {
+  from {
+    opacity: 0;
+  }
+  to {
+    opacity: 1;
+  }
+}
+@-webkit-keyframes iziT-fadeIn {
+  from {
+    opacity: 0;
+  }
+  to {
+    opacity: 1;
+  }
+}
+@-o-keyframes iziT-fadeIn {
+  from {
+    opacity: 0;
+  }
+  to {
+    opacity: 1;
+  }
+}
+@keyframes iziT-fadeIn {
+  from {
+    opacity: 0;
+  }
+  to {
+    opacity: 1;
+  }
+}
+@-moz-keyframes iziT-fadeInUp {
+  from {
+    opacity: 0;
+    -webkit-transform: translate3d(0, 100%, 0);
+    transform: translate3d(0, 100%, 0);
+  }
+  to {
+    opacity: 1;
+    -webkit-transform: none;
+    transform: none;
+  }
+}
+@-webkit-keyframes iziT-fadeInUp {
+  from {
+    opacity: 0;
+    -webkit-transform: translate3d(0, 100%, 0);
+    transform: translate3d(0, 100%, 0);
+  }
+  to {
+    opacity: 1;
+    -webkit-transform: none;
+    transform: none;
+  }
+}
+@-o-keyframes iziT-fadeInUp {
+  from {
+    opacity: 0;
+    -webkit-transform: translate3d(0, 100%, 0);
+    transform: translate3d(0, 100%, 0);
+  }
+  to {
+    opacity: 1;
+    -webkit-transform: none;
+    transform: none;
+  }
+}
+@keyframes iziT-fadeInUp {
+  from {
+    opacity: 0;
+    -webkit-transform: translate3d(0, 100%, 0);
+    transform: translate3d(0, 100%, 0);
+  }
+  to {
+    opacity: 1;
+    -webkit-transform: none;
+    transform: none;
+  }
+}
+@-moz-keyframes iziT-fadeInDown {
+  from {
+    opacity: 0;
+    -webkit-transform: translate3d(0, -100%, 0);
+    transform: translate3d(0, -100%, 0);
+  }
+  to {
+    opacity: 1;
+    -webkit-transform: none;
+    transform: none;
+  }
+}
+@-webkit-keyframes iziT-fadeInDown {
+  from {
+    opacity: 0;
+    -webkit-transform: translate3d(0, -100%, 0);
+    transform: translate3d(0, -100%, 0);
+  }
+  to {
+    opacity: 1;
+    -webkit-transform: none;
+    transform: none;
+  }
+}
+@-o-keyframes iziT-fadeInDown {
+  from {
+    opacity: 0;
+    -webkit-transform: translate3d(0, -100%, 0);
+    transform: translate3d(0, -100%, 0);
+  }
+  to {
+    opacity: 1;
+    -webkit-transform: none;
+    transform: none;
+  }
+}
+@keyframes iziT-fadeInDown {
+  from {
+    opacity: 0;
+    -webkit-transform: translate3d(0, -100%, 0);
+    transform: translate3d(0, -100%, 0);
+  }
+  to {
+    opacity: 1;
+    -webkit-transform: none;
+    transform: none;
+  }
+}
+@-moz-keyframes iziT-fadeInLeft {
+  from {
+    opacity: 0;
+    -webkit-transform: translate3d(300px, 0, 0);
+    transform: translate3d(300px, 0, 0);
+  }
+  to {
+    opacity: 1;
+    -webkit-transform: none;
+    transform: none;
+  }
+}
+@-webkit-keyframes iziT-fadeInLeft {
+  from {
+    opacity: 0;
+    -webkit-transform: translate3d(300px, 0, 0);
+    transform: translate3d(300px, 0, 0);
+  }
+  to {
+    opacity: 1;
+    -webkit-transform: none;
+    transform: none;
+  }
+}
+@-o-keyframes iziT-fadeInLeft {
+  from {
+    opacity: 0;
+    -webkit-transform: translate3d(300px, 0, 0);
+    transform: translate3d(300px, 0, 0);
+  }
+  to {
+    opacity: 1;
+    -webkit-transform: none;
+    transform: none;
+  }
+}
+@keyframes iziT-fadeInLeft {
+  from {
+    opacity: 0;
+    -webkit-transform: translate3d(300px, 0, 0);
+    transform: translate3d(300px, 0, 0);
+  }
+  to {
+    opacity: 1;
+    -webkit-transform: none;
+    transform: none;
+  }
+}
+@-moz-keyframes iziT-fadeInRight {
+  from {
+    opacity: 0;
+    -webkit-transform: translate3d(-300px, 0, 0);
+    transform: translate3d(-300px, 0, 0);
+  }
+  to {
+    opacity: 1;
+    -webkit-transform: none;
+    transform: none;
+  }
+}
+@-webkit-keyframes iziT-fadeInRight {
+  from {
+    opacity: 0;
+    -webkit-transform: translate3d(-300px, 0, 0);
+    transform: translate3d(-300px, 0, 0);
+  }
+  to {
+    opacity: 1;
+    -webkit-transform: none;
+    transform: none;
+  }
+}
+@-o-keyframes iziT-fadeInRight {
+  from {
+    opacity: 0;
+    -webkit-transform: translate3d(-300px, 0, 0);
+    transform: translate3d(-300px, 0, 0);
+  }
+  to {
+    opacity: 1;
+    -webkit-transform: none;
+    transform: none;
+  }
+}
+@keyframes iziT-fadeInRight {
+  from {
+    opacity: 0;
+    -webkit-transform: translate3d(-300px, 0, 0);
+    transform: translate3d(-300px, 0, 0);
+  }
+  to {
+    opacity: 1;
+    -webkit-transform: none;
+    transform: none;
+  }
+}
+@-moz-keyframes iziT-flipInX {
+  from {
+    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
+    transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
+    opacity: 0;
+  }
+  40% {
+    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
+    transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
+  }
+  60% {
+    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 10deg);
+    transform: perspective(400px) rotate3d(1, 0, 0, 10deg);
+    opacity: 1;
+  }
+  80% {
+    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -5deg);
+    transform: perspective(400px) rotate3d(1, 0, 0, -5deg);
+  }
+  to {
+    -webkit-transform: perspective(400px);
+    transform: perspective(400px);
+  }
+}
+@-webkit-keyframes iziT-flipInX {
+  from {
+    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
+    transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
+    opacity: 0;
+  }
+  40% {
+    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
+    transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
+  }
+  60% {
+    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 10deg);
+    transform: perspective(400px) rotate3d(1, 0, 0, 10deg);
+    opacity: 1;
+  }
+  80% {
+    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -5deg);
+    transform: perspective(400px) rotate3d(1, 0, 0, -5deg);
+  }
+  to {
+    -webkit-transform: perspective(400px);
+    transform: perspective(400px);
+  }
+}
+@-o-keyframes iziT-flipInX {
+  from {
+    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
+    transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
+    opacity: 0;
+  }
+  40% {
+    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
+    transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
+  }
+  60% {
+    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 10deg);
+    transform: perspective(400px) rotate3d(1, 0, 0, 10deg);
+    opacity: 1;
+  }
+  80% {
+    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -5deg);
+    transform: perspective(400px) rotate3d(1, 0, 0, -5deg);
+  }
+  to {
+    -webkit-transform: perspective(400px);
+    transform: perspective(400px);
+  }
+}
+@keyframes iziT-flipInX {
+  from {
+    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
+    transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
+    opacity: 0;
+  }
+  40% {
+    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
+    transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
+  }
+  60% {
+    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 10deg);
+    transform: perspective(400px) rotate3d(1, 0, 0, 10deg);
+    opacity: 1;
+  }
+  80% {
+    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -5deg);
+    transform: perspective(400px) rotate3d(1, 0, 0, -5deg);
+  }
+  to {
+    -webkit-transform: perspective(400px);
+    transform: perspective(400px);
+  }
+}
+@-moz-keyframes iziT-fadeOut {
+  from {
+    opacity: 1;
+  }
+  to {
+    opacity: 0;
+  }
+}
+@-webkit-keyframes iziT-fadeOut {
+  from {
+    opacity: 1;
+  }
+  to {
+    opacity: 0;
+  }
+}
+@-o-keyframes iziT-fadeOut {
+  from {
+    opacity: 1;
+  }
+  to {
+    opacity: 0;
+  }
+}
+@keyframes iziT-fadeOut {
+  from {
+    opacity: 1;
+  }
+  to {
+    opacity: 0;
+  }
+}
+@-moz-keyframes iziT-fadeOutDown {
+  from {
+    opacity: 1;
+  }
+  to {
+    opacity: 0;
+    -webkit-transform: translate3d(0, 100%, 0);
+    transform: translate3d(0, 100%, 0);
+  }
+}
+@-webkit-keyframes iziT-fadeOutDown {
+  from {
+    opacity: 1;
+  }
+  to {
+    opacity: 0;
+    -webkit-transform: translate3d(0, 100%, 0);
+    transform: translate3d(0, 100%, 0);
+  }
+}
+@-o-keyframes iziT-fadeOutDown {
+  from {
+    opacity: 1;
+  }
+  to {
+    opacity: 0;
+    -webkit-transform: translate3d(0, 100%, 0);
+    transform: translate3d(0, 100%, 0);
+  }
+}
+@keyframes iziT-fadeOutDown {
+  from {
+    opacity: 1;
+  }
+  to {
+    opacity: 0;
+    -webkit-transform: translate3d(0, 100%, 0);
+    transform: translate3d(0, 100%, 0);
+  }
+}
+@-moz-keyframes iziT-fadeOutUp {
+  from {
+    opacity: 1;
+  }
+  to {
+    opacity: 0;
+    -webkit-transform: translate3d(0, -100%, 0);
+    transform: translate3d(0, -100%, 0);
+  }
+}
+@-webkit-keyframes iziT-fadeOutUp {
+  from {
+    opacity: 1;
+  }
+  to {
+    opacity: 0;
+    -webkit-transform: translate3d(0, -100%, 0);
+    transform: translate3d(0, -100%, 0);
+  }
+}
+@-o-keyframes iziT-fadeOutUp {
+  from {
+    opacity: 1;
+  }
+  to {
+    opacity: 0;
+    -webkit-transform: translate3d(0, -100%, 0);
+    transform: translate3d(0, -100%, 0);
+  }
+}
+@keyframes iziT-fadeOutUp {
+  from {
+    opacity: 1;
+  }
+  to {
+    opacity: 0;
+    -webkit-transform: translate3d(0, -100%, 0);
+    transform: translate3d(0, -100%, 0);
+  }
+}
+@-moz-keyframes iziT-fadeOutLeft {
+  from {
+    opacity: 1;
+  }
+  to {
+    opacity: 0;
+    -webkit-transform: translate3d(-200px, 0, 0);
+    transform: translate3d(-200px, 0, 0);
+  }
+}
+@-webkit-keyframes iziT-fadeOutLeft {
+  from {
+    opacity: 1;
+  }
+  to {
+    opacity: 0;
+    -webkit-transform: translate3d(-200px, 0, 0);
+    transform: translate3d(-200px, 0, 0);
+  }
+}
+@-o-keyframes iziT-fadeOutLeft {
+  from {
+    opacity: 1;
+  }
+  to {
+    opacity: 0;
+    -webkit-transform: translate3d(-200px, 0, 0);
+    transform: translate3d(-200px, 0, 0);
+  }
+}
+@keyframes iziT-fadeOutLeft {
+  from {
+    opacity: 1;
+  }
+  to {
+    opacity: 0;
+    -webkit-transform: translate3d(-200px, 0, 0);
+    transform: translate3d(-200px, 0, 0);
+  }
+}
+@-moz-keyframes iziT-fadeOutRight {
+  from {
+    opacity: 1;
+  }
+  to {
+    opacity: 0;
+    -webkit-transform: translate3d(200px, 0, 0);
+    transform: translate3d(200px, 0, 0);
+  }
+}
+@-webkit-keyframes iziT-fadeOutRight {
+  from {
+    opacity: 1;
+  }
+  to {
+    opacity: 0;
+    -webkit-transform: translate3d(200px, 0, 0);
+    transform: translate3d(200px, 0, 0);
+  }
+}
+@-o-keyframes iziT-fadeOutRight {
+  from {
+    opacity: 1;
+  }
+  to {
+    opacity: 0;
+    -webkit-transform: translate3d(200px, 0, 0);
+    transform: translate3d(200px, 0, 0);
+  }
+}
+@keyframes iziT-fadeOutRight {
+  from {
+    opacity: 1;
+  }
+  to {
+    opacity: 0;
+    -webkit-transform: translate3d(200px, 0, 0);
+    transform: translate3d(200px, 0, 0);
+  }
+}
+@-moz-keyframes iziT-flipOutX {
+  from {
+    -webkit-transform: perspective(400px);
+    transform: perspective(400px);
+  }
+  30% {
+    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
+    transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
+    opacity: 1;
+  }
+  to {
+    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
+    transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
+    opacity: 0;
+  }
+}
+@-webkit-keyframes iziT-flipOutX {
+  from {
+    -webkit-transform: perspective(400px);
+    transform: perspective(400px);
+  }
+  30% {
+    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
+    transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
+    opacity: 1;
+  }
+  to {
+    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
+    transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
+    opacity: 0;
+  }
+}
+@-o-keyframes iziT-flipOutX {
+  from {
+    -webkit-transform: perspective(400px);
+    transform: perspective(400px);
+  }
+  30% {
+    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
+    transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
+    opacity: 1;
+  }
+  to {
+    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
+    transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
+    opacity: 0;
+  }
+}
+@keyframes iziT-flipOutX {
+  from {
+    -webkit-transform: perspective(400px);
+    transform: perspective(400px);
+  }
+  30% {
+    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
+    transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
+    opacity: 1;
+  }
+  to {
+    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
+    transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
+    opacity: 0;
+  }
+}

File diff suppressed because it is too large
+ 5 - 0
plugins/bower_components/iziToast/css/iziToast.min.css


+ 1239 - 0
plugins/bower_components/iziToast/js/iziToast.js

@@ -0,0 +1,1239 @@
+/*
+* iziToast | v1.3.0
+* http://izitoast.marcelodolce.com
+* by Marcelo Dolce.
+*/
+(function (root, factory) {
+	if(typeof define === 'function' && define.amd) {
+		define([], factory(root));
+	} else if(typeof exports === 'object') {
+		module.exports = factory(root);
+	} else {
+		root.iziToast = factory(root);
+	}
+})(typeof global !== 'undefined' ? global : window || this.window || this.global, function (root) {
+
+	'use strict';
+
+	//
+	// Variables
+	//
+	var $iziToast = {},
+		PLUGIN_NAME = 'iziToast',
+		BODY = document.querySelector('body'),
+		ISMOBILE = (/Mobi/.test(navigator.userAgent)) ? true : false,
+		ISCHROME = /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor),
+		ISFIREFOX = typeof InstallTrigger !== 'undefined',
+		ACCEPTSTOUCH = 'ontouchstart' in document.documentElement,
+		POSITIONS = ['bottomRight','bottomLeft','bottomCenter','topRight','topLeft','topCenter','center'],
+		THEMES = {
+			info: {
+				color: 'blue',
+				icon: 'ico-info'
+			},
+			success: {
+				color: 'green',
+				icon: 'ico-success'
+			},
+			warning: {
+				color: 'orange',
+				icon: 'ico-warning'
+			},
+			error: {
+				color: 'red',
+				icon: 'ico-error'
+			},
+			question: {
+				color: 'yellow',
+				icon: 'ico-question'
+			}
+		},
+		MOBILEWIDTH = 568,
+		CONFIG = {};
+
+	$iziToast.children = {};
+
+	// Default settings
+	var defaults = {
+		id: null, 
+		class: '',
+		title: '',
+		titleColor: '',
+		titleSize: '',
+		titleLineHeight: '',
+		message: '',
+		messageColor: '',
+		messageSize: '',
+		messageLineHeight: '',
+		backgroundColor: '',
+		theme: 'light', // dark
+		color: '', // blue, red, green, yellow
+		icon: '',
+		iconText: '',
+		iconColor: '',
+		image: '',
+		imageWidth: 50,
+		maxWidth: null,
+		zindex: null,
+		layout: 1,
+		balloon: false,
+		close: true,
+		closeOnEscape: false,
+		closeOnClick: false,
+		rtl: false,
+		position: 'bottomRight', // bottomRight, bottomLeft, topRight, topLeft, topCenter, bottomCenter, center
+		target: '',
+		targetFirst: true,
+		toastOnce: false,
+		timeout: 5000,
+		animateInside: true,
+		drag: true,
+		pauseOnHover: true,
+		resetOnHover: false,
+		progressBar: true,
+		progressBarColor: '',
+		progressBarEasing: 'linear',
+		overlay: false,
+		overlayClose: false,
+		overlayColor: 'rgba(0, 0, 0, 0.6)',
+		transitionIn: 'fadeInUp', // bounceInLeft, bounceInRight, bounceInUp, bounceInDown, fadeIn, fadeInDown, fadeInUp, fadeInLeft, fadeInRight, flipInX
+		transitionOut: 'fadeOut', // fadeOut, fadeOutUp, fadeOutDown, fadeOutLeft, fadeOutRight, flipOutX
+		transitionInMobile: 'fadeInUp',
+		transitionOutMobile: 'fadeOutDown',
+		buttons: {},
+		inputs: {},
+		onOpening: function () {},
+		onOpened: function () {},
+		onClosing: function () {},
+		onClosed: function () {}
+	};
+
+	//
+	// Methods
+	//
+
+
+	/**
+	 * Polyfill for remove() method
+	 */
+	if(!('remove' in Element.prototype)) {
+	    Element.prototype.remove = function() {
+	        if(this.parentNode) {
+	            this.parentNode.removeChild(this);
+	        }
+	    };
+	}
+
+	/*
+     * Polyfill for CustomEvent for IE >= 9
+     * https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent/CustomEvent#Polyfill
+     */
+    if(typeof window.CustomEvent !== 'function') {
+        var CustomEventPolyfill = function (event, params) {
+            params = params || { bubbles: false, cancelable: false, detail: undefined };
+            var evt = document.createEvent('CustomEvent');
+            evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);
+            return evt;
+        };
+
+        CustomEventPolyfill.prototype = window.Event.prototype;
+
+        window.CustomEvent = CustomEventPolyfill;
+    }
+
+	/**
+	 * A simple forEach() implementation for Arrays, Objects and NodeLists
+	 * @private
+	 * @param {Array|Object|NodeList} collection Collection of items to iterate
+	 * @param {Function} callback Callback function for each iteration
+	 * @param {Array|Object|NodeList} scope Object/NodeList/Array that forEach is iterating over (aka `this`)
+	 */
+	var forEach = function (collection, callback, scope) {
+		if(Object.prototype.toString.call(collection) === '[object Object]') {
+			for (var prop in collection) {
+				if(Object.prototype.hasOwnProperty.call(collection, prop)) {
+					callback.call(scope, collection[prop], prop, collection);
+				}
+			}
+		} else {
+			if(collection){
+				for (var i = 0, len = collection.length; i < len; i++) {
+					callback.call(scope, collection[i], i, collection);
+				}
+			}
+		}
+	};
+
+	/**
+	 * Merge defaults with user options
+	 * @private
+	 * @param {Object} defaults Default settings
+	 * @param {Object} options User options
+	 * @returns {Object} Merged values of defaults and options
+	 */
+	var extend = function (defaults, options) {
+		var extended = {};
+		forEach(defaults, function (value, prop) {
+			extended[prop] = defaults[prop];
+		});
+		forEach(options, function (value, prop) {
+			extended[prop] = options[prop];
+		});
+		return extended;
+	};
+
+
+	/**
+	 * Create a fragment DOM elements
+	 * @private
+	 */
+	var createFragElem = function(htmlStr) {
+		var frag = document.createDocumentFragment(),
+			temp = document.createElement('div');
+		temp.innerHTML = htmlStr;
+		while (temp.firstChild) {
+			frag.appendChild(temp.firstChild);
+		}
+		return frag;
+	};
+
+
+	/**
+	 * Check if is a color
+	 * @private
+	 */
+	var isColor = function(color){
+		if( color.substring(0,1) == '#' || color.substring(0,3) == 'rgb' || color.substring(0,3) == 'hsl' ){
+			return true;
+		} else {
+			return false;
+		}
+	};
+
+
+	/**
+	 * Check if is a Base64 string
+	 * @private
+	 */
+	var isBase64 = function(str) {
+	    try {
+	        return btoa(atob(str)) == str;
+	    } catch (err) {
+	        return false;
+	    }
+	};
+
+
+	/**
+	 * Drag method of toasts
+	 * @private
+	 */
+	var drag = function() {
+	    
+	    return {
+	        move: function(toast, instance, settings, xpos) {
+
+	        	var opacity,
+	        		opacityRange = 0.3,
+	        		distance = 180;
+	            
+	            if(xpos !== 0){
+	            	
+	            	toast.classList.add(PLUGIN_NAME+'-dragged');
+
+	            	toast.style.transform = 'translateX('+xpos + 'px)';
+
+		            if(xpos > 0){
+		            	opacity = (distance-xpos) / distance;
+		            	if(opacity < opacityRange){
+							instance.hide(extend(settings, { transitionOut: 'fadeOutRight', transitionOutMobile: 'fadeOutRight' }), toast, 'drag');
+						}
+		            } else {
+		            	opacity = (distance+xpos) / distance;
+		            	if(opacity < opacityRange){
+							instance.hide(extend(settings, { transitionOut: 'fadeOutLeft', transitionOutMobile: 'fadeOutLeft' }), toast, 'drag');
+						}
+		            }
+					toast.style.opacity = opacity;
+			
+					if(opacity < opacityRange){
+
+						if(ISCHROME || ISFIREFOX)
+							toast.style.left = xpos+'px';
+
+						toast.parentNode.style.opacity = opacityRange;
+
+		                this.stopMoving(toast, null);
+					}
+	            }
+
+				
+	        },
+	        startMoving: function(toast, instance, settings, e) {
+
+	            e = e || window.event;
+	            var posX = ((ACCEPTSTOUCH) ? e.touches[0].clientX : e.clientX),
+	                toastLeft = toast.style.transform.replace('px)', '');
+	                toastLeft = toastLeft.replace('translateX(', '');
+	            var offsetX = posX - toastLeft;
+
+				toast.classList.remove(settings.transitionIn);
+				toast.classList.remove(settings.transitionInMobile);
+				toast.style.transition = '';
+
+	            if(ACCEPTSTOUCH) {
+	                document.ontouchmove = function(e) {
+	                    e.preventDefault();
+	                    e = e || window.event;
+	                    var posX = e.touches[0].clientX,
+	                        finalX = posX - offsetX;
+                        drag.move(toast, instance, settings, finalX);
+	                };
+	            } else {
+	                document.onmousemove = function(e) {
+	                    e.preventDefault();
+	                    e = e || window.event;
+	                    var posX = e.clientX,
+	                        finalX = posX - offsetX;
+                        drag.move(toast, instance, settings, finalX);
+	                };
+	            }
+
+	        },
+	        stopMoving: function(toast, e) {
+
+	            if(ACCEPTSTOUCH) {
+	                document.ontouchmove = function() {};
+	            } else {
+	            	document.onmousemove = function() {};
+	            }
+
+				toast.style.opacity = '';
+				toast.style.transform = '';
+
+	            if(toast.classList.contains(PLUGIN_NAME+'-dragged')){
+	            	
+	            	toast.classList.remove(PLUGIN_NAME+'-dragged');
+
+					toast.style.transition = 'transform 0.4s ease, opacity 0.4s ease';
+					setTimeout(function() {
+						toast.style.transition = '';
+					}, 400);
+	            }
+
+	        }
+	    };
+
+	}();
+
+
+
+
+
+	$iziToast.setSetting = function (ref, option, value) {
+
+		$iziToast.children[ref][option] = value;
+
+	};
+
+
+	$iziToast.getSetting = function (ref, option) {
+
+		return $iziToast.children[ref][option];
+
+	};
+
+
+	/**
+	 * Destroy the current initialization.
+	 * @public
+	 */
+	$iziToast.destroy = function () {
+
+		forEach(document.querySelectorAll('.'+PLUGIN_NAME+'-wrapper'), function(element, index) {
+			element.remove();
+		});
+
+		forEach(document.querySelectorAll('.'+PLUGIN_NAME), function(element, index) {
+			element.remove();
+		});
+
+		// Remove event listeners
+		document.removeEventListener(PLUGIN_NAME+'-opened', {}, false);
+		document.removeEventListener(PLUGIN_NAME+'-opening', {}, false);
+		document.removeEventListener(PLUGIN_NAME+'-closing', {}, false);
+		document.removeEventListener(PLUGIN_NAME+'-closed', {}, false);
+		document.removeEventListener('keyup', {}, false);
+
+		// Reset variables
+		CONFIG = {};
+	};
+
+	/**
+	 * Initialize Plugin
+	 * @public
+	 * @param {Object} options User settings
+	 */
+	$iziToast.settings = function (options) {
+
+		// Destroy any existing initializations
+		$iziToast.destroy();
+
+		CONFIG = options;
+		defaults = extend(defaults, options || {});
+	};
+
+
+	/**
+	 * Building themes functions.
+	 * @public
+	 * @param {Object} options User settings
+	 */
+	forEach(THEMES, function (theme, name) {
+
+		$iziToast[name] = function (options) {
+
+			var settings = extend(CONFIG, options || {});
+			settings = extend(theme, settings || {});
+
+			this.show(settings);
+		};
+
+	});
+
+
+	/**
+	 * Do the calculation to move the progress bar
+	 * @private
+	 */
+	$iziToast.progress = function (options, $toast, callback) {
+
+
+		var that = this,
+			ref = $toast.getAttribute('data-iziToast-ref'),
+			settings = extend(this.children[ref], options || {}),
+			$elem = $toast.querySelector('.'+PLUGIN_NAME+'-progressbar div');
+
+	    return {
+	        start: function() {
+
+	        	if(typeof settings.time.REMAINING == 'undefined'){
+
+	        		$toast.classList.remove(PLUGIN_NAME+'-reseted');
+
+		        	if($elem !== null){
+						$elem.style.transition = 'width '+ settings.timeout +'ms '+settings.progressBarEasing;
+						$elem.style.width = '0%';
+					}
+
+		        	settings.time.START = new Date().getTime();
+		        	settings.time.END = settings.time.START + settings.timeout;
+					settings.time.TIMER = setTimeout(function() {
+
+						clearTimeout(settings.time.TIMER);
+
+						if(!$toast.classList.contains(PLUGIN_NAME+'-closing')){
+
+							that.hide(settings, $toast, 'timeout');
+
+							if(typeof callback === 'function'){
+								callback.apply(that);
+							}
+						}
+
+					}, settings.timeout);			
+		        	that.setSetting(ref, 'time', settings.time);
+	        	}
+	        },
+	        pause: function() {
+
+	        	if(typeof settings.time.START !== 'undefined' && !$toast.classList.contains(PLUGIN_NAME+'-paused') && !$toast.classList.contains(PLUGIN_NAME+'-reseted')){
+
+        			$toast.classList.add(PLUGIN_NAME+'-paused');
+
+					settings.time.REMAINING = settings.time.END - new Date().getTime();
+
+					clearTimeout(settings.time.TIMER);
+
+					that.setSetting(ref, 'time', settings.time);
+
+					if($elem !== null){
+						var computedStyle = window.getComputedStyle($elem),
+							propertyWidth = computedStyle.getPropertyValue('width');
+
+						$elem.style.transition = 'none';
+						$elem.style.width = propertyWidth;					
+					}
+
+					if(typeof callback === 'function'){
+						setTimeout(function() {
+							callback.apply(that);						
+						}, 10);
+					}
+        		}
+	        },
+	        resume: function() {
+
+				if(typeof settings.time.REMAINING !== 'undefined'){
+
+					$toast.classList.remove(PLUGIN_NAME+'-paused');
+
+		        	if($elem !== null){
+						$elem.style.transition = 'width '+ settings.time.REMAINING +'ms '+settings.progressBarEasing;
+						$elem.style.width = '0%';
+					}
+
+		        	settings.time.END = new Date().getTime() + settings.time.REMAINING;
+					settings.time.TIMER = setTimeout(function() {
+
+						clearTimeout(settings.time.TIMER);
+
+						if(!$toast.classList.contains(PLUGIN_NAME+'-closing')){
+
+							that.hide(settings, $toast, 'timeout');
+
+							if(typeof callback === 'function'){
+								callback.apply(that);
+							}
+						}
+
+
+					}, settings.time.REMAINING);
+
+					that.setSetting(ref, 'time', settings.time);
+				} else {
+					this.start();
+				}
+	        },
+	        reset: function(){
+
+				clearTimeout(settings.time.TIMER);
+
+				delete settings.time.REMAINING;
+
+				that.setSetting(ref, 'time', settings.time);
+
+				$toast.classList.add(PLUGIN_NAME+'-reseted');
+
+				$toast.classList.remove(PLUGIN_NAME+'-paused');
+
+				if($elem !== null){
+					$elem.style.transition = 'none';
+					$elem.style.width = '100%';
+				}
+
+				if(typeof callback === 'function'){
+					setTimeout(function() {
+						callback.apply(that);						
+					}, 10);
+				}
+	        }
+	    };
+
+	};
+
+
+	/**
+	 * Close the specific Toast
+	 * @public
+	 * @param {Object} options User settings
+	 */
+	$iziToast.hide = function (options, $toast, closedBy) {
+
+		var that = this,
+			settings = extend(this.children[$toast.getAttribute('data-iziToast-ref')], options || {});
+			settings.closedBy = closedBy || null;
+
+		delete settings.time.REMAINING;
+
+		if(typeof $toast != 'object'){
+			$toast = document.querySelector($toast);
+		}		
+
+		$toast.classList.add(PLUGIN_NAME+'-closing');
+
+		// Overlay
+		(function(){
+
+			var $overlay = document.querySelector('.'+PLUGIN_NAME+'-overlay');
+			if($overlay !== null){
+				var refs = $overlay.getAttribute('data-iziToast-ref');		
+					refs = refs.split(',');
+				var index = refs.indexOf(String(settings.ref));
+
+				if(index !== -1){
+					refs.splice(index, 1);			
+				}
+				$overlay.setAttribute('data-iziToast-ref', refs.join());
+
+				if(refs.length === 0){
+					$overlay.classList.remove('fadeIn');
+					$overlay.classList.add('fadeOut');
+					setTimeout(function() {
+						$overlay.remove();
+					}, 700);
+				}
+			}
+
+		})();
+
+		if(settings.transitionIn || settings.transitionInMobile){
+			$toast.classList.remove(settings.transitionIn);
+			$toast.classList.remove(settings.transitionInMobile);
+		}
+
+		if(ISMOBILE || window.innerWidth <= MOBILEWIDTH){
+			if(settings.transitionOutMobile)
+				$toast.classList.add(settings.transitionOutMobile);
+		} else {
+			if(settings.transitionOut)
+				$toast.classList.add(settings.transitionOut);
+		}
+		var H = $toast.parentNode.offsetHeight;
+				$toast.parentNode.style.height = H+'px';
+				$toast.style.pointerEvents = 'none';
+		
+		if(!ISMOBILE || window.innerWidth > MOBILEWIDTH){
+			$toast.parentNode.style.transitionDelay = '0.2s';
+		}
+
+		try {
+			var event = new CustomEvent(PLUGIN_NAME+'-closing', {detail: settings, bubbles: true, cancelable: true});
+			document.dispatchEvent(event);
+		} catch(ex){
+			console.warn(ex);
+		}
+
+		setTimeout(function() {
+			
+			$toast.parentNode.style.height = '0px';
+			$toast.parentNode.style.overflow = '';
+
+			setTimeout(function(){
+				
+				delete that.children[settings.ref];
+
+				$toast.parentNode.remove();
+
+				try {
+					var event = new CustomEvent(PLUGIN_NAME+'-closed', {detail: settings, bubbles: true, cancelable: true});
+					document.dispatchEvent(event);
+				} catch(ex){
+					console.warn(ex);
+				}
+
+				if(typeof settings.onClosed !== 'undefined'){
+					settings.onClosed.apply(null, [settings, $toast, closedBy]);
+				}
+
+			}, 1000);
+		}, 200);
+
+
+		if(typeof settings.onClosing !== 'undefined'){
+			settings.onClosing.apply(null, [settings, $toast, closedBy]);
+		}
+	};
+
+	/**
+	 * Create and show the Toast
+	 * @public
+	 * @param {Object} options User settings
+	 */
+	$iziToast.show = function (options) {
+
+		var that = this;
+
+		// Merge user options with defaults
+		var settings = extend(CONFIG, options || {});
+			settings = extend(defaults, settings);
+			settings.time = {};
+
+		if(settings.toastOnce && settings.id && document.querySelectorAll('.'+PLUGIN_NAME+'#'+settings.id).length > 0){
+			return false;
+		}
+
+		settings.ref = new Date().getTime() + Math.floor((Math.random() * 10000000) + 1);
+
+		$iziToast.children[settings.ref] = settings;
+
+		var $DOM = {
+			body: document.querySelector('body'),
+			overlay: document.createElement('div'),
+			toast: document.createElement('div'),
+			toastBody: document.createElement('div'),
+			toastTexts: document.createElement('div'),
+			toastCapsule: document.createElement('div'),
+			icon: document.createElement('i'),
+			cover: document.createElement('div'),
+			buttons: document.createElement('div'),
+			inputs: document.createElement('div'),
+			wrapper: null
+		};
+
+		$DOM.toast.setAttribute('data-iziToast-ref', settings.ref);
+		$DOM.toast.appendChild($DOM.toastBody);
+		$DOM.toastCapsule.appendChild($DOM.toast);
+
+		// CSS Settings
+		(function(){
+
+			$DOM.toast.classList.add(PLUGIN_NAME);
+			$DOM.toast.classList.add(PLUGIN_NAME+'-opening');
+			$DOM.toastCapsule.classList.add(PLUGIN_NAME+'-capsule');
+			$DOM.toastBody.classList.add(PLUGIN_NAME + '-body');
+			$DOM.toastTexts.classList.add(PLUGIN_NAME + '-texts');
+
+			if(ISMOBILE || window.innerWidth <= MOBILEWIDTH){
+				if(settings.transitionInMobile)
+					$DOM.toast.classList.add(settings.transitionInMobile);
+			} else {
+				if(settings.transitionIn)
+					$DOM.toast.classList.add(settings.transitionIn);
+			}
+
+			if(settings.class){
+				var classes = settings.class.split(' ');
+				forEach(classes, function (value, index) {
+					$DOM.toast.classList.add(value);
+				});
+			}
+
+			if(settings.id){ $DOM.toast.id = settings.id; }
+
+			if(settings.rtl){
+				$DOM.toast.classList.add(PLUGIN_NAME + '-rtl');
+				$DOM.toast.setAttribute('dir', 'rtl');
+			}
+
+			if(settings.layout > 1){ $DOM.toast.classList.add(PLUGIN_NAME+'-layout'+settings.layout); }
+
+			if(settings.balloon){ $DOM.toast.classList.add(PLUGIN_NAME+'-balloon'); }
+
+			if(settings.maxWidth){
+				if( !isNaN(settings.maxWidth) ){
+					$DOM.toast.style.maxWidth = settings.maxWidth+'px';
+				} else {
+					$DOM.toast.style.maxWidth = settings.maxWidth;
+				}
+			}
+
+			if(settings.theme !== '' || settings.theme !== 'light') {
+
+				$DOM.toast.classList.add(PLUGIN_NAME+'-theme-'+settings.theme);
+			}
+
+			if(settings.color) { //#, rgb, rgba, hsl
+				
+				if( isColor(settings.color) ){
+					$DOM.toast.style.background = settings.color;
+				} else {
+					$DOM.toast.classList.add(PLUGIN_NAME+'-color-'+settings.color);
+				}
+			}
+
+			if(settings.backgroundColor) {
+				$DOM.toast.style.background = settings.backgroundColor;
+				if(settings.balloon){
+					$DOM.toast.style.borderColor = settings.backgroundColor;				
+				}
+			}
+		})();
+
+		// Cover image
+		(function(){
+			if(settings.image) {
+				$DOM.cover.classList.add(PLUGIN_NAME + '-cover');
+				$DOM.cover.style.width = settings.imageWidth + 'px';
+
+				if(isBase64(settings.image.replace(/ /g,''))){
+					$DOM.cover.style.backgroundImage = 'url(data:image/png;base64,' + settings.image.replace(/ /g,'') + ')';
+				} else {
+					$DOM.cover.style.backgroundImage = 'url(' + settings.image + ')';
+				}
+
+				if(settings.rtl){
+					$DOM.toastBody.style.marginRight = (settings.imageWidth + 10) + 'px';
+				} else {
+					$DOM.toastBody.style.marginLeft = (settings.imageWidth + 10) + 'px';				
+				}
+				$DOM.toast.appendChild($DOM.cover);
+			}
+		})();
+
+		// Button close
+		(function(){
+			if(settings.close){
+				
+				$DOM.buttonClose = document.createElement('button');
+
+				$DOM.buttonClose.classList.add(PLUGIN_NAME + '-close');
+				$DOM.buttonClose.addEventListener('click', function (e) {
+					var button = e.target;
+					that.hide(settings, $DOM.toast, 'button');
+				});
+				$DOM.toast.appendChild($DOM.buttonClose);
+			} else {
+				if(settings.rtl){
+					$DOM.toast.style.paddingLeft = '18px';
+				} else {
+					$DOM.toast.style.paddingRight = '18px';
+				}
+			}
+		})();
+
+		// Progress Bar & Timeout
+		(function(){
+
+			if(settings.progressBar){
+				$DOM.progressBar = document.createElement('div');
+				$DOM.progressBarDiv = document.createElement('div');
+				$DOM.progressBar.classList.add(PLUGIN_NAME + '-progressbar');
+				$DOM.progressBarDiv.style.background = settings.progressBarColor;
+				$DOM.progressBar.appendChild($DOM.progressBarDiv);
+				$DOM.toast.appendChild($DOM.progressBar);
+			}
+
+			if(settings.timeout) {
+
+				if(settings.pauseOnHover && !settings.resetOnHover){
+					
+					$DOM.toast.addEventListener('mouseenter', function (e) {
+						that.progress(settings, $DOM.toast).pause();
+					});
+					$DOM.toast.addEventListener('mouseleave', function (e) {
+						that.progress(settings, $DOM.toast).resume();
+					});
+				}
+
+				if(settings.resetOnHover){
+
+					$DOM.toast.addEventListener('mouseenter', function (e) {
+						that.progress(settings, $DOM.toast).reset();
+					});
+					$DOM.toast.addEventListener('mouseleave', function (e) {
+						that.progress(settings, $DOM.toast).start();
+					});
+				}
+			}
+		})();
+
+		// Icon
+		(function(){
+			if(settings.icon) {
+				$DOM.icon.setAttribute('class', PLUGIN_NAME + '-icon ' + settings.icon);
+				
+				if(settings.iconText){
+					$DOM.icon.appendChild(document.createTextNode(settings.iconText));
+				}
+
+				if(settings.rtl){
+					$DOM.toastBody.style.paddingRight = '33px';
+				} else {
+					$DOM.toastBody.style.paddingLeft = '33px';				
+				}
+				
+				if(settings.iconColor){
+					$DOM.icon.style.color = settings.iconColor;
+				}
+				$DOM.toastBody.appendChild($DOM.icon);
+			}
+		})();
+
+		// Title & Message
+		(function(){
+			if(settings.title.length > 0) {
+
+				$DOM.strong = document.createElement('strong');
+				$DOM.strong.classList.add(PLUGIN_NAME + '-title');
+				$DOM.strong.appendChild(createFragElem(settings.title));
+				$DOM.toastTexts.appendChild($DOM.strong);
+
+				if(settings.titleColor) {
+					$DOM.strong.style.color = settings.titleColor;
+				}
+				if(settings.titleSize) {
+					if( !isNaN(settings.titleSize) ){
+						$DOM.strong.style.fontSize = settings.titleSize+'px';
+					} else {
+						$DOM.strong.style.fontSize = settings.titleSize;
+					}
+				}
+				if(settings.titleLineHeight) {
+					if( !isNaN(settings.titleSize) ){
+						$DOM.strong.style.lineHeight = settings.titleLineHeight+'px';
+					} else {
+						$DOM.strong.style.lineHeight = settings.titleLineHeight;
+					}
+				}
+			}
+
+			if(settings.message.length > 0) {
+
+				$DOM.p = document.createElement('p');
+				$DOM.p.classList.add(PLUGIN_NAME + '-message');
+				$DOM.p.appendChild(createFragElem(settings.message));
+				$DOM.toastTexts.appendChild($DOM.p);
+
+				if(settings.messageColor) {
+					$DOM.p.style.color = settings.messageColor;
+				}
+				if(settings.messageSize) {
+					if( !isNaN(settings.titleSize) ){
+						$DOM.p.style.fontSize = settings.messageSize+'px';
+					} else {
+						$DOM.p.style.fontSize = settings.messageSize;
+					}
+				}
+				if(settings.messageLineHeight) {
+					
+					if( !isNaN(settings.titleSize) ){
+						$DOM.p.style.lineHeight = settings.messageLineHeight+'px';
+					} else {
+						$DOM.p.style.lineHeight = settings.messageLineHeight;
+					}
+				}
+			}
+
+			if(settings.title.length > 0 && settings.message.length > 0) {
+				if(settings.rtl){
+					$DOM.strong.style.marginLeft = '10px';
+				} else if(settings.layout !== 2 && !settings.rtl) {
+					$DOM.strong.style.marginRight = '10px';	
+				}
+			}
+		})();
+
+		$DOM.toastBody.appendChild($DOM.toastTexts);
+
+		// Inputs
+		var $inputs;
+		(function(){
+			if(settings.inputs.length > 0) {
+
+				$DOM.inputs.classList.add(PLUGIN_NAME + '-inputs');
+
+				forEach(settings.inputs, function (value, index) {
+					$DOM.inputs.appendChild(createFragElem(value[0]));
+
+					$inputs = $DOM.inputs.childNodes;
+
+					$inputs[index].classList.add(PLUGIN_NAME + '-inputs-child');
+
+					if(value[3]){
+						setTimeout(function() {
+							$inputs[index].focus();
+						}, 300);
+					}
+
+					$inputs[index].addEventListener(value[1], function (e) {
+						var ts = value[2];
+						return ts(that, $DOM.toast, this, e);
+					});
+				});
+				$DOM.toastBody.appendChild($DOM.inputs);
+			}
+		})();
+
+		// Buttons
+		(function(){
+			if(settings.buttons.length > 0) {
+
+				$DOM.buttons.classList.add(PLUGIN_NAME + '-buttons');
+
+				forEach(settings.buttons, function (value, index) {
+					$DOM.buttons.appendChild(createFragElem(value[0]));
+
+					var $btns = $DOM.buttons.childNodes;
+
+					$btns[index].classList.add(PLUGIN_NAME + '-buttons-child');
+
+					if(value[2]){
+						setTimeout(function() {
+							$btns[index].focus();
+						}, 300);
+					}
+
+					$btns[index].addEventListener('click', function (e) {
+						e.preventDefault();
+						var ts = value[1];
+						return ts(that, $DOM.toast, this, e, $inputs);
+					});
+				});
+			}
+			$DOM.toastBody.appendChild($DOM.buttons);
+		})();
+
+		if(settings.message.length > 0 && (settings.inputs.length > 0 || settings.buttons.length > 0)) {
+			$DOM.p.style.marginBottom = '0';
+		}
+
+		if(settings.inputs.length > 0 || settings.buttons.length > 0){
+			if(settings.rtl){
+				$DOM.toastTexts.style.marginLeft = '10px';
+			} else {
+				$DOM.toastTexts.style.marginRight = '10px';
+			}
+			if(settings.inputs.length > 0 && settings.buttons.length > 0){
+				if(settings.rtl){
+					$DOM.inputs.style.marginLeft = '8px';
+				} else {
+					$DOM.inputs.style.marginRight = '8px';
+				}
+			}
+		}
+
+		// Wrap
+		(function(){
+			$DOM.toastCapsule.style.visibility = 'hidden';
+			setTimeout(function() {
+				var H = $DOM.toast.offsetHeight;
+				var style = $DOM.toast.currentStyle || window.getComputedStyle($DOM.toast);
+				var marginTop = style.marginTop;
+					marginTop = marginTop.split('px');
+					marginTop = parseInt(marginTop[0]);
+				var marginBottom = style.marginBottom;
+					marginBottom = marginBottom.split('px');
+					marginBottom = parseInt(marginBottom[0]);
+
+				$DOM.toastCapsule.style.visibility = '';
+				$DOM.toastCapsule.style.height = (H+marginBottom+marginTop)+'px';
+
+				setTimeout(function() {
+					$DOM.toastCapsule.style.height = 'auto';
+					if(settings.target){
+						$DOM.toastCapsule.style.overflow = 'visible';
+					}
+				}, 500);
+
+				if(settings.timeout) {
+					that.progress(settings, $DOM.toast).start();
+				}
+			}, 100);
+		})();
+
+		// Target
+		(function(){
+			var position = settings.position;
+
+			if(settings.target){
+
+				$DOM.wrapper = document.querySelector(settings.target);
+				$DOM.wrapper.classList.add(PLUGIN_NAME + '-target');
+
+				if(settings.targetFirst) {
+					$DOM.wrapper.insertBefore($DOM.toastCapsule, $DOM.wrapper.firstChild);
+				} else {
+					$DOM.wrapper.appendChild($DOM.toastCapsule);
+				}
+
+			} else {
+
+				if( POSITIONS.indexOf(settings.position) == -1 ){
+					console.warn('['+PLUGIN_NAME+'] Incorrect position.\nIt can be › ' + POSITIONS);
+					return;
+				}
+
+				if(ISMOBILE || window.innerWidth <= MOBILEWIDTH){
+					if(settings.position == 'bottomLeft' || settings.position == 'bottomRight' || settings.position == 'bottomCenter'){
+						position = PLUGIN_NAME+'-wrapper-bottomCenter';
+					}
+					else if(settings.position == 'topLeft' || settings.position == 'topRight' || settings.position == 'topCenter'){
+						position = PLUGIN_NAME+'-wrapper-topCenter';
+					}
+					else {
+						position = PLUGIN_NAME+'-wrapper-center';
+					}
+				} else {
+					position = PLUGIN_NAME+'-wrapper-'+position;
+				}
+				$DOM.wrapper = document.querySelector('.' + PLUGIN_NAME + '-wrapper.'+position);
+
+				if(!$DOM.wrapper) {
+					$DOM.wrapper = document.createElement('div');
+					$DOM.wrapper.classList.add(PLUGIN_NAME + '-wrapper');
+					$DOM.wrapper.classList.add(position);
+					document.body.appendChild($DOM.wrapper);
+				}
+				if(settings.position == 'topLeft' || settings.position == 'topCenter' || settings.position == 'topRight'){
+					$DOM.wrapper.insertBefore($DOM.toastCapsule, $DOM.wrapper.firstChild);
+				} else {
+					$DOM.wrapper.appendChild($DOM.toastCapsule);
+				}
+			}
+
+			if(!isNaN(settings.zindex)) {
+				$DOM.wrapper.style.zIndex = settings.zindex;
+			} else {
+				console.warn('['+PLUGIN_NAME+'] Invalid zIndex.');
+			}
+		})();
+
+		// Overlay
+		(function(){
+
+			if(settings.overlay) {
+
+				if( document.querySelector('.'+PLUGIN_NAME+'-overlay.fadeIn') !== null ){
+
+					$DOM.overlay = document.querySelector('.'+PLUGIN_NAME+'-overlay');
+					$DOM.overlay.setAttribute('data-iziToast-ref', $DOM.overlay.getAttribute('data-iziToast-ref') + ',' + settings.ref);
+
+					if(!isNaN(settings.zindex) && settings.zindex !== null) {
+						$DOM.overlay.style.zIndex = settings.zindex-1;
+					}
+
+				} else {
+
+					$DOM.overlay.classList.add(PLUGIN_NAME+'-overlay');
+					$DOM.overlay.classList.add('fadeIn');
+					$DOM.overlay.style.background = settings.overlayColor;
+					$DOM.overlay.setAttribute('data-iziToast-ref', settings.ref);
+					if(!isNaN(settings.zindex) && settings.zindex !== null) {
+						$DOM.overlay.style.zIndex = settings.zindex-1;
+					}
+					document.querySelector('body').appendChild($DOM.overlay);
+				}
+
+				if(settings.overlayClose) {
+
+					$DOM.overlay.removeEventListener('click', {});
+					$DOM.overlay.addEventListener('click', function (e) {
+						that.hide(settings, $DOM.toast, 'overlay');
+					});
+				} else {
+					$DOM.overlay.removeEventListener('click', {});
+				}
+
+			}
+
+		})();
+
+		// Inside animations
+		(function(){
+			if(settings.animateInside){
+				$DOM.toast.classList.add(PLUGIN_NAME+'-animateInside');
+			
+				var animationTimes = [200, 100, 300];
+				if(settings.transitionIn == 'bounceInLeft' || settings.transitionIn == 'bounceInRight'){
+					animationTimes = [400, 200, 400];
+				}
+
+				if(settings.title.length > 0) {
+					setTimeout(function(){
+						$DOM.strong.classList.add('slideIn');
+					}, animationTimes[0]);
+				}
+
+				if(settings.message.length > 0) {
+					setTimeout(function(){
+						$DOM.p.classList.add('slideIn');
+					}, animationTimes[1]);
+				}
+
+				if(settings.icon) {
+					setTimeout(function(){
+						$DOM.icon.classList.add('revealIn');
+					}, animationTimes[2]);
+				}
+
+				var counter = 150;
+				if(settings.buttons.length > 0 && $DOM.buttons) {
+
+					setTimeout(function(){
+
+						forEach($DOM.buttons.childNodes, function(element, index) {
+
+							setTimeout(function(){
+								element.classList.add('revealIn');
+							}, counter);
+							counter = counter + 150;
+						});
+
+					}, settings.inputs.length > 0 ? 150 : 0);
+				}
+
+				if(settings.inputs.length > 0 && $DOM.inputs) {
+					counter = 150;
+					forEach($DOM.inputs.childNodes, function(element, index) {
+
+						setTimeout(function(){
+							element.classList.add('revealIn');
+						}, counter);
+						counter = counter + 150;
+					});
+				}
+			}
+		})();
+
+		settings.onOpening.apply(null, [settings, $DOM.toast]);
+
+		try {
+			var event = new CustomEvent(PLUGIN_NAME + '-opening', {detail: settings, bubbles: true, cancelable: true});
+			document.dispatchEvent(event);
+		} catch(ex){
+			console.warn(ex);
+		}
+
+		setTimeout(function() {
+
+			$DOM.toast.classList.remove(PLUGIN_NAME+'-opening');
+			$DOM.toast.classList.add(PLUGIN_NAME+'-opened');
+
+			try {
+				var event = new CustomEvent(PLUGIN_NAME + '-opened', {detail: settings, bubbles: true, cancelable: true});
+				document.dispatchEvent(event);
+			} catch(ex){
+				console.warn(ex);
+			}
+
+			settings.onOpened.apply(null, [settings, $DOM.toast]);
+		}, 1000);
+
+		if(settings.drag){
+
+			if(ACCEPTSTOUCH) {
+
+			    $DOM.toast.addEventListener('touchstart', function(e) {
+			        drag.startMoving(this, that, settings, e);
+			    }, false);
+
+			    $DOM.toast.addEventListener('touchend', function(e) {
+			        drag.stopMoving(this, e);
+			    }, false);
+			} else {
+
+			    $DOM.toast.addEventListener('mousedown', function(e) {
+			    	e.preventDefault();
+			        drag.startMoving(this, that, settings, e);
+			    }, false);
+
+			    $DOM.toast.addEventListener('mouseup', function(e) {
+			    	e.preventDefault();
+			        drag.stopMoving(this, e);
+			    }, false);
+			}
+		}
+
+		if(settings.closeOnEscape) {
+
+			document.addEventListener('keyup', function (evt) {
+				evt = evt || window.event;
+				if(evt.keyCode == 27) {
+				    that.hide(settings, $DOM.toast, 'esc');
+				}
+			});
+		}
+
+		if(settings.closeOnClick) {
+			$DOM.toast.addEventListener('click', function (evt) {
+				that.hide(settings, $DOM.toast, 'toast');
+			});
+		}
+
+		that.toast = $DOM.toast;		
+	};
+	
+
+	return $iziToast;
+});

File diff suppressed because it is too large
+ 5 - 0
plugins/bower_components/iziToast/js/iziToast.min.js


Some files were not shown because too many files changed in this diff