var cutBB = {
	init: function()
	{
		this.detectBrowser();
		Event.observe(window, "load", cutBB.pageLoaded);
		return true;
	},

	pageLoaded: function()
	{
		expandables.init();
	},

	detectBrowser: function()
	{
		this.useragent = navigator.userAgent.toLowerCase();
		this.useragent_version = parseInt(navigator.appVersion);

		if(navigator.product == "Gecko" && navigator.vendor.indexOf("Apple Computer") != -1)
		{
			this.browser = "safari";
		}
		else if(navigator.product == "Gecko")
		{
			this.browser = "mozilla";
		}
		else if(this.useragent.indexOf("opera") != -1)
		{
			this.browser = "opera";
		}
		else if(this.useragent.indexOf("konqueror") != -1)
		{
			this.browser = "konqueror";
		}
		else if(this.useragent.indexOf("msie") != -1)
		{
			this.browser = "ie";
		}
		else if(this.useragent.indexOf("compatible") == -1 && this.useragent.indexOf("mozilla") != -1)
		{
			this.browser = "netscape";
		}

		if(this.useragent.indexOf("win") != -1)
		{
			this.os = "win";
		}
		else if(this.useragent.indexOf("mac") != -1)
		{
			this.os = "mac";
		}
	},

	popupWindow: function(url, name, width, height)
	{
		settings = "toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=yes";
		if(width)
		{
			settings = settings+",width="+width;
		}
		if(height)
		{
			settings = settings+",height="+height;
		}
		window.open(url, name, settings);
	},


	eventElement: function(event)
	{
		if(event.currentTarget)
		{
			return event.currentTarget;
		}
		else
		{
			return event.srcElement;
		}
	},

	arraySize: function(array_name)
	{
		for(var i=0;i<array_name.length;i++)
		{
			if(array_name[i] == "undefined" || array_name[i] == "" || array_name[i] == null)
			{
				return i;
			}
		}
		return array_name.length;
	},

	arrayPush: function(array_name, array_value)
	{
		array_size = cutBB.arraySize(array_name);
		array_name[array_size] = array_value;
	},

	arrayPop: function(array_name)
	{
		array_size = cutBB.arraySize(array_name);
		array_value = array_name[array_size-1];
		delete array_name[array_size-1];
		return array_value;
	},

	inArray: function(item, array_name)
	{
		for(var i=0;i<array_name.length;i++)
		{
			if(array_name[i] == item)
			{
				return true;
			}
		}
		return false;
	},

	unHTMLchars: function(text)
	{
		text = text.replace(/&lt;/g, "<");
		text = text.replace(/&gt;/g, ">");
		text = text.replace(/&nbsp;/g, " ");
		text = text.replace(/&quot;/g, "\"");
		text = text.replace(/&amp;/g, "&");
		return text;
	},

	HTMLchars: function(text)
	{
		text = text.replace(new RegExp("&(?!#[0-9]+;)", "g"), "&amp;");		
		text = text.replace(/</g, "&lt;");
		text = text.replace(/>/g, "&gt;");
		text = text.replace(/"/g, "&quot;");
		text = text.replace(/  /g, "&nbsp;&nbsp;");		
		return text;
	}
}


var DomLib = {

	addClass: function(element, name)
	{
		if(element)
		{
			if(element.className != "")
			{
				element.className += " "+name;
			}
			else
			{
				element.className = name;
			}
		}
	},

	removeClass: function(element, name)
	{
		if(element.className == element.className.replace(" ", "-"))
		{
			element.className = element.className.replace(name, "");
		}
		else
		{
			element.className = element.className.replace(" "+name, "");
		}
	},

	getElementsByClassName: function(oElm, strTagName, strClassName)
	{
	    var arrElements = (strTagName == "*" && document.all)? document.all : oElm.getElementsByTagName(strTagName);
	    var arrReturnElements = new Array();
	    strClassName = strClassName.replace(/\-/g, "\\-");
	    var oRegExp = new RegExp("(^|\\s)" + strClassName + "(\\s|$)");
	    var oElement;
	    for(var i=0; i<arrElements.length; i++)
		{
	        oElement = arrElements[i];
	        if(oRegExp.test(oElement.className))
			{
	            arrReturnElements.push(oElement);
	        }
	    }
	    return (arrReturnElements)
	},

	// This function is from quirksmode.org
	// Modified for use in cutBB
	getPageScroll: function()
	{
		var yScroll;
		if(self.pageYOffset)
		{
			yScroll = self.pageYOffset;
		}
		else if(document.documentElement && document.documentElement.scrollTop) // Explorer 6 Strict
		{
			yScroll = document.documentElement.scrollTop;
		}
		else if(document.body) // all other Explorers
		{
			yScroll = document.body.scrollTop;
		}
		arrayPageScroll = new Array('',yScroll);
		return arrayPageScroll;
	},

	// This function is from quirksmode.org
	// Modified for use in cutBB
	getPageSize: function()
	{
		var xScroll, yScroll;

		if(window.innerHeight && window.scrollMaxY)
		{
			xScroll = document.body.scrollWidth;
			yScroll = window.innerHeight + window.scrollMaxY;
		}
		else if(document.body.scrollHeight > document.body.offsetHeight) // all but Explorer Mac
		{
			xScroll = document.body.scrollWidth;
			yScroll = document.body.scrollHeight;
		}
		else  // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari
		{
			xScroll = document.body.offsetWidth;
			yScroll = document.body.offsetHeight;
		}

		var windowWidth, windowHeight;
		if(self.innerHeight) // all except Explorer
		{
			windowWidth = self.innerWidth;
			windowHeight = self.innerHeight;
		}
		else if(document.documentElement && document.documentElement.clientHeight)  // Explorer 6 Strict Mode
		{
			windowWidth = document.documentElement.clientWidth;
			windowHeight = document.documentElement.clientHeight;
		}
		else if (document.body) // other Explorers
		{
			windowWidth = document.body.clientWidth;
			windowHeight = document.body.clientHeight;
		}
		
		var pageHeight, pageWidth;
		// for small pages with total height less then height of the viewport
		if(yScroll < windowHeight)
		{
			pageHeight = windowHeight;
		}
		else
		{
			pageHeight = yScroll;
		}

		// for small pages with total width less then width of the viewport
		if(xScroll < windowWidth)
		{
			pageWidth = windowWidth;
		}
		else
		{
			pageWidth = xScroll;
		}
		var arrayPageSize = new Array(pageWidth,pageHeight,windowWidth,windowHeight);
		return arrayPageSize;
	}

}

var expandables = {

	init: function()
	{
		expanders = DomLib.getElementsByClassName(document, "img", "expander");
		if(expanders.length > 0)
		{
			for(var i=0;i<expanders.length;i++)
			{
				var expander = expanders[i];
				if(!expander.id)
				{
					continue;
				}
				Event.observe(expander, "click", this.expandCollapse.bindAsEventListener(this));
				if(cutBB.browser == "ie")
				{
					expander.style.cursor = "hand";
				}
				else
				{
					expander.style.cursor = "pointer";
				}
				expander.controls = expander.id.replace("_img", "");
				var row = $(expander.controls);
				if(row)
				{
					Event.observe(row, "dblclick", this.expandCollapse.bindAsEventListener(this));
					row.controls = expander.id.replace("_img", "");
				}
			}
		}
	},

	expandCollapse: function(e)
	{
		element = cutBB.eventElement(e)
		if(!element || !element.controls)
		{
			return false;
		}
		var expandedItem = $(element.controls+"_e");
		var collapsedItem = $(element.controls+"_c");

		if(expandedItem && collapsedItem)
		{
			if(expandedItem.style.display == "none")
			{
				expandedItem.style.display = "";
				collapsedItem.style.display = "none";
				this.saveCollapsed(element.controls);
			}
			else
			{
				expandedItem.style.display = "none";
				collapsedItem.style.display = "";
				this.saveCollapsed(element.controls, 1);
			}
		}
		else if(expandedItem && !collapsedItem)
		{
			if(expandedItem.style.display == "none")
			{
				expandedItem.style.display = "";
				element.src = element.src.replace("collapse_collapsed.gif", "collapse.gif");
				element.alt = "[-]";
				this.saveCollapsed(element.controls);
			}
			else
			{
				expandedItem.style.display = "none";
				element.src = element.src.replace("collapse.gif", "collapse_collapsed.gif");
				element.alt = "[+]";
				this.saveCollapsed(element.controls, 1);
			}
		}
		return true;
	},

	saveCollapsed: function(id, add)
	{
		var saved = new Array();
		var newCollapsed = new Array();
		var collapsed = Cookie.get("collapsed");
		if(collapsed)
		{
			saved = collapsed.split("|");
			for(var i=0;i<saved.length;i++)
			{
				if(saved[i] != id && saved[id] != "")
				{
					newCollapsed[newCollapsed.length] = saved[i];
				}
			}
		}
		if(add == 1)
		{
			newCollapsed[newCollapsed.length] = id;
		}
		Cookie.set("collapsed", newCollapsed.join("|"));
	}
};


function bbc_highlight(something, mode)
{
  something.style.backgroundImage = "url(" + smf_images_url + (mode ? "images/codebuttons/bc_hoverbg.gif)" : "images/code_buttons/bbc_bg.gif)");
}

cutBB.init();