function setCookie(sName, sValue, dDate) {document.cookie = sName + "=" + sValue + ";" + (dDate!=null ? " expires=" + dDate + ";" : "") + " path=/;";}
function removeCookie(sName) {document.cookie = sName + "=; expires=Fri, 31 Dec 1999 23:59:59 GMT; path=/;";}

var loader = {
	iCompletedReq: 0,
	aReq: Array(),
	sendRequest: function(sUrl, fOnLoad, sBody, fOnError) {
		if (!sBody) sMethod = 'GET';
		else sMethod = 'POST';
		var i = this.aReq.length;
		this.aReq[i] = new Object();
		this.aReq[i].req = this.initXMLHTTPRequest();
		if (this.aReq[i]) {
			eval('var fn = function() {var oReq = loader.aReq['+i+']; if (oReq.req.readyState==4) {\
loader.iCompletedReq++; if (oReq.req.status==200 || oReq.req.status==0) \
oReq.onload(oReq.req.responseText, oReq.req.responseXML); \
else oReq.onerror(oReq.req.readyState, oReq.req.status, oReq.req.getAllResponseHeaders());}}');
			this.aReq[i].req.onreadystatechange = fn;
			this.aReq[i].onload = (fOnLoad) ? fOnLoad : this.defaultOnLoad;
			this.aReq[i].onerror = (fOnError) ? fOnError : this.defaultOnError;
			this.aReq[i].req.open(sMethod, sUrl, true);
			this.aReq[i].req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
			if (document.cookie) this.aReq[i].req.setRequestHeader('Cookie', document.cookie);
			this.aReq[i].req.send(sBody);
		}
	},
	initXMLHTTPRequest: function() {
		if (window.XMLHttpRequest) {
			try {return new XMLHttpRequest();} catch (e) {}
		} else if (window.ActiveXObject) {
			try {return new ActiveXObject('Msxml2.XMLHTTP');} catch (e) {}
			try {return new ActiveXObject('Microsoft.XMLHTTP');} catch (e) {}
		}
		return null;
	},
	defaultOnLoad: function(sResponseText, oResponseXML) {
		alert(sResponseText);
	},
	defaultOnError: function(sReadyState, sStatus, sHeaders) {
		alert("error fetching data"+"\n\nreadyState:"+sReadyState+"\nstatus: "+sStatus+"\nheaders:\n"+sHeaders);
	}
}







function loadcategory(projectId, categoryId) {
	var o = document.getElementById('subcategory'+categoryId);
	if (o.innerHTML=='') {
		o.innerHTML = '<img src="asyncload.gif" />';
		eval('var fOnLoad = function(sResponseText) {document.getElementById("subcategory'+categoryId+'").innerHTML = sResponseText;}');
		loader.sendRequest('project_category.php?id='+projectId+'&category='+categoryId, fOnLoad);
	} else if (o.style.display != 'none') o.style.display = 'none';
	else o.style.display = 'block';
}

function loadcategory2(categoryId) {
	var o = document.getElementById('subcategory'+categoryId);
	if (o.innerHTML=='') {
		o.innerHTML = '<img src="asyncload.gif" />';
		eval('var fOnLoad = function(sResponseText) {document.getElementById("subcategory'+categoryId+'").innerHTML = sResponseText;}');
		loader.sendRequest('?category='+categoryId, fOnLoad);
	} else if (o.style.display != 'none') o.style.display = 'none';
	else o.style.display = 'block';
}

var prevProjectId = new Object();

function loadProject(i, projectId)
{
	var s = document.getElementById('s'+projectId);
	var t = document.getElementById('t'+projectId);
	
	//hide prev project
	if (prevProjectId[i])
	{
		var ps = document.getElementById('s'+prevProjectId[i]);
		var pt = document.getElementById('t'+prevProjectId[i]);
		ps.className = 'projectex';
		removeCookie('p'+prevProjectId[i]);
		pt.style.display = 'none';
	}

	//show curr project
	if (t.innerHTML=='')
	{
		s.className = 'projectexa';
		setCookie('p'+projectId, '1');
		t.style.display = 'block';
		t.innerHTML = '<img src="asyncload.gif" />';
		eval('var fOnLoad = function(sResponseText) {var t = document.getElementById("t'+projectId+'"); t.innerHTML = sResponseText; t.style.display = "block"; loadSeo("'+projectId+'")}');
		loader.sendRequest('project.php?id='+projectId, fOnLoad);
		prevProjectId[i] = projectId;
	}
	else if (projectId != prevProjectId[i])
	{
		s.className = 'projectexa';
		setCookie('p'+projectId, '1');
		t.style.display = 'block';
		prevProjectId[i] = projectId;
	}
	else
		prevProjectId[i] = false;
}

function loadSeo(projectId) {
	document.getElementById('seo'+projectId).innerHTML = '<img src="asyncload.gif" />';
	eval('var fOnLoad = function(sResponseText) {document.getElementById("seo'+projectId+'").innerHTML = sResponseText;}');
	loader.sendRequest('seo.php?id='+projectId, fOnLoad);
}

