/**
 * Taken from:
 *
 * http://www.chriscassell.net/log/2004/12/19/add_label_click.html
 *
 */

function getSafariMajorVersion() {
	var vi = navigator.userAgent.indexOf("Version/");
	return (vi) ? parseFloat(navigator.userAgent.substring(vi+8)) : 2;
}

if (navigator.userAgent.indexOf("Safari") > 0)
{
	if (getSafariMajorVersion() < 3) {
		window.addEventListener("load", startSafariLabelQuickFix, true);
	}
}

function startSafariLabelQuickFix() {
    var isIDevice = false;
    if ((navigator.userAgent.match(/iPhone/i))
        || (navigator.userAgent.match(/iPod/i))
        || (navigator.userAgent.match(/iPad/i))
        || (navigator.userAgent.match(/AppleWebKit/i)
            && ( navigator.userAgent.match(/Mobile/i)
                 || navigator.userAgent.match(/webOS/i)
            ))
    ) {
        isIDevice = true;
    }

    // somehow the i* - Devices need a similar fix as the old safaris,
    // thats why we reactivate that fix for them.
    if (getSafariMajorVersion() > 2 && !isIDevice) {
        return;
    }
    
    var labels = document.getElementsByTagName("label");
    for (i = 0; i < labels.length; i++)
    {
        labels[i].addEventListener("click", addLabelFocus, true);
    }
}

function addLabelFocus()
  {
  var item = document.getElementById(this.getAttribute("for"));

  if(!item)
  {
    kids = this.childNodes;
	for(i=0; i<kids.length; i++)
	{
	  if(kids[i].tagName == 'INPUT' || kids[i].tagName == 'SELECT' || kids[i].tagName == 'TEXTAREA')
	  {
	    item= kids[i];
	    break;
	  }
	}
  }

  item.focus();
  if (item.getAttribute("type") == "checkbox")
    {
    if (!item["checked"])
      {
      item["checked"] = true;
      }
    else
      {
      item["checked"] = false;
      }
      	try {
       		item.click();
   		} catch(e) {};
      	try {
			item.change();
   		} catch(e) {};
    }
  else if (item.getAttribute("type") == "radio")
    {
    var allRadios = document.getElementsByTagName("input");
    var radios = new Array();
    for (i = 0; i < allRadios.length; i++)
      {
      if (allRadios[i].getAttribute("name") == item.getAttribute("name"))
        {
        radios.push(allRadios[i]);
        }
      }
    for (i = 0; i < radios.length; i++)
      {
      if (radios[i]["checked"] &&
      radios[i].getAttribute("id") != item.getAttribute("id"))
        {
        radios[i]["checked"] = false;
        }
      }
    item["checked"] = true;

     	try {
      		item.click();
  		} catch(e) {};
    	try {
			item.change();
		} catch(e) {};
    }
  }
