(function(){
//wrapper


function ajax(url, params, method, handler) {
	if(!url) url = document.location.protocol + '//' + document.location.hostname +
								 document.location.pathname + document.location.search;
	handler  = handler || function(){};
	var pick = function() {
		var v  = [
			function(){return new XMLHttpRequest()},
			function(){return new ActiveXObject("Msxml2.XMLHTTP")},
			function(){return new ActiveXObject("Msxml3.XMLHTTP")},
			function(){return new ActiveXObject("Microsoft.XMLHTTP")}
		], result
		for(var i=0,l=v.length; i<l; i++) {
			try { result = v[i]();
			} catch(exc) {continue}
			break
		}
		return result;
	}
	var provider = pick();
	var xmlhttp  = provider;
	var closure  = function() {
		try {
		handler({readyState: xmlhttp.readyState,
						 statusCode:(xmlhttp.readyState==4) ? xmlhttp.status : null,
						 responseJS:(xmlhttp.readyState==4 && xmlhttp.status==200) ?
										(function(x){var r = '';try{eval('try{r='+(x.responseText || 'null')+'}catch(e){}');}catch(e){}return r})(xmlhttp) : null
						 })
		} catch(exc) {
			if(xmlhttp.readyState==4) {
				alert('После ответа сервера возникла критическая ошибка!\nПожалуйста, сообщите об этом разработчику\nИнформация об ошибке: '+exc.toString());
			}
		}
		if(xmlhttp.readyState==4) {
			xmlhttp = null;
		}
	}
	if(params.join) params = params.join('&');
	if(method=='get') url += (url.match(/\?/) ? '&' : '?') + params;
	url += (url.match(/\?/) ? '&' : '?') + '$js=' + ((new Date()).getTime());
	try {
		provider.open(method, url.toLowerCase(), true);
		provider.onreadystatechange = closure;
		provider.setRequestHeader('X-Requested-With', 'CherryAjax');
		if(method=='post') provider.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
		provider.setRequestHeader('Accept', 'text/javascript, text/html, application/xml, text/xml, */*');
		provider.setRequestHeader('Connection', 'close');
		provider.send(method=='post' ? params : null);
	} catch(exc) {
		if(window.console && console.log) {
			console.log(exc);
		}
	};
	return provider
}

var opacity = function(node, value) {
	var op = parseInt(value, 10);
	if(node.filters) {
		var alph = null;
		try {
			alph = (node.filters['DXImageTransform.Microsoft.alpha'] || node.filters.alpha);
		} catch(e) {}
		if(alph) alph.opacity = op;
		else node.style.filter += "progid:DXImageTransform.Microsoft.Alpha(opacity="+op+")";
	} else {
		var aop = op / 100
		node.style.opacity = aop;
		node.style.MozOpacity = aop;
		node.style.KhtmlOpacity = aop;
	}
}


function update_basket_test(all, items, total, currency) {
	console.log(all, items, total, currency);
}

function update_basket(all, items, total, currency) {
	var fade = true, interval = 100, step = 50;
	var _ = function(e){return document.getElementById(e)};
	_('basket_all_value').innerHTML = all;
	_('basket_total_value').innerHTML = total;
	_('pop_up').style.display = 'block';
	var op = 0;
	if(fade) {
		opacity(_('pop_up'), op);
		var fdi = setInterval(function(){
			op += step;
			if(op > 100) op = 100;
			opacity(_('pop_up'), op);
			if(op==100) clearInterval(fdi);
		}, interval);
	}
	window.scrollTo(0, 0); var flag = true;
	var blink = setInterval(function(){
		_('basket_logo').className = flag ? 'basket_logo_red' : '';
		flag = !flag;
	}, 500);
	setTimeout(function(){
		if(fade) {
			opacity(_('pop_up'), 100);
			var fdi = setInterval(function(){
				op -= step;
				if(op < 0) op = 0;
				opacity(_('pop_up'), op);
				if(op==0) {
					clearInterval(fdi);
					_('pop_up').style.display = 'none';
				}
			}, interval);
		} else {
			_('pop_up').style.display = 'none';
		}
		_('basket_logo').className = '';
		clearInterval(blink);
	}, 5000);
};

(function(update_handler){
	var changeLink = function(link){
		var handler = function(e) {
			e.returnValue = false;
			if(e.preventDefault) {
				e.preventDefault();
			}
			ajax(link.getAttribute('href'), '', 'get', function(xmlhttp){
				if(xmlhttp.readyState==4) {
					var result = xmlhttp.responseJS;
					update_handler(result.all, result.items, result.total, result.currency);
				}
			});
		}
		if(link.addEventListener) {
			link.addEventListener('click', handler, false);
		} else if(link.attachEvent) {
			link.attachEvent('onclick', handler);
		} else {
			link.onclick = handler;
		}
	}
	var list = document.getElementsByTagName('a');
	for(var i=0,l=list.length; i<l; i++) {
		if(list[i].className && list[i].className=='ajax_request') {
			changeLink(list[i]);
		}
	}
})(update_basket);


//wrapper
})();
