var lang = new Array();
var visibles = new Array();
var sstr="";
var searchMode = 'book';
var textKeeper = '';

var robj=null;
lang['leaveReview']	= 'писать рецензию';
lang['readReviews']	= 'читать рецензии';
lang['BookActionComment']	= 'обсудить';
lang['BookActionRecommend']= 'рекомендовать&nbsp;другу';
lang['BookActionInfo']		= 'о&nbsp;книге';
lang['BookActionWho']		= 'кто&nbsp;читал?';
lang['BookActionWho']		= 'кто&nbsp;читал?';
lang['createNewInvite_']		= 'добавить';
lang['createNewInvite_book'] = 'Новую книгу';
lang['createNewInvite_author'] = 'Нового писателя';
lang['createNewInvite_film'] = 'Добавить новый фильм';
lang['cancel'] = 'Отмена';
lang['addNewFieldTitle'] = 'Введите название ';
lang['addNewFieldTitle-film'] = 'нового фильма:';
lang['addNewFieldTitle-book'] = 'новой книги:';
lang['addNewFieldTitle-disk'] = 'новой песни или альбома:';
lang['deleteReviewConfirm'] = 'Вы действительно хотите удалить свою рецензию?';
lang['loading']	= 'Загрузка&hellip;';
lang['leaveReview']	= 'писать рецензию';
lang['readReviews']	= 'читать рецензии';
lang['BookActionComment']	= 'обсудить';
lang['BookActionRecommend']= 'рекомендовать&nbsp;другу';
lang['BookActionInfo']		= 'о&nbsp;книге';
lang['BookActionWho']		= 'кто&nbsp;читал?';
lang['BookActionWho']		= 'кто&nbsp;читал?';
lang['createNewInvite_']		= 'добавить';
lang['createNewInvite_book'] = 'Новую книгу';
lang['createNewInvite_author'] = 'Нового писателя';
lang['createNewInvite_film'] = 'Добавить новый фильм';
lang['cancel'] = 'Отмена';
lang['deleteReviewConfirm'] = 'Вы действительно хотите удалить свою рецензию?';

var possibleModes = Array('film','CFdirector','CFactors', 'book', 'CFauthor','disk','CFgroup');
var CFmap = Array();
CFmap['CFdirector'] = 'film';
CFmap['CFactors'] = 'film';
CFmap['CFauthor'] = 'book';
CFmap['CFgroup'] = 'disk';
CFmap['film'] = 'film';
CFmap['book'] = 'book';
CFmap['disk'] = 'disk';

function cancelAddNew() {
	document.getElementById('search').style.display = 'block';
	document.getElementById('addNew').style.display = 'block';
	document.getElementById('addNewForm').innerHTML = '';
}

function CFWait() {
}

function CFReact(responseText) {
	document.getElementById('customFields').innerHTML = responseText;
}

function printAddNew() {
	if (userRecognized) {
		document.getElementById('search').style.display = 'none';
		mess = '';
		mess +=
		'<div id="addNewItem"><form id="itemInfo" enctype="multipart/form-data" action="/ajax/save_item/" method="post"><span onClick="cancelAddNew()" id="cancelAddNew">'+lang['cancel']+'</span><span class="inputFieldTitleNew">'+ lang['addNewFieldTitle'] + lang['addNewFieldTitle-'+CFmap[searchMode]] + '</span>'+
		'<input type="text" value="'+sstr+'" id="newItemTitleString" name="title" size="55">'+
		'<input type="hidden" name="mode" value="'+CFmap[searchMode]+'">'+
		'<div id="customFields" class="customFields"></div>'+
		'<input type="submit" value="OK" id="addNewItemButton"></form></div>';
		document.getElementById('addNew').style.display = 'none';
		document.getElementById('addNewForm').innerHTML = mess;
		document.getElementById('newItemTitleString').focus();

		var mydate = new Date();
		document.getElementById('customFields').innerHTML = 'Загрузка';
		ajaxRequest("GET", "/ajax/cf_edit/" + CFmap[searchMode] + '/?' + mydate.getTime(), '', "CFReact(robj.responseText)", "CFWait()")
		var options = {
			success:       addNewItemReact  // post-submit callback
		}
		$('#itemInfo').ajaxForm(options);
	}
}

