
function Person() {
	this.movies = new Array();

	var personType = ["actor","director","writer","actorVoice"];
	var sortByType = ["popular","title","year"];
	var sortLabels = {
		popular:{ru:"Рейтинг",en:"Rating"},
		title:{ru:"Название",en:"Title"},
		year:{ru:"Год",en:"Year"}
	};
	
	this.curYearFilter = {
		actor:"All",
		director:"All",
		writer:"All",
		actorVoice:"All"
	};

	this.personDivs = {
		actor: "actor_div",
		director: "director_div",
		writer: "writer_div",
		actorVoice: "actorVoice_div"
	};

	this.personControlDivs = {
		actor: "actorCP_div",
		director: "directorCP_div",
		writer: "writerCP_div",
		actorVoice: "actorVoiceCP_div"
	};
	
	this.sortSettings = {
		actor:{by:"popular",order:"desc"},
		director:{by:"popular",order:"desc"},
		writer:{by:"popular",order:"desc"},
		actorVoice:{by:"popular",order:"desc"}
	};

	//Memorize setting for sorting order
	this.sortSettingsCache = {
		actor:{
			popular:"desc",
			title:"asc",
			year:"desc"
		},
		director:{
			popular:"desc",
			title:"asc",
			year:"desc"
		},
		writer:{
			popular:"desc",
			title:"asc",
			year:"desc"
		},
		actorVoice:{
			popular:"desc",
			title:"asc",
			year:"desc"
		}
	};
	
	this.PrintPersonCP = function(personAs)
	{
		var yearFilters,sortedYF,curFilter;
		var filterCount;
		var alink;
		
		clearDivChilds(this.personControlDivs[personAs]);
		filterCount = 0;
		yearFilters = new Array();
		sortedYF = new Array();
		for (var i=0;i<this.movies[personAs].length;i++) {
			curFilter = this.movies[personAs][i].year.toString().substr(0,3);
			if (!(curFilter in yearFilters)) {
				yearFilters[curFilter] = 1;
				sortedYF.push(curFilter);
				filterCount++;
			}
		}
		sortedYF.sort();
		sortedYF.unshift('All');

		function createSetYFfunc(personAs,filter) {
			return function() {
				mperson.curYearFilter[personAs] = filter;
				mperson.PrintPersonCP(personAs);
				mperson.PrintPersonMoviesTable(personAs);
			}
		}
		
		function createSetSortfunc(personAs,sortBy,order) {
			return function() {
				mperson.sortSettings[personAs].by = sortBy;
				mperson.sortSettings[personAs].order = order;
				mperson.PrintPersonCP(personAs);
				mperson.PrintPersonMoviesTable(personAs);
			}
		}

		if (filterCount>1) {
			for (var i=0;i<sortedYF.length;i++) {
				if (sortedYF[i]!=mperson.curYearFilter[personAs]) {
					alink = document.createElement('a');
					alink.className = "yearFilterBox";
					alink.onclick = createSetYFfunc(personAs,sortedYF[i]);
/*					eval("function(evt) {mperson.curYearFilter['"+personAs+"'] = '"+sortedYF[i]+"';"+
									" mperson.PrintPersonCP('"+personAs+"');"+
									" mperson.PrintPersonMoviesTable('"+personAs+"');"+
									"}");*/

					alink.appendChild(document.createTextNode("["+((sortedYF[i]=='All')?(fLanguage=='ru'?'Все':'All'):(sortedYF[i]+"x"))+"]"));
					$(this.personControlDivs[personAs]).appendChild(alink);
					$(this.personControlDivs[personAs]).appendChild(document.createTextNode(' '));
				}
				else {
					var bEl;
					bEl = document.createElement('b');
					bEl.appendChild(document.createTextNode("["+((sortedYF[i]=='All')?(fLanguage=='ru'?'Все':'All'):(sortedYF[i]+"x"))+"]"));
					$(this.personControlDivs[personAs]).appendChild(bEl);
					$(this.personControlDivs[personAs]).appendChild(document.createTextNode(' '));
				}
			}
			
			$(this.personControlDivs[personAs]).appendChild(document.createElement('br'));
		}
		
		//Print sort settings
		if (this.movies[personAs].length>1) {
			var iEl;
			iEl = document.createElement('i');
			iEl.appendChild(document.createTextNode(fLanguage=="ru"?"сортировать:":"order by:"));
			$(this.personControlDivs[personAs]).appendChild(iEl);
			$(this.personControlDivs[personAs]).appendChild(document.createElement('br'));
			for(var i=0;i<sortByType.length;i++) {
				if (this.sortSettings[personAs].by!=sortByType[i]) {
					alink = document.createElement('a');
					alink.className = "sortPersonLink";
					alink.onclick = createSetSortfunc(personAs,sortByType[i],this.sortSettingsCache[personAs][sortByType[i]]);
	/*				eval("function(evt) {mperson.sortSettings['"+personAs+"'].by = '"+sortByType[i]+"';"+
										"mperson.sortSettings['"+personAs+"'].order = '"+this.sortSettingsCache[personAs][sortByType[i]]+"';"+
										"mperson.PrintPersonCP('"+personAs+"');"+
										"mperson.PrintPersonMoviesTable('"+personAs+"');"+
										"}");*/
					alink.appendChild(document.createTextNode("["+sortLabels[sortByType[i]][fLanguage]+"]"));
					$(this.personControlDivs[personAs]).appendChild(alink);
					$(this.personControlDivs[personAs]).appendChild(document.createTextNode(' '));	
				}
				else {
					var bEl;
					bEl = document.createElement('b');
					bEl.appendChild(document.createTextNode("["+sortLabels[sortByType[i]][fLanguage]+"]"));
					$(this.personControlDivs[personAs]).appendChild(bEl);
					$(this.personControlDivs[personAs]).appendChild(document.createTextNode(' '));				
				}
			}
		}
	}

	this.PrintPersonMoviesTable = function(personAs)
	{
		var tbl,tbody,tr,td;
		var moviesArr;
		
		tbl = document.createElement('table');
		tbl.className = "inner_list_tbl";
		tbody = document.createElement('tbody');	
			
		moviesArr = new Array();
		for (var i=0;i<this.movies[personAs].length;i++) {
			if (this.curYearFilter[personAs]!="All") {
				if (this.movies[personAs][i].year.toString().match(this.curYearFilter[personAs]+".")) {
					moviesArr.push(this.movies[personAs][i]);
				}
			}
			else {
				moviesArr.push(this.movies[personAs][i]);
			}
		}
		
		
		//sort
		function movieCompareByYear(a,b)
		{
			return a.year-b.year;
		}
		function movieCompareByPopularity(a,b)
		{
			return a.rating-b.rating;
		}
		function movieCompareByTitle(a,b)
		{
			return (a.title==b.title)?0:((a.title>b.title)?1:-1);
		}
		function movieCompareByTitleRus(a,b)
		{
			return (a.title_rus==b.title_rus)?0:((a.title_rus>b.title_rus)?1:-1);
		}
		
		sortByFs = new Array();
		sortByFs["year"] = movieCompareByYear;
		sortByFs["popular"] = movieCompareByPopularity;
		sortByFs["title"] = fLanguage=="ru"?movieCompareByTitleRus:movieCompareByTitle;
//		sortByFs["titleRus"] = movieCompareByTitleRus;
		if (sortByFs[this.sortSettings[personAs].by]!=null) {
			moviesArr.sort(sortByFs[this.sortSettings[personAs].by]);
			if (this.sortSettings[personAs].order=="desc") {
				moviesArr.reverse();
			}
		}
		
		var alink,br,rate_div1,rate_div2,spacer;
		for (var i=0;i<moviesArr.length;i++) {
			tr = document.createElement('tr');
			td = document.createElement('td');
			alink = document.createElement('a');
			alink.setAttribute('href','film'+moviesArr[i].id+'.html');
			alink.appendChild(document.createTextNode((fLanguage=="ru"?moviesArr[i].title_rus:moviesArr[i].title)+" ("+moviesArr[i].year+")"));
			td.appendChild(alink);
			if (fLanguage=="ru") {
				td.appendChild(document.createElement('br'));
				td.appendChild(document.createTextNode(moviesArr[i].title));
			}
			if (moviesArr[i].rating>0) {
				br = document.createElement('br');
				td.appendChild(br);
				rate_div1 = document.createElement('div');
				rate_div1.className = 'rating_bar';
				rate_div1.style.width = Math.floor(moviesArr[i].rating)+"px";
				spacer = document.createElement('img');
				spacer.src = "/img/spacer.gif";
				spacer.alt = "";
				rate_div1.appendChild(spacer);
				td.appendChild(rate_div1);
				rate_div2 = document.createElement('div');
				rate_div2.className = 'rating_empty';
				rate_div2.style.width = (100-Math.floor(moviesArr[i].rating))+"px";
				spacer = document.createElement('img');
				spacer.src = "/img/spacer.gif";
				spacer.alt = "";
				rate_div2.appendChild(spacer);
				td.appendChild(rate_div2);
			}
			tr.appendChild(td);
			tbody.appendChild(tr);
		}
		tbl.appendChild(tbody);
		
		clearDivChilds(this.personDivs[personAs]);
		$(this.personDivs[personAs]).appendChild(tbl);
		
	}	

	this.ConvertTitlesToUTF = function()
	{
		for (var j=0;j<personType.length;j++) {
			if (this.movies[personType[j]]!=null) {
				for(var i=0;i<this.movies[personType[j]].length;i++) {
																					//toString for numeric Titles like 1941
					this.movies[personType[j]][i].title = fromUnicodeHTMLtoUTF(this.movies[personType[j]][i].title.toString());
				}
			}
		}
	}
}

var mperson = new Person();