var starOff = new Image(16, 18);
starOff.src = "/images/fanzone/ic_ratingstaroff.gif";
var starOn = new Image(16, 18);
starOn.src = "/images/fanzone/ic_ratingstaron.gif";
var joinEvent = new Image(200, 34);
joinEvent.src="/images/bt_illbethere.gif";
var leaveEvent = new Image(200, 34);
leaveEvent.src = "/images/bt_illbethere.gif";
var MAX_COMMENT_LINES = 10;
var active = 1;
var score = 0;
var contributionId = 0;
var showingUploadForm = 0;
var newwin;
var W3CDOM = (document.createElement && document.getElementsByTagName);
function drawRatingPanel(thisScore, isActive, thisContributionId){
	var panel = document.getElementById('ratingPanel');
	active = isActive;
	score = thisScore;
	contributionId = thisContributionId;
	panel.innerHTML = "";
	if (!W3CDOM) return;
	for (var i=1; i<=5; i++)
		panel.appendChild(drawRatingStar(i, score, active));
}
function addEvent(obj, evType, fn){ 
 if (obj.addEventListener){ 
   obj.addEventListener(evType, fn, false); 
   return true; 
 } else if (obj.attachEvent){ 
   var r = obj.attachEvent("on"+evType, fn); 
   return r; 
 } else { 
   return false; 
 } 
}
function launchwin(winurl,winname,winfeatures)
{
	newwin = window.open(winurl,winname,winfeatures);
	if(javascript_version > 1.0){
 		setTimeout('newwin.focus();',250);
	}
}
function drawRatingStar(starScore, score, active){
	var star = document.createElement('img');
	star.name = '_' + starScore;
	star.id = '_' + starScore;
	star.alt = score;

	if (active){
		star.src = starOff.src;
		star.onmouseover = overStar;
		star.onclick = sendRating;
	}
	else if (score >= starScore){
		star.src = starOn.src;
		star.onclick = setActive;
	}
	else{
		star.src= starOff.src;
		star.onclick = setActive;
	}
	return star;
}
function getAverageRating(){
	j.get('/actions/fanzone/contribution.do', {ajax:'true', method:'getAverageRating', contributionId:contributionId}, drawAvRating);
}
function drawAvRating(data, status){
	if (status != 'success'){
		alert("Oops, something went wrong, please try again");
		return;
	}
	var panel = document.getElementById('averageRatingPanel');
	var score = Number(data);
	while(panel.hasChildNodes() == true)
		panel.removeChild(panel.childNodes[0]);
	for (var i=1; i<=score; i++)
		panel.appendChild(drawAvRatingStar(i))
}
function drawAvRatingStar(starScore, score){
	var star = document.createElement('img');
	star.style.paddingRight = '3px';
	star.alt = score;
	star.src = starOn.src;
	return star;
}
function setActive(){
	j('#rateMessage').html('Rate this image:');
	drawRatingPanel(score, 1, contributionId);
}
function overStar(event){
	var image;
	var MAX_STARS = 5;
	if (active == 0)
		return;
	var star = new Number(this.name.substring(1));
	j('#ratingPanel').css('backgroundColor', '#C8DBFC');
	for(var i=1; i<=star; i++){
		j('#_' + i).attr('src', starOn.src);
	}
	if (star < MAX_STARS){
		for (var i=star+1; i<=MAX_STARS;i++){
			j('#_' + i).attr('src', starOff.src);
		}
	}
}
function fadePanel(event){
	if (event){
		var newEl=event.relatedTarget||event.toElement;
		if(newEl.tagName == "IMG")
			return true;
	}
	if (active == 1)
		drawRatingPanel(0, 1, contributionId);
	j('#ratingPanel').animate({'backgroundColor': '#ffffff'}, 1000);
}
function sendRating(event){
	if (active == 0) return;
	
	score = this.name.substring(1);
	active = 0;
	indicateLoadingIcon();
	j.get('/actions/fanzone/contribution.do', {ajax:'true', method:'rateItem', contributionId: contributionId, rating:score },
			ratingSuccess);
}

function indicateLoadingIcon(){
	j('#rateMessage').html('Saving Rating');
	toggleIcon(j('#loadingIcon'));
}
function hideIcon(){
	var icon = j('#loadingIcon');
	if (icon.length > 0){
		icon.css('cursor', 'auto');
		icon.css('display', 'none');
	}
}

function toggleIcon(icon){
	if (icon.length > 0){
		icon.css('cursor', 'wait');
		if (icon.css('display') == 'none')
			icon.css('display', 'inline');
		else
			icon.css('display', 'none');
	}
}