function addNewItemReact(responseText) {
	responseText = responseText.replace('<PRE>', '');
	responseText = responseText.replace('</PRE>', '');
	if	(responseText=='success') {
		document.getElementById('search').style.display = 'block';
		document.getElementById('addNew').style.display = 'block';
		searchMode = CFmap[searchMode];
		switchSearchMode(searchMode);
		qfield.value = document.getElementById('newItemTitleString').value;
		sendReq(document.getElementById('newItemTitleString').value);
		document.getElementById('addNewForm').innerHTML = '';
	} else {
		alert(responseText);
	}
}

/* -------- */

function display_result(result) {
	if(V>0) V--;
	sR.innerHTML='';
	sRN.innerHTML='';
	sRI.innerHTML='';
	sRN.style.display = 'none';
	total = result[0];

	if (!memory[sstr]) {
		memory[searchMode+sstr+page] = result;
	}

	if (total>0) {
		sRC.style.display = 'block';
		sRI.innerHTML='Результат: '+total;
		for (loop=1; loop<result.length; loop++) {
			oR = returnSRItem(searchMode, result[loop])
		}
		if (total) {
			var pages = total/items_on_page;
			if ((pages>10) && (sstr.length<3)) {pages = 10; overflow = true} else {overflow=false};
			if (pages>1) {
				for (loop=0; loop<pages; loop++) {
					sRa=document.createElement("span");
					sRa.innerHTML = loop+1;
					if (loop+1 == page) {
						sRa.className = 'searchResultPagesA';
					} else {
						sRa.className = 'searchResultPages';
						sRa.onclick = function () {
							page = this.innerHTML;
							var	cached=memory[searchMode+sstr+page];
							if(cached){
								display_result(cached)}
								else{
									sendReq(sstr)
								}
						}
					}
					sRN.style.display = 'block';
					sRN.appendChild(sRa);
				}
				if (overflow) {
					//to be done
				}
			}
		}
	}
	else {
		sRI.innerHTML='Ничего не найдено';
		sRC.style.display = 'none';
	}
}

/* -------- */
function returnSRItem(mode, info) {
	if (mode=='film' || mode=='book' || mode=='disk') {
		oRi = document.createElement("div");
		oRi.className = 'info';
		if (loop==1) {oRi.className = 'infoFirst'; }
		oR=document.createElement("li");
		oRb=document.createElement("a");
		oRb.href = '/'+mode+'/' + info[0] + '/';
		oRb.className = 'itemTitle';
		oR.id = info[0];
		oRb.innerHTML = info[1];
		if (userRecognized==1) {
			oRr = document.createElement("a");
			oRr.className = 'addReview';
			oRr.href = '/add_review/'+mode+'/' + info[0] + '/';
			oRr.innerHTML = 'Написать рецензию';
		}
		oRi.appendChild(oRb);
		if (userRecognized==1) {
			oRi.appendChild(oRr);
		}
		oR.appendChild(oRi);
		sR.appendChild(oR);
	} else {
		oRCFname=document.createElement("span")
		oRCFname.className = 'CFResultGroup';
		oRCFname.innerHTML=info[0];
		for (i in info) {
			if (i>0) {
				oRitem=document.createElement("a");
				oRitem.href = '/'+CFmap[mode]+'/' + info[i][0] + '/';
				oRitem.innerHTML = info[i][1];

				oRitemLI=document.createElement("li");
				oRitemLI.id = info[i][0];
				if (i==1) {
					oRitemLI.appendChild(oRCFname);
				}
				oRitemLI.appendChild(oRitem);

				sR.appendChild(oRitemLI);
			}
		}
	}
}

/* */
var Ba="";
var fa=false;
var jumper = -1;
var oldJumper = -1;
var page = 1;
var items_on_page = 10;
var sRI;
var sR;
var sRN;
var sRc;
memory = new Array;
var V=0;
var Ea=false;
var za=false;
var ka=false;
var ua=-1;
/* */

InitSearch=function(){
	sRC = document.getElementById('searchResultContainer');
	sRI = document.getElementById('searchResultInfo');
	sR = document.getElementById('searchResult');
	sRN = document.getElementById('searchResultNav');
	sRc = document.getElementById('searchResult').childNodes;
	qfield = document.getElementById("searchString");
	messCont = document.getElementById('message');
	jb='';
	setEventHandlersSearch()
	switchSearchMode(searchModeFromCookie);
	kc()
	if (userRecognized) {
		document.getElementById('addNew').style.display = 'block';
	}
};

