var ua = navigator.userAgent;
var Opera = window.opera;
var Mozilla = parseFloat(ua.substring(ua.indexOf("rv:")+3, 100))+parseFloat(ua.substring(ua.indexOf("rv:")+6, 100))/10;
var IE = ((ua.indexOf("Windows") > 0) && !Opera)? parseFloat(ua.substring(ua.indexOf("MSIE")+4, 100)) : 0;
var searchCntRequest;
var returns='';

function trim(string) { return string.replace(/(^\s+)|(\s+$)/g, ""); }

function createRequest(method, url, async, params){
	var request;
	if (window.XMLHttpRequest) {
		request = new XMLHttpRequest();
	} else if (window.ActiveXObject) {
		request = new ActiveXObject("Microsoft.XMLHTTP");
	}
	request.open(method, url + (method == "GET" ? "?" + params : ""), async);
	if (method == "POST") {
		request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
		request.setRequestHeader("Content-length", params.length);
		request.setRequestHeader("Connection", "close");
		request.send(params);
	} else request.send(null);
	return request;
}

function getElementsByClass(searchClass, domNode, tagName) {
	if (domNode == null) domNode = document;
	if (tagName == null) tagName = '*';
	var el = new Array();
	var tags = domNode.getElementsByTagName(tagName);
	var tcl = " " + searchClass+" ";
	var i;
	var j;
	for(i = 0, j = 0; i < tags.length; i++) {
		var test = " " + tags[i].className + " ";
		if (test.indexOf(tcl) != -1)
			el[j++] = tags[i];
	}
	return el;
}

function changeImage(id,src) { document.getElementById(id).src=src; }

function selectElement(el, className) {
	var els = document.getElementsByClassName(className+"_selected");
	var i;
	for (i=0; i<els.length; i++) els[i].className=className;
	el.className = className+"_selected";
}

function selectModel(id) {
	var request = createRequest("GET",returns+"catalogue/ajax/",1,"action=slct_add&model="+id);
	var span = document.getElementById("selectedModelsCount");
	if ( typeof( span ) === 'undefined' || span == null )
		span = opener.document.getElementById("selectedModelsCount");
	var btn = document.getElementById("btnSelectModel" + id);
	span.innerHTML = parseInt(span.innerHTML) + 1;
	btn.className = "unselect_model_btn";
	btn.onclick = new Function('unselectModel('+id+');');
}

function unselectModel(id) {
	var request = createRequest("GET",returns+"catalogue/ajax/",1,"action=slct_remove&model="+id);
	var span = document.getElementById("selectedModelsCount");
	if ( typeof( span ) === 'undefined' || span == null )
		span = opener.document.getElementById("selectedModelsCount");
	var btn = document.getElementById("btnSelectModel" + id);
	span.innerHTML = parseInt(span.innerHTML) - 1;
	btn.className = "select_model_btn";
	btn.onclick = new Function('selectModel('+id+');');
}

function clearSelectedModels() {
	var request = createRequest("GET",returns+"catalogue/ajax/",1,"action=slct_clear");
}

function cartModGoods(goodsId,val,abs,modelId,colorId,sizeId) {
	var params;
	
	if (null == abs) abs = false;
	if (0 <= val)
	{
		params = "action=cart_add&goods="+goodsId+"&count="+val+(abs?'&abs':'');
		if (null != modelId) params += "&model=" + modelId;
		if (null != colorId) params += "&color=" + colorId;
		if (null != sizeId) params += "&size=" + sizeId;
	} else
	{
		params = "action=cart_remove";
		if (null != goodsId && false != goodsId) params += "&goods=" + goodsId;
		if (null != modelId) params += "&model=" + modelId;
	}
	var request = createRequest("GET",returns+"catalogue/ajax/",1,params);
/*	var span = document.getElementById("selectedModelsCount");
	if ( typeof( span ) === 'undefined' || span == null )
		span = opener.document.getElementById("selectedModelsCount");
	var btn = document.getElementById("btnSelectModel" + id);
	span.innerHTML = parseInt(span.innerHTML) + 1;
	btn.className = "unselect_model_btn";
	btn.onclick = new Function('unselectModel('+id+');');
*/
}

function cartModSideStat(difQuant,difMoney)
{
	var qu = $('#cart_side_quant');
	var mo = $('#cart_side_money');
	qu.text(parseInt(qu.text())+difQuant);
	mo.text(parseFloat(mo.text())+difMoney);
}

function clearCart() {
	var request = createRequest("GET",returns+"catalogue/ajax/",1,"action=cart_clear");
}

