$(document).ready(function() {initFunctions();});

/**
* Initialisoidaan tarvittavat funktiot etc
*/
function initFunctions() {
	// kommenttien lisäys
	commentHandler();

	// avataan popupit
	popup.init();
	freePopup.init();

	// seurataan hiirtä
	mousemove();

	showContents();

	movie.init();

	// mahdollistetaan linkeissä youtube popupvideot
	youtubePopup();

	// asetetaan focus kirjautumislaatikolle
	$("#loginUsername").focus();

	// tagien hallinta
	tags();

	// forumi
	forum.init();
}

// määritetään selainruudun korkeus myöhempää käyttöä varten
var screenHeight = $(window).height();

freeTimer = false;


function youtubePopup() {

	$("a.movieLink span.youtube_popup").livequery("click", function() {

		// suljetaan avoinna olevat popupit, ettei turhaan jää palloilemaan
		popup.close();

		var re = new RegExp(/[0-9]+/);
		var id = re.exec($(this).parent().attr("href"));
		var content = loading();

		$.ajax({
			url: '/misc/youtube.php?id=' + id,
			success: function(t) {
				openYoutubePopup(t);
			},
			error: function() {
				youtubePopupError();
			}
		});

		freePopup.pop(content, true);

		return false;
	});

	$("img.yt_ajax").livequery("click", function() {

		// suljetaan avoinna olevat popupit, ettei turhaan jää palloilemaan
		popup.close();


		var id = $(this).parent().attr("class").replace("yt__", "");

		var content = loading();

		$.ajax({
			url: '/misc/youtube.php?ytid=' + id,
			success: function(t) {
				openYoutubePopup(t);
			},
			error: function() {
				youtubePopupError();
			}
		});

		freePopup.pop(content, true);

		return false;
	});

}

function openYoutubePopup(t) {
	if(t.length == 0) {
		freePopup.pop("Valitettavasti tälle elokuvalle ei YouTubesta löytynyt videota.")
		freePopup.updateHeight();
	} else {
		freePopup.pop(t);
		freePopup.updateHeight();
		freePopup.updateWidth(680);
		freePopup.updatePosition();
		//$('.freePopup .popupcontenthtml').css({height: ($(".freePopup .popupcontenthtml").height()+25) + 'px'});
	}
}
function youtubePopupError() {

	freePopup.pop("Valitettavasti tälle elokuvalle ei YouTubesta löytynyt videota.")
	freePopup.updateHeight();
}



/**
* Tagien hallinta, tällä hetkellä vain lisäys
*/
function tags() {
	$("#addTag").submit(function() {
		$.ajax({
			url: '/misc/tags.php?add=1&ajax=1',
			type: "POST",
			data: $(this).serialize(),
			success: function(t) {
				$(".tagList").html(t);
			}
		});

		$("input#tagText").val('');

		return false;
	});
}


/* Kommenttien lähetys */
function commentHandler() {

	$("#commentAdd").livequery("submit", function() {
		$.ajax({
			url: '/misc/comment.php?add=1&ajax=1',
			type: "POST",
			data: $(this).serialize(),
			success: function(t) {
				$("#commentArea").html(t);
			},
			error: function() {
				alert("Jostain syystä kommentin tallentaminen epäonnistui");
			}
		});

		$("#commentAdd input#comment").val('');

		return false;
	});


	$("input#deleteComment").livequery("click", function() {
		freePopup.close();

		// tarkistetaan luokasta id
		var id = $(this).attr("class");

		// lisätään elokuva ajaxilla
		$.ajax({
			url: "/misc/handlecomments.php?do=deleteComment&ajax=1&commentid=" + id,
			success: function(html) {

				$("div#comment" + id).fadeOut();
				freePopup.pop('<b>Kommentti on poistettu.</b>');
			},
			error: function() {
				freePopup.pop('<b>Kommentin poisto epäonnistui!</b>');
			}
		});

		freeTimer = setTimeout("freePopup.close()", 1500);
		return false;
	});

	$("a.commentDelete").livequery("click", function() {
		clearTimeout(freeTimer);
		var id = $(this).attr("href").replace("/misc/handlecomments.php?do=deleteComment&commentid=", "");


		freePopup.pop('Oletko aivan varma että haluat poistaa tämän kommentin?<br />' +
		'<form>' +
		'<input type="submit" id="deleteComment" class="' + id + '" value="Poista kommentti" /> - ' +
		'<input type="submit" id="cancelButton" value="Peruuta" />' +
		'</form>');

		return false;
	});
}