j(document).ready(function(){
	
	j('#ratingPanel').hover(
		function(){
			j(this).animate({'backgroundColor': '#C8DBFC'}, 300);
		},
		function(){
			j(this).animate({'backgroundColor': '#ffffff'}, 1000);
		}
	);
	
	j('#postComment').click(function(){
		var value = trim(document.commentForm.comment.value); 
		if (value.length == 0)
			return false;
		
		toggleIcon(j('#commentLoadingIcon'));

		var id = encodeURIComponent(document.commentForm.contributionId.value);
		var comment = encodeURIComponent(document.commentForm.comment.value);
		j.get('/actions/fanzone/contribution.do', {ajax:'true', method:'addComment', contributionId: id, comment:comment},
			function(data, textStatus){	
				var commentBlock = j('#newCommentBlock');
				var newComment = drawCommentBlock(data);
				commentBlock.append(newComment);
				document.commentForm.comment.value = '';
				var icon = j('#commentLoadingIcon');
				if (icon.length > 0){
					icon.css('cursor', 'auto');
					icon.css('display', 'none');
				}
				j(newComment).slideDown('slow');
		}, 'xml');
		
		return false;
	});
});
/**
Renders the newly added comment block after the xml is returned.
*/
var drawCommentBlock = function(data){
	var profileName = getNodeValue(data, 'name');
	var userId = getNodeValue(data, 'userId');
	var profileLink = '/actions/fanzone/profile.do?method=viewProfile&userId=' + userId;
	var newComment = document.createElement('div');
	newComment.className = 'commentBlock';
	newComment.style.display = 'none'; // keep it hidden for now..
	
	var table = document.createElement('table');
	table.cellSpacing = '0';
	table.cellPadding = '0';
	var tBody = document.createElement('tbody');
	
	var row = document.createElement('tr');
	var avCell = document.createElement('td');
	avCell.className = 'smallAvatar';
	
	var avLink = document.createElement('a');
	avLink.href = profileLink;
	
	var avImg = document.createElement('img');
	avImg.src = '/fanzone/avatar/' + userId + '.img';
	avLink.appendChild(avImg);
	
	avCell.appendChild(avLink);
	row.appendChild(avCell);
	
	var textCell = document.createElement('td');
	
	var header = document.createElement('h5');
	header.style.margin= '0';
	var hdrLink = document.createElement('a');
	hdrLink.href = profileLink;
	var headerText = document.createTextNode(profileName);
	hdrLink.appendChild(headerText);
	header.appendChild(hdrLink);
	var said = document.createTextNode(' said:');
	header.appendChild(said);
	textCell.appendChild(header);
	
	var comment = document.createElement('p');
	comment.style.marginTop = '0';
	var strings = getNodeValue(data, 'comment').split('\n');
	var commentArray = new Array(strings.length);
	var brArray = new Array(strings.length);
	for (var i=0;i<strings.length; i++){	
		commentArray[i] = document.createTextNode(strings[i]);
		comment.appendChild(commentArray[i]);
		brArray[i] = document.createElement('br');
		comment.appendChild(brArray[i]);
	}
	textCell.appendChild(comment);
	row.appendChild(textCell);
	tBody.appendChild(row);
	table.appendChild(tBody);
	newComment.appendChild(table);
	return newComment
}
var getNodeValue = function(tree, el){
    return tree.getElementsByTagName(el)[0].firstChild.nodeValue;
}
var ratingSuccess = function(data, status){
	hideIcon();
	if (status != 'success'){
		alert('Sorry, an error occurred while processing your request.\nPlease try again later.');
		return;
	}
	j('#rateMessage').html('Your Rating:');
	
	drawRatingPanel(score, 0, contributionId);
	getAverageRating();
	fadePanel();
}

