var resData = new Array(), resIndex, tb, resDataParentArray = new Array(), browse4Resource

// Sorting functions
function sortBySize(a, b) {
	return a.size - b.size
}

function sortByRating(a, b) {
	return a.rating - b.rating
}

function sortByTypeInt(a, b) {
	return a.typeInt - b.typeInt
}

function sortByName(a, b) {
	if (bw.ie) {
		var aStr = a.name.toLowerCase()
		var bStr = b.name.toLowerCase()
		var c = Math.max(aStr.length,bStr.length)
		for (var i = 0; i < c; i++) {
			aIndex = getCharIndex(aStr.substring(i,i+1))
			bIndex = getCharIndex(bStr.substring(i,i+1))
			if (aIndex != bIndex) break
		}
		return ((aIndex < bIndex) ? -1 : ((aIndex > bIndex) ? 1 : 0))
	} else {
		a = a.name.toLowerCase()
		b = b.name.toLowerCase()	
		return ((a < b) ? -1 : ((a > b) ? 1 : 0))
	}
}
  
function sortByType(a, b) {
	if (bw.ie) {
		var aStr = a.type.toLowerCase()
		var bStr = b.type.toLowerCase()
		var c = Math.max(aStr.length,bStr.length)
		for (var i = 0; i < c; i++) {
			aIndex = getCharIndex(aStr.substring(i,i+1))
			bIndex = getCharIndex(bStr.substring(i,i+1))
			if (aIndex != bIndex) break
		}
		return ((aIndex < bIndex) ? -1 : ((aIndex > bIndex) ? 1 : 0))
	} else {
		a = a.type.toLowerCase()
		b = b.type.toLowerCase()	
		return ((a < b) ? -1 : ((a > b) ? 1 : 0))
	}
}

var alphabet = new Array('','0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z')
function getCharIndex(str) {
	for (i = 0; i < alphabet.length; i++) {
		if (str == alphabet[i]) {
			return i
			break
		}
	}
}

function formatSize(number) {
	if (number == "" || number == 0) str = ""
	else { 
		if (number < 1000 ) str = number + "bytes"
		else if (number < 10240) {
			str = number / 1024 + ""
			str = str.substring(0,str.lastIndexOf(".") + 2) + "KB"
		} else if (number < 1024000) {
			str = number / 1024 + ""
			str = str.substring(0,str.lastIndexOf(".") + 2) + "KB"
		} else {
			str = number / 1048000 + ""
			str = str.substring(0,str.lastIndexOf(".") + 2)	+ "MB"
		}
	}
	return str
}

function formatRating(number, resData) {
	obj = document.createElement("a");		
	obj.href = "/exec/review/?id=" + resData.id + "&folderId=" + resData.parentId;

	if (number == "" || number == 0) {
		obj.title = "Click here to review " + resData.name;		
		ele = document.createElement("img");
		ele.src = "/images/general/noreviews.gif";
		ele.alt = "5 grey stars and text saying no reviews";
		obj.appendChild(ele);
	} 
	else { 			
		obj.title = resData.review + " review" + (resData.review > 1 ? "s" : "") + " for " + resData.name;
		for (var i=0; i<5; i++) {
			ele = document.createElement("img");
			if (i < number)	{ 
				ele.src = "/images/icons/star_active.gif";
				ele.alt = "review star active";
			}
			else {
				ele.src = "/images/icons/star_dead.gif";
				ele.alt = "review star dead";
			} 						
			obj.appendChild(ele);
		}
	}
	
	return obj	
}

// Sorting function dispatcher (invoked by table column links)
function sortTable(link) {
	for (var i = 0; i < resData.length; i++) {
		if (resData[i].aggregationLevel > 0) {
			resData.splice(i,1)
			i--
		}
		if (browse4Resource == true) resData[i].checked = false
	}
	sortBy = link.firstChild.nodeValue
	switch (sortBy) {
		case "Name" :
			resData.sort(sortByName)
			break
		case "Rating" :
            resData.sort(sortByRating)
            break
		case "Size" :
            resData.sort(sortBySize)
            break
		case "Type" :
			resData.sort(sortByType)
			break
	}
	drawTable(sortOrder)
}