/**
* Näytetään latauskuvake
*
*/
function loadingError(error) {
	$("div#loading").html('<p style="height: 50px;" class="centered">' + error + '</p>');
}
/**
* Näytetään latauskuvake
*
*/
function loading() {
	return '<div id="loading"><p class="centered"><img src="/static/gfx/ajax-loader.gif" class="noborder" alt="Loading.." border="0" /></p></div>';
}


/**
* Peruutetaan toiminto, suljetaan boksi
*/
$("a.closeFreePopup").livequery("click", function() {
	freePopup.close();
	return false;
});

/**
* Peruutetaan toiminto, suljetaan boksi
*/
$("input#cancelButton").livequery("click", function() {
	freePopup.close();
	return false;
});


forum = {
	init: function() {


		$("input#deleteForumMessage").livequery("click", function() {
			freePopup.close();

			// tarkistetaan luokasta id
			var id = $(this).attr("class");


			// lisätään elokuva ajaxilla
			$.ajax({
				url: "/forum.php?do=deleteMessage&ajax=1&messageid=" + id,
				success: function(html) {

					$("div#message" + id).fadeOut();
					freePopup.pop('<b>Viesti on poistettu.</b>');
				},
				error: function() {
					freePopup.pop('<b>Viestin poisto epäonnistui!</b>');
				}
			});

			freeTimer = setTimeout("freePopup.close()", 1500);
			return false;
		});

		$("a.forumMessageDelete").livequery("click", function() {
			clearTimeout(freeTimer);
			var id = $(this).attr("href").replace("/forum.php?do=deleteMessage&messageid=", "");


			freePopup.pop('Oletko aivan varma että haluat poistaa tämän viestin?<br />' +
			'<form>' +
			'<input type="submit" id="deleteForumMessage" class="' + id + '" value="Poista viesti" /> - ' +
			'<input type="submit" id="cancelButton" value="Peruuta" />' +
			'</form>');

			return false;
		});
	}
}

