/**
 * NM_ComAlaTestBox.js
 *
 * @author		Steffen Heinzelmann <shi@dmc.de>
 * @copyright   Copyright (c) dmc - digital media center GmbH
 * @version		$Id: NM_ComAlaTestBox.js 84734 2011-09-13 08:46:14Z sheinzelmann $
 */
var NM_ComAlaTestBox = NM_Component.extend(
{
	/**
	 * @var integer article number
	 **/
	intArticleNo: 0,

	/**
	 * @var string client request url
	 **/
	strLinkClientRequest: '',

	/**
	 * @var array review list
	 **/
	arrReviewList: null,

	/**
	 * @var element loading
	 **/
	elmLoading: null,

	/**
	 * @var element detail item template
	 **/
	elmReviewDetailItemTpl: null,

	/**
	 * initialize
	 * constructor of the class
	 *
	 * @param 	object objParam
	 * @return	void
	 */
	initialize: function( objParam )
	{
		this.parent( objParam );
		this.registerEventLoad( objParam, 99 );
	},

	onLoad: function( objParam )
	{
		this.intArticleNo 			= objParam.article_no;

		//add event for "more info" link
		$$( '#'+this.strComName+' a.moreInfo' ).addEvent( 'click', this.toggleReviewDetails.bind( this ) );

		//create loading element
		this.elmLoading = new Element( 'li' ).addClass( 'loading' );
	},

	/**
	 * toggleReviewDetails
	 * toggle (show/hide) review details
	 *
	 * @return void
	 */
	toggleReviewDetails: function()
	{
		//init review detail item template
		if( this.elmReviewDetailItemTpl == null )
		{
			this.initReviewDetailItemTpl();
		}

		//toggle review details
		$( 'NM_ComAlaTestBoxReviewDetail' ).toggleClass( 'hide' );


		if( false == $( 'NM_ComAlaTestBoxReviewDetail' ).hasClass( 'hide' ) )
		{
			$$( '#'+this.strComName+' a.moreInfo' ).setHTML( this.getText( 'less_info' ) );

			//remove all li elements
			$ES( 'li', $( 'NM_ComAlaTestBoxReviewDetail' ) ).each( function( elmItem ) {
				elmItem.remove();
			} );

			//is review list cached
			if( this.arrReviewList == null )
			{
				//get review data from the backend
				this.toggleLoading( true );
				this.getData( { artno : this.intArticleNo } );
			}
			else
			{
				this.buildReviewDetailList( this.arrReviewList );
			}
		}
		else
		{
			$$( '#'+this.strComName+' a.moreInfo' ).setHTML( this.getText( 'more_info' ) );
		}
	},

	/**
	 * getData()
	 *
	 * @param 	object objParam
	 * @return	void
	 */
    getData: function( objParam )
	{
		var objRequest = this.createRequestJson();
		objRequest.setAction( 'get' );
		objRequest.addRequestParam( 'artno', objParam.artno );
		this.fireRequest( objRequest );
																				},

	/**
	 * On wait callback for json request
	 *
	 * @param 	NM_ComponentRequestJson objRequest
	 * @param 	boolean blnStart (true = request start, false = request successed)
	 * @return 	void
	 */
	cbRequestOnWait: function( objRequest, blnStart )
	{
		//this.log( 'cbRequestOnWait: ' + objRequest.getAction() );
	},

	/**
	 * On complete callback for json requests
	 *
	 * @param 	NM_ComponentResponseJson objResponse
	 * @param 	NM_ComponentRequestJson objRequest
	 * @param 	object objParam
	 * @return 	void
	 */
	cbRequestOnComplete: function( objResponse, objRequest, objParam )
	{
		this.getDataCallback( objResponse );
	},

	/**
	 * On error callback for json requests
	 *
	 * @param 	NM_ComponentResponseJson objResponse
	 * @return 	void
	 */
	cbRequestOnError: function( objResponse )
	{
		this.warning( 'cbRequestOnError: '+objResponse.getErrorList( true ) );
	},

	/**
	 * On success callback for json request
	 *
	 * @param 	NM_ComponentRequestJson objRequest
	 * @return 	void
	 */
	cbRequestOnSuccess: function( objRequest )
	{
		//this.log( 'cbRequestOnSuccess: '+objRequest.getAction() );
    },

	/**
	 * getDataCallback
	 **/
    getDataCallback: function( objResponse )
	{
		var blnResponseOK = false;
		if( $type( objResponse.getContent( 'review_list' ) ) == 'array' )
		{
			this.arrReviewList = objResponse.getContent( 'review_list' );
			this.buildReviewDetailList( objResponse.getContent( 'review_list' ) );
						blnResponseOK = true;
					}

		if( false == blnResponseOK )
		{
			$( this.strComName ).setStyle( 'display', 'none' );
			this.toggleReviewDetails( false );
		}

	},

	/**
	 * toggleLoading
	 * toggle (show/hide) element loading
	 *
	 * @return void
	 */
    toggleLoading: function( blnShow )
    {
		if( true == blnShow )
		{
			this.elmLoading.injectInside( $( 'NM_ComAlaTestBoxReviewDetail' ) );
		}
		else if( $type( $E( '.loading', $( 'NM_ComAlaTestBoxReviewDetail' ) ) ) == 'element' )
		{
			$E( '.loading', $( 'NM_ComAlaTestBoxReviewDetail' ) ).remove();
		}
    },

	/**
	 * buildReviewDetailList
	 * build the review detail item list
	 *
	 * @return void
	 */
	buildReviewDetailList: function( objReviewList )
	{
		if( $type( objReviewList ) == 'array' )
		{
			objReviewList.each( function( objReviewItem, intIndex ) {

				var elmDetailItem = this.elmReviewDetailItemTpl.clone();

				$E( 'h4', elmDetailItem ).setHTML( objReviewItem.title );

				$E( '.rating .score', elmDetailItem ).setHTML( objReviewItem.score );
				$E( '.rating .date', elmDetailItem ).setHTML( objReviewItem.testdate );

				$E( '.logo', elmDetailItem ).setStyle( 'background-image', 'url('+objReviewItem.sourcelogo+')' );
				$E( '.logo', elmDetailItem ).setProperty( 'title', objReviewItem.sourcename );
				/*
				if( objReviewItem.sourcewww != null )
				{
					$E( '.logo', elmDetailItem ).setProperty( 'href', objReviewItem.sourcewww );
					$E( '.logo', elmDetailItem ).setProperty( 'target', '_blank' );
				}
				*/

				if( objReviewItem.summary != null )
				{
					$E( '.row2 a', elmDetailItem ).setHTML( objReviewItem.summary );
					if( objReviewItem.reviewurl != null )
					{
						$E( '.row2 a', elmDetailItem ).setProperty( 'href', objReviewItem.reviewurl );
						$E( '.row2 a', elmDetailItem ).setProperty( 'target', '_blank' );
						$E( '.row2 a', elmDetailItem ).setProperty( 'title', this.getText( 'more_review' ) );
					}
				}
				else
				{
					$E( '.row2', elmDetailItem ).remove();
				}

				elmDetailItem.injectInside( $( 'NM_ComAlaTestBoxReviewDetail' ) );

			}, this );

			//hide loading
			this.toggleLoading( false );
		}
	},

	/**
	 * initReviewDetailItemTpl
	 * initialize review item template
	 *
	 * @return void
	 */
	initReviewDetailItemTpl: function()
	{
		this.elmReviewDetailItemTpl = $E( 'li', $( 'NM_ComAlaTestBoxReviewDetailTpl' ) ).clone();
		$( 'NM_ComAlaTestBoxReviewDetailTpl' ).remove();
		this.elmReviewDetailItemTpl.removeProperty( 'id' );
	}

} );
