function utf8_decode ( str_data ) {
    // http://kevin.vanzonneveld.net
    // +   original by: Webtoolkit.info (http://www.webtoolkit.info/)
    // +      input by: Aman Gupta
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: Norman "zEh" Fuchs
    // +   bugfixed by: hitwork
    // +   bugfixed by: Onno Marsman
    // +      input by: Brett Zamir (http://brett-zamir.me)
    // +   bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // *     example 1: utf8_decode('Kevin van Zonneveld');
    // *     returns 1: 'Kevin van Zonneveld'
 
    var tmp_arr = [], i = 0, ac = 0, c1 = 0, c2 = 0, c3 = 0;
    
    str_data += '';
    
    while ( i < str_data.length ) {
        c1 = str_data.charCodeAt(i);
        if (c1 < 128) {
            tmp_arr[ac++] = String.fromCharCode(c1);
            i++;
        } else if ((c1 > 191) && (c1 < 224)) {
            c2 = str_data.charCodeAt(i+1);
            tmp_arr[ac++] = String.fromCharCode(((c1 & 31) << 6) | (c2 & 63));
            i += 2;
        } else {
            c2 = str_data.charCodeAt(i+1);
            c3 = str_data.charCodeAt(i+2);
            tmp_arr[ac++] = String.fromCharCode(((c1 & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
            i += 3;
        }
    }
 
    return tmp_arr.join('');
}
/*
 * JHeartbeat 0.1.1 Beta
 * By Jason Levine (http://www.jasons-toolbox.com)
 * A heartbeat plugin for the jquery library to help keep sessions alive.
 */
 
 $.jheartbeat = {

    options: {
//		url: "/admin/session.php",
		delay: 60000
    },
	
	beatfunction:  function(data){
	
	},
	
	timeoutobj:  {
		id: -1
	},

    set: function(options, onbeatfunction) {
		if (this.timeoutobj.id > -1) {
			clearTimeout(this.timeoutobj);
		}
        if (options) {
            $.extend(this.options, options);
        }
        if (onbeatfunction) {
            this.beatfunction = onbeatfunction;
        }

//		this.timeoutobj.id = setTimeout("$.jheartbeat.beat();", this.options.delay);
    },

    beat: function() {
    	bfunction = this.beatfunction;
		$.getJSON(
			this.options.url,
			function callback(data) {
				bfunction(data);
				setTimeout("$.jheartbeat.beat();", 1000);
			}
		);
//		this.timeoutobj.id = setTimeout("$.jheartbeat.beat();", this.options.delay);
    },
    
    shot: function() {
    	bfunction = this.beatfunction;
		$.getJSON(
			this.options.url,
			function callback(data) {
				bfunction(data);
				$.jheartbeat.beat();
			}
		);
    }
};

 $.jheartbeat2 = {

    options: {
		url: "/admin/session.php",
		delay: 60000
    },
	
	beatfunction2:  function(data){
	
	},
	
	timeoutobj:  {
		id: -1
	},

    set: function(options, onbeatfunction2) {
		if (this.timeoutobj.id > -1) {
			clearTimeout(this.timeoutobj);
		}
        if (options) {
            $.extend(this.options, options);
        }
        if (onbeatfunction2) {
            this.beatfunction2 = onbeatfunction2;
        }

//		this.timeoutobj.id = setTimeout("$.jheartbeat2.beat();", this.options.delay);
    },

    beat: function() {
    	bfunction2 = this.beatfunction2;
		$.getJSON(
			this.options.url,
			function callback(data) {
				bfunction2(data);
				setTimeout("$.jheartbeat2.beat();", 1000);
			}
		);
    },
    
    shot: function() {
    	bfunction2 = this.beatfunction2;
		$.getJSON(
			this.options.url,
			function callback(data) {
				bfunction2(data);
				$.jheartbeat2.beat();
			}
		);
    }
};


 $.jheartbeat3 = {

    options: {
		url: "/admin/session.php",
		delay: 60000
    },
	
	beatfunction3:  function(data){
	
	},
	
	timeoutobj:  {
		id: -1
	},

    set: function(options, onbeatfunction3) {
		if (this.timeoutobj.id > -1) {
			clearTimeout(this.timeoutobj);
		}
        if (options) {
            $.extend(this.options, options);
        }
        if (onbeatfunction3) {
            this.beatfunction3 = onbeatfunction3;
        }

//		this.timeoutobj.id = setTimeout("$.jheartbeat3.beat();", this.options.delay);
    },

    beat: function() {
    	bfunction3 = this.beatfunction3;
		$.getJSON(
			this.options.url,
			function callback(data) {
				bfunction3(data);
				setTimeout("$.jheartbeat3.beat();", 1000);
			}
		);
//		
    },
    
    shot: function() {
    	bfunction3 = this.beatfunction3;
		$.getJSON(
			this.options.url,
			function callback(data) {
				bfunction3(data);
				$.jheartbeat3.beat();
			}
		);
    }
};

 $.jheartbeat4 = {

    options: {
		url: "/admin/session.php",
		delay: 60000
    },
	
	beatfunction4:  function(data){
	
	},
	
	timeoutobj:  {
		id: -1
	},

    set: function(options, onbeatfunction4) {
		if (this.timeoutobj.id > -1) {
			clearTimeout(this.timeoutobj);
		}
        if (options) {
            $.extend(this.options, options);
        }
        if (onbeatfunction4) {
            this.beatfunction4 = onbeatfunction4;
        }

//		this.timeoutobj.id = setTimeout("$.jheartbeat3.beat();", this.options.delay);
    },

    beat: function() {
    	bfunction4 = this.beatfunction4;
		$.getJSON(
			this.options.url,
			function callback(data) {
				bfunction3(data);
				setTimeout("$.jheartbeat4.beat();", 1000);
			}
		);
//		
    },
    
    shot: function() {
    	bfunction4 = this.beatfunction4;
		$.getJSON(
			this.options.url,
			function callback(data) {
				bfunction4(data);
				$.jheartbeat4.beat();
			}
		);
    }
};