/**
* Luokka elokuvien hallintaa varten
*/
movie = {

	timer: false,

	init: function() {

		movie.handleMovies();
		movie.handleCollection();
		movie.youtubePlayer();

		$('#addMovie').submit(function() {

			$.ajax({
				url: '/movie.php?do=saveAdd&' + $(this).serialize(),
				success: function(t) {
					movie.showNewMovie(t);
				}
			});
			return false;
		});
	},

	handleMovies: function() {

		/**
		* Lisätään elokuva ajaxilla
		*/
		$("input#addMovie").livequery("click", function() {
			freePopup.close();

			// tarkistetaan luokasta id
			var id = $(this).attr("class");

			// tarkistetaan formaatti
			var format = $("select.format").val();

			// lisätään elokuva ajaxilla
			$.ajax({
				url: "/movie.php?do=add&ajax=1&id=" + id + '&format=' + format,
				success: function(html) {

					$("span#movieAdd" + id).html("<b>Elokuva on lisätty</b>");
					freePopup.pop('<b>Elokuva lisättiin listaasi.</b>');
				},
				error: function() {
					freePopup.pop('<b>Elokuvan lisääminen epäonnistui!</b>');
				}
			});

			freeTimer = setTimeout("freePopup.close()", 1000);
			return false;
		});

		/**
		* Poistetaan elokuva ajaxilla, silleen kivasti, jännästi
		*/
		$("input#deleteMovie").livequery("click", function() {
			freePopup.close();

			var id = $(this).attr("class");

			// poistetaan elokuva ajaxilla
			$.ajax({
				url: "/movie.php?do=ajaxDelete&ajax=1&id=" + id,
				success: function(){
					$("span.movieDelete" + id).html("<b>Elokuva on poistettu listaltasi</b>");
					freePopup.pop('Elokuva on nyt poistettu listaltasi');
				},
				error: function() {
					freePopup.pop('<b>Elokuvan poistaminen epäonnistui!</b>');
				}
			});


			freeTimer = setTimeout("freePopup.close()", 1000);
			return false;
		});




		$("a.movieAdd").livequery("click", function() {
			clearTimeout(freeTimer);
			var id = $(this).attr("href").replace("/movie.php?do=add&id=", "");


			// lisätään elokuva ajaxilla
			$.ajax({
				url: "/movie.php?do=getFormats&ajax=1&id=" + id,
				success: function(html) {

					freePopup.pop('Oletko aivan varma että haluat lisätä tämän elokuvan?<br />' +
					'<form>' + html +
					'<input type="submit" id="addMovie" class="' + id + '" value="Lisää elokuva" /> - ' +
					'<input type="submit" id="cancelButton" value="Peruuta" />' +
					'</form>');
				},
				error: function() {
					freePopup.pop('Elokuvan tietojen lataaminen epäonnistui :(');
					freeTimer = setTimeout("freePopup.close()", 1000);
				}
			});

			return false;

		});

		$("a.movieDelete").livequery("click", function() {
			clearTimeout(freeTimer);
			var id = $(this).attr("href").replace("/movie.php?do=delete&id=", "");


			freePopup.pop('Oletko aivan varma että haluat poistaa tämän elokuvan?<br />' +
			'<form>' +

			'<input type="submit" id="deleteMovie" class="' + id + '" value="Poista elokuva" /> - ' +
			'<input type="submit" id="cancelButton" value="Peruuta" />' +

			'</form>');

			return false;
		});
	},

	showNewMovie: function(html) {

		var html = '<p>Lisäämäsi elokuvan tiedot</p>' + html;
		$('div#newMovieContainer').html(html);
	},

	handleCollection: function() {


		/**
		* Lisätään kokoelma ajaxilla
		*/
		$("input#addCollection").livequery("click", function() {
			freePopup.close();

			var id = $(this).attr("class");

			// lisätään kokoelma ajaxilla
			$.ajax({
				url: "/movie.php?do=addCollection&ajax=1&id=" + id,
				success: function(html) {

					$("span#collectionAdd" + id).html("<b>Kokoelma on lisätty</b>");
					freePopup.pop('<b>Kokoelma lisättiin listaasi.</b>');
				},
				error: function() {
					freePopup.pop('<b>Kokoelman lisääminen epäonnistui!</b>');
				}
			});

			freeTimer = setTimeout("freePopup.close()", 1000);
			return false;
		});

		/**
		* Poistetaan kokoelma ajaxilla, silleen kivasti, jännästi
		*/
		$("input#deleteCollection").livequery("click", function() {
			freePopup.close();

			var id = $(this).attr("class");

			// poistetaan elokuva ajaxilla
			$.ajax({
				url: "/movie.php?do=ajaxDeleteCollection&ajax=1&id=" + id,
				success: function(){
					$("span.collectionDelete" + id).html("<b>Kokoelma on poistettu listaltasi</b>");
					freePopup.pop('Kokoelma on nyt poistettu listaltasi');
				},
				error: function() {
					freePopup.pop('<b>Kokoelman poistaminen epäonnistui!</b>');
				}
			});


			freeTimer = setTimeout("freePopup.close()", 1000);
			return false;
		});



		$("a.collectionAdd").livequery("click", function() {
			clearTimeout(freeTimer);
			var id = $(this).attr("href").replace("/movie.php?do=addCollection&id=", "");


			freePopup.pop('Oletko aivan varma että haluat lisätä tämän kokoelman?<br />' +
			'<form>' +
			'<input type="submit" id="addCollection" class="' + id + '" value="Lisää kokoelma" /> - ' +
			'<input type="submit" id="cancelButton" value="Peruuta" />' +
			'</form>');


			return false;

		});

		$("a.collectionDelete").livequery("click", function() {
			clearTimeout(freeTimer);
			var id = $(this).attr("href").replace("/movie.php?do=deleteCollection&id=", "");


			freePopup.pop('Oletko aivan varma että haluat poistaa tämän kokoelman?<br />' +
			'<form>' +

			'<input type="submit" id="deleteCollection" class="' + id + '" value="Poista kokoelma" /> - ' +
			'<input type="submit" id="cancelButton" value="Peruuta" />' +

			'</form>');

			return false;
		});

		var html = '<tr>' + $("#addCollection tr#movieDropdown").html() + '</tr>';

		$("#addCollection a.addDrop").livequery("click", function() {
			$("#addCollection tr#movieDropdown").after(html);
			return false;
		});

		$("#saveNewCollection").livequery("submit", function() {
			$.ajax({
				url: '/movie.php?do=saveNewCollection&' + $(this).serialize(),
				success: function(t) {
					$('div#newCollectionContainer').html(t + "<h1>Kokoelma luotu!</h1>Kokoelman luominen onnistui. Nyt voit suksia.");
				}
			});
			return false;
		});
	},

	youtubePlayer: function() {


		/*
		$("a.youtubeplayerlink").livequery("click", function() {

		// muodostetaan id
		var id = '#youtube_' + $(this).attr('id');

		// piilotetaan muut paitsi valittu
		$("div.youtubeplayer").not(id).hide();

		// näytetään/piilotetaan valittu
		$(id).toggle();

		return false;
		});
		*/


	}

}


