/**
 * Checkboxes Image Replacing
 * v.0.5.1 (2006-11-08)
 * by ZeT, © Envisionext (www.envisionext.com)
 *
 * This script automatically replaces all checkboxes on the page with defined images.
 * No need to any changes of html-code.
 *
 * Setup:
 * Just include this cbir.js, make new object myCbir and define images.
 * Example:
 <script type="text/javascript" src="cbir.js"></script>
 <script type="text/javascript"> 
   window.onload = function () {myCbir = new Cbir('check_on.gif', 'check_off.gif',  'check_dis.gif');}
 </script>
 * where images: checked checkbox, unchecked checkbox, disabled checkbox.
 * (disabled is not required)
 */

/*
Added png support for IE by Larkin
*/

var isIE = (navigator.appVersion.indexOf("MSIE")> -1)?true:false;
if(isIE)
{
var arVersion = navigator.appVersion.split("MSIE");
var version = parseFloat(arVersion[1]);
}


function Cbir(init) {
	this.inId = arguments[1];
	this.initObj = init;
	this.img_on = new Image();
	this.img_off = new Image();
	this.img_on.src = init.def[0];
	this.img_off.src = init.def[1];
	this.pngMode = (init.def[0].indexOf('.png')>-1 || init.def[1].indexOf('.png')>-1)?true:false;
	if (init.def[2]) {
		this.img_dis = new Image();
		this.img_dis.src = init.def[2];
	} 
	              
	this.labels = document.getElementsByTagName('label');
  if(this.inId ){
		try{this.inputs = $(this.inId).getElementsByTagName('input');}catch(e){}
	} else {
		this.inputs = document.getElementsByTagName('input');
		
	}
  for (var i=0; i<this.inputs.length; i++) {
  		if(this.inputs[i].getAttribute('rel')=="noChange")continue;
		input = this.inputs[i];
    if (input.getAttribute('type') == 'checkbox') {
      if (!input.getAttribute('id')) {
        input.setAttribute('id', 'checkbox_' + input.getAttribute('name') + '_' + i);
      }        
	  
	  var curSrc = (this.img_dis && input.disabled)? this.imgPicture(2,input) :( (input.checked)?this.imgPicture(0,input):this.imgPicture(1,input));
	  
			if(this.pngMode)
			{
				var img	= document.createElement('span');
				if(isIE && version < 7)
					img.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + curSrc[0] + "', sizingMethod='image')";
				else
					img.style.backgroundImage = "url('"+curSrc[0]+"')";
			}
			else
			{
				var img	= document.createElement('img');
				img.src = curSrc[0];
			}
			
			img.setAttribute('id', 'img_' + input.getAttribute('id')); 
			img.className = 'checkbox_img';
			if (!input.disabled) {
				if (!this.checkLabels(input)) {
				  img.onclick = function() { myCbir.toggle (this); }
				}                  
			}             
			
			input.parentNode.insertBefore(img, input.nextSibling);
			
			if(this.pngMode)
			{
				img.style.display="inline-block";
				
				img.style.width = curSrc[1]+"px";
				img.style.height = curSrc[2]+"px";
			}

			//input.style.display = 'none';  /* this method doesn't work in safari */
			input.style.visibility = 'hidden';
			input.style.position = 'absolute';
			
    }
  }
}       

Cbir.prototype.checkLabels = function(inp) {
  this.inp_id = inp.getAttribute('id');
	                    
  this.inp_parent = inp.parentNode;
  if (this.inp_parent.tagName.toLowerCase() == 'label') {
    this.inp_parent.setAttribute('id', 'label_' + this.inp_id);    
    this.inp_parent.onclick = function() { myCbir.toggle (this);}
		return true;      
  }
  for (var i=0; i<this.labels.length; i++) {
    lbl = this.labels[i];
    if (lbl.htmlFor == this.inp_id) {
      lbl.setAttribute('id', 'label_' + this.inp_id);     
    	lbl.onclick = function() { myCbir.toggle (this); return false; }
    }
  }
  return false;
}     
//Add by Aldegran
Cbir.prototype.imgPicture = function(type,radio) {
	var ret = new Array (this.img_on.src,this.img_on.width,this.img_on.height);
	var clas = radio.className;
	if(clas.indexOf(' ')>0) {
		clas = clas.split(" ");
		for(var m=0; m<clas.length; m++) {
			var find = false;
			for(var n in this.initObj) {
				if(n == "def") {
					continue;
				} else {
					if(clas[m] == n) {
						if(this.initObj[n][type]){
							ret = this.initObj[n][type];
						} else {
							switch(type)
							{
								case 1: ret = [this.img_off.src,this.img_off.width,this.img_off.height]; break;
								case 2: ret = [this.img_dis.src,this.img_dis.width,this.img_dis.height]; break;
							}
						}
						find = true;
						break;
					}
				}
			}
			if(find){
				break;
			}
		}
	} else {
		switch(type)
		{
			case 1: ret = [this.img_off.src,this.img_off.width,this.img_off.height]; break;
			case 2: ret = [this.img_dis.src,this.img_dis.width,this.img_dis.height]; break;
		}
	}
	return ret;
}
//
Cbir.prototype.toggle = function(el) {
  if (!el) return false;  
                
	id = (el.tagName.toLowerCase() == 'img' || el.tagName.toLowerCase() == 'span') ? el.getAttribute('id').replace('img_', '') : el.getAttribute('id').replace('label_', '');
  checkbox = document.getElementById(id);    
  img = document.getElementById('img_' + id);
  
  checkbox.click();   

  var curSrc = checkbox.checked ? this.imgPicture(0,checkbox) : this.imgPicture(1,checkbox);           
	  
			if(this.pngMode)
			{
				if(isIE && version < 7)
					img.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + curSrc[0] + "', sizingMethod='image')";
				else
					img.style.backgroundImage = "url('"+curSrc[0]+"')";
			}
			else
			{
				img.src = curSrc[0];
			}
}   