function loadText(projectId, type) {
	var b = document.getElementById('tbody'+type);
	var o = document.getElementById('text'+type);
	if (o.innerHTML=='') {
		b.style.display = '';
		o.innerHTML = '<img src="asyncload.gif" />';
		eval('var fOnLoad = function(sResponseText) {document.getElementById("text'+type+'").innerHTML = sResponseText;}');
		loader.sendRequest('/atext.php?id='+projectId+'&type='+type, fOnLoad);
	} else if (b.style.display != 'none') b.style.display = 'none';
	else b.style.display = '';
}



function execTemplates(s) {
	var p = /\{([^\{\}\|]*(\|[^\{\}\|]*)+)\}/;
	var m;
	while (m = s.match(p)) {
		var ss = m[1].split("|");
		var c = parseInt(Math.floor(Math.random()*ss.length));
		s = s.replace(m[0], ss[c]);
	}
	return s;
}

function viewTexts(type) {
	var src = document.getElementById('textarea'+type);
	var target = document.getElementById('view');

	var lines = src.value.split("\n");
	target.innerHTML = "";
	for (var i=0; i<lines.length; i++) {
		for (var j=0; j<10; j++)
			target.innerHTML += execTemplates(lines[i]) + "<br />\n";
		target.innerHTML += "<br />\n";
	}
}

function setOpacity(level)
{
	var o = document.getElementById('speak');
	if (o)
	{
		o.style.opacity = level;
		o.style.MozOpacity = level;
		o.style.KhtmlOpacity = level;
		o.style.filter = "alpha(opacity=" + (level * 100) + ");";
	}
}

function fadeIn()
{
	for (i = 0; i <= 1; i += (1 / 20))
		setTimeout("setOpacity(" + i + ")", i * 500);
}

function fadeOut()
{
	for (i = 0; i <= 1; i += (1 / 20))
		setTimeout("setOpacity(" + (1 - i) + ")", i * 500);
}

function changeSpeakText(id)
{
	var o = document.getElementById('speak');
	if (o)
	{
		o.className = 'speak smi_'+id;
		document.getElementById('speaktext').innerHTML = document.getElementById(id).innerHTML;
	}
	fadeIn();
}

function speak(id)
{
	if (speak_interval)
	{
		window.clearInterval(speak_interval);
		speak_interval = null;
	}
	if (speak_timeout)
	{
		window.clearTimeout(speak_timeout);
		speak_timeout = null;
	}
	speak_timeout = setTimeout("speak_interval = window.setInterval(nextspeak, 5000)", 15000);
	fadeOut();
	setTimeout("changeSpeakText('" + id + "')", 500);
}

function nextspeak()
{
	var o = document.getElementById('speak');
	if (o)
	{
		var id = 'catalog';
		switch (o.className.substr(10))
		{
			case 'catalog':id = 'notice';break;
			case 'notice':id = 'article';break;
			case 'article':id = 'bookmark';break;
			case 'bookmark':id = 'private';break;
			case 'private':id = 'catalog';break;
		}
		fadeOut();
		setTimeout("changeSpeakText('" + id + "')", 500);
	}
}

var speak_interval = window.setInterval(nextspeak, 5000);
var speak_timeout = null;

function checkFeedback(url)
{
	var req = new XMLHttpRequest();
	req.open('GET', 'checkfeedback.php?url='+encodeURIComponent(url), true);
	req.onreadystatechange = function()
	{
		if (this.readyState==4)
			if (this.status==200)
			{
				switch (this.responseText)
				{
				case 'OK':
					document.getElementById('feedback').innerHTML = 'Есть';
					break;
				case 'Error: script not found':
					document.getElementById('feedback').innerHTML = 'Нет';
					break;
				default:alert(this.responseText);
					document.getElementById('feedback').innerHTML = 
						'<a class="help" href="javascript:dlg.open(\'help.php?q=feedbackincorrect\')">Установлен некорректно</a>';
					break;
				}
			}
			else
			{
				document.getElementById('feedback').innerHTML = 'Нет';
			}
	}
	req.send(null);
}






/**
 * @class AEWindow
 */

var AEWindow = function(zIndex, width, height, overlayClass, modalboxClass, img, error)
{
	this.zIndex = zIndex;
	this.width = width;
	this.height = height;
	this.overlayClass = overlayClass;
	this.modalboxClass = modalboxClass;
	this.img = img;
	this.error = error;


	this.overlay = null;
	this.modalbox = null;

	this.loadingUrl = null;
	this.loadedUrl = null;
}



AEWindow.prototype.open = function(url, body, width, height)
{
	if (width && height)
		this.resize(width, height)

	this.hideModalbox();
	this.showOverlay();
	this.getContents(url, body);
}



AEWindow.prototype.close = function()
{
	this.loadedUrl = null;
	this.hideModalbox(true);
	this.hideOverlay();
}



AEWindow.prototype.resize = function(width, height)
{
	this.width = width;
	this.height = height;

	if (this.modalbox)
	{
		this.modalbox.style.width = width;
		this.modalbox.style.height = height;
	}
}



