/*
 *
 * Star rating functions
 * GCE-2.6.9
 *
 */

var submitStarRating = function( articleId, userId, rating, element ) {
	try {
		var meta = { userId:userId, articleId:articleId, sectionId:null, publicationId:null };
		QualificationPluginAjax.submitStarRating( meta, rating,
			{
				callback : function(rating) {
					submitStarRatingCallBack( rating, element );
				},
				exceptionHandler : submitStarRatingException
			}
		);
	} catch( ex ) {
		// JavaScript exception
	}
	return false;
}

var submitStarRatingException = function( errorString, exception ) {
	alert(errorString);
}

var submitStarRatingCallBack = function( rating, element ) {

    
	if ( rating != null ) {
		var currentRating = YAHOO.util.Dom.getPreviousSiblingBy( element.parentNode , 
			function( el ) { 
				if( el.className == "currentRating" ) { 
					return true;
				}
				return false;
			}
		);
		currentRating.style.width = ( rating.totalAverage * 14 ) + "px";
	}
}

/*
 * Submit thumbs up down rating functionality
 */

var submitThumbsUpDownRating = function( articleId, userId, rating, element ,unauthorizedMsg ,alreadyRatedMsg) {
	try {
		var meta = { userId:userId, articleId:articleId, sectionId:null, publicationId:null };
		QualificationPluginAjax.submitStarRating( meta, rating, {
				callback : function(rating) {
					submitThumbsUpDownRatingCallBack( rating, element );
				},
        exceptionHandler : function(errorString, exception) {
					submitThumbsUpDownRatingException( errorString, exception,unauthorizedMsg ,alreadyRatedMsg );
				}
			}
		);
	} catch( ex ) {
		// JavaScript exception
	}
	return false;
}

var submitThumbsUpDownRatingException = function( errorString, exception ,unauthorizedMsg,alreadyRatedMsg) {
	if(exception.javaClassName == 'com.ndc.exceptions.UnauthorizedException')
	{
		alert(unauthorizedMsg);
	}
	else if(exception.javaClassName == 'com.ndc.qualification.api.exception.AlreadyRatedException')
	{
		alert(alreadyRatedMsg);
	}
	else
	{
		alert(errorString);
	}
}

var submitThumbsUpDownRatingCallBack = function( rating, element ) {
	if(rating != null && element) {
   var value =  (2*rating.totalValue-rating.totalVotes);
   var node =  document.getElementById(element);
   node.innerHTML= value;

   if(value>0) {
     node.setAttribute('class','currentRating positive');
   }
   else if(value<0) {
      node.setAttribute('class','currentRating negative');
   }
   else {
      node.setAttribute('class','currentRating zero');
   }
	}
}

/*
 *
 * Favorite functions
 * GCE-2.6.9
 *
 */

var submitFavorite = function( articleId, userId, element, successMessage) {
	try {
		var meta = { userId:userId, articleId:articleId, sectionId:null, publicationId:null };
		QualificationPluginAjax.submitFavorite( meta , 
			{
				callback : function( rating ) {
					submitFavoriteCallBack( rating, element, successMessage );
				},
				exceptionHandler : submitFavoriteException
			}
		);
	} catch( ex ) {
		// JavaScript exception
	}
	return false;
}

var submitFavoriteCallBack = function( success, element, successMessage ) {
	if ( success != null ) {
		if( success == true ) {
			element.parentNode.innerHTML = successMessage;
		}
	}
}

var submitFavoriteException = function( errorString, exception ) {
	alert(errorString);
}

/*
 *
 * Flagging functions
 * GCE-2.6.9
 *
 */

var submitFlagging = function( articleId, userId, element, successMessage ) {
	try {
		var meta = { userId:userId, articleId:articleId, sectionId:null, publicationId:null };
		QualificationPluginAjax.submitFlagging( meta , 
			{
				callback : function( rating ) {
					submitFlaggingCallBack( rating, element, successMessage );
				},
				exceptionHandler : submitFlaggingException
			}
		);
	} catch( ex ) {
		// JavaScript exception
	}
	return false;
}

var submitFlaggingCallBack = function( flag, element, successMessage ) {
	if ( flag != null ) {
		element.parentNode.innerHTML = successMessage;
	}
}

var submitFlaggingException = function( errorString, exception ) {
	alert(errorString);
}