// Remove existing table rows
function clearTable(tbody) {
	while (tbody.rows.length > 0) tbody.deleteRow(0)
}
  
// Draw table from 'resData' array of objects  
var sortByColumn = null;
function drawTable(sortOrderArg) {
		clearTable(tb)
	if (sortByColumn != null) sortByColumn.className = "ColumnHeading"
		sortByColumn = document.getElementById(sortBy + "Column")
		if (bw.ie) sortByColumn.className = sortOrder + "Column ColumnHeading"
	if (sortOrder.indexOf("asc") != -1) {
		sortOrder = "desc"
		for (var i = 0; i < resData.length; i++) buildResultRow(i)
	} else {
		sortOrder = "asc"
		for (var i = resData.length-1; i >= 0; i--) buildResultRow(i)
	}
	//hiddenWin.changeURL("/ancillary/asp/setSortingType.asp?sortOrder=" + sortOrderArg + "&sortBy=" + sortBy)
}

function initSort() {
	(sortOrder == "" || sortOrder == "asc") ? sortOrder = "desc" : sortOrder = "asc"
	if (sortBy != "") sortByColumn = document.getElementById(sortBy + "Column")
	tb = document.getElementById("__sortTableBody")
}

var displayBlock = (bw.ie) ? "block" : "table-row"
function initialiseLOActuator(id,aggregationLevel) {	
	var LOactuator = document.getElementById("LOactuator" + id)
	if (aggregationLevel == 0) var LORow = document.getElementById("LORow" + id)
	else {
		var LOName = document.getElementById("LOName" + id)
		var LONameRow = document.getElementById("LONameRow" + id)
		var LORating = document.getElementById("LORating" + id)
		var LORatingRow = document.getElementById("LORatingRow" + id)
		var LOSize = document.getElementById("LOSize" + id)
		var LOSizeRow = document.getElementById("LOSizeRow" + id)
		var LOType = document.getElementById("LOType" + id)
		var LOTypeRow = document.getElementById("LOTypeRow" + id)
	}
	var display;
		LOactuator.clicked = 0
		LOactuator.aggregationLevel = aggregationLevel
		LOactuator.onclick = function() {						
			display = (this.aggregationLevel == 0) ? LORow.style.display : LOName.style.display
			this.style.backgroundImage =
				(display == displayBlock) ? "url(/images/icons/pointers/plus.gif)" : "url(/images/icons/pointers/minus.gif)"
			if (this.aggregationLevel == 0) LORow.style.display = (display == displayBlock) ? "none" : displayBlock
			else LONameRow.style.display = LORatingRow.style.display = LOSizeRow.style.display = LOTypeRow.style.display = LOName.style.display = LORating.style.display = LOSize.style.display = LOType.style.display = (display == displayBlock) ? "none" : displayBlock
			if (!this.clicked) {
				hiddenWin.changeURL("/rsrc/actuateLO.aspx?mode=" + mode + "&LOId=" + this.id.slice(10,this.id.length) + "&aggregationLevel=" + this.aggregationLevel + "&sortOrder=" + sortOrder + "&sortBy=" + sortBy)
				//hiddenWin.changeURL("/ancillary/asp/rsrc/!actuateLO.asp?mode=" + mode + "&LOId=" + this.id.slice(10,this.id.length) + "&aggregationLevel=" + this.aggregationLevel + "&sortOrder=" + sortOrder + "&sortBy=" + sortBy)
			}
		}
	return LOactuator
}

function createNewItem(id,name,size,typeInt,icon,link,kids,aggregationLevel,parentId,owner,target,review,rating,type) {	
	var i = resData.length
		resData[i] = { name : name, size : size, typeInt : typeInt, id : id, icon : icon, kids : kids, link : link, owner : owner, aggregationLevel : aggregationLevel, parentId : parentId, target : target, review : review, rating : rating, type : type }
	if (aggregationLevel > 0) buildAggregateResultRow(i,typeInt) 
	else {
  		buildResultRow(i)
		document.getElementById("option" + resData[i].id + "Actuator").scrollIntoView(true)
	}
}

