var voteHandler = {

		hover: function(e) {

			var obj = (e.nodeName == 'A') ? e : getTarget(e);

			var rel = obj.getAttribute('rel');

			var parent = obj.parentNode;

			while ( parent.nodeName != 'DIV' ) {
				parent = parent.parentNode;
			}

			var stars = pDomApi.getElementsByClassName('infoItemVote','a', parent);

			for ( var i = 0; i < rel; i++) {
				stars[i].active = pDomApi.hasClassName(stars[i],'active');
				var classReplace = stars[i].active ? 'active' : '';
				pDomApi.setClassName(stars[i], 'selected', classReplace);
			}
		},

		restore: function(e) {

			var obj = (e.nodeName == 'A') ? e : getTarget(e);

			var parent = obj.parentNode;

			while ( parent.nodeName != 'DIV' ) {
				parent = parent.parentNode;
			}

			var stars = pDomApi.getElementsByClassName('infoItemVote','a', parent);

			for ( var i = 0; i < stars.length; i++) {
				var classReplace = stars[i].active ? 'active' : '';
				pDomApi.setClassName(stars[i], classReplace, 'selected');
			}

		},
		blink: function(obj) {

			if (voteHandler.blinkState) {
				voteHandler.restore(obj);
			} else {
				voteHandler.hover(obj);
			}
			voteHandler.blinker--;
			voteHandler.blinkState = voteHandler.blinkState ? false : true;

			if (voteHandler.blinker) {
				setTimeout(function () { voteHandler.blink(obj); },voteHandler.blinkTimeout);
			} else {

				var parent = obj.parentNode;

				while ( parent.nodeName != 'DIV' ) {
					parent = parent.parentNode;
				}

				var score = parent.score;

				var stars = pDomApi.getElementsByClassName('infoItemVote','a', parent);
				for ( var i = 0; i < score; i++) {
					pDomApi.setClassName(stars[i], 'active');
				}

				while ( parent.className != 'votebox' ) {
					parent = parent.parentNode;
				}

				voteHandler.disableVoting(parent);
			}
		},
		disableVoting: function(obj) {

			obj.setAttribute('title','');
			pDomApi.getElementsByClassName('vote','div', obj)[0].style.visibility = 'hidden';
			var stars = pDomApi.getElementsByClassName('infoItemVote','a', obj);

			for ( var i = 0; i < stars.length; i++) {
				pDomApi.removeEvent(stars[i], 'mouseover', voteHandler.hover);
				pDomApi.removeEvent(stars[i], 'mouseout', voteHandler.restore);
				pDomApi.removeEvent(stars[i], 'click', voteHandler.vote);
				stars[i].style.cursor = 'default';
			}
		},
		vote: function(e) {

			var obj = getTarget(e);

			voteHandler.blinkObj = obj;

			var vote = obj.getAttribute("rel");
			var parent = obj.parentNode;

			while ( parent.nodeName != 'DIV' ) {
				parent = parent.parentNode;
			}

			var id 	 = parent.id.replace("item","");

			$.post('/portal/info-item/submit-vote.cmd', {id: id, vote: vote},
					function (response, status) {

						if (status == 'success') {

							if ( response.error.length > 0 ) {
								var error = '';

								for ( var i = 0; i < response.error.length ; i++ ) {
									error += response.error[i] + "\n";
								}
								alert(error);
							}

							if ( response.message.length > 0 ) {

								var message = '';
								for ( var i = 0; i < response.message.length ; i++ ) {
									message += response.message[i] + "\n";
								}
								alert(message);
							}

							// only when a rating is posted successfully a new score is returned
							if ( response.score != undefined ) {

								// update the rating
								
								var el = eId('item' + response.id);
								var stars = el.getElementsByTagName('OL')[0];
								pDomApi.removeEvent(stars, 'mouseover', voteHandler.hover);
								pDomApi.removeEvent(stars, 'mouseout', voteHandler.restore);
								
								var stars = pDomApi.getElementsByClassName(
											'infoItemVote', 'a', el);
								for ( var i = 0 ; i < stars.length; i++ ) {

									if ( i < response.vote ) {
										pDomApi.setClassName(stars[i], 'active', '');
									} else {
										pDomApi.setClassName(stars[i], '', 'active');
									}
								}

								parent.score = response.score;
								voteHandler.blinker = 8;
								voteHandler.blinkTimeout = 100;
								voteHandler.blinkState = false;
								voteHandler.blink(obj);

							}
						}
				   },
				   "json"
			);
		}
}

pDomApi.addEvent(window,'domload', function() {

	actionAttacher.addTagEvent(
			new PrezentDomApi.TagEvent(	'a', 'infoItemVote', 'click', voteHandler.vote));

	actionAttacher.addTagEvent(
			new PrezentDomApi.TagEvent(	'a', 'nonVoteable', 'click', voteHandler.vote));

	if ( pDomApi.getElementsByClassName('voteable', 'ol', document).length > 0) {

		actionAttacher.addTagEvent(
				new PrezentDomApi.TagEvent(	'a', 'infoItemVote', 'mouseover', voteHandler.hover));

		actionAttacher.addTagEvent(
				new PrezentDomApi.TagEvent(	'a', 'infoItemVote', 'mouseout', voteHandler.restore));
	}
	actionAttacher.attach();
});
