/**************************************************
 * CRowColors, version 0.10
 * Copyright 2007 Ivengi BV. Benelux
 **************************************************/
 /*
CONSTRUCTOR
new CRowColors(containerClass,replaceClass);
containerClass						-> class of the container containing the rows
replaceClass							-> class of the the rows

FUNCTIONS
ulEnhance();							-> Rescan whle document for new rows

PROPERTIES
aRowVariations						-> Array with different types of rows (default: [0] = even, [1] = uneven)
ContainerType 						-> container type (default: div)
RowType 									-> row type (default: div)
HoverRow									-> class which row get appended on hover (default: hover)


###########
# EXAMPLE #
###########

<script type="text/javascript" src="CRowColor.js"></script>
<script type="text/javascript">
	var RowSwitch = new CRowColors("findthis","block");
	RowSwitch.aRowVariations.push("pink");
</script>
<style type="text/css">

	.block_even {
		background-color: green;
	}
	
	.block_uneven{
		background-color: red;
	}
	
	.block_pink{
		background-color: pink;
	}
	
	.hover {
		color: white;
	}
	
</style> 
	
<div class="findthis">
	<div class="block">
		<br>
		 block 2<br>
		 <br>
	</div>
	<div class="block">
		<br>
		 block 3<br>
		 <br>
	</div>
	<div class="block">
		<br>
		 block 4<br>
		 <br>
	</div>
	<div class="block">
		<br>
		 block 1<br>
		 <br>
	</div>
	<div class="block">
		<br>
		 block 2<br>
		 <br>
	</div>
</div> */

function CRowColors(containerClass,replaceClass)
{
	this.containerClass = containerClass;
	this.replaceClass = replaceClass;
	
	this.aRowVariations = new Array();
	this.aRowVariations[0] = "even";
	this.aRowVariations[1] = "uneven";
	
	this.ContainerType 	= "div";
	this.RowType 				= "div";
	this.HoverRow				= "hover";
	
	this.addLoadHandler(this.ulEnhance.bind(this));
}


CRowColors.prototype.ulEnhance = function()
{
	if(!document.createTextNode){return;}
	
	var allDiv=document.getElementsByTagName(this.ContainerType);
	
	for (a=0;a<allDiv.length;a++)
	{
		if(allDiv[a].className.indexOf(this.containerClass) == -1){
      continue;
    }
    
  	var allLi = allDiv[a].getElementsByTagName(this.RowType);
		var counter	= 0;
		for (i=0;i<allLi.length;i++)
		{
			
			if (allLi[i].className == this.replaceClass)
			{				
				var RowVariation = (counter%this.aRowVariations.length);
				var addClass = '_'+this.aRowVariations[RowVariation];
						
				allLi[i].className=allLi[i].className+addClass;
				
				allLi[i].onmouseover=this.mouseOver.bindEventListener(this,allLi[i]);
				
				allLi[i].onmouseout=this.mouseOut.bindEventListener(this,allLi[i]);
				
				counter++;
			}								
		}
	}		
}

CRowColors.prototype.mouseOver = function(obj)
{
	obj.className=obj.className+' '+this.HoverRow	;
}
				
CRowColors.prototype.mouseOut = function(obj)
{
		var rep=obj.className.match(' '+this.HoverRow	)?' '+this.HoverRow:this.HoverRow;
		obj.className=obj.className.replace(rep,'');
}

CRowColors.prototype.addLoadHandler = function(handler)
{
	if(window.addEventListener)
	{
		window.addEventListener("load",handler,false);
	}
	else if(window.attachEvent)
	{
		window.attachEvent("onload",handler);
	}
	else if(window.onload)
	{
		var oldHandler = window.onload;
		window.onload = function piggyback()
		{
			oldHandler();
			handler();
		};
	}
	else
	{
		window.onload = handler;
	}
}


function toArray(pseudoArray) {
     var result = [];
     for (var i = 0; i < pseudoArray.length; i++)
         result.push(pseudoArray[i]);
     return result;
}

Function.prototype.bind = function (object) {
     var method = this;
     var oldArguments = toArray(arguments).slice(1);
     return function () {
         var newArguments = toArray(arguments);
         return method.apply(object, oldArguments.concat(newArguments));
     };
}

Function.prototype.bindEventListener = function (object) {
    var method = this;
    var oldArguments = toArray(arguments).slice(1);
    return function (event) {
        return method.apply(object, oldArguments);
    };
}