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;
  };
};