function showContents() {
	$('div#content a.register').click(function() {
		$('div#register').toggle();
		return false;
	});

	$('a.infoLink').click(function() {
		$('div.infoText').toggle();
		return false;
	});


	$('div#profileAllMovies h2 a').click(function() {
		$('div#profileMovieContainer').toggle();
		return false;
	});

	$('div#profileNewMovies h2 a').click(function() {
		$('div#profileNewMoviesMovieContainer').toggle();
		return false;
	});

	$('div#profileNewCollections h2 a').click(function() {
		$('div#profileNewCollectionsContainer').toggle();
		return false;
	});

	$("ul#movie_content_menu li a").livequery("click", function() {

		var attr = $(this).attr("id").replace("movie_", "");
		var movieid = $(this).attr("class");

		loadMovieContent(attr, movieid);
		return false;

	});


	$("a.moviePic").livequery("click", function() {

		var pictid = $(this).attr("id").replace("pic_", "");


		loadPicture(pictid);
		return false;
	});
}

function loadPicture(pictid) {
	$("div#movie_service_content").html(loading());

	$.ajax({
		url: '/misc/movieContent.php?service=singlePicture&pictid=' + pictid,
		dataType: "html",
		success: function(t) {
			//alert(t);
			$("div#movie_service_content").html(t);

		},
		error: function() {
			loadingError("Kuvan lataaminen epäonnistui");
		}
	});
}

function loadMovieContent(service, movieid) {

	$("div#movie_service_content").html(loading());

	$.ajax({
		url: '/misc/movieContent.php?service=' + service + '&movieid=' + movieid,
		dataType: "html",
		success: function(t) {

			$("div#movie_service_content").html(t);

		},
		error: function() {
			loadingError("Sisällön lataaminen epäonnistui");
		}
	});



}




/* Chat */

chatOpened = false;