function ub(){
	za=true;
	qfield.blur();
	setTimeout("sfi();",10);
	return
}
function kc() {
	ajaxObj()
	qfield.autocomplete="off";
	qfield.onblur=Wb;
	if(qfield.createTextRange)
	qfield.onkeyup=new Function("return okuh(event); ");
	else qfield.onkeyup=okuh;
	sstr=qfield.value;
	Ba=sstr;
}

function Wb(h){
	if(!za){
		if(ua==9){jc();ua=-1}}
		za=false;
}
okuh=function(e) { if (!Ea) { Ea=true } n=e.keyCode; ca=qfield.value; Xa() };
function jc() {jb.focus()}
sfi=function(){qfield.focus()}
function Xa() {
	var sRcl = sRc.length;
	if(n==40||n==38) { ub(); oldJumper=jumper}
	if (n==40) { if (jumper<sRcl-1) jumper++; } else if
	(n==38) { if(jumper>0) jumper--;} else
	if (n!=13) { jumper=-1; };
	if(n==40||n==38) {
		showJumper(false);
	}
	if (n==13||n==3) {
		hrefOnEnter = CFmap[searchMode];
		this.document.location.href = '/'+CFmap[searchMode]+'/'+sRc[jumper].id+'/';
	}
	sstr = qfield.value;
}
;
function encstr(inpstr){
	if (encodeURIComponent) return encodeURIComponent(inpstr);
	if (escape) return escape(inpstr);
}

function setDelay(Ub) {
	var I=100;
	for(var p=1;p<=(Ub-2)/2;p++){I=I*2}I=I+50;
	return I
}

mloop=function()
{
	if(Ba!=sstr)
	{if(!fa){
		page=1;
		var	cached=memory[searchMode+sstr+page];
		if(cached){
			display_result(cached)}
			else{
				sendReq(sstr)
				qfield.focus()
			}
	}
	fa=false}
	Ba=sstr;
	setTimeout("mloop()", setDelay(V));
	return true
}
setTimeout("mloop()",10);

function sendReq(req) {
	req=encstr(req);
	var mydate = new Date();
	url = "/ajax/search_result/"+searchMode+'/'+req+'/'+page+'/'+'/'+mydate.getTime("month-dd-yyyy-hh") + '/';
	//	$('#debug').html(url);
	ajaxSearchWaiting()
	ajaxRequest("GET", url, '', 'ajaxSearchReaction(robj.responseText)', 'ajaxSearchWaiting()' )
}

function ajaxSearchReaction(result) {
	eval(result);
}

function ajaxSearchWaiting() {
	sRI.innerHTML='Загрузка&hellip;'
}

function showJumper(reset) {
	var sRcl = sRc.length;
	if (oldJumper>-1 && oldJumper<sRcl ) sRc[oldJumper].className='';
	if (jumper>-1 && jumper<sRcl) sRc[jumper].className='hl';
	if (reset) {
		if (jumper>-1 && jumper<sRcl ) sRc[jumper].className='';
	}
}

function setEventHandlersSearch() {
	for (i in possibleModes) {
		eval("$('#search div#searchMode"+possibleModes[i]+"').click(function(){ switchSearchMode('"+possibleModes[i]+"') });");
	}
	qfield.focus();
}

function getCBOffset(obj, which) {
	var doffset = (which=="left") ? obj.offsetLeft : obj.offsetTop;
	var dparent = obj.offsetParent;
	while (dparent.offsetParent) {
		doffset+=(which=="left") ? dparent.offsetLeft : dparent.offsetTop;
		dparent=dparent.offsetParent;
	}
	return doffset;
}


function switchSearchMode(mode) {
	$("#search_mode").value = mode;
	setCookie("search-mode=" + mode);
	searchMode = mode;
	for (i in possibleModes) {
		if (mode==possibleModes[i]) {
			$('#searchMode'+possibleModes[i]).addClass('searchModeActive');
		} else {
			$('#searchMode'+possibleModes[i]).removeClass('searchModeActive');
		}
		qfield.focus();
	}

	if(sstr!='') {
		sendReq(sstr);
	}
}

function addEvent(obj, evType, func, useCapture){
	if (obj.addEventListener){
		obj.addEventListener(evType, func, useCapture);
		return true;
		alert('!');
	} else if (obj.attachEvent){
		var r = obj.attachEvent('on'+evType, func);
		return r;
	} else {
		obj['on'+evType] = func;
	}
}

