function ipsclass()
{
   this.cookies = new Array();
   this.ignore_cookies = new Array(ipb_var_cookieid + 'ipb_stronghold', ipb_var_cookieid + 'session_id', ipb_var_cookieid + 'ipb_admin_session_id', ipb_var_cookieid + 'member_id', ipb_var_cookieid + 'pass_hash');
   this.settings =
   {
      'do_linked_resize' : 0, 'resize_percent' : 50
   }
   ;
   this.init = function()
   {
      var _tmp = document.cookie.split(';');
      if(_tmp.length)
      {
         for(i = 0; i < _tmp.length; i ++ )
         {
            if(_tmp[i].match(new RegExp(ipb_var_cookieid + ".*$")))
            {
               var _data = _tmp[i].split('=');
               var _key = this.trim(_data[0]);
               var _value = unescape(this.trim(_data[1]));
               if(_key && ( ! this.in_array(_key, this.ignore_cookies)))
               {
                  this.cookies[_key.replace(ipb_var_cookieid, '')] = _value;
               }
            }
         }
      }
      _tmp = null;
   }
   ;
   this.trim = function(text)
   {
      if(typeof(text) == 'undefined')
      {
         return '';
      }
      text = text.replace(/^\s+/, '');
      return text.replace(/\s+$/, '');
   }
   ;
   this.html_entity_decode = function(text)
   {
      if(typeof ca == 'undefined')
      {
         var ca = document.createElement('textarea');
      }
      ca.innerHTML = text.replace( /</g, '&lt;').replace( />/g, '&gt;');
      return ca.value;
   }
   ;
   this.in_array = function(needle, haystack)
   {
      if( ! haystack.length)
      {
         return false;
      }
      for(var i = 0; i < haystack.length; i ++ )
      {
         if(haystack[i] === needle)
         {
            return true;
         }
      }
      return false;
   }
   ;
   this.htmlspecialchars = function(text)
   {
      text = text.replace( /</g, '&lt;');
      text = text.replace( />/g, '&gt;');
      text = text.replace( /"/g,'&quot;');
      return text;
   }
   ;
   this.un_htmlspecialchars = function(text)
   {
      text = text.replace( /&lt;/g, '<');
      text = text.replace( /&gt;/g, '>');
      text = text.replace( /&quot;/g, '"');
      return text;
   }
   ;
   this.get_editor_contents = function(editor_id, editor_array)
   {
      var aIPS_editor = editor_array ? editor_array : IPS_editor;
      if( ! editor_id)
      {
         for(var i in aIPS_editor)
         {
            if(typeof(aIPS_editor[i]) != 'object')
            {
               continue;
            }
            editor_id = i;
            break;
         }
      }
      return aIPS_editor[editor_id].editor_get_contents;
   }
   ;
   this.add_editor_contents = function(text, editor_id, editor_array)
   {
      var aIPS_editor = editor_array ? editor_array : IPS_editor;
      if( ! editor_id)
      {
         for(var i in aIPS_editor)
         {
            if(typeof(aIPS_editor[i]) != 'object')
            {
               continue;
            }
            editor_id = i;
            break;
         }
      }
      return aIPS_editor[editor_id].insert_text(text);
   }
   ;
   this.convert_saved_tags_to_display_tags = function(text)
   {
      text = text.replace( /(<|&lt;|&#60;)!--/, "{");
      text = text.replace( /--(>|&gt;|&#62;)/, "}");
      return text;
   }
   ;
   this.include_javascript = function(_file, div_id)
   {
      var _doc = (div_id) ? document.getElementById(div_id) : document.getElementsByTagName('head').item(0);
      var _js = document.createElement('script');
      _js.setAttribute('language', 'javascript');
      _js.setAttribute('type', 'text/javascript');
      _js.setAttribute('src', _file);
      _doc.appendChild(_js);
      return false;
   }
   ;
   this.fade_in_element = function(div)
   {
      var hash = '#';
      var color_items = "0123456789abcdef";
      var start_color = '#ffff66';
      var orig_color = document.getElementById(div).style.backgroundColor;
      var temp_end = '#ffffff';
      var iter = 20;
      var time = 80;
      var rbeg = color_items.indexOf(start_color.substr(1, 1)) * 16 + color_items.indexOf(start_color.substr(2, 1));
      var gbeg = color_items.indexOf(start_color.substr(3, 1)) * 16 + color_items.indexOf(start_color.substr(4, 1));
      var bbeg = color_items.indexOf(start_color.substr(5, 1)) * 16 + color_items.indexOf(start_color.substr(6, 1));
      var rend = color_items.indexOf(temp_end.substr(1, 1)) * 16 + color_items.indexOf(temp_end.substr(2, 1));
      var gend = color_items.indexOf(temp_end.substr(3, 1)) * 16 + color_items.indexOf(temp_end.substr(4, 1));
      var bend = color_items.indexOf(temp_end.substr(5, 1)) * 16 + color_items.indexOf(temp_end.substr(6, 1));
      for(i = 1, r = rbeg, g = gbeg, b = bbeg; i <= iter; r = Math.round(rbeg + i * ((rend - rbeg) / (iter - 1))), g = Math.round(gbeg + i * ((gend - gbeg) / (iter - 1))), b = Math.round(bbeg + i * ((bend - bbeg) / (iter - 1))), i ++ )
      {
         hstr = '#' + color_items.charAt(Math.floor(r / 16)) + color_items.charAt(r % 16) + color_items.charAt(Math.floor(g / 16)) + color_items.charAt(g % 16) + color_items.charAt(Math.floor(b / 16)) + color_items.charAt(b % 16);
         setTimeout('var div = document.getElementById("'+div+'"); div.style.backgroundColor = "'+hstr+'";', i * time);
      }
      setTimeout('var div = document.getElementById("'+div+'"); div.style.backgroundColor = "'+orig_color+'";', (i + 1) * time);
   }
   ;
   this.lang_build_string = function()
   {
      if( ! arguments.length || ! arguments)
      {
         return;
      }
      var string = arguments[0];
      for(var i = 1; i < arguments.length; i ++ )
      {
         var match = new RegExp('<%' + i + '>', 'gi');
         string = string.replace(match, arguments[i]);
      }
      return string;
   }
   ;
   this.get_id_from_text = function(id)
   {
      return id.replace( /.*(\-|_)(\S+)/, "$2");
   }
   ;
   this.get_name_from_text = function(id)
   {
      return id.replace( /(.*)(\-|_)(\S+)/, "$1");
   }
   ;
   this.location_jump = function(url, full)
   {
      url = url.replace( /&amp;/g, '&');
      if(full)
      {
         window.location.href = url;
      }
      else
      {
         window.location.href = ipb_var_base_url + url;
      }
   }
   ;
   this.confirm_action = function(url, msg)
   {
      if( ! msg)
      {
         msg = 'PLEASE CONFIRM:\nOK to proceed?';
      }
      if(url)
      {
         url = url.replace('&amp;', '&');
      }
      else
      {
         url = '';
      }
      if(confirm(msg))
      {
         window.location.href = url;
      }
      else
      {
         alert(ipb_global_lang['action_cancelled']);
         return false;
      }
   }
   ;
   this.pop_up_window = function(url, width, height, name)
   {
      if( ! name)
      {
         var mydate = new Date();
         name = mydate.getTime();
      }
      var Win = window.open(url.replace('&amp;', '&'), name, 'width=' + width + ',height=' + height + ',resizable=1,scrollbars=1,location=no,directories=no,status=no,menubar=no,toolbar=no');
      Win.focus();
      return false;
   }
   ;
   this.set_unselectable = function(obj)
   {
      if( ! is_ie4 && typeof(obj.tagName) != 'undefined')
      {
         if(obj.hasChildNodes())
         {
            for(var i = 0; i < obj.childNodes.length; i ++ )
            {
               this.set_unselectable(obj.childNodes[i]);
            }
         }
         obj.unselectable = 'on';
      }
   }
   ;
   this.get_obj_leftpos = function(obj)
   {
      var curleft = 0;
      if(obj.offsetParent)
      {
         while(obj.offsetParent)
         {
            curleft += obj.offsetLeft;
            obj = obj.offsetParent;
         }
      }
      else if(obj.x)
      {
         curleft += obj.x;
      }
      return curleft;
   }
   ;
   this.get_obj_toppos = function(obj)
   {
      var curtop = 0;
      if(obj.offsetParent)
      {
         while(obj.offsetParent)
         {
            curtop += obj.offsetTop;
            obj = obj.offsetParent;
         }
      }
      else if(obj.y)
      {
         curtop += obj.y;
      }
      return curtop;
   }
   ;
   this.cancel_bubble = function(obj, extra)
   {
      if(extra !== false)
      {
         extra = true;
      }
      if( ! obj || is_ie)
      {
         if(extra)
         {
            window.event.returnValue = false;
         }
         window.event.cancelBubble = true;
         return window.event;
      }
      else
      {
         obj.stopPropagation();
         if(extra)
         {
            obj.preventDefault();
         }
         return obj;
      }
   }
   ;
   this.cancel_bubble_all = function(obj)
   {
      return ipsclass.cancel_bubble(obj, true);
   }
   ;
   this.cancel_bubble_low = function(obj)
   {
      return ipsclass.cancel_bubble(obj, false);
   }
   ;
   this.my_getcookie = function(name)
   {
      return this.cookies[name];
   }
   ;
   this.my_setcookie = function(name, value, sticky)
   {
      expire = "";
      domain = "";
      path = "/";
      if(sticky)
      {
         expire = "; expires=Wed, 1 Jan 2020 00:00:00 GMT";
      }
      if(ipb_var_cookie_domain != "")
      {
         domain = '; domain=' + ipb_var_cookie_domain;
      }
      if(ipb_var_cookie_path != "")
      {
         path = ipb_var_cookie_path;
      }
      document.cookie = ipb_var_cookieid + name + "=" + value + "; path=" + path + expire + domain + ';';
      this.cookies[name] = value;
   }
   ;
   this.array_stacksize = function(thearray)
   {
      for(i = 0; i < thearray.length; i ++ )
      {
         if((thearray[i] == "") || (thearray[i] == null) || (thearray == 'undefined'))
         {
            return i;
         }
      }
      return thearray.length;
   }
   ;
   this.array_pushstack = function(thearray, newval)
   {
      var arraysize = this.array_stacksize(thearray);
      thearray[arraysize] = newval;
   }
   ;
   this.array_popstack = function(thearray)
   {
      var arraysize = this.array_stacksize(thearray);
      var theval = thearray[arraysize - 1];
      delete thearray[arraysize - 1];
      return theval;
   }
   ;
}