chat = {

	load: function() {

		//require("plugins/scrollto.js");

		// käyttäjä valitsee onlinelistasta nimen, pistetään se inputtiin
		$('select#chatOnlineList').livequery('change', function(e) {
			$("select#chatOnlineList option:selected").each(function () {
				if($(this).val() != '') {
					str = $(this).val() + ': ' + $("input#comment").val();
				}
			});

			$("input#comment").val(str);
			$('input#comment').focus();
		});

		// mikäli käyttäjä haluaa päivittää onlinelistan
		$('#chatOnlineRefresh').click(function() {
			chat.setOnline();
		});


		if(!chatOpened) {
			chatOpened = true;
			chat.chat();
		}

		$("div#chat").scroll(function () {
			$("#myDiv").attr({ scrollTop: $("#myDiv").attr("scrollHeight") });
			$("#chatScroll").html("skrollataan").css("display", "inline").fadeOut("slow");
		});

		chat.last();

	},

	read: function() {
		if(chatOpened) {
			$.ajax({
				url: "/misc/chat.php",
				success: function(html){
					$("#chat").html(html);
					chat.last();
				}
			});
		}
	},

	chat: function() {
		chat.read();
		setTimeout(chat.chat, 2000);
	},

	/**
	* Asetetaan käyttäjä kirjautuneeksi chattiin
	* Palauttaa onlinelistan käyttäjistä
	*/
	setOnline: function() {
		if(chatOpened) {
			$.ajax({
				url: "/misc/chat.php?do=setOnline",
				success: function(html){
					$("#chatOnlineBox").html(html);
				}
			});
			setTimeout(chat.setOnline, 60000);
		}
	},

	/* Kirjaa käyttäjä ulos chatista */
	goOffline: function() {
		$.ajax({url: "/misc/chat.php?do=goOffline"});
	},

	/* Suljetaan chat ja kirjataan käyttäjä ulos */
	close: function() {
		this.goOffline();
		chatOpened = false;
	}
}

var pageX = false;
var pageY = false;

/* Hiiren seuranta */
function mousemove() {
	$().mousemove(function(e){
		pageX = e.pageX;
		pageY = e.pageY;
	});
}

/* Mahdollistetaan popupit vapaalla sisällöllä */
freePopup = {

	defaultWidth: 500,
	tmp: false,

	init: function() {
		$("#container").append('<div class="freePopup"></div>');
	},


	/**
	* Sallitaan muiden sovellusten luoda popuppeja vapaasti
	* Näin saadaan kaikki popupit näyttämään about samoilta
	*
	*/
	pop: function(html, skip) {

		html = '<div class="topcornerleft"></div>' +
		'<div class="topmiddle"></div>' +
		'<div class="topcornerright"><a href="#" class="closeFreePopup">X</a></div>' +
		'<div class="clear"></div>' +
		'<div class="popupcontent">' +
		'<div class="leftborder"></div>' +
		'<div class="popupcontenthtml">' +
		html +
		'</div>' +
		'<div class="rightborder"></div>' +
		'<div class="clear"></div></div>' +
		'<div class="bottomcornerleft"></div>' +
		'<div class="bottommiddle"></div>' +
		'<div class="bottomcornerright"></div>' +
		'<div class="clear"></div>';

		freePopup.popit(html, skip);

	},
	/* Luodaan itse popup */
	popit: function(html, skip) {


		$('.freePopup').fadeIn();

		$('.freePopup').html(html);

		freePopup.updatePosition();

		// tuunataan aina oletusleveys
		freePopup.updateWidth(this.defaultWidth);

		// mikäli korkeuden säätöä ei skipata
		if(!skip) {
			freePopup.updateHeight();
		}


	},

	updateHeight: function() {

		// plussataan 20 koska popupcontenthtml classilla on 10px padding, joka lisää 20 pikseliä korkeuteen, ARGHGHHH
		var newHeight = ($(".freePopup .popupcontenthtml").height() + 20);

		$('.freePopup .rightborder').css({height: newHeight + 'px'});
		$('.freePopup .leftborder').css({height: newHeight + 'px'});

		if($(".freePopup .popupcontenthtml").height() < $(".freePopup .leftborder").height()) {
			$('.freePopup .popupcontenthtml').css({height: (newHeight-20) + 'px'});
		}

	},

	updateWidth: function(width) {

		$('.freePopup').css({width: width + 'px'});
		$('.freePopup .popupcontenthtml').css({width: (width - 49) + 'px'});
		$('.freePopup .topmiddle').css({width: (width - 50) + 'px'});
		$('.freePopup .bottommiddle').css({width: (width - 50) + 'px'});
	},

	updatePosition: function() {
		$('.freePopup').css({position: 'absolute', left: (($(window).width() / 2) - ($(".freePopup").width() / 2)) +'px', top: (pageY + 20 ) + 'px'});

		if(screenHeight >= $(document).height()) {
			$('.freePopup').css({position: 'absolute', left: (($(window).width() / 2) - ($(".freePopup").width() / 2)) +'px', top: ((screenHeight / 2) - ($(".freePopup").height() / 2)) +'px'});
		}

	},

	/* Suljetaan */
	close: function() {
		$('.freePopup').fadeOut();
	}
}