function deleteItem(resIndex) {
	var i = 0
	if (resData[resIndex].aggregationLevel == 0) {
		while (i < tb.rows.length) {
			if (tb.rows[i].id == ("resRow" + resData[resIndex].id)) {
				tb.deleteRow(i) 
				if (resData[resIndex].kids) tb.deleteRow(i)
				break
			} else i++
		}		
	} else {
		var tbln = document.getElementById("LOName" + resData[resIndex].parentId)
		var tbls = document.getElementById("LOSize" + resData[resIndex].parentId)
		var tblt = document.getElementById("LOType" + resData[resIndex].parentId)
		while (i < tbln.rows.length) {
			if (tbln.rows[i].id == ("resNameRow" + resData[resIndex].id)) {
				tbln.deleteRow(i)
				tbls.deleteRow(i) 
				tblt.deleteRow(i)
				if (resData[resIndex].kids) {
					tbln.deleteRow(i)
					tbls.deleteRow(i)
					tblt.deleteRow(i)
				}
				break
			} else i++
		}
		// remove parental status of item
		if (tbln.rows.length == 0) {
				i = 0
				while (i < resData.length) {
					if (resData[i].id == resData[resIndex].parentId) break
					else i++
				}
				resData[i].kids = 0
			var td = document.getElementById("LOactuator" + resData[i].id)
				td.onclick = ""
				td.style.backgroundImage = ""
				td.style.cursor = "auto"
				td.className = "resultsIcon"
				td.id = null
			var tr = td.parentNode
			var tbl = tr.parentNode
				tbl.removeChild(tr.nextSibling)
		}
	}
	resData.splice(resIndex,1)
	//	reassign resindex value of menus
	for (i = resIndex; i < resData.length; i++) eval("menuActuator" + resData[i].id + "Obj.resIndex = " + i)
}

function buildResultRow(i) {
	var tr = tb.insertRow(tb.rows.length)
		tr.id = "resRow" + resData[i].id
		tr.className = "resRow"
	// checkbox
	if (browse4Resource == true) {
		var td = tr.insertCell(tr.cells.length)
			td.className = "result"
		if ((resData[i].typeInt == 2) && (!resData[i].kids)) {
			var slct = document.createElement('input')
				slct.id = "slctRes" + resData[i].id
				slct.type = "checkbox"
				slct.i = i
				slct.onclick = function() {
					selectResource(this,resData[this.i].id)
				}
				td.appendChild(slct)
		}
	}
	var td = tr.insertCell(tr.cells.length)
		if (resData[i].kids && (resData[i].typeInt != 1)) { 
			td.className = "resultsIconNode"
			td.id = "LOactuator" + resData[i].id
		} else td.className = "resultsIcon"
	// icon
		td = tr.insertCell(tr.cells.length)
		td.width = "27px"
		td.className = "result"
  	var img = document.createElement('img')
		img.src = resData[i].icon
		img.alt = "click for options"
		img.id = "resIcon" + resData[i].id
	var lnk = document.createElement('a')
		lnk.className = "actuator"
		lnk.id = "option" + resData[i].id + "Actuator"
		lnk.setAttribute('href','#')
		lnk.appendChild(img)
		td.appendChild(lnk)
	var draft = (resData[i].icon.indexOf("draft") != -1) ? "Draft" : ""		
		eval("menuActuator" + resData[i].id + "Obj = new initialiseMenuActuator(menu" + resData[i].typeInt + draft + ",\"option" + resData[i].id + "Actuator\"," + i + ")")
	// name
		td = tr.insertCell(tr.cells.length)
		td.className = "result"
    var lnk = document.createElement('a')
		lnk.setAttribute('href',resData[i].link)
		if (resData[i].target) lnk.setAttribute('target',resData[i].target)
		lnk.id = "resLink" + resData[i].id
	var lbl = document.createTextNode(resData[i].name)
		td.width = (browse4Resource == true) ? "413px" : "439px"
		td.appendChild(lnk)
		lnk.appendChild(lbl)
	// rating
		td = tr.insertCell(tr.cells.length)
	var lbl = (resData[i].typeInt != 1 ? formatRating(resData[i].rating, resData[i]) : document.createComment(""));
		td.className = "rating"	
		td.appendChild(lbl)
		td.align = "center"
		td.width = "77px"
	// size
		td = tr.insertCell(tr.cells.length)
	var lbl = document.createTextNode(formatSize(resData[i].size))
		td.className = "result"	
		td.appendChild(lbl)
		td.align = "center"
		td.width = "62px"
	// type
		td = tr.insertCell(tr.cells.length)
		td.className = "result"
		td.id ="resType" + resData[i].id
		lbl = document.createTextNode(resData[i].type)
		td.appendChild(lbl)
		td.width = "123px"
		td.noWrap = true
		if (resData[i].kids && (resData[i].typeInt != 1)) { 
			tr = tb.insertRow(tb.rows.length)
			tr.className = "LORow"
			tr.id = "LORow" + resData[i].id
			eval("LOactuator" + resData[i].id + "Obj = new initialiseLOActuator(" + resData[i].id + ",0)")
			td = tr.insertCell(tr.cells.length)
			if (browse4Resource == true) td = tr.insertCell(tr.cells.length)
			td = tr.insertCell(tr.cells.length)
			td.colSpan = 2
			tbl = document.createElement('table')
			tbl.id = "LOName" + resData[i].id
			td.appendChild(tbl)
			td = tr.insertCell(tr.cells.length)
			tbl = document.createElement('table')
			tbl.id = "LORating" + resData[i].id
			td.appendChild(tbl)
			td = tr.insertCell(tr.cells.length)
			tbl = document.createElement('table')
			tbl.id = "LOSize" + resData[i].id
			td.appendChild(tbl)
			td = tr.insertCell(tr.cells.length)
			tbl = document.createElement('table')
			tbl.id = "LOType" + resData[i].id
			td.appendChild(tbl)
		}
}

