//######
//## This work is licensed under the Creative Commons Attribution-Share Alike 3.0 
//## United States License. To view a copy of this license, 
//## visit http://creativecommons.org/licenses/by-sa/3.0/us/ or send a letter 
//## to Creative Commons, 171 Second Street, Suite 300, San Francisco, California, 94105, USA.
//######
var countdownTickerEvent; 
var countdownTime;
function countdownTicker(){
	
	//put countdown time left in dialog box
	jQuery("#dialogCount").html(countdownTime);
	
	//decrement countdownTime
	countdownTime--;
	
	if(countdownTime < 0 && countdownTickerEvent){
		clearInterval(countdownTickerEvent);
	}
	
}

(function($){
 $.fn.idleTimeout = function(options) {
    var defaults = {
    		dialog_title:'Session (Page) Expiring!',
    		dialog_button_text: 'Restart Session',
    		dialog_message:'Your session will expire in <span id="dialogCount"></span>&nbsp;seconds!',
			inactivity: 1200000, //20 Minutes
			noconfirm: 10000, //10 Seconds
			sessionAlive: 30000, //10 Minutes
			redirect_url: 'index.php',
			click_reset: true,
			alive_url: '',
			logout_url: '',
			modal_pop_id:''
		}
    
    //##############################
    //## Private Variables
    //##############################
    var opts = $.extend(defaults, options);
    var liveTimeout, confTimeout, sessionTimeout;
    var modal;
    //alert(opts.dialog_message);
    if(!opts.modal_pop_id || opts.modal_pop_id=='')
    	modal = "<div id='modal_pop' style='text-aligh:left;'><span class='ui-icon ui-icon-alert' style='float:left; margin:0 7px 0 0;'></span>" + opts.dialog_message  + "</div>";
    var dialog;
    //var countdownTickerEvent; 
    countdownTime = opts.noconfirm / 1000;
    
    var control_number = function()
    {
    	if(document.forms.length > 0){
    		for(var i = 0; i < document.forms.length; i++){
    			if(document.forms[i].control_number){
    				document.forms[i].control_number.value = parseInt(document.forms[i].control_number.value) + 1;
    			}
    		}
    	}
    }
    
    /*
    var countdownTicker = function(){
    	
    	//put countdown time left in dialog box
    	jQuery("#dialogText-warning").html(countdownTime);
    	
    	//decrement countdownTime
    	countdownTime--;
    	
    	if(countdownTime < 0){
    		clearInterval(countdownTickerEvent);
    	}
    	
    }
    */
    //##############################
    //## Private Functions
    //##############################
    var start_liveTimeout = function()
    {
      clearTimeout(liveTimeout);
      clearTimeout(confTimeout);
      liveTimeout = setTimeout(logout, opts.inactivity);
      
      if(opts.sessionAlive)
      {
        clearTimeout(sessionTimeout);
        sessionTimeout = setTimeout(keep_session, opts.sessionAlive);
      }
      
    }
    
    var logout = function()
    {
    	var buttons = {};
    	buttons[ opts.dialog_button_text ] = function() {
    		jQuery(this).dialog('close');
    		
    		countdownTime = opts.noconfirm / 1000;
    	    if(countdownTickerEvent) clearInterval(countdownTickerEvent);
            stay_logged_in();
    	};
    
      confTimeout = setTimeout(redirect, opts.noconfirm);
      
      
      
      if(!opts.modal_pop_id || opts.modal_pop_id==''){
    	  jQuery(modal).dialog({
    	        buttons: buttons,
    	        modal: true,
    	        show:"explode",
    			hide:"explode",
    	        title: opts.dialog_title
    	      });
      }else{
    	  jQuery('#' + opts.modal_pop_id).dialog({
  	        buttons: buttons,
  	        modal: true,
  	        show:"explode",
  			hide:"explode",
  	        title: opts.dialog_title
  	      });
      }
      
      
      countdownTicker(); 
      countdownTickerEvent = setInterval("countdownTicker()", 1000);
    }
    
    var redirect = function()
    {
      if(opts.logout_url && opts.logout_url != '')
      {
    	  jQuery.get(opts.logout_url);
      }
      $("#modal_pop").dialog("close"); 
      window.location.href = opts.redirect_url;
    }
    
    var stay_logged_in = function(el)
    {
      start_liveTimeout();
      //location.reload();
      if(opts.alive_url && opts.alive_url != '')
      {
    	//control_number();
    	jQuery.get(opts.alive_url);
      }
      
    }
    
    var keep_session = function()
    {
    	//control_number();
    	if(opts.alive_url && opts.alive_url != '') jQuery.get(opts.alive_url);
        clearTimeout(sessionTimeout);
        sessionTimeout = setTimeout(keep_session, opts.sessionAlive);
    } 
    
    //###############################
    //Build & Return the instance of the item as a plugin
    // This is basically your construct.
    //###############################
    return this.each(function() {
      obj = $(this);
      
      start_liveTimeout();
      if(opts.click_reset)
      {
    	  jQuery(document).bind('click', start_liveTimeout);
      }
      if(opts.sessionAlive)
      {
        keep_session();
      }
      
    });
    
 };
})(jQuery);

function StartSessionCheck(SESSIONID){
	
	jQuery.ajax({ 
		  type: "POST", 
		  url: "./inc/ajax/StartIdleTimeout.inc.php", 
		  data: "SESSIONID=" + SESSIONID, 
		  success: function(html){ 
			  evalScript(html);
			 
		  } 
			
		});
}


function ShowSessionExpireDialog(title, message){
	jQuery(function(){
		 var dialogExpired = '<div id="dialogExpired" style="text-align:left;" title="' + title + '"><span class="ui-icon ui-icon-alert" style="float:left; margin:0 7px 0 0;"></span> <p id="dialogText-expired">' + message + '</p></div>';

		 jQuery(function(){
			 jQuery(dialogExpired).dialog({
                autoOpen: true,
                width: 400,
                modal: true,
                show:"explode",
    			 hide:"explode",
    	         resizable: true,
					close: function() {
                        
                    },
                buttons: {
                    "ok": function() {
                        jQuery(this).dialog('close');
                    }
                }
            });
		 });

	});
	
}
