function createRequestObject() {
	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;
}

var catalog = new function() {
	var _prevLetter;
	
	var _prevItem;
	var _prevItemId;
	
	var _prevPage;
	var _prevPageId;
	
	this.lang = 'ru';
	
	this.loaderStart = function() {
		document.getElementById('loader').style.display = 'block';
	}
	
	this.loaderEnd = function() {
		document.getElementById('loader').style.display = 'none';
	}
	
	this.letter = function (chr, clicker) {
		req = createRequestObject();
		req.open("GET", "/ajax.php?type=" + ktype + "&action=letter&letter=" + chr + "&l=" + this.lang + "&search=", true);
		req.onreadystatechange = function () {
			if (req.readyState == 4 && req.status == 200) {
				catalog.loaderEnd();
				
				var perpage = 10;
				var cpage = null;
				var selpage = 0;
				var selid = null;
				var count = 0;
				var lastid = 0;
				
				var eitems = document.getElementById("items");
				var epages = document.getElementById("pages");
				var epage = null;
				var eresponse = req.responseXML.documentElement;
				
				eitems.innerHTML = "";
				epages.innerHTML = "";
				
				for (var i = 0; i < eresponse.childNodes.length; i++) {
					var eitem = eresponse.childNodes[i];
					if (eitem.nodeType != 1 || eitem.tagName != "item") { continue; }
					
					var name; var id = eitem.getAttribute('id');
					
					for (var y = 0; y < eitem.childNodes.length; y++) {
						var edata = eitem.childNodes[y];
						if (edata.nodeType != 1) { continue; }
						
						if (edata.tagName == "name") {
							name = edata.firstChild.nodeValue;
						}
					}
					
					if (i % perpage == 0) {
						epage = document.createElement("div");
						 epage.className = 'page';
						 epage.id = 'page-' + i;
						eitems.appendChild(epage);
						
						cpage = i;
						
						epages.innerHTML += ('<span class="js-link-dotted" id="page-clicker-' + i + '" onclick="catalog.page(' + i + ')">' + ((i / perpage) + 1) + '</span> ');
						
					}
					
					var editem = document.createElement("div");
					 editem.className = "catalog-item";
					 var esname = document.createElement("span");
					  esname.id = 'item-' + id;
					  esname.className = "js-link-dotted name";
					  esname.appendChild(document.createTextNode(name));
					  eval('esname.onclick = function() { catalog.expand(' + id + ') }');
					 editem.appendChild(esname);
					 var edplaha = document.createElement("div");
					  edplaha.className = "plaha";
					  edplaha.id = ('item-content-' + id);
					  var edcontents = document.createElement("div");
					   edcontents.id = ('item-contents-' + id);
					   edcontents.className = "contents";
					  edplaha.appendChild(edcontents);
					 editem.appendChild(edplaha);
					
					epage.appendChild(editem);
					
					if (kname == name) {
						selpage = cpage;
						selid = id;
					}
					
					count++;
					lastid = id;
				}
				
				catalog.page(selpage);
				
				if (count == 1) {
					catalog.expand(lastid);
				}
				
				if (selid !== null) {
					catalog.expand(selid);
				}
			}
		}
		
		catalog.loaderStart();
		
		req.send(null);
		
		if (_prevLetter && _prevLetter != clicker) {
			_prevLetter.className = "js-link-dotted";
		}
		clicker.className = "js-link-dotted selected";
		_prevLetter = clicker;
	}
	
	this.load = function (id) {
		var econtents = document.getElementById("item-contents-" + id);
		var plaha = document.getElementById("item-content-" + id);
		
		plaha.className = "plaha loading";
		econtents.innerHTML = "Загружается";
		
		req = createRequestObject();
		req.open("GET", "/ajax.php?type=" + ktype + "&action=content&l=" + this.lang +"&id=" + id, true);
	
		req.onreadystatechange = function () {
			if (req.readyState == 4 && req.status == 200) {
				catalog.loaderEnd();
				
				var contents = req.responseXML.documentElement.firstChild.nodeValue;
				plaha.className = "plaha";
				
				econtents.innerHTML = contents;
			}
		}
		
		catalog.loaderStart();
		
		req.send(null);
	}
	
	this.expand = function (id) {
		var clicker = document.getElementById('item-' + id);
		var econtent = document.getElementById("item-content-" + id);
		var econtents = document.getElementById("item-contents-" + id);
		
		if (_prevItem) {
			_prevItem.className = "js-link-dotted name";
			_prevItemContent = document.getElementById("item-content-" + _prevItemId);
			if (_prevItemContent) {
				_prevItemContent.style.display = 'none'
			}
		}
		
		if (_prevItem != clicker) {
			clicker.className = "js-link-dotted name selected";
			econtent.style.display = 'block';
			_prevItem = clicker;
			_prevItemId = id;
		} else {
			_prevItem = null;
			_prevItemId = null;
		}
		
		if (econtents.innerHTML == "") {
			this.load(id);
		}
	}
	
	this.page = function (id) {
		var econtent = document.getElementById("page-" + id);
		var clicker = document.getElementById("page-clicker-" + id);
		
		if (_prevPage) {
			_prevPage.className = "js-link-dotted name";
			_prevPageContent = document.getElementById("page-" + _prevPageId);
			if (_prevPageContent) {
				_prevPageContent.style.display = 'none'
			}
		}
		
		if (_prevPage != clicker) {
			clicker.className = "js-link-dotted name selected";
			econtent.style.display = 'block';
			_prevPage = clicker;
			_prevPageId = id;
		} else {
			_prevPage = null;
			_prevPageId = null;
		}
	}
}