var BrowserDetect = {
	init: function () {
		this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
		this.version = this.searchVersion(navigator.userAgent)
			|| this.searchVersion(navigator.appVersion)
			|| "an unknown version";
		this.OS = this.searchString(this.dataOS) || "an unknown OS";
	},
	searchString: function (data) {
		for (var i=0;i<data.length;i++)	{
			var dataString = data[i].string;
			var dataProp = data[i].prop;
			this.versionSearchString = data[i].versionSearch || data[i].identity;
			if (dataString) {
				if (dataString.indexOf(data[i].subString) != -1)
					return data[i].identity;
			}
			else if (dataProp)
				return data[i].identity;
		}
	},
	searchVersion: function (dataString) {
		var index = dataString.indexOf(this.versionSearchString);
		if (index == -1) return;
		return parseFloat(dataString.substring(index+this.versionSearchString.length+1));
	},
	dataBrowser: [
		{ 	string: navigator.userAgent,
			subString: "OmniWeb",
			versionSearch: "OmniWeb/",
			identity: "OmniWeb"
		},
		{
			string: navigator.vendor,
			subString: "Apple",
			identity: "Safari"
		},
		{
			prop: window.opera,
			identity: "Opera"
		},
		{
			string: navigator.vendor,
			subString: "iCab",
			identity: "iCab"
		},
		{
			string: navigator.vendor,
			subString: "KDE",
			identity: "Konqueror"
		},
		{
			string: navigator.userAgent,
			subString: "Firefox",
			identity: "Firefox"
		},
		{
			string: navigator.vendor,
			subString: "Camino",
			identity: "Camino"
		},
		{		// for newer Netscapes (6+)
			string: navigator.userAgent,
			subString: "Netscape",
			identity: "Netscape"
		},
		{
			string: navigator.userAgent,
			subString: "MSIE",
			identity: "Explorer",
			versionSearch: "MSIE"
		},
		{
			string: navigator.userAgent,
			subString: "Gecko",
			identity: "Mozilla",
			versionSearch: "rv"
		},
		{ 		// for older Netscapes (4-)
			string: navigator.userAgent,
			subString: "Mozilla",
			identity: "Netscape",
			versionSearch: "Mozilla"
		}
	],
	dataOS : [
		{
			string: navigator.platform,
			subString: "Win",
			identity: "Windows"
		},
		{
			string: navigator.platform,
			subString: "Mac",
			identity: "Mac"
		},
		{
			string: navigator.platform,
			subString: "Linux",
			identity: "Linux"
		}
	]

};
BrowserDetect.init();
isIE = BrowserDetect.browser == "Explorer";

function getElementsByClassName(parentN, classN, tag){	
    var a = [];
    strTag = tag || "*"; 	
	pN = parentN || document 
    var els = pN.getElementsByTagName(strTag);
	for (var i=0; i<els.length; i++){		
		if(els[i].className.indexOf(classN)!= -1){
			a[a.length]=els[i];
		}
	}	
	return a;
}

var collectBoxes = new Array();
var stylePostfix = "";

function selectAllCB( val )
{
	for( var i=0; i<collectBoxes.length; i++ )
	{
		var cb = collectBoxes[i][1];
		if( true )//isIE )
		{
			cb.checked = val;
			continue;
		}
		var cn = val ? "check-active" : "check-inactive";
		collectBoxes[i][0].className=cn + stylePostfix;
		cb.checked = val;
	}
}

function selectCBs( id, val )
{
	var n = document.getElementById( id );
	if( !n ) return;
	var boxes = getElementsByClassName( n, "downloadCB", "input" );
	for( var i=0; i<boxes.length;i++)
	{
		var col=getBoxElem( boxes[i] );
		if( true )//isIE )
		{
			col[1].checked=val;
			continue;
		}
		
		if( col[1].checked )col[0].className="check-inactive" + stylePostfix;
		else col[0].className="check-active" + stylePostfix;
		col[1].checked=val;
	}
}

function selectParentCBs( c, val )
{
	var boxes = getElementsByClassName( c.parentNode, "downloadCB", "input" );
	for( var i=0; i<boxes.length;i++)
	{
		var col=getBoxElem( boxes[i] );
		if( true )//isIE )
		{
			col[1].checked=val;
			continue;
		}
		
		if( col[1].checked )col[0].className="check-inactive" + stylePostfix;
		else col[0].className="check-active" + stylePostfix;
		col[1].checked=val;
	}
}

function getBoxElem( inp )
{
	for( var i = 0; i<collectBoxes.length; i++)
		if( collectBoxes[i][1] == inp ) return collectBoxes[i];
}

function addCbSpan( elem )
{
	var nCb = document.createElement("SPAN");
	nCb.className="check-inactive" + stylePostfix;
	elem.appendChild( nCb );
	return nCb;
}

function changeCbState()
{
	for( var i=0; i<collectBoxes.length; i++ )
	{
		if( collectBoxes[i][0] != this ) continue;
		var cb = collectBoxes[i][1];
		if( cb.checked )collectBoxes[i][0].className="check-inactive" + stylePostfix;
		else collectBoxes[i][0].className="check-active" + stylePostfix;
		cb.checked = !cb.checked;
	}
}

function initCheckBoxes( postfix )
{
	stylePostfix = postfix;
	var elem = document.getElementById("downloadForm");
	if( elem == null ) return;
	
	var boxes = getElementsByClassName(elem, "downloadCB", "input");
	boxes.checked = false;
	
	for(var i=0; i< boxes.length; i++)
	{
		if( true )//isIE )
		{
			collectBoxes.push( [ null, boxes[i] ] );
		}
		else
		{
			var nElem = addCbSpan( boxes[i].parentNode );
			boxes[i].style.display='none';
			collectBoxes.push( [ nElem, boxes[i] ] );
			addEvent(nElem, "click", changeCbState);
		}
	}
}

function addEvent( obj, type, fn ){
	if (obj.addEventListener)
		obj.addEventListener( type, fn, false );
	else if (obj.attachEvent)
	{
		obj["e"+type+fn] = fn;
		obj[type+fn] = function() { obj["e"+type+fn]( window.event ); }
		obj.attachEvent( "on"+type, obj[type+fn] );
	}
}