function sizeTypeClick(btn) {
	var chkbx = btn.nextSibling;
	chkbx.checked = 1;
	var inputs = document.getElementsByName(chkbx.name);
	var i;
	for (i=0; i<inputs.length; i++) inputs[i].previousSibling.className = 'radio_btn_' + (inputs[i].checked ? "checked" : "unchecked");
	showSizes(chkbx.value);
}

function showSizes(type) {
	var groups = document.getElementsByClassName('size_group');
	var i;
	for (i=0; i<groups.length; i++)
		if (type == groups[i].getAttribute('sx')) {
			groups[i].style.display = 'block';
			groups[i].getElementsByTagName('INPUT')[0].click();
		} else groups[i].style.display = 'none';
}

function selectSizeClick(btn,n) {
	var chkbx = btn.nextSibling;
	var inputs = document.getElementsByName(chkbx.name);
	var i;
	for (i=0; i<inputs.length; i++) inputs[i].checked = 0;
	chkbx.checked = 1;
	var span = document.getElementById('spanSz'+n+'Selected');
	span.innerHTML = chkbx.value;
	hideList(btn.parentNode.parentNode.parentNode);
	requestSearchModelsCount();
}

function updateListSelectedCnt(chkbx, gname) {
	switch (gname) {
	case 'Brand': text='брендах'; break;
	case 'Type': text='категорий'; break;
	default: text='';
	}
	var span = document.getElementById('span'+gname+'sSelected');
	span.setAttribute('selectedCnt', (chkbx.checked ? 1 : -1)+parseInt(span.getAttribute('selectedCnt')));
	span.innerHTML="в "+span.getAttribute('selectedCnt')+" из "+span.getAttribute('totalCnt')+" "+text;
}

function styledChkbxClick(btn,chkbx,className) {
	chkbx.checked = chkbx.checked ? 0 : 1;
	if (btn != null) btn.className = chkbx.checked ? className+'_checked' : className+'_unchecked';
}

function searchChkbxBtnClick(gname,id) {
	var btn = document.getElementById('search'+gname+'Btn' + id);
	var chkbx = document.getElementById('search'+gname+'Chkbx' + id);
	styledChkbxClick(btn,chkbx,'chkbx_btn');
	requestSearchModelsCount();
}

function searchGroupSelectOne(gname,id,updateCnt) {
	updateCnt = updateCnt==null ? 1 : updateCnt;
	var btn = document.getElementById('search'+gname+'Btn' + id);
	var chkbx = document.getElementById('search'+gname+'Chkbx' + id);
	if (gname=='Color') styledChkbxClick(btn,chkbx,'color_btn');
	else styledChkbxClick(btn,chkbx,'chkbx_btn');
	if (gname=="Brand"/* || gname=="Type"*/) updateListSelectedCnt(chkbx, gname);
	if (updateCnt) {
		searchGroupCheckAllBtn(gname);
		requestSearchModelsCount();
	}
}

function searchGroupSelectAllClick(gname,changeOnly) {
	var btn = document.getElementById('btn'+gname+'All');
	var cb = document.getElementById('chb'+gname+'All');
	cb.checked = cb.checked ? 0 : 1;
	btn.className = 'radio_btn_' + (cb.checked ? "checked" : "unchecked");
	if (!changeOnly) {
		searchGroupCheckAll(gname,cb.checked);
		requestSearchModelsCount();
	}
}

function searchGroupCheckAll(gname,value) {
	var i;
	var inputs = document.getElementsByTagName("INPUT");
	for (i=0; i<inputs.length; i++){
		if (inputs[i].id!='' && inputs[i].id.substring(0,11+gname.length)=='search'+gname+'Chkbx' && inputs[i].checked!=value)
			searchGroupSelectOne(gname,inputs[i].id.substring(11+gname.length),0);
	}
}

function searchGroupCheckAllBtn(gname) {
	var i, value=1;
	var inputs = document.getElementsByTagName("INPUT");
	for (i=0; i<inputs.length && value; i++)
		if (inputs[i].id!='' && inputs[i].id.substring(0,11+gname.length)=='search'+gname+'Chkbx') value=inputs[i].checked;
	if (document.getElementById('chb'+gname+'All').checked!=value) searchGroupSelectAllClick(gname,1);
}

function requestSearchModelsCount() {
	var i, params='';
	var inputs = document.getElementById("searchForm").getElementsByTagName("INPUT");
	for (i=0; i<inputs.length; i++)
		if (inputs[i].name!='' && inputs[i].type=='checkbox' && inputs[i].checked) params+=(params==''?'':'&')+inputs[i].name+"="+inputs[i].value;
	//alert("catalogue/ajax/?srchCnt&"+params);
	searchCntRequest = createRequest("GET",returns+"catalogue/ajax/",1,"action=srchCnt&"+params);
	searchCntRequest.onreadystatechange = searchCntRequestHandler;
}

