// JavaScript Document

// true if expert agrees, false otherwise
function getBooleanOutcome( productSelected, expertSelected )
{
	if ( productSelected && expertSelected ) { return true; }
	if ( !productSelected && !expertSelected ) { return true; }
	if ( productSelected && !expertSelected ) { return false; }
	if ( !productSelected && expertSelected ) { return false; }
}

// true if expert agrees, false otherwise
function getCompareOutcome( lhs, rhs )
{
	if ( lhs == rhs ) { return true; } else { return false; }
}

function doExpertOpinion( href, expertId, listName )
{
	var tag = eval( listName + ".tag;" );
	var sCookie = new Cookie( tag );
	sCookie.set( eval( listName + ".encode();" ) );
	var eCookie = new Cookie( "ei" );
	eCookie.set( expertId );
	
	doPopup( href, tag, 500, 800, "dialog" );
	
	return false;
}

function showExpertOpinion( d, itemConfig, reviewConfig )
{
	var sCookie = new Cookie( itemConfig.tag );
	var value = sCookie.get();
	var elementMap = new HashMap( value );

	var eCookie = new Cookie( "ei" );	
	var expertId = eCookie.get();

	d.writeln( "<table class='" + reviewConfig.style + "' width='100%'>" );
	d.writeln( "<tr>" );
	d.writeln( "<th>" + reviewConfig.itemHeading + "</th>" );
	d.writeln( "<th>" + reviewConfig.selectionHeading + "</th>" );
	d.writeln( "<th>" + reviewConfig.keyHeading + "</th>" );
	d.writeln( "<th>" + reviewConfig.opinionHeading + "</th>" );
	d.writeln( "</tr>" );
	
	d.writeln( "<tbody>" );
	for ( var n = 0; n < elementMap.getSize(); n++ )
	{
		var elementName = elementMap.getKey( n );
		var elementValue = elementMap.get( elementName );
		var elementId = elementName.replace( /e_/, "" );
		var expertValue = reviewConfig.getKey( elementId );
		
		var i = itemConfig.getById( elementId );
		switch( i.type )
		{
		case 'boolean':
			var itemSelected = ( elementValue == "true" ) ? true : false;
			var outcome = getBooleanOutcome( itemSelected, expertValue );
			break;
		case 'select':
			var outcome = getCompareOutcome( elementValue, expertValue );
			break;
		}
			
		var outcomeClass = outcome ? "outcomeAgree" : "outcomeDisagree";
		d.writeln( "<tr class='" + outcomeClass + "'>" );
		d.writeln( "<td valign='top'>" + i.label + "</td>" );
		
		switch( i.type )
		{
		case 'boolean':
			d.writeln( "<td valign='top'>" + ( itemSelected ? reviewConfig.outcomeTrue : reviewConfig.outcomeFalse ) + "</td>" );
			d.writeln( "<td valign='top'>" + ( expertValue ? reviewConfig.outcomeTrue : reviewConfig.outcomeFalse ) + "</td>" );
			break;
		case 'select':
			var selectLabel = i.list.getLabel( elementValue );
			var expertLabel = i.list.getLabel( expertValue );
			d.writeln( "<td valign='top'>" + selectLabel + "</td>" );
			d.writeln( "<td valign='top'>" + expertLabel + "</td>" );
			break;
		}
		
		d.writeln( "<td valign='top'>" );
		d.writeln( "<table border='0' cellpadding='0' cellspacing='0' width='100%'>" )
		d.writeln( "<tr>" );
		var opinion = reviewConfig.getOpinionText( expertId, elementId, outcome );
		// override inherited style - small fudge here re: inline style - s.b. in style sheet
		d.writeln( "<td valign='top' style='border: 0; padding: 0;'>" + opinion + "</td>" );
		d.writeln( "</tr>" );
		if ( !outcome )
		{
			// TBD show attachment info
		}
		d.write( "</table>" );
		d.write( "</td></tr>" );
	}
	
	d.writeln( "</tbody>" );
	d.writeln( "</table>" );
}

