function showFeedbackPreview(elemID) {
	var format = document.getElementById(elemID).value;
	showTemplatePopup(format, null, false, false, false);
}
function showTemplatePopup(templateUUID, templateName, allowSelect, allowCustomize, allowSwitch) {
	var pnl = showModalPanel(
		'template' + templateUUID,
		'620px',
		'Feedback Preview',
		'<div id="divTemplatePreview' + templateUUID + '" style="height:100px;">Loading...<br/><br/><img src="/images/loading2.gif"/></div>',
		true
		);
	pnl.templateID = templateUUID;
	pnl.templateName = templateName;

	var url = "/previewSampleReview.action?reviewTemplateID=" + templateUUID;
	if (allowSelect) url += "&allowSelect=Y";
	if (allowCustomize) url += "&allowCustomize=Y";
	if (allowSwitch) url += "&allowSwitch=Y";
	var cb = ajaxExecuteGet(url);
	cb.success = handleEnterDataHTML;
	cb.argument = {element:document.getElementById("divTemplatePreview" + templateUUID)};
}
function handleEnterDataHTML(o) {
	// Clear height that was explicitly set
	var div = o.argument.element;
	div.style.height = '';
	
	setInnerHTMLwithScript(div, o.responseText, "initDisplayReview");
	var pnl = getPanelFromElement(div);
	if (pnl) pnl.center();
}
function initSlider(prefix, name, descr, increment, numTicks) {
	var slider = YAHOO.widget.Slider.getHorizSlider('t_' + prefix + name, 't_' + prefix + name + 'Thumb', 0, (numTicks-1) * increment, increment);
	slider.subscribe('change', function(offset) {
        updateScoreFromSlider(prefix, name, descr, offset, increment, 0);
	});
	slider.setValue(0, true);
	return slider;
}
function updateScoreFromSlider(prefix, name, friendly, offset, increment, first) {
	var score = parseInt(first + (offset / increment));
	var div = document.getElementById('t_' + prefix + name);
	div.title = friendly + ': ' + ((score != 0)?score:'N/A');
	updateScore(prefix + name, score);
    updateRating(prefix);
}
function updateScoreFromStars(prefix, name, val) {
	var img = document.getElementById('imgStars_' + prefix + name);
	img.src = "/images/stars-94w-" + val + ".0.gif";
	var elem = document.getElementById('score_' + prefix + name);
	val = val * 2 - 1;
	if (val < 0) val = 0;
	if (elem) elem.value = val;
    updateRating(prefix);
}
function updateScoreFromSelect(prefix, name) {
	var tpc;
	var sel = document.getElementById('t_' + prefix + name);
	var idx = sel.selectedIndex;
	if (idx > 0) tpc = sel.options[idx].value;
	var score = 0;
	if (tpc) {
		var div = document.getElementById('div_' + prefix + 'Details');
		score = div.choiceValues[tpc];
	}
	updateScore(prefix + name, score);
    updateRating(prefix);
}
function updateScoreFromCheckboxes(prefix, name) {
	var checks = getCheckedCheckboxes(document);
	var score = 0;
	var i;
	for (i=0; i < checks.length; i++) {
		if (checks[i].id.indexOf('c_' + prefix + name + '_') == 0) {
			score += parseFloat(checks[i].value);
		}
	}
	updateScore(prefix + name, score);
	updateRating(prefix);
}
function updateScore(id, score) {
	if (score < 0) score = 0;
	if (score > 10) score = 10;
	displayRating('tpc_' + id, score);
	var elem = document.getElementById('score_' + id);
	if (elem) elem.value = score;
}
function getScore(topic) {
	var elem = document.getElementById('score_' + topic);
	if (elem == null || elem.value == null) return 0;
	return parseFloat(elem.value);
}
function getWeightedAverage(scores, weights) {
	var score = 0;
	var totalWeight = 0;
	if (scores == null || scores.length == 0) return score;
	for (i=0; i < weights.length; i++) {
		if (scores[i] > 0) totalWeight += weights[i];
	}
	for (i=0; i < scores.length; i++) {
		if (scores[i] > 0) score += scores[i] * (weights[i]/totalWeight);
	}
	if (isNaN(score)) score = 0;
	return score;
}
function selectIcon(prefix, name) {
	var rdo = document.getElementById('rdo' + prefix + name);
	if (rdo != null) rdo.checked = true;
	iconSelected(prefix, name);
}
function iconSelected(prefix, name) {
	var imgTag = document.getElementById('imgIcon' + prefix);
	if (!imgTag) return;
	if (name == 'none')
		imgTag.src = '/images/spacer.gif';
	else
		imgTag.src = '/images/cw-badge-32-' + name + '.gif';
}
function selectBadge(name, friendly, prefix) {
	var imgTag = document.getElementById('imgBadge' + prefix);
	if (!imgTag) return;
	imgTag.src = '/images/cw-badge-64-' + name + '.gif';
}
function getRating(prefix) {
	var div = document.getElementById('div_' + prefix + 'Details');
	var cats = div.categories;
	if (!cats) {
		var elem = document.getElementById('score_' + prefix + '0');
		if (elem) 
			return parseFloat(elem.value);
		else
			return null;
	}
	
	var catWeights = new Array();
	var catScores = new Array();
	var i, j;

	for (i=0; i < cats.length; i++) {
        var weights = new Array();
        var scores = new Array();

        catWeights[i] = cats[i][0];
        var catID = cats[i][1];
        var topics = cats[i][2];
		for (j=0; j < topics.length; j++) {
			weights[j] = topics[j][0];
	        scores[j] = getScore(topics[j][1]);
		}

    	var score = getWeightedAverage(scores, weights);
        catScores[i] = score;
        
		applyBackgroundClass('td' + catID, 'tableItemBorder', score);
    	displayRating('cat_' + catID, score.toFixed(1));
	}
	
	return getWeightedAverage(catScores, catWeights);
}
function updateRating(prefix, rating) {
	if (rating == undefined) rating = getRating(prefix);
    if (rating == null) return;
    rating = rating.toFixed(1);
    
	var elem = document.getElementById(prefix + 'reviewScore');
	if (elem != null) {
		applyBackgroundClass(prefix + 'reviewScoreCell', '', rating);
		displayRating(prefix + 'reviewScore', rating);
	} else {
		applyBackgroundClass(prefix + 'simpleScoreCell1', 'tableItemBorder', rating);
		applyBackgroundClass(prefix + 'simpleScoreCell2', 'tableItemBorder', rating);
	}
}
function applyBackgroundClass(elemName, otherClass, rating) {
	var elem = document.getElementById(elemName);
	if (!elem) return;
	
	if (rating <= 0)
		elem.className = otherClass + ' scoreBackgroundN';
	else if (rating < 4)
		elem.className = otherClass + ' scoreBackgroundR';
	else if (rating < 7)
		elem.className = otherClass + ' scoreBackgroundY';
	else
		elem.className = otherClass + ' scoreBackgroundG';
}
function displayRating(elemName, rating) {
	var elem = document.getElementById(elemName);
	if (!elem) return;

	if (rating == undefined || rating <= 0)
		elem.innerHTML = '-';
	else if (rating < 4)
		elem.innerHTML = '<font class="scoreR">' + rating + '</font>';
	else if (rating < 7)
		elem.innerHTML = '<font class="scoreY">' + rating + '</font>';
	else
		elem.innerHTML = '<font class="scoreG">' + rating + '</font>';
}

