var addAddress = "http://www.genialnee.net/query/add.php";
var rateAddress = "http://www.genialnee.net/query/rate.php";
var noteAddress = "http://www.genialnee.net/query/qnotes.php";
var findAddress = "http://www.genialnee.net/query/find.php";
var xmlHttp = createXmlHttpRequestObject();
var showErrors = true;
var nclass="addimgsel";
var pclass="addimg";
var dnumb = 0;

function createXmlHttpRequestObject()
{
  var xmlHttp;
  try
  {
    xmlHttp = new XMLHttpRequest();
  }
  catch(e)
  {
    var XmlHttpVersions = new Array("MSXML2.XMLHTTP.6.0",
                                    "MSXML2.XMLHTTP.5.0",
                                    "MSXML2.XMLHTTP.4.0",
                                    "MSXML2.XMLHTTP.3.0",
                                    "MSXML2.XMLHTTP",
                                    "Microsoft.XMLHTTP");
    for (var i=0; i<XmlHttpVersions.length && !xmlHttp; i++)
    {
      try
      {
        xmlHttp = new ActiveXObject(XmlHttpVersions[i]);
      }
      catch (e) {}
    }
  }
  if (!xmlHttp)
    displayError("Ошибка создания объекта XMLHttpRequest.");
  else
    return xmlHttp;
}

function handleRequestStateChange() {
	if (xmlHttp.readyState == 4) {
		if (xmlHttp.status == 200) {
			try  {
				switch(fname) {
					case "addResponse" : addResponse(); break;
					case "rateResponse" : rateResponse(); break;
					case "noteResponse" : noteResponse(); break;
					case "gethandler" : gethandler(); break;
				}
			}
			catch(e) {
				displayError(e.toString());
			}
		}
		else {
			displayError(xmlHttp.statusText);
		}
	}
}

 function addResponse() {
   var response = xmlHttp.responseText;
	if (response.indexOf("ERRNO") >= 0 || response.indexOf("error:") >= 0 || response.length == 0)
		throw(response.length == 0 ? "Server error." : response);
	if(response==0) {
		if(delthis==1) {
			dnumb = dnumb + 1;
			if( (dnumall<=displ && dnumb>=dnumall) || (dnumall>displ && dnumb>=3) ) 
				location.reload();
			else
				document.getElementById("d"+divid).style.display="none";
		}
		else
			document.getElementById(divid).className = (document.getElementById(divid).className==nclass) ? pclass : nclass;
		}
	if(response=="dberror")
		alert('Ошибка! Попробуйте повторить запрос позже или обратитесь к разработчику.');
	document.getElementById("l"+divid).style.display="none";
}

function rateResponse() {
	var response = xmlHttp.responseText;
		if (response.indexOf("ERRNO") >= 0 || response.indexOf("error:") >= 0 || response.length == 0)
		throw(response.length == 0 ? "Server error." : response);
		if(response=="error")
			alert('Ошибка! Попробуйте повторить запрос позже или обратитесь к разработчику.');
		if(response=="done") {
			nrate=(nact == 0) ? nrate-1 : nrate+1;
			pl=(nrate>0) ? "+" : "";
			document.getElementById(nid).innerHTML =  '<div class="vote voted">'+pl+nrate+'</div>';
		}
}

function noteResponse() {
	var response = xmlHttp.responseText;
		if (response.indexOf("ERRNO") >= 0 || response.indexOf("error:") >= 0 || response.length == 0)
		throw(response.length == 0 ? "Server error." : response);
		if(response=="error")
			alert('Ошибка! Попробуйте повторить запрос позже или обратитесь к разработчику.');
		object.className = '';
		object.value = 'OK';
		if(response=="done") {
			if(text!=="") 
				document.getElementById("dn"+idd).className = "divnote divblock";
			else {
				document.getElementById("tr"+idd).style.display="none";
				document.getElementById("dn"+idd).className = "divnote divnone";
			}
		}

}