function cancelDefault(e) {
	if ( e && e.preventDefault && e.stopPropagation() ){
		e.stopPropagation();
		e.preventDefault();
	}
	if ( window.event ){
		alert(e);
		window.event.cancelBubble = true;
		window.event.returnValue = false;
	}
}

function ok_redirect() {
	this.document.location.href = '/';
}

function ok_redirect_current() {
	this.document.location.href = this.document.location.href;
}

function ajaxObj() {
	var dobj=null;
	try {dobj=new ActiveXObject("Msxml2.XMLHTTP")}
	catch(e){
		try {
			dobj=new ActiveXObject("Microsoft.XMLHTTP")
		}
		catch(sc) {dobj=null}
	}
	if (!dobj&&typeof XMLHttpRequest!="undefined"){
		dobj=new XMLHttpRequest()}
		return dobj
}

function ajaxRequest(method, url, post, reactionf, waitingf) {
	method = (method == "POST") ? "POST" : "GET";
	if(robj&&robj.readyState!=0){
		robj.abort()
	}
	robj=ajaxObj();
	if (robj) {
		robj.open(method, url,true);
		if (method == "GET") {
			robj.send(null)
		}
		else {
			if ( typeof( robj.setRequestHeader ) != "undefined" )
			{
				robj.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=utf-8');
			}
			robj.send( post );
		}
		robj.onreadystatechange=function() {
			if(robj.readyState==4 && robj.responseText) {
				eval(reactionf);
			} else {
				eval(waitingf);
			}
		}
	}
}

/* ------------- */

function showItemInfo(item) {
	var mydate = new Date();
	ajaxRequest('GET', '/ajax/get_item_info/'+item+'/after_save/'+ mydate.getTime(), '', "showItemInfoReact(robj.responseText)", "showItemInfoWait()");
}

function afterEdit(responseText) {
		showItemInfo($('#itemModeID').val());
}


function showItemInfoReact(responseText) {
	$('#itemInfoBox').html(responseText);
}

function showItemInfoWait() {
	$('#itemInfoBox').html(lang['loading']);
}

function editItemLoadFormReact(responseText) {
	responseText = '<form id="itemInfo" enctype="multipart/form-data" action="/ajax/save_item/edit/" method="post">' + responseText + '</form>';
	$('#itemInfoBox').html(responseText);
	var options = {
		success:       afterEdit
	}
	$('#itemInfo').ajaxForm(options);
}

function editItemLoadForm(item) {
	var mydate = new Date();
	ajaxRequest('GET', '/ajax/cf_edit/'+item+'/'+ mydate.getTime(), '', "editItemLoadFormReact(robj.responseText)", "showItemInfoWait()");
}

/* ------------- */

function deleteConfirmation(itemID) {
	if (confirm(lang['deleteReviewConfirm'])) { this.location.href = '/delete_review/'+itemID+'/'; }
}

function showFullTextWait(reviewID) {
	$("#fullTextTextfield").html('Загрузка...');
}

function hideFullText() {
	$("#fullTextContainer").css("display", "none");
	$("#fullTextTextfield").html('');
	unDimPage();
}

function showFullTextReact(result, reviewID) {
	$("#fullTextTextfield").hide();
	$("#fullTextTextfield").html(result);
	$("#fullTextTextfield").show("slow");
}

function showFullText(reviewID) {
	dimPage();
	$("#fullTextContainer").css("display", "block");
	$("#fullTextTextfield").html('Загрузка&hellip;');
	ajaxRequest('GET', '/ajax/get_full_text/'+reviewID+'/', '', "showFullTextReact(robj.responseText,"+reviewID+")", "showFullTextWait("+reviewID+")");
}

function setString(name) {
	nextField =document.createElement("input");
	nextField.type = 'text';
	cc = document.getElementById('CFSSC'+name).value*1;
	cc++;
	document.getElementById('CFSSC'+name).value = cc;
	nextField.name = name + '-' + cc;
	nextField.className = 'CF';
	document.getElementById('CFSS'+name).appendChild(nextField);
}

/* ------------- */

var popups = new Array();