function renderItem( d, itemConfig, expertItem )
{
	var name = "e_" + expertItem.id;
	
	switch ( expertItem.type )
	{
	case "select":
		d.writeln( "<table border='0' cellspacing='2' cellpadding='0' width='100%'>" );
		d.writeln( "<tr>" );
		d.writeln( "<td width='5%'>&nbsp;</td>" );
		d.writeln( "<td valign='top' align='left' width='95%'>" );
		d.writeln( expertItem.label );
		d.writeln( "<select class='" + itemConfig.selectStyle + "' name='" + name + "'>" );
		var list = expertItem.list;
		d.writeln( "<option value=''>" + list.defaultLabel + "</option>" );
		for ( var n = 0; n < list.getLength(); n++ )
		{
			var listItem = list.get( n );
			d.writeln( "<option value='" + listItem.value + "'>" );
			d.writeln( listItem.label  );
			d.writeln( "</option>" );
		}
		d.writeln( "</select>" );
		d.writeln( "</td></tr>" );
		d.writeln( "</table>" );
		break;
		
	case "boolean":
		d.writeln( "<table border='0' cellspacing='0' cellpadding='2' width='100%'>" );
		d.writeln( "<tr>" );
		d.writeln( "<td width='5%'>&nbsp;</td>" );
		d.writeln( "<td valign='top' align='right' width='10%'>" );
		d.writeln( "<span class='" + itemConfig.checkboxStyle + "'>" );
		d.writeln( "<input name='" + name + "' type='checkbox'>" );
		d.writeln( "</td>" );
		d.writeln( "<td valign='top' align='left' width='85%'>" );
		d.writeln( " " + expertItem.label );
		d.writeln( "</span>" );
		d.writeln( "</td></tr>" );
		d.writeln( "</table>" );
		break;
	case "label":
		d.writeln( "<table border='0' cellspacing='0' cellpadding='8' width='100%'>" );
		d.writeln( "<tr><td>" );
		d.writeln( "<span class='" + itemConfig.labelStyle + "'>" );
		d.writeln( expertItem.label );
		d.writeln( "</span>" );
		d.writeln( "</td></tr>" );
		d.writeln( "</table>" );
		break;
	}
}

function renderExpertItemList( d, itemConfig )
{
	d.write( "<form action='#' method='get' name='expertItems'>" );
	for ( var n = 0; n < itemConfig.getLength(); n++ )
	{
		var i = itemConfig.get( n );
		renderItem( d, itemConfig, i );
	}
	d.write( "</form>" );
}

function renderExpert( d, href, expert, itemConfigName )
{
	d.write( "<table width='100%' cellspacing='0' cellpadding='1' border='0'>" );
	d.write( "<tr><td>" );
	d.write( "<a href='" + href + "' onClick='return doExpertOpinion( this.href, " + 
		expert.id + ", \"" + itemConfigName + "\");'" + "'>" );
	d.write( "<img src='" + expert.image + "' border='0' alt='" + expert.name + " image" + "'>" );
	d.write( "</a>" );
	d.writeln( "</td></tr>" );
	
	if ( ( expert.name != null ) && ( expert.name.length > 0 ) )
	{
		d.writeln( "<tr><td align='center'>" + expert.name + "</td></tr>" );
	}
	
	if ( ( expert.title != null ) && ( expert.title.length > 0 ) )
	{
		d.writeln( "<tr><td align='center'>" + expert.title + "</td></tr>" );
	}
	d.write( "</table>" );
}

function renderExpertReviewers( d, href, reviewConfig )
{
	d.writeln( "<table width='100%' border='0' cellspacing='6' cellpadding='4'>" );
	for ( var n = 0; n < reviewConfig.getExpertLength(); n++ )
	{
		var expert = reviewConfig.getExpert( n );
		d.write( "<tr><td>" );
		renderExpert( d, href, expert, reviewConfig.itemConfigName );
		d.writeln( "</td></tr>" );
	}
	d.writeln( "</table>" );
}

/*
function showExpertHeading( d )
{
	var eCookie = new Cookie( "ei" )	
	var id = eCookie.get();
	var expert = Reviews.getExpertByID( id );
	
	d.writeln( expert.name + " " + expert.title );
}
*/

/*
function showExpertImage( d )
{
	var eCookie = new Cookie( "ei" )	
	var expertIndex = eCookie.get()
	
	var name = expertName[expertIndex][0];
	var title = expertName[expertIndex][1];
	var image = expertName[expertIndex][2];

	d.writeln( "<img src='" + image + "' border='0' alt='" + name + "'>" );
	d.writeln( "<br>" );
	d.writeln( name );
	d.writeln( "<br>" );
	d.writeln( title );
}
*/

/*
function renderSubmit( d, href, sName, n )
{
	d.writeln( "<form>" );
	d.writeln( "<input type='submit' name='submit' value='Check My Answers' onclick='return doExpertOpinion( \"" + href + "\", " + n + ", \"" + sName + "\" );'" + "'>" );
	d.writeln( "</form>" );
}
*/

/*
function renderExpertSubmit( d, href, sName )
{
	d.writeln( "<table width='100%' border='0' cellspacing='6' cellpadding='4'>" );
	for ( var i = 0; i < expertName.length; i++ )
	{
		d.writeln( "<tr><td>" );
		renderSubmit( d, href, sName, i );
		d.writeln( "</td></tr>" );
	}
	d.writeln( "</table>" );
}
*/


