function highlight(e) {
	var props = [];
	for (key in e) {
		props.push(key);
	}
	props.sort();
	str = '';
	for(i=0; i<props.length; i++) str += props[i] + ' = ' + e[props[i]] + '\n\r';
	alert(str);
}


function BoxSwitcher(parentid)
{
	this.parentid = parentid;
	this.divs = [];
	this.switchers = [];
	this.visibleDiv = -1;
	
	this.anchorFirst = null;
	this.anchorPrev = null;
	this.anchorNext = null;
	this.anchorLast = null;
	
	this.initialize();
}

BoxSwitcher.prototype.initialize = function()
{
	var parent = document.getElementById(this.parentid);
	if (parent)
	{
		var children = parent.getElementsByTagName('*');

    for (var i = 0; i < children.length; i++)
    {
        if ((children[i].nodeName.toLowerCase() == 'div') && (children[i].parentNode == parent))
        {
        	var num = this.divs.length;
        	
        	this.divs[num] = children[i];
        	if (children[i].style.display == 'block')
        		this.visibleDiv = num;
        		
        	var switcher = document.getElementById(this.parentid + '_' + num.toString());
        	this.switchers[num] = ((switcher) ? switcher : null);
        	
        	if (switcher)
        	{
        		var that = this;
        		this.createEvent(switcher, 'click', function(i) {
							return function(event) {
								var x = i;
								var e = ((this == window) ? window.event : event);
								if (e.preventDefault) e.preventDefault(); else e.returnValue = false;
								that.bringDivToFront(x);
								return false;
							}
						}(num)); 
        	}
        }
    }
    
    this.anchorFirst = this.createNavigationAnchor('first', 0, false);
    this.anchorPrev = this.createNavigationAnchor('prev', -1, true);
    this.anchorNext = this.createNavigationAnchor('next', +1, true);
    this.anchorLast = this.createNavigationAnchor('last', this.divs.length - 1, false);
		
		if (this.visibleDiv == -1)
		{
			var cookieDiv = this.tryParseInt(this.getCookie(this.getCookieName()), -1);
			if (cookieDiv != -1)
				this.bringDivToFront(cookieDiv);
			else if (this.divs.length > 0)
				this.bringDivToFront(0);
		}
	}
}

BoxSwitcher.prototype.createNavigationAnchor = function(name, position, ischange)
{
	var anchor = document.getElementById(this.parentid + '_' + name);
	
	if (anchor)
	{
		var that = this;
		this.createEvent(anchor, 'click', function(event) {
				var e = ((this == window) ? window.event : event);
				if (e.preventDefault) e.preventDefault(); else e.returnValue = false;
				if (!e.cancelBubble)
				{
					if (ischange)
						that.advanceCurrentDiv(position);
					else
						that.bringDivToFront(position);
				}
			});
	}
	
	return anchor;
}

BoxSwitcher.prototype.advanceCurrentDiv = function(change)
{
	if ((this.visibleDiv + change >= 0) && (this.visibleDiv + change < this.divs.length))
		this.bringDivToFront(this.visibleDiv + change); 
}

BoxSwitcher.prototype.bringDivToFront = function(idx)
{
	for (var i = 0; i < this.divs.length; i++)
	{
		this.divs[i].style.display = ((i == idx) ? 'block' : 'none');
		if (this.switchers[i])
		{
			if (i == idx)
				this.switchers[i].className = this.cssAdd(this.switchers[i].className, 'active');
			else
				this.switchers[i].className = this.cssRemove(this.switchers[i].className, 'active');
		}			
		if (i == idx)
		{
			this.visibleDiv = idx;
			this.setCookie(this.getCookieName(), idx.toString());
		}
	}
	
	if (this.anchorFirst)
		this.anchorFirst.className = (idx == 0) ? this.cssAdd(this.anchorFirst.className, 'disabled') : this.cssRemove(this.anchorFirst.className, 'disabled');
	if (this.anchorPrev)
		this.anchorPrev.className = (idx == 0) ? this.cssAdd(this.anchorPrev.className, 'disabled') : this.cssRemove(this.anchorPrev.className, 'disabled');
	if (this.anchorNext)
		this.anchorNext.className = (idx == this.divs.length - 1) ? this.cssAdd(this.anchorNext.className, 'disabled') : this.cssRemove(this.anchorNext.className, 'disabled');
	if (this.anchorPrev)
		this.anchorLast.className = (idx == this.divs.length - 1) ? this.cssAdd(this.anchorLast.className, 'disabled') : this.cssRemove(this.anchorLast.className, 'disabled');	
}

BoxSwitcher.prototype.cssRemove = function(classes, className)
{
	var items = classes.split(' ');
	for (var i = 0; i < items.length; i++)
		if (items[i] == className)
			items[i] = '';
	return items.join(' ');
}

BoxSwitcher.prototype.cssAdd = function(classes, className)
{
	var items = classes.split(' ');
	for (var i = 0; i < items.length; i++)
		if (items[i] == className)
			return classes;
			
	items[items.length] = className;
	return items.join(' ');	
}

BoxSwitcher.prototype.tryParseInt = function(str,defaultValue)
{
	return ((str != null) && (str.length > 0) && (!isNaN(str))) ? parseInt(str) : defaultValue;
}

BoxSwitcher.prototype.getCookieName = function()
{
	var url = document.location.toString();
	return url.replace(/[^a-zA-Z\-_0-9]/,'_') + '--' + this.parentid;
}

BoxSwitcher.prototype.createEvent = function(objectTarget, eventName, eventHandler)
{
	if (objectTarget.addEventListener)
		objectTarget.addEventListener(eventName,eventHandler,false);
	else if (objectTarget.attachEvent)
		objectTarget.attachEvent('on'+eventName,eventHandler);
	else
		objectTarget['on' + eventName] = eventHandler;
}

BoxSwitcher.prototype.getCookie = function(name)
{
	var cname = name + "=";               
	var dc = document.cookie;           
	if (dc.length > 0) 
	{
	  var begin = dc.indexOf(cname);       
	  if (begin != -1) 
	  {
	  	begin += cname.length;       
	    var end = dc.indexOf(";", begin);
	    if (end == -1) end = dc.length;
	    return dc.substring(begin, end);
	  }
	}
	return '';
}

BoxSwitcher.prototype.setCookie = function(name, value) 
{ 
	document.cookie = name + "=" + value;
}

