var CompetitionEngine = {
	
	zipcode_wrong: "",
	phone_wrong: "",
	field_wrong: "",
	email_wrong: "",
	terms_wrong: "",
	field_printed: false,
	
	validate_entry_form: function(form) {
		
	},
	
	showLoader: function(){
		$('userEntry').update('<div id="loader"></div>');
		$('voteTool').update('');
	},
	
	showGrid: function(type, amount, shownick, competition_id, showrank) {
		new Ajax.Updater('entryGrid', '/campaign/ce_backend.php', 
				{ method: 'post', evalScripts: true, parameters: {c_action: 'showgrid', type: type, amount: amount, shownick: shownick, competition_id: competition_id, showrank: showrank} });
				
		tabs = new Array('top', 'least', 'random', 'own', 'newest');
		
		for (i=0; i<tabs.size(); i++) {
			if ($('nav_item_'+tabs[i])) {
				$('nav_item_'+tabs[i]).removeClassName('selected');
				if (type == tabs[i]) {
					$('nav_item_'+tabs[i]).addClassName('selected');
				}
			}
		}
		
	},
	
	showGridAlphabet: function(character, competition_id) {
		new Ajax.Updater('entryGrid', '/campaign/ce_backend.php', 
				{ method: 'post', evalScripts: true, parameters: {c_action: 'showgrid', type: character, competition_id: competition_id, alphabet: 'true'} });
	},
	
	showEntry: function(user_entry_id, competition_id, showrank) {
		new Ajax.Updater('userEntry', '/campaign/ce_backend.php', 
				{ method: 'post', evalScripts: true, parameters: {c_action: 'showentry', competition_id: competition_id, entry_id: user_entry_id, showrank: showrank} });
		
		new Ajax.Updater('voteTool', '/campaign/ce_backend.php', 
				{ method: 'post', parameters: {c_action: 'votetool', competition_id: competition_id, entry_id: user_entry_id} });
		
		bm_elem = $('bookmarkLinks');
		if (bm_elem) {
			cid_elem = $('competition_channel_id');
			cn_elem = $('competition_campaign_name');
			if (cid_elem) {
				channel_id = $F('competition_channel_id');
			} else {
				channel_id = 0;
			}
			if (cn_elem) {
				campaign_name = $F('competition_campaign_name');
			} else {
				campaign_name = '';
			}
			new Ajax.Updater('bookmarkLinks', '/campaign/ce_backend.php', 
				{ method: 'post', parameters: {c_action: 'socialbookmarks', competition_id: competition_id, entry_id: user_entry_id, channel_id: channel_id, campaign_name: campaign_name} });
		}
		
		pl_elem = $('permalinkarea');
		if (pl_elem) {
			cid_elem = $('competition_channel_id');
			if (cid_elem) {
				channel_id = $F('competition_channel_id');
			} else {
				channel_id = 0;
			}
			new Ajax.Updater('permalinkarea', '/campaign/ce_backend.php', 
				{ method: 'post', parameters: {c_action: 'permalink', competition_id: competition_id, entry_id: user_entry_id, channel_id: channel_id} });
		}
				
		$('entryContainer').appear({ duration: 0.3 });
		$('denunciationBox').innerHTML = '';
		
	},
	
	closeEntry: function(user_entry_id) {
		CompetitionEngine.showLoader();
		$('entryContainer').fade({ duration: 0.3 });
	},
	
	voteGood: function(user_entry_id, lk, competition_id, post_vote_action) {
		new Ajax.Request('/campaign/ce_backend.php', 
			{ method: 'post', parameters: {c_action: 'submit_user_vote_good', competition_id: competition_id, competition_user_entry_id: user_entry_id, post_vote_action: post_vote_action, lk: lk}, onSuccess: handleResponse });
			
		function handleResponse(originalRequest) {
			new_entry_id = originalRequest.responseText;
			if ($('entryContainer')) {
				CompetitionEngine.showEntry(new_entry_id, competition_id);
			} else {
				$('voteTool'+user_entry_id).innerHTML = 'Kiitos äänestäsi!';
			}
		}
	},
	
	voteBad: function(user_entry_id, lk, competition_id, post_vote_action) {
		new Ajax.Request('/campaign/ce_backend.php', 
			{ method: 'post', parameters: {c_action: 'submit_user_vote_bad', competition_id: competition_id, competition_user_entry_id: user_entry_id, post_vote_action: post_vote_action, lk: lk}, onSuccess: handleResponse });
			
		function handleResponse(originalRequest) {
			new_entry_id = originalRequest.responseText;
			if ($('entryContainer')) {
				CompetitionEngine.showEntry(new_entry_id, competition_id);
			} else {
				$('voteTool'+user_entry_id).innerHTML = 'Kiitos äänestäsi!';
			}
		}
	},
	
	pausecomp: function(millis) {
		var date = new Date();
		var curDate = null;

		do { curDate = new Date(); } 
			while(curDate-date < millis);
	},
	
	voteEntry: function(user_entry_id, value, lk, competition_id, vote_item_id, post_vote_action) {
		
		new Ajax.Request('/campaign/ce_backend.php', 
			{ method: 'post', parameters: {c_action: 'submit_user_vote', competition_id: competition_id, competition_user_entry_id: user_entry_id, vote_value: value, vote_item_id: vote_item_id, post_vote_action: post_vote_action, lk: lk}, onSuccess: handleResponse });
			
		function handleResponse(originalRequest) {
			new_entry_id = originalRequest.responseText;
			if ($('entryContainer')) {
				CompetitionEngine.showEntry(new_entry_id, competition_id);
			} else {
				$('voteTool'+user_entry_id).innerHTML = 'Kiitos äänestäsi!';
			}
		}
	},
	
	nextEntry: function(user_entry_id, type, competition_id) {
		CompetitionEngine.showLoader();
		new Ajax.Request('/campaign/ce_backend.php', {
	    	method: 'post',
	    	parameters: { c_action: 'nextentry', competition_id: competition_id, entry_id: user_entry_id, type: type },
		    onSuccess: handleResponse
		});
		
		function handleResponse(originalRequest) {
			new_entry_id = originalRequest.responseText;
			CompetitionEngine.showEntry(new_entry_id, competition_id);
		}
	},
	
	prevEntry: function(user_entry_id, type, competition_id) {
		CompetitionEngine.showLoader();

		new Ajax.Request('/campaign/ce_backend.php', {
	    	method: 'post',
	    	parameters: { c_action: 'preventry', competition_id: competition_id, entry_id: user_entry_id, type: type },
		    onSuccess: handleResponse
		});
		
		function handleResponse(originalRequest) {
			new_entry_id = originalRequest.responseText;
			CompetitionEngine.showEntry(new_entry_id, competition_id);
		}
	},
	
	randomEntry: function(competition_id) {
		CompetitionEngine.showLoader();

		new Ajax.Request('/campaign/ce_backend.php', {
	    	method: 'post',
	    	parameters: { c_action: 'randomentry', competition_id: competition_id },
		    onSuccess: handleResponse
		});
		
		function handleResponse(originalRequest) {
			new_entry_id = originalRequest.responseText;
			CompetitionEngine.showEntry(new_entry_id, competition_id);
		}
	},
	
	denunciateEntry: function(user_entry_id, competition_id) {
		$('denunciationBox').show();
		new Ajax.Updater('denunciationBox', '/campaign/ce_backend.php', 
				{ method: 'post', parameters: {c_action: 'denunciationbox', competition_id: competition_id, entry_id: user_entry_id} });
	},
	
	deleteOwnEntry: function(user_entry_id, competition_id, nicks, ranks) {
		$('delete_entry').show();
		new Ajax.Updater('delete_entry', '/campaign/ce_backend.php', 
				{ method: 'post', parameters: {c_action: 'deletebox', competition_id: competition_id, entry_id: user_entry_id, nicks:nicks, ranks: ranks} });
	},
	
	rating: function(star, user_entry_id) {
		for( n=1; n<=star; n++ ){
			if(!$('rating'+n+user_entry_id).hasClassName('full')){
				$('rating'+n+user_entry_id).toggleClassName('full');
			}
		}
	},

	off: function(max, user_entry_id) {
		for( n=1; n<=max; n++ ){
			if($('rating'+n+user_entry_id).hasClassName('full')){
				$('rating'+n+user_entry_id).removeClassName('full');
			}
		}
	},
	
	contactInfoNotification: function(text) {
		if (text) {
			$('form_notifications').show();		
			$('form_notifications').innerHTML += text + '<br/>';
		}
	},
	
	validateContactInfoField: function(field, value) {
		switch (field) {
			case 'first_name':
			case 'last_name':
			case 'ziparea':
			case 'address':
				reg = /[\s\D\d]/;
				ret = reg.test(value);
				if (!ret && !CompetitionEngine.field_printed) {
					CompetitionEngine.contactInfoNotification(CompetitionEngine.field_wrong);
					CompetitionEngine.field_printed = true;
				}
				return ret;
				break;
				
			case 'zipcode':
				reg = /^\d{5}([\-]\d{4})?$/;
				ret = reg.test(value);
				if (!ret) {
					CompetitionEngine.contactInfoNotification(CompetitionEngine.zipcode_wrong);
				}
				return ret;
				break;
							
			case 'phone':
				reg = /^\d{2,}[\d]|[-+]|[\s]$/;
				ret = reg.test(value);
				if (!ret) {
					CompetitionEngine.contactInfoNotification(CompetitionEngine.phone_wrong);
				}
				return ret;
				break;
			
			case 'email_address':
				reg = /^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/;
				ret = reg.test(value);
				if (!ret) {
					CompetitionEngine.contactInfoNotification(CompetitionEngine.email_wrong);
				}
				return ret;
				break;
		}
	},
	
	submitEntry: function() {
		
		$('form_notifications').innerHTML = '';
		CompetitionEngine.field_printed = false;
			
		fields = new Array('first_name', 'last_name', 'address', 'zipcode', 'ziparea', 'phone', 'email_address');
		error = false;
		
		for (i=0; i<fields.size(); i++) {
			name = fields[i];
			if ($('input_' + name)) {
				value = $F('input_' + fields[i]);
				$(fields[i]).setStyle({
  					color: '#FFF'
  				});
				if (!value) {
					$(fields[i]).setStyle({
  						color: '#900'
  					});
  					error = true;
				}
				if (!CompetitionEngine.validateContactInfoField(name, value)) {
					$(fields[i]).setStyle({
  						color: '#900'
  					});
  					error = true;
				}
			}
		}
		
		if ($('approveterms')) {
			$('approveterms').setStyle({
  				color: '#FFF'
  			});
  			if ($('approve_terms_checkbox').checked == false) {
				$('approveterms').setStyle({
  					color: '#900'
  				});
  				error = true;
				CompetitionEngine.contactInfoNotification(CompetitionEngine.terms_wrong);
			}
		}
		
		if (!error) {
			new Ajax.Updater('participation_area', '/campaign/ce_backend.php', 
				{ method: 'post', parameters: $('user_entry_form').serialize() });
				
			//window.location = 'channel.php?channel_id=' + $F('redir_id');
		}
	},
	
	nextPage: function(competition_id, amount, type, shownicks, grid_page, showranks) {
		new Ajax.Updater('entryGrid', '/campaign/ce_backend.php', 
				{ method: 'post', parameters: {c_action: 'gridnextpage', competition_id: competition_id, amount: amount, type: type, shownicks: shownicks, grid_page: grid_page, showranks: showranks} });
		
	},
	
	prevPage: function(competition_id, amount, type, shownicks, grid_page, showranks) {
		new Ajax.Updater('entryGrid', '/campaign/ce_backend.php', 
				{ method: 'post', parameters: {c_action: 'gridprevpage', competition_id: competition_id, amount: amount, type: type, shownicks: shownicks, grid_page: grid_page, showranks: showranks} });
				
	},
	
	sendDenunciation: function() {
		new Ajax.Updater('denunciationBox', '/campaign/ce_backend.php', 
				{ method: 'post', parameters: $('denunciationform').serialize() });
	},
	
	closeDenunciationBox: function() {
		$('denunciationBox').hide();
	},
	
	removeEntry: function(entry_id, lk, competition_id, shownick, showrank) {
		new Ajax.Updater('entryGrid', '/campaign/ce_backend.php', 
				{ method: 'post', parameters: {c_action: 'remove_own_entry', entry_id: entry_id, lk: lk, competition_id: competition_id, shownicks: shownick, showranks: showrank} });
		
		$('entryContainer').hide();
		
	},
	
	clearTextArea: function() {
		$('text_entry').value = '';
	},
	
	submitVideo: function() {
		$('entry_video_form').request();
		return true;
	},
	
	submitQuestionAnswers: function() {
		
		$('form_notifications').innerHTML = '';
		$('form_notifications').hide();	
		CompetitionEngine.field_printed = false;
			
		fields = new Array('first_name', 'last_name', 'address', 'zipcode', 'ziparea', 'phone', 'email_address');
		error = false;
		
		for (i=0; i<fields.size(); i++) {
			name = fields[i];
			if ($('input_' + name)) {
				value = $F('input_' + fields[i]);
				
				$(fields[i]).removeClassName('error');
				if (!value) {
					$(fields[i]).addClassName('error');
  					error = true;
				}
				if (!CompetitionEngine.validateContactInfoField(name, value)) {
					$(fields[i]).addClassName('error');
  					error = true;
				}
			}
		}
		
		if ($('approveterms')) {
			$('approveterms').removeClassName('error');
  			if ($('approve_terms_checkbox').checked == false) {
				$('approveterms').addClassName('error');
  				error = true;
				CompetitionEngine.contactInfoNotification(CompetitionEngine.terms_wrong);
			}
		}
		
		if (!error) {
			new Ajax.Updater('participation_area', '/campaign/ce_backend.php', 
				{ method: 'post', parameters: $('questionsubmit').serialize() });
		}
	},
	
	newPicLink: function(channel_id) {
		if (channel_id) {
			window.location = '/community/' + channel_id;
		}
	},
	
	contactInfoForm: function() {
		new Ajax.Updater('participation_area', '/campaign/ce_backend.php', 
				{ method: 'post', parameters: { c_action: 'contact_info_form' } });
	},
	
	imageForm: function() {
		$('videoform').hide();
		$('imageform').show();
	},
	
	videoForm: function() {
		$('imageform').hide();
		$('videoform').show();
	},
	
	saveTeam: function(lk, competition_id, channel_id) {
		name = $F('team_name');
		if (name) {
			new Ajax.Updater('teamcomparea', '/campaign/ce_team_backend.php', 
				{ method: 'post', parameters: { action: 'save_team', lk: lk, team_name: name, competition_id: competition_id, channel_id: channel_id } });
				
		}
	},
	
	acceptInvite: function(team_id, lk) {
		new Ajax.Updater('teamcomparea', '/campaign/ce_team_backend.php', 
			{ method: 'post', parameters: { action: 'accept_invite', team_id: team_id, lk: lk } });
	},
	
	rejectInvite: function(team_id, lk) {
		new Ajax.Updater('teamcomparea', '/campaign/ce_team_backend.php', 
			{ method: 'post', parameters: { action: 'reject_invite', team_id: team_id, lk: lk } });
	},
	
	sendInvite: function(lk, competition_id, team_id, channel_id) {
		nick = $F('invite_nick');
		if (nick) {
			new Ajax.Updater('sendinviteform', '/campaign/ce_team_backend.php', 
				{ method: 'post', parameters: { action: 'send_invite', lk: lk, invite_nick: nick, competition_id: competition_id, team_id: team_id, channel_id: channel_id } });
		}
	},
	
	sendEmailInvite: function(lk, competition_id, team_id, channel_id) {
		email = $F('invite_team_email');
		if (email) {
			new Ajax.Updater('sendinviteform', '/campaign/ce_team_backend.php', 
				{ method: 'post', parameters: { action: 'send_email_invite', lk: lk, invite_email: email, competition_id: competition_id, team_id: team_id, channel_id: channel_id } });
		}
	},
	
	blockInvites: function(competition_id) {
		new Ajax.Updater('blockinvites', '/campaign/ce_team_backend.php', 
			{ method: 'post', parameters: { action: 'block_invites', competition_id: competition_id } });
	},
	
	unblockInvites: function(competition_id) {
		new Ajax.Updater('blockinvites', '/campaign/ce_team_backend.php', 
			{ method: 'post', parameters: { action: 'unblock_invites', competition_id: competition_id } });
	},
	
	leaveTeam: function(team_id, lk) {
		new Ajax.Updater('teamcomparea', '/campaign/ce_team_backend.php', 
			{ method: 'post', parameters: { action: 'leave_team', team_id: team_id, lk: lk } });
	},
	
	showTeamInvite: function(competition_id, team_id, channel_id) {
		//$('sendinvite').innerHTML = '';
		
		new Ajax.Updater('sendinvite', '/campaign/ce_team_backend.php', 
			{ method: 'post', parameters: { action: 'show_invite', team_id: team_id, competition_id: competition_id, channel_id: channel_id } });
	},
	
	kickMember: function(member_uid, team_id, competition_id) {
		new Ajax.Updater('ownteam_area', '/campaign/ce_team_backend.php', 
			{ method: 'post', parameters: { action: 'kick_member', team_id: team_id, member_uid: member_uid, competition_id: competition_id } });
	},
	
	browseTeams: function(character, competition_id) {
		new Ajax.Updater('teambrowse_area', '/campaign/ce_team_backend.php', 
			{ method: 'post', parameters: { action: 'get_teams_by_char', competition_id: competition_id, character: character } });
	},
	
	forceTeam: function(team_id) {
		new Ajax.Updater('team'+team_id, '/campaign/ce_team_backend.php', 
			{ method: 'post', parameters: { action: 'force_team', team_id: team_id } });
	},
	
	updateTeamName: function(team_id, competition_id, channel_id) {
		new_team_name = $F('new_team_name'+team_id);
		if (new_team_name) {
			new Ajax.Updater('teamcomparea', '/campaign/ce_team_backend.php', 
			{ method: 'post', parameters: { action: 'new_team_name', new_team_name: new_team_name, team_id: team_id, competition_id: competition_id, channel_id: channel_id } });
		}
	}
};