function unhighlightImage(){
	if (showingUploadForm == 1)
		return;
	var element = j('#avatarContainer');
	element.css('border', '5px solid #FFFFFF');
	element.css('backgroundColor', '#FFFFFF');
}
function highlightImage(){
	var element = j('#avatarContainer');
	element.css('border', '5px solid #C8DBFB');
	element.css('backgroundColor', '#C8DBFB');
	element.attr('title', 'Click to upload a new file.');
}
function showUploadForm()
{
	j('#uploadAvatarPanel').css('display', 'block');
	showingUploadForm = 1;
}
function initFileUploads() {
	if (!W3CDOM) return;
	var fakeFileUpload = document.createElement('div');
	fakeFileUpload.className = 'fakefile';
	fakeFileUpload.appendChild(document.createElement('input'));
	var image = document.createElement('img');
	image.src='/images/fanzone/bt_browse.gif';
	fakeFileUpload.appendChild(image);
	var x = document.getElementsByTagName('input');
	for (var i=0;i<x.length;i++) {
		if (x[i].type != 'file') continue;
		if (x[i].parentNode.className != 'fileinputs') continue;
		x[i].className = 'file hidden';
		var clone = fakeFileUpload.cloneNode(true);
		x[i].parentNode.appendChild(clone);
		x[i].relatedElement = clone.getElementsByTagName('input')[0];
		x[i].onchange = x[i].onmouseout = function () {
			this.relatedElement.value = this.value;
		}
	}
}
function hasAjax(){
	if  (window.XMLHttpRequest)
    	return true;
    return false;
}
/* Upload form validation */
var termsConditionsNotAccepted = function(){
	return showUploadError('Please make sure you have read and agree with the terms and conditions of entry.');
}
var noFilesSelected = function(){
	return showUploadError('Please select at least one file to upload.');
}
var showUploadError = function(errorText){
	j('#uploadError').html(errorText);
	var panel = j('#uploadErrorPanel');
	panel.css('display', 'block');
	return false;
}
/* Form file upload progress */
function refreshProgress(){
    UploadMonitor.getUploadInfo(updateProgress);
}
function updateProgress(uploadInfo){
    if (uploadInfo.inProgress){
        var fileIndex = uploadInfo.fileIndex;
        var progressPercent = Math.ceil((uploadInfo.bytesRead / uploadInfo.totalSize) * 100);
        j('#progressBarBoxContent').css('width', parseInt(progressPercent * 4.39) + 'px');
        window.setTimeout('refreshProgress()', 1000);
    }
    return true;
}
function startProgress(){
    j('#progressBar').css('display', 'block');
    // wait a little while to make sure the upload has started ..
    window.setTimeout("refreshProgress()", 1500);
    return true;
}
function hideProgressBar(){
    j('#progressBar').css('display', 'none');
}
function UploadMonitor() { }
      UploadMonitor._path = '';
      UploadMonitor.getUploadInfo = function(callback) {
      DWREngine._execute(UploadMonitor._path, 'UploadMonitor', 'getUploadInfo', callback);
}
/* Functions for creating Fanzone profiles */
function suggestName(){
	j('#loadingImage').css('display', 'inline');
	var firstName = "";
	try
	{firstName = document.registerForm.firstName.value;} catch(e){}
	
	j.get('/actions/fanzone/profile.do', {ajax:'true', method:'suggestName', firstName:firstName}, nameSuccess);
	return false;
}
var nameSuccess = function(data, status) {
	j('#loadingImage').css('display', 'none');
	if (status != 'success'){
		alert('Sorry, an error occurred while processing your request.\nPlease try again later.');
		return;
	}
	
	j('#profileName').val(data);
}

function trim(s){
   	while ((s.substring(0,1) == ' ') || (s.substring(0,1) == '\n') || (s.substring(0,1) == '\r'))
   	 { s = s.substring(1,s.length); }
 	while ((s.substring(s.length-1,s.length) == ' ') || (s.substring(s.length-1,s.length) == '\n') || (s.substring(s.length-1,s.length) == '\r'))
   	 { s = s.substring(0,s.length-1); } 
   	return s;
}
var addUserToEvent = function(eventId, pageoffset){
	var params = 'ajax=true&method=addUser&eventId='+eventId;
	if (pageoffset.length > 0)
		params = params + '&pager.offset=' + pageoffset;
	j('#userUpdatePanel').load('/actions/fanzone/events.do', {ajax:'true', method:'addUser', eventId: eventId}, eventAddUserSuccess);
	return false;
}
var removeUserFromEvent = function(eventId, pageoffset){
	var params = 'ajax=true&method=removeUser&eventId='+eventId;
	if (pageoffset.length > 0)
		params = params + '&pager.offset=' + pageoffset;
	j('#userUpdatePanel').load('/actions/fanzone/events.do', {ajax:'true', method:'removeUser', eventId: eventId}, eventRemoveUserSuccess);
	return false;
}
var eventRemoveUserSuccess = function(data, status){
	if (status != 'success'){
		alert('Sorry, an error occurred while processing your request.\nPlease try again later.');
		return;
	}
	var lastUser = j('#user30');
	if (lastUser.length > 0)
		setTimeout("j('#user30').fadeIn('slow')", 1000);

	new j('#user0').fadeOut('slow');
	
	j('#userUpdatePanel').html(data);
}
var eventAddUserSuccess = function(data, status){
	if (status != 'success'){
		alert('Sorry, an error occurred while processing your request.\nPlease try again later.');
		return;
	}
	var beFirst = j('#beFirstSpan');
	if (beFirst.length > 0)
		beFirst.css('display', 'none');
		
	var lastUser = j('#user30');
	if (lastUser.length > 0){
		setTimeout("new j('#user0').fadeIn('slow')", 1000);
		j(lastUser).fadeOut('slow');
	}
	else
		j('#user0').fadeIn('slow');
		
	j('#userUpdatePanel').html(data);
}

