var Columns = new Class({
  unit      : 'px',
  elements  : new Array(),
  rest      : new Array(),
  
  initialize: function(container,unit){
    if(unit && unit !== false && unit !== null && unit.split(" ").join("") !== "") {
	  this.unit = unit;
	} 
	
	var $_obj  = this;
	var $_cols = $$(container+' div.col');
	
	for(var $_i=0; $_i<$_cols.length; $_i++) {
	  var $_col   = $_cols[$_i];
	  var $_class = $_obj.checkClass($_col.className);
	  
	  this.elements.push(
	    new Array($_col,$_class)
	  );
    }
	
	for(var $_i=0; $_i<$_obj.elements.length; $_i++) {
	  $_obj.setStyles($_obj.elements[$_i][0],$_obj.elements[$_i][1]);
	}
	
	$_obj.setRest();
	$_obj.sizeRest();
	
	window.addEvent('resize',function() {
	  $_obj.sizeRest();
	});
  },
  
  checkClass: function(value) {
    var $_arr       = value.split(" ");
    var $_temp      = new Object();	
	    $_temp.size = 0;
	    $_temp.wrap = false;
		$_temp.rest = false;
		$_temp.unit = this.unit;
	
	for($_i=0; $_i<$_arr.length; $_i++) {
	  if($_arr[$_i] != undefined && $_arr[$_i].split(" ").join("") != "") {
	    if(!isNaN($_arr[$_i])) {
		  $_temp.size = parseInt($_arr[$_i]);
		}
		
		if($_arr[$_i] == 'wrap') {
		  $_temp.wrap = true;
		}
		
		if($_arr[$_i] == 'pixel') {
		  $_temp.unit = 'px';
		}
		
		if($_arr[$_i] == 'percent') {
		  $_temp.unit = '%';
		}
		
		if($_arr[$_i] == 'rest') {
		  $_temp.rest = true;
		}
	  }
	}
	
	return $_temp;
  },
  
  setStyles: function(obj,arr) {
    obj.setStyles({
	  'width' : (arr.size+arr.unit),
	  'float' : 'left'
	});
	
	if(arr.wrap == true) {
	  this.injectClearDiv(obj);
	}
  },
  
  injectClearDiv: function(obj) {
    $_clear = new Element('div',{
	  'html'   : '',
	  'styles' : {
	    'clear' : 'both'
	  }
	}).inject(obj,'after');
  },
  
  setRest: function() {
    var $_rest    = 0;
	var $_element = null;
	
	for($_i=0; $_i<this.elements.length; $_i++) {
	  if(this.elements[$_i][1].rest == true) {
	    $_element = this.elements[$_i][0];
	  }
	  
	  $_size  = this.elements[$_i][1].size;
	  $_rest += $_size;
	  
	  if(this.elements[$_i][1].wrap == true) {
	    if($_element !== null) {
		  this.rest.push(new Array(
		    $_element,
			$_rest,
			this.elements[$_i][1].unit
		  ));
		  $_element = null;
		}
		$_rest = 0;
	  }
	}
  },
  
  sizeRest: function() {
    if(this.rest.length <= 0) {
	  return false;
	}
	
	var $_rest = this.rest;
	var $_size = window.getSize();
	
    for($_i=0; $_i<this.rest.length; $_i++) {
	  if(this.rest[$_i] !== undefined) {
	    this.rest[$_i][0].setStyles({
	      'width' : (($_size.x-this.rest[$_i][1])+this.rest[$_i][2]),
	      'float' : 'left'
	    });
	  }
	}
  }
});