function searchCntRequestHandler() {
	if ( searchCntRequest.readyState == 4)
		if ( searchCntRequest.status == 200) {
			var cnt = searchCntRequest.responseText;
			cnt = cnt == '' ? 0 : cnt;
			updateSearchModelsCount(cnt);
		}
}

function getModelWordVariation(count) {
	var dec=count%100;
	var digit=dec%10;
	if (digit==1 && dec!=11) return 'модель';
	if (digit<5 && (dec<10 || dec>20) && digit!=0) return 'модели';
	return 'моделей';
}

function updateSearchModelsCount(value) {
	document.getElementById("searchModelsCntText").innerHTML = "Соответствует<br/>параметрам:";
	document.getElementById("searchModelsCnt").innerHTML = value;
	document.getElementById("searchModelsCntWord").innerHTML = getModelWordVariation(value);
}

function txtSearchStrFocus(input) {
	if (input.value==input.getAttribute('defValue')) input.value='';
}

function txtSearchStrBlur(input) {
	if (trim(input.value)=='') input.value = input.getAttribute('defValue');
}

function showList(el) { el.style.display="block"; }
function hideList(el) { el.style.display="none"; }

function changeSearchformVisibility() {
	var div=document.getElementById("search");
	div.style.display=(div.style.display!="none"?"none":"block");
}

function view_model ( modelId, width, height ) {
	var popup = window.open( '?model=' + modelId + '&view=popup','','width=' + width + ',height=' + height );
}

function showShopsList( aGoodsCounts, oSelect, sTextId, sReturnsPath ) {
	if ( typeof aGoodsCounts == 'undefined' ) 
		return -1;
		
	var oText = document.getElementById( sTextId );
	if ( typeof oText == 'undefined' ) 
		return -2;

	var iSelectedIndex = oSelect.selectedIndex;
	var iId = oSelect.options[ iSelectedIndex ].value;
	
	var sShopsListHtml = '';
	for ( var i = aGoodsCounts.length - 1; i >= 0; i-- ) {
		if ( aGoodsCounts[ i ].id == iId ) {
			for ( var s=0; s < aGoodsCounts[ i ].shops.length; s++ ) {
				// sShopsListHtml += '<a href="' + sReturnsPath + 'about/#shop' + aGoodsCounts[ i ].shops[ s ].id + '" title="' + aGoodsCounts[ i ].shops[ s ].name + '">' + aGoodsCounts[ i ].shops[ s ].name + '</a><br>';
				sShopsListHtml += aGoodsCounts[ i ].shops[ s ].html;
			};
			break;
		}
	};
	
	oText.innerHTML = sShopsListHtml;

	return 0;
}

//------------------------------------------------------------------------------
function checkboxPrettyInit(selector)
{
	if (null==selector) selector = '.pretty_chckbx';
	$(selector).each(function(index){
		var btn = $(this).children(':button');
		var cbx = $(this).children(':checkbox');
		var prtcbx = $(this);
		btn.click(function(){
			cbx.attr('checked', !cbx.is(':checked'));
			cbx.change();
		});
		cbx.change(function(){
			checkboxPrettyRefresh(prtcbx);
		});
	});
	checkboxPrettyRefresh(selector);
}

function checkboxPrettyRefresh(selector)
{
	$(selector).each(function(index){
		var btn = $(this).children(':button');
		var cbx = $(this).children(':checkbox');
		btn.removeClass('chkbx_btn_checked chkbx_btn_unchecked');
		btn.addClass(cbx.is(':checked') ? 'chkbx_btn_checked' : 'chkbx_btn_unchecked');
	});
}

function radiobtnPrettyInit(selector)
{
	if (null==selector) selector = '.pretty_radiobtn';
	$(selector).each(function(index){
		var btn = $(this).children(':button');
		var cbx = $(this).children(':radio');
		var prtcbx = $(this);
		btn.click(function(){
			cbx.attr('checked', true);
			$('[name="'+cbx.attr('name')+'"]').change();
		});
		cbx.change(function(){
			radiobtnPrettyRefresh(prtcbx);
		});
	});
	checkboxPrettyRefresh(selector);
}

function radiobtnPrettyRefresh(selector)
{
	$(selector).each(function(index){
		var btn = $(this).children(':button');
		var cbx = $(this).children(':radio');
		btn.removeClass('radio_btn_checked radio_btn_unchecked');
		btn.addClass(cbx.is(':checked') ? 'radio_btn_checked' : 'radio_btn_unchecked');
	});
}