/* Profile popup */
popup = {
	timer: false,
	tmp: false,


	/* aloitetaan popupin vääntö */
	init: function() {
		$("#container").append('<div class="profilePopup"></div>');

		// huomioidaan myös ajaxilla ladattu sisältö
		$('a.profileLink').livequery(function(e){
			$(this).hover(function() {
				popup.loadNick($(this).attr("href").replace("/profiles/", ""));
			}, function() {
				popup.close();
			});

		}, function() {
			// unbind the mouseover and mouseout events
			$(this).unbind('mouseover').unbind('mouseout');
		});

		// huomioidaan myös ajaxilla ladattu sisältö
		$('a.movieLink').livequery(function(e){
			$(this).hover(function() {
				popup.loadMovie($(this).attr("href").replace("/movie/", ""));
			}, function() {
				popup.close();
			});

		}, function() {
			// unbind the mouseover and mouseout events
			$(this).unbind('mouseover').unbind('mouseout');
		});
	},



	/* Kutsutaan 0.7 sekunnin sisällä get metodia */
	loadNick: function(nick) {
		this.timer = setTimeout("popup.getNick('" + nick + "')", 700);
	},

	/* Haetaan kannasta haluttu tieto */
	getNick: function(nick) {
		$.ajax({
			url: '/misc/popup.php?nick=' + nick,
			success: function(t) {
				popup.popit(t, true);
			}
		});
	},
	/* Kutsutaan 0.7 sekunnin sisällä get metodia */
	loadMovie: function(movie) {
		this.timer = setTimeout("popup.getMovie('" + movie + "')", 700);
	},

	/* Haetaan kannasta haluttu tieto */
	getMovie: function(movie) {
		$.ajax({
			url: '/misc/popup.php?movie=' + movie,
			success: function(t) {
				popup.popit(t, true);
			}
		});
	},

	/* Luodaan itse popup */
	popit: function(html) {

		var documentHeight = $(document).height();

		$('.profilePopup').fadeIn();

		$('.profilePopup').html(html);

		$('.profilePopup').css({position: 'absolute', left: (pageX + 20) +'px', top: (pageY + 20 ) + 'px'});
		popup.updateHeight();

		this.tmp = setTimeout("popup.updateHeight()", 30);

		/*
		$('.profilePopup div.rightborder').css({height: $(".profilePopup .popupcontent").height() + 'px'});
		$('.profilePopup div.leftborder').css({height: $(".profilePopup .popupcontent").height() + 'px'});

		$().mousemove(function(e){
		$('.profilePopup').css({position: 'absolute', left: (e.pageX + 20) +'px', top: (e.pageY + 20 ) + 'px'});
		});
		*/

		if((pageY + $(".profilePopup .popupcontent").height() + 50) >= documentHeight) {
			$('.profilePopup').css({position: 'absolute', left: (pageX + 20) +'px', top: (pageY - $(".profilePopup .popupcontent").height() ) + 'px'});
		}

		$().mousemove(function(e){
			$('.profilePopup').css({position: 'absolute', left: (e.pageX + 20) +'px', top: (e.pageY + 20 ) + 'px'});

			if((e.pageY + $(".profilePopup .popupcontent").height() + 50) >= documentHeight) {
				$('.profilePopup').css({position: 'absolute', left: (e.pageX + 20) +'px', top: (e.pageY - $(".profilePopup .popupcontent").height() ) + 'px'});
			}
		});


	},

	updateHeight: function() {
		$('.profilePopup div.rightborder').css({height: $(".profilePopup .popupcontent").height() + 'px'});
		$('.profilePopup div.leftborder').css({height: $(".profilePopup .popupcontent").height() + 'px'});
	},


	/* Suljetaan */
	close: function() {
		$('.profilePopup').fadeOut();
		clearTimeout(this.timer);
		clearTimeout(this.tmp);
	}
}

