function uncheckChildCategories( catId ) 
{
	var elementIdsLength = elementIds.length;
	for( var i=0; i<elementIdsLength; i++ ) {
		var currentElementIds = elementIds[i].split( "-" );
		var selectedCatIds = catId.split( "-" );
		if( catId != elementIds[i] ) {
			var isSubcategory = true;
			for( var j=0; j<selectedCatIds.length; j++ ) {
				var selectedCatId		= selectedCatIds[j];
				var currentElementId	= currentElementIds[j];
				if( selectedCatId != currentElementId ) {
					isSubcategory =  false;
					break;
				}
			}
			
			if( isSubcategory ) {
				var categoryCheckbox = document.getElementById( 'checkbox-' + elementIds[i] );
				if( categoryCheckbox ) {
					categoryCheckbox.checked = false;
				}
				
				var subCategories = document.getElementById( 'sub-categories-' + elementIds[i] );
				if( subCategories ) {
					subCategories.style.display = 'none';
				}
				
				var categoryLink = document.getElementById( 'category-link-' + elementIds[i] );
				if( categoryLink ) {
					categoryLink.style.fontWeight = 'normal';
				}
				
				var selectedCatIds = elementIds[i].split( "-" );
				var treeButtonImage = document.getElementById( 'tree-button-image-'	+ elementIds[i]	);
				if( treeButtonImage ) {
					if( currentElementIds.length == 2 ) {
						if( renderAsForm ) {
							treeButtonImage.src = folderIcons.open.src;
						}
						else {
							treeButtonImage.src = secondLevelButtons.open.src;
						}
					}
					else if( currentElementIds.length == 3 ) {
						if( renderAsForm ) {
							treeButtonImage.src = folderIcons.open.src;
						}
						else {
							treeButtonImage.src = thirdLevelButtons.open.src;
						}
					}
				}
			}
		}
	}
}

function toggleCategory( catId ) 
{
	// used for determining levels
	var levelArray		= catId.split( "-" );
	
	var treeButton		= document.getElementById( 'tree-button-'		+ catId	);
	var treeButtonImage = document.getElementById( 'tree-button-image-'	+ catId	);
	var categoryLink	= document.getElementById( 'category-link-'		+ catId	);
	var categoryDesc	= document.getElementById( 'description-'		+ catId	);
	var subCategories	= document.getElementById( 'sub-categories-'	+ catId	);
	var subCategoryDiv	= document.getElementById( 'sub-category-' 		+ catId );
	var categoryCheckbox= document.getElementById( 'checkbox-' 			+ catId );

	// first level categories
	if( levelArray.length == 1 ) {
		// the branch is considered collapsed if the display is undefined or none
		if( subCategories && subCategories.style.display == 'none' ) {
			// Expand the tree
			if( renderAsForm ) {
				treeButtonImage.src = folderIcons.close.src;
			}
			else {
				treeButton.style.display			= 'inline';
				categoryLink.style.paddingLeft		= '10px';
				categoryLink.style.textDecoration	= 'none';
				categoryDesc.style.display			= 'none';
			}
			subCategories.style.display			= 'block';
			
			if( categoryCheckbox ) {
				categoryCheckbox.checked = true;
			}
		}
		else {
			// Collapse the tree
			if( renderAsForm ) {
				treeButtonImage.src = folderIcons.open.src;
			}
			else {
				treeButton.style.display			= 'none';
				categoryLink.style.paddingLeft		= '0';
				categoryLink.style.textDecoration	= 'underline';
				categoryDesc.style.display			= 'block';
			}
			subCategories.style.display = 'none';
			
			if( categoryCheckbox ) {
				categoryCheckbox.checked = false;
				uncheckChildCategories( catId );
			}
		}
	}
	// second level categories
	else if( levelArray.length == 2 ) {	
		// the branch is considered collapsed if the display is undefined or none
		if( subCategories && subCategories.style.display == 'none' ) {
		
			if( categoryLink ) {
				// Expand the tree
				categoryLink.style.fontWeight = 'bold';
			}
			
			if( renderAsForm ) {
				treeButtonImage.src = folderIcons.close.src;
			}
			else {
				treeButtonImage.src = secondLevelButtons.close.src;
			}
			subCategories.style.display = 'block';
			
			if( categoryCheckbox ) {
				categoryCheckbox.checked = true;
			}
		}
		else {
			if( categoryLink ) {
				// Collapse the tree
				categoryLink.style.fontWeight = 'normal';
			}

			if( renderAsForm ) {
				treeButtonImage.src = folderIcons.open.src;
			}
			else {
				treeButtonImage.src = secondLevelButtons.open.src;
			}
			subCategories.style.display	= 'none';
			
			if( categoryCheckbox ) {
				categoryCheckbox.checked = false;
				uncheckChildCategories( catId );
			}
		}
	}
	// third level categories
	else if( levelArray.length == 3 ) {	
		// the branch is considered collapsed if the display is undefined or none
		if( subCategories && subCategories.style.display == 'none' ) {
			if( categoryLink ) {
				// Expand the tree
				categoryLink.style.fontWeight = 'bold';
			}

			if( renderAsForm ) {
				treeButtonImage.src = folderIcons.close.src;
			}
			else {
				treeButtonImage.src = thirdLevelButtons.close.src;
			}
			subCategories.style.display			= 'block';
			
			if( categoryCheckbox ) {
				categoryCheckbox.checked = true;
			}
		}
		else {
			if( categoryLink ) {
				// Collapse the tree
				categoryLink.style.fontWeight = 'normal';
			}

			if( renderAsForm ) {
				treeButtonImage.src = folderIcons.open.src;
			}
			else {
				treeButtonImage.src = thirdLevelButtons.open.src;
			}
			subCategories.style.display	= 'none';
			
			if( categoryCheckbox ) {
				categoryCheckbox.checked = false;
				uncheckChildCategories( catId );
			}
		}
	}
}

function checkCheckBoxByValue( categoryID ) 
{
	var forms = document.forms;
	for( var j=0; j<forms.length; j++ ) {
		var categoryCheckboxes = document.forms[j].elements['category'];
		if( categoryCheckboxes && categoryCheckboxes.length ) {
			for( var i=0; i<categoryCheckboxes.length; i++ ) {
				if( categoryCheckboxes[i].value == categoryID ) {
					categoryCheckboxes[i].checked = true;
				}
			}
		}
	}	
}

function checkCheckbox( catId )
{
	var checkbox = document.getElementById( 'checkbox-' + catId );
	if( checkbox ) {
		if( checkbox.checked ) {
			checkbox.checked = false;
		}
		else {
			checkbox.checked = true;
		}
	}
}

function toggleSubCats( catid ) {
	var subCatBlock = document.getElementById( 'sub-cat-'		+ catid );
	var folderIcon	= document.getElementById( 'folder-icon-'	+ catid );
	if( subCatBlock ) {
		if( subCatBlock.style.display != 'block' ) {
			subCatBlock.style.display = 'block';
			folderIcon.src = folderIcons.close.src;
		}
		else {
			subCatBlock.style.display = 'none';
			folderIcon.src = folderIcons.open.src;
		}
	}
}