function checkboxGroupInit(name)
{
	var check_all = $(':checkbox[checkAllGroup="'+name+'"]');
	var chckboxes = $(':checkbox[name="'+name+'"]');
	check_all.change(function(){
		var val=this.checked;
		chckboxes.add(check_all).each(function(){$(this).attr('checked',val); checkboxPrettyRefresh($(this).parent());});
	});
	chckboxes.change(function(){
		var val=true;
		chckboxes.each(function(){val=val && $(this).is(':checked')});
		check_all.attr('checked',val);
		checkboxPrettyRefresh(check_all.parent());
	});
}

function checkboxPrettyGroupInit(name, selector)
{
	if (null==selector) selector = '.pretty_chckbx';
	var check_all = $(':checkbox[checkAllGroup="'+name+'"]');
	var chckboxes = $(':checkbox[name="'+name+'"]');
	$(selector).each(function(index){
		var btn = $(this).children(':button');
		var cbx = $(this).children(':checkbox');
		btn.click(function(){
			cbx.attr('checked', !cbx.is(':checked'));
			cbx.change();
		});
		cbx.filter('[checkAllGroup="'+name+'"]').change(function(){
			cbx.pretty_update();
			var val=this.checked;
			chckboxes.each(function(){$(this).attr('checked',val).pretty_update();});
		});
		cbx.filter('[name="'+name+'"]').change(function(){
			cbx.pretty_update();
			var val=true;
			chckboxes.each(function(){val=val && $(this).is(':checked')});
			check_all.attr('checked',val).pretty_update();
		});
		cbx.pretty_update = function(){
			btn.removeClass('chkbx_btn_checked chkbx_btn_unchecked');
			btn.addClass(cbx.is(':checked') ? 'chkbx_btn_checked' : 'chkbx_btn_unchecked');
		};
	});
}

//------------------------------------------------------------------------------
function popupInit(group)
{
	$('.bubbleInfo').each(function () {
		var distance = 10;
		var time = 250;
		var hideDelay = 500;

		var hideDelayTimer = null;
		var beingShown = false;
		var shown = false;
		var trigger = $('.trigger', this);
		var info = $('.popup', this).css('opacity', 0);
		var info_top = info.css('top');

		$([trigger.get(0), info.get(0)]).mouseover(function () {
			if (hideDelayTimer) clearTimeout(hideDelayTimer);
			if (beingShown || shown) {
				return;
			} else {
				beingShown = true;
				info.css({
					display: 'block',
					top: info_top
				}).animate({
					top: '-=' + distance + 'px',
					opacity: 1
				}, time, 'swing', function() {
					beingShown = false;
					shown = true;
				});
			}

			return false;
		}).mouseout(function () {
			if (hideDelayTimer) clearTimeout(hideDelayTimer);
			hideDelayTimer = setTimeout(function () {
				hideDelayTimer = null;
				info.animate({
					top: '-=' + distance + 'px',
					opacity: 0
				}, time, 'swing', function () {
					shown = false;
					info.css({
						display: 'none',
					});
				});
			}, hideDelay);

			return false;
		});
	});
}

//------------------------------------------------------------------------------
function updownInit()
{
	$('.updown').each(function(){
		var v = $('.value', this);
		var btnd = $('.down', this);
		var btnu = $('.up', this);
		var min = v.attr('min');
		var max = v.attr('max');
		
		function changeval(x)
		{
			v.val(
				Math.max( min, Math.min(
					max, parseInt(v.val())+x)
				)
			);
		}
		function updatebtns()
		{
			if ( min >= v.val() )
				btnd.attr('disabled', 'disabled');
			else
				btnd.removeAttr('disabled');
			if ( max <= v.val() )
				btnu.attr('disabled', 'disabled');
			else
				btnu.removeAttr('disabled');
		}
		
		btnu.click(function(){ changeval(1); updatebtns(); v.change(); });
		btnd.click(function(){ changeval(-1); updatebtns(); v.change(); });
	});
}

$.prototype.hidenremove = function(speed){ this.hide(speed, function(){ $(this).remove()});}

//------------------------------------------------------------------------------
function changeMap( link ) {
	var mapId = link.id.replace( '-link', '' );
	
	$( '#maps_toolbar a.map-link' ).removeClass( 'current' );
	$( link ).addClass( 'current' );
	
	$( '#maps div.map' ).hide();
	
	/* note: reset position for yandex map */
	$( '#maps #' + mapId ).css( 'position', 'relative' ).show();

	return false;
}