AEWindow.prototype.submit = function(form)
{
	var url = form.action ? form.action : this.loadedUrl;
	var body = '';
	for (var i=0; i<form.elements.length; i++)
	{
		e = form.elements[i];
		if ((e.type=='checkbox' || e.type=='radio') && !e.checked && !e.selected)
			continue;
		body += e.name+'='+encodeURIComponent(e.value)+'&';
	}
	this.open(url, body);
}



AEWindow.prototype.createCenteredBlock = function(o, bOnlyVerticalCenter)
{
	var table = document.createElement('table');
	o.appendChild(table);
	var tr = table.insertRow(0);
	var td = tr.insertCell(0);
	table.setAttribute('cellspacing', '0');
	table.setAttribute('cellpadding', '0');
	table.setAttribute('width',       '100%');
	table.setAttribute('height',      '100%');
	td.setAttribute('valign',         'middle');
	if (!bOnlyVerticalCenter)
		td.setAttribute('align', 'center');
	return td;
}



AEWindow.prototype.showOverlay = function()
{
	if (!this.overlay) {
		this.overlay = document.createElement('div');
		document.body.appendChild(this.overlay);
		this.overlay.id = '__overlay';
		this.overlay.style.position   = 'fixed';
		this.overlay.style.visibility = 'hidden';
		this.overlay.style.zIndex     = this.zIndex;
		this.overlay.style.left       = '0px';
		this.overlay.style.top        = '0px';
		this.overlay.style.width      = '100%';
		this.overlay.style.height     = '100%';
		this.overlay.style.opacity    = '0.50';
		this.overlay.style.filter     = 'alpha(opacity=50)';
		this.overlay.className = this.overlayClass;
		var cb = this.createCenteredBlock(this.overlay);
		var img = document.createElement('img');
		img.setAttribute('src', this.img);
		cb.appendChild(img);
	}
	this.overlay.style.visibility = 'visible';
}



AEWindow.prototype.hideOverlay = function()
{
	if (this.overlay)
		this.overlay.style.visibility = 'hidden';
}



AEWindow.prototype.showModalbox = function(contents)
{
	if (!this.modalbox) {
		var o2 = document.createElement('div');
		document.body.appendChild(o2);
		o2.style.position   = 'fixed';
		o2.style.visibility = 'hidden';
		o2.style.zIndex     = this.zIndex;
		o2.style.left       = '0px';
		o2.style.top        = '0px';
		o2.style.width      = '100%';
		o2.style.height     = '100%';
		var cb = this.createCenteredBlock(o2, true);
		this.modalbox = document.createElement('div');
		cb.appendChild(this.modalbox);
		this.modalbox.style.width      = this.width;
		this.modalbox.style.height     = this.height;
		this.modalbox.style.margin     = 'auto';
		this.modalbox.style.visibility = 'hidden';
		this.modalbox.className = this.modalboxClass;
	}
	this.modalbox.style.visibility = 'visible';
	this.modalbox.parentNode.parentNode.parentNode.parentNode.style.visibility = 'visible';

	if (contents)
	{
		this.modalbox.innerHTML = contents;
//			.replace(/href\=\"([^\"]+)\"/ig, 'href="javascript:AEWindow.open(\''+this.name+'\', \'$1\')"')
//			.replace(/\<form/ig, '<form onsubmit="AEWindow.submit(\''+this.name
//				+'\', this); return false;" onreset="AEWindow.close(\''+this.name+'\'); return false;"');

		var scripts = this.modalbox.getElementsByTagName('script');
		for (var i=0; i<scripts.length; i++)
			eval(scripts[i].innerHTML);
	}
}



AEWindow.prototype.hideModalbox = function(clear)
{
	if (this.modalbox) {
		this.modalbox.style.visibility = 'hidden';
		this.modalbox.parentNode.parentNode.parentNode.parentNode.style.visibility = 'hidden';
		if (clear)
			this.modalbox.innerHTML = '';
	}
}



AEWindow.prototype.getContents = function(url, body)
{
	this.loadingUrl = url;
	var method = body ? 'POST' : 'GET';
	var req = new XMLHttpRequest();
	req.window = this;
	req.open(method, this.loadingUrl, true);

	if (method=='POST')
		req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');

	if (document.cookie)
		req.setRequestHeader('Cookie', document.cookie);

	req.onreadystatechange = function()
	{
		if (this.readyState!=4)
			return;
		if (this.status==200) {
			this.window.loadedUrl = this.window.loadingUrl;
			this.window.loadingUrl = null;
			this.window.showModalbox(this.responseText);
		} else {
			if (this.window.error)
				alert(this.window.error);
			else
				alert("Error\nreadyState: "
					+this.readyState+"\nstatus: "
					+this.status+"\nheaders:\n"
					+this.getAllResponseHeaders());

			if (this.window.loadedUrl)
				this.window.showModalbox();
			else
				this.window.hideOverlay();
		}
	}
	req.send(body);
}

var dlg = new AEWindow(1, '600px', 'auto', 'dlgOverlay', 'dlgModalbox', '/dlg.gif',
	"Ошибка передачи данных.\nВозможно сервер временно не доступен.\nПовторите попытку позже.");
