	
	function random_string(l) {
		
		// chars
		var ch = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz";
		
		// string length
		var sl = l;
		
		// random string
		var rs = '';
		
		for (var i=0; i<sl; i++) {
			
			// random number
			var rn = Math.floor(Math.random() * ch.length);
			
			rs += ch.substring(rn, rn + 1);
			
		}
		
		return rs;
		
	}
	
	function HTMLHttpCompare() {
		
		// if DOM 2 supports
		if (window.addEventListener) {
			
			window.addEventListener('load', this.onloadListener, false);
		
		// if IE
		} else if (window.attachEvent) {
			
			window.attachEvent('onload', this.onloadListener);
			
		// DOM 0 support
		} else if (window.onload) {
			
			window.onload = this.onloadListener;
			
		}
		
	}
	
	HTMLHttpCompare.prototype.onloadListener = function() {
		e = document.getElementsByName('compare_submit');
		for (var i = 0; i < e.length; i++) {
			e[i].onclick = function() {
				var btn = this;
				//request object
				var transact = new HTMLHttpRequest('transact', transactCallback);
				//containers prefixes
				var buttonPref = 'compare_submit_';
				var infoPref = 'compare_info_';
				var formPref = 'compare_form_';
				//item id
				var itemId = 0;
				if (this.id.lastIndexOf(buttonPref) != -1) {
					itemId = parseInt(this.id.substr(buttonPref.length));
				}
				//containers
				var info = document.getElementById(infoPref + itemId);
				var form = document.getElementById(formPref + itemId);
				if (!form) {
					alert('Fatal error: can`t find item form');
					return false;
				}
								
				if (!form.action) {
					alert('Fatal error: action param is not defined');
					return false;
				}
				
				var URL = '';
				URL += form.url.value;
				URL += '/~action=' + form.action.value + '~itemid=' + itemId;
				URL += '~' + random_string(32) + '.ajax';		

				transact.load(URL);
				
				btn.disabled = true;
				info.innerHTML = 'Пожалуйста, подождите...';
				
				function transactCallback(DOM) {
					var xmldata = this.getXML();
					
					var statusCode = xmldata.getElementsByTagName('code')[0].childNodes[0] ? xmldata.getElementsByTagName('code')[0].childNodes[0].nodeValue : '';
					var statusMsg = xmldata.getElementsByTagName('msg')[0].childNodes[0] ? xmldata.getElementsByTagName('msg')[0].childNodes[0].nodeValue : '';
					
					if (statusCode == 1) {
						switch (form.action.value) {
							case 'place':								
								info.innerHTML = statusMsg;
								btn.value = 'Удалить из сравнения';
								form.action.value = 'remove';								
							break;
							case 'remove':		
								info.innerHTML = statusMsg;
								btn.value = 'Добавить для сравнения';
								form.action.value = 'place';								
							break;
						}				
						btn.disabled = false;
					}
				}
				
			}
		}
	}
	
	Compare = new HTMLHttpCompare();
