diff --git a/lib/images/fileicons/rar.png b/lib/images/fileicons/rar.png
new file mode 100644
index 0000000000000000000000000000000000000000..a6af4d1cac16975bc6eff1bd9c1a02905e99db64
Binary files /dev/null and b/lib/images/fileicons/rar.png differ
diff --git a/lib/scripts/helpers.js b/lib/scripts/helpers.js
new file mode 100644
index 0000000000000000000000000000000000000000..7b500c2264926e001d2da5e7c831661dd6c5fc8f
--- /dev/null
+++ b/lib/scripts/helpers.js
@@ -0,0 +1,132 @@
+/**
+ *  $Id: helpers.js 156 2006-12-23 08:48:25Z wingedfox $
+ *  $HeadURL: https://svn.debugger.ru/repos/jslibs/BrowserExtensions/trunk/helpers.js $
+ *
+ *  File contains differrent helper functions
+ * 
+ * @author Ilya Lebedev <ilya@lebedev.net>
+ * @license LGPL
+ * @version $Rev: 156 $
+ */
+//-----------------------------------------------------------------------------
+//  Variable/property checks
+//-----------------------------------------------------------------------------
+/**
+ *  Checks if property is undefined
+ *
+ *  @param {Object} prop value to check
+ *  @return {Boolean} true if matched
+ *  @scope public
+ */
+function isUndefined (prop /* :Object */) /* :Boolean */ {
+  return (typeof prop == 'undefined');
+}
+/**
+ *  Checks if property is function
+ *
+ *  @param {Object} prop value to check
+ *  @return {Boolean} true if matched
+ *  @scope public
+ */
+function isFunction (prop /* :Object */) /* :Boolean */ {
+  return (typeof prop == 'function');
+}
+/**
+ *  Checks if property is string
+ *
+ *  @param {Object} prop value to check
+ *  @return {Boolean} true if matched
+ *  @scope public
+ */
+function isString (prop /* :Object */) /* :Boolean */ {
+  return (typeof prop == 'string');
+}
+/**
+ *  Checks if property is number
+ *
+ *  @param {Object} prop value to check
+ *  @return {Boolean} true if matched
+ *  @scope public
+ */
+function isNumber (prop /* :Object */) /* :Boolean */ {
+  return (typeof prop == 'number');
+}
+/**
+ *  Checks if property is the calculable number
+ *
+ *  @param {Object} prop value to check
+ *  @return {Boolean} true if matched
+ *  @scope public
+ */
+function isNumeric (prop /* :Object */) /* :Boolean */ {
+  return isNumber(prop)&&!isNaN(prop)&&isFinite(prop);
+}
+/**
+ *  Checks if property is array
+ *
+ *  @param {Object} prop value to check
+ *  @return {Boolean} true if matched
+ *  @scope public
+ */
+function isArray (prop /* :Object */) /* :Boolean */ {
+  return (prop instanceof Array);
+}
+/**
+ *  Checks if property is regexp
+ *
+ *  @param {Object} prop value to check
+ *  @return {Boolean} true if matched
+ *  @scope public
+ */
+function isRegExp (prop /* :Object */) /* :Boolean */ {
+  return (prop instanceof RegExp);
+}
+/**
+ *  Checks if property is a boolean value
+ *
+ *  @param {Object} prop value to check
+ *  @return {Boolean} true if matched
+ *  @scope public
+ */
+function isBoolean (prop /* :Object */) /* :Boolean */ {
+  return ('boolean' == typeof prop);
+}
+/**
+ *  Checks if property is a scalar value (value that could be used as the hash key)
+ *
+ *  @param {Object} prop value to check
+ *  @return {Boolean} true if matched
+ *  @scope public
+ */
+function isScalar (prop /* :Object */) /* :Boolean */ {
+  return isNumeric(prop)||isString(prop);
+}
+/**
+ *  Checks if property is empty
+ *
+ *  @param {Object} prop value to check
+ *  @return {Boolean} true if matched
+ *  @scope public
+ */
+function isEmpty (prop /* :Object */) /* :Boolean */ {
+  if (isBoolean(prop)) return false;
+  if (isRegExp(prop) && new RegExp("").toString() == prop.toString()) return true;
+  if (isString(prop) || isNumber(prop)) return !prop;
+  if (Boolean(prop)&&false != prop) {
+    for (var i in prop) if(prop.hasOwnProperty(i)) return false
+  }
+  return true;
+}
+
+/*
+*  Checks if property is derived from prototype, applies method if it is not exists
+*
+*  @param string property name
+*  @return bool true if prototyped
+*  @access public
+*/
+if ('undefined' == typeof Object.hasOwnProperty) {
+  Object.prototype.hasOwnProperty = function (prop) {
+    return !('undefined' == typeof this[prop] || this.constructor && this.constructor.prototype[prop] && this[prop] === this.constructor.prototype[prop]);
+  }
+}