function ratethis(id,act,rate,wh) {
	if(xmlHttp) {
		try	{
			if (xmlHttp.readyState == 4 || xmlHttp.readyState == 0) {
				nid = "rate"+id;
				nact = act;
				nrate = rate;
				if(!wh) wh='apho';
				entry = "id="+id+"&act="+act+"&wh="+wh;
				fname = "rateResponse";
				xmlHttp.open("POST", rateAddress, true);
				xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
				xmlHttp.onreadystatechange = handleRequestStateChange;
				xmlHttp.send(entry);
			}
		}
		catch (e) {
			displayError(e.toString());
		}
	}
}

function s_get(type) {
	if(xmlHttp) {
		try	{
			if (xmlHttp.readyState == 4 || xmlHttp.readyState == 0) {
				fname = "gethandler";				
				var str = document.getElementById("name").value;
				all_type = type;
				if(str.length<2) {
					document.getElementById("resdiv").innerHTML = '';
					return false;
				}
				entry = "name="+encodeURIComponent(str)+"&act="+all_type;
				xmlHttp.open("POST", findAddress, true);
				xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
				xmlHttp.onreadystatechange = handleRequestStateChange;
				xmlHttp.send(entry);
			}
		}
		catch (e) {
			displayError(e.toString());
		}
	}
}

function gethandler() {
	var spl = (all_type=='poslovicy-i-pogovorki') ? ";" : ",";
	var response = xmlHttp.responseText;
	if (response.indexOf("ERRNO") >= 0 || response.indexOf("error:") >= 0 || response.length == 0)
		throw(response.length == 0 ? "Server error." : response);
	else if(response=="no") {
		STR = '<span class="err">ничего не найдено</span>';
	}
	else if(response.indexOf(":")!=-1) {
		l = response.split(";");
		x=0;
		STR="";
		Count  = l.length;
		Name   = new Array(Count);
   		TR = new Array(Count);
   		for(i in l) {
			get = l[i].split(':');
			TR[x] = get[0];
			Name[x] = get[1];
			STR += '<a href="/'+all_type+'/'+TR[x]+'/" class="dotted">'+Name[x]+'</a>';
			if(x!=Count-1) STR += spl+' ';
			x++;
   		}
	}
	else {
		STR='';
	}
	document.getElementById("resdiv").innerHTML = '<div>'+STR+'</div>';
}

function addnotes(id) {
	idd = id;
	text = document.getElementById("ta"+id).value;
	object = document.getElementById("but"+id);
	object.className = 'loadinp';
	object.value = '';
	if(xmlHttp) {
		try	{
			if (xmlHttp.readyState == 4 || xmlHttp.readyState == 0) {
				nid = id;
				entry = "id="+id+"&note="+encodeURIComponent(text);
				fname = "noteResponse";
				xmlHttp.open("POST", noteAddress, true);
				xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
				xmlHttp.onreadystatechange = handleRequestStateChange;
				xmlHttp.send(entry);
			}
		}
		catch (e) {
			displayError(e.toString());
		}
	}
}

function select(obj,v) {
	regQid = /^qid(\d){1,7}$/;
	if(regQid.test(obj.id) || xmlHttp) {
		try	{
			if (xmlHttp.readyState == 4 || xmlHttp.readyState == 0) {
				divid = obj.id;
				document.getElementById("l"+divid).style.display="block";
				if(v==1) delthis=1;
				else delthis=0;
				fname = "addResponse";
				entry = "qid="+divid;
				xmlHttp.open("POST", addAddress, true);
				xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
				xmlHttp.onreadystatechange = handleRequestStateChange;
				xmlHttp.send(entry);
			}
		}
		catch (e) {
			displayError(e.toString());
		}
	}
}

function change(obj) {
	obj.className=(obj.className==nclass) ? pclass : nclass;
	obj.title=(obj.className==nclass) ? "Добавить в закладки" : "Убрать из закладок";
}

function displayError($message)
{
  if (showErrors)
  {
    showErrors = false;
    alert("Error encountered: \n" + $message);
  }
}