function buildAggregateResultRow(i,typeInt) {
	var tbl = document.getElementById("LOName" + resData[i].parentId)
	var tr = tbl.insertRow(tbl.rows.length)
		tr.className = "resRow"
		tr.id = "resNameRow" + resData[i].id
	// checkbox
	var td
	if (browse4Resource == true) {
		td = tr.insertCell(tr.cells.length)
		td.className = "result"
		td.width = "18px"
		if (resData[i].typeInt == 2 && !resData[i].kids) {
			var slct = document.createElement('input')
				slct.id = "slctRes" + resData[i].id
				slct.type = "checkbox"
				slct.i = i
				slct.onclick = function() {
					selectResource(this,resData[this.i].id)
				}
			for (var k = 0; k < resData.length; k++) {
				if (resData[i].parentId == resData[k].id) {
					if (resData[k].checked) slct.disabled = true
					break
				}
			}
			td.appendChild(slct)
		}
	}
	// plus sign
		td = tr.insertCell(tr.cells.length)
		if (resData[i].kids) { 
			td.className = "resultsIconNode"
			td.id = "LOactuator" + resData[i].id
		} else td.className = "resultsIcon"
		td.width = "1px"
		td = tr.insertCell(tr.cells.length)
		td.width = "27px"
		td.className = "result"
	// icon
  	var img = document.createElement('img')
		img.src = resData[i].icon
		img.alt = "click for options"
		img.id = "resIcon" + resData[i].id
	var lnk = document.createElement('a')
		lnk.className = "actuator"
		lnk.id = "option" + resData[i].id + "Actuator"
		lnk.setAttribute('href','#')
		lnk.appendChild(img)
		td.appendChild(lnk)
	var draft = (resData[i].icon.indexOf("draft") != -1) ? "Draft" : ""		
		eval("menuActuator" + resData[i].id + "Obj = new initialiseMenuActuator(menu" + ((resData[i].typeInt == 2 && resData[i].kids > 0) ? 14 : resData[i].typeInt) + draft + ",\"option" + resData[i].id + "Actuator\"," + i + ")")
	// name
	var tdn = tr.insertCell(tr.cells.length)
		tdn.className = "result"
		lnk = document.createElement('a')
		lnk.id = "resLink" + resData[i].id
		lnk.setAttribute('href',resData[i].link)
		if (resData[i].target) lnk.setAttribute('target',resData[i].target) 
	var lbl = document.createTextNode(resData[i].name)
		lnk.appendChild(lbl)
		tdn.appendChild(lnk)
		if (resData[i].kids) {
			tr = tbl.insertRow(tbl.rows.length)
			tr.className = "LORow"
			tr.id = "LONameRow" + resData[i].id
			td = tr.insertCell(tr.cells.length)
			if (browse4Resource == true) td = tr.insertCell(tr.cells.length)
			td = tr.insertCell(tr.cells.length)
			td.colSpan = 2
			tbl = document.createElement('table')
			tbl.id = "LOName" + resData[i].id
			td.appendChild(tbl)
			tbl.style.display = "none"
		}
	// rating
		tbl = document.getElementById("LORating" + resData[i].parentId)		
		tr = tbl.insertRow(tbl.rows.length)
		tr.id = "resRatingRow" + resData[i].id
		tdr = tr.insertCell(tr.cells.length)
		tdr.className = "result"
		lbl = formatRating(resData[i].rating, resData[i]);
		tdr.appendChild(lbl)
		tdr.align = "center"
		tdr.width = "77px"
		if (resData[i].kids) {
			tr = tbl.insertRow(tbl.rows.length)
			tr.className = "LORow"
			tr.id = "LORatingRow" + resData[i].id
			td = tr.insertCell(tr.cells.length)
			tbl = document.createElement('table')
			tbl.id = "LORating" + resData[i].id
			td.appendChild(tbl)
			tbl.style.display = "none"
		}
	// size
		tbl = document.getElementById("LOSize" + resData[i].parentId)
		tr = tbl.insertRow(tbl.rows.length)
		tr.id = "resSizeRow" + resData[i].id
		tds = tr.insertCell(tr.cells.length)
		tds.className = "result"
		lbl = document.createTextNode(formatSize(resData[i].size))
		tds.appendChild(lbl)
		tds.align = "center"
		tds.width = "62px"
		if (resData[i].kids) {
			tr = tbl.insertRow(tbl.rows.length)
			tr.className = "LORow"
			tr.id = "LOSizeRow" + resData[i].id
			td = tr.insertCell(tr.cells.length)
			tbl = document.createElement('table')
			tbl.id = "LOSize" + resData[i].id
			td.appendChild(tbl)
			tbl.style.display = "none"
		}
	// type
		tbl = document.getElementById("LOType" + resData[i].parentId)
		tbl.className = "type"
		tr = tbl.insertRow(tbl.rows.length)
		tr.id = "resTypeRow" + resData[i].id
		tdt = tr.insertCell(tr.cells.length)
		tdt.className = "result"
		tdt.id ="resType" + resData[i].id
		lbl = document.createTextNode(resData[i].type)
		tdt.appendChild(lbl)
		tdt.noWrap = true
		if (resData[i].kids) {
			tr = tbl.insertRow(tbl.rows.length)
			tr.className = "LORow"
			tr.id = "LOTypeRow" + resData[i].id
			td = tr.insertCell(tr.cells.length)
			tbl = document.createElement('table')
			tbl.id = "LOType" + resData[i].id
			td.appendChild(tbl)
			tbl.style.display = "none"
			eval("LOactuator" + resData[i].id + "Obj = new initialiseLOActuator(" + resData[i].id + "," + resData[i].aggregationLevel + ")")
		}
		tdnWidth = (browse4Resource == true) ? 413 : 439
		tdn.width = tdnWidth - (resData[i].aggregationLevel * 16) + "px"
		tdn.height = tds.height = tdt.height = Math.max(tdn.offsetHeight,Math.max(tds.offsetHeight,tdt.offsetHeight)) + "px"
}