function ajaxPopUpReact(responseText, elem) {
	document.getElementById(elem).innerHTML = responseText;
	document.getElementById(elem).onmouseout = function () {
		setTimeout("hideAjaxPopUp('"+elem+"', 1)", 0);
	}
}

function ajaxPopUpWait(elem) {
	document.getElementById(elem).innerHTML = lang['loading'];
}

function hideAjaxPopUp(elem) {
	document.getElementById(elem).style.display = 'none';
}

function showAjaxPopUp(url, caller) {
	if (popups[caller]) {
		if (!document.getElementById('popup-'+caller)) {

			ppel=document.createElement("div");
			ppel.id = 'popup-'+caller;
			ppel.className = 'popupItemInfo';
			callObj = document.getElementById(caller);
			ppel.style.top = getCBOffset(callObj, 'top') + callObj.offsetHeight - 10 + 'px';
			ppel.style.left = getCBOffset(callObj, 'left') +  1 +  'px';

			ppel.innerHTML = '&hellip;';
			document.getElementById("body").appendChild(ppel);
			var mydate = new Date();
			ajaxRequest('GET', url+'/popup/'+mydate.getTime(), '', "ajaxPopUpReact(robj.responseText, 'popup-"+caller+"')", "ajaxPopUpWait('popup-"+caller+"')");
		} else {
			document.getElementById('popup-'+caller).style.display = 'block';
		}
	}

}

function setPopUpEvents(cTag, cClass, func) {
	handlers = document.getElementsByTagName(cTag);
	for (i=0; i<handlers.length; i++) {
		if (handlers[i].className.match(cClass)) {
			handlers[i].className = handlers[i].className + ' spCursor';
			eval("handlers[i].onmouseover = function () {setTimeout(\""+func+"('"+handlers[i].id+"')\", 1000); popups['"+handlers[i].id+"']=1;}");
			eval("handlers[i].onmouseout = function () {popups['"+handlers[i].id+"']=0;}");
		}
	}
}

function displayItemInfo(caller) {
	showAjaxPopUp('/ajax/get_item_info/'+caller, caller);
}

function setItemInfoPopUpEvents() {
	setPopUpEvents('a', 'itemName', 'displayItemInfo')
}

function switchBlock(whoscalling) {
	var switches = document.getElementById("switches").childNodes;
	for (loop=0; loop<switches.length; loop++) {
		if (switches[loop].id==whoscalling.id) {
			switches[loop].className='inactive';
			document.getElementById('block-'+switches[loop].id).className = '';
		} else {
			switches[loop].className='active';
			document.getElementById('block-'+switches[loop].id).className = 'switchableHidden';
		}
	}
}

/* ------------- */

function loadCommentsWait(reviewID) {
	document.getElementById('commmentsPlaceHolder'+reviewID).innerHTML = 'Загрузка...';
}

function loadCommentsReact(result, reviewID) {
	comments = result.split(';-;');
	output='<table class="commentsTextes">';
	for (i=0; i<comments.length-1; i++) {
		elements = comments[i].split('|');
		output = output +
		'<tr valign="top"><td rowspan="2">' + elements[4] +
		'</td><td><p class="text commentColor"><nobr><a href="/' + elements[1] + '/">' +
		elements[0] +
		'</a></nobr><br/><br/>' +
		elements[2] + '</p></td></tr>'+
		'<tr><td><p class="date">'+ elements[3] +'</p></td></tr>';
	}
	output = output + '</table>';
	document.getElementById('commmentsPlaceHolder'+reviewID).innerHTML = '';
	document.getElementById('commmentsPlaceHolder'+reviewID).innerHTML = output;
	document.getElementById('loadCommentsButton'+reviewID).style.display='none';
}

function loadComments(reviewID) {
	ajaxRequest('GET', '/ajax/get_comments/'+reviewID+'/', '', "loadCommentsReact(robj.responseText,"+reviewID+")", "loadCommentsWait("+reviewID+")");
}

function dimPage() {
	dimmer = document.createElement("div");
	dimmer.id = 'dimmer';
	document.getElementById("body").appendChild(dimmer);
}

function unDimPage() {
	$("#dimmer").remove();
}

/* ----------------- */
function showHiddenLinks(type) {
	$("#hiddenPart"+type).show("slow");
	$("#showHiddenButton"+type).hide();
}

function displayReviewsDigests(caller) {
	showAjaxPopUp('/ajax/get_reviews_digests/'+caller, caller);
}