document.observe('dom:loaded', function(){
	if (Prototype.Browser.Opera) {
		$$('.catalog').each(function(element){
			$('catalog').addClassName('opera');
			window.onresize = function(){
				catWidth();
			};
			catWidth();
		});
	};
	
	/*Букеты на главной - определение числа выводимых букетов и действия при ресайзе*/
	$$('.bouquets').each(function(element){
		set1 = 0;
		set2 = 0;
		$$('.set1').each(function(element){set1++;});
		$$('.set2').each(function(element){set2++;});
		$$('.line1').each(function(element){line1 = element;});
		$$('.line2').each(function(element){line2 = element;});
		window.onresize = function(){
			fl(line1,set1,'f1');
			fl(line2,set2,'f2');
		};
		fl(line1,set1,'f1');
		fl(line2,set2,'f2');
	});
	/*---*/
	
	/*Букеты на главной - действия при наведении на букет*/
	$$('.bouquetlink').each(function(element){
		element.observe('mouseover', function(){
			nID = $(element.rel);
			nIDs = $(element.rel+'s');
			nID.className = "bouquet czbig"
			nIDs.className = "bouquet blink czbig"
		});
		element.observe('mouseout', function(){
			nID = $(element.rel);
			nIDs = $(element.rel+'s');
			nID.className = "bouquet czsmall"
			nIDs.className = "bouquet blink czsmall"
		});
	});
	/*---*/
	
	/*Регистрация - выбор типа пользователя*/
	$$('.user_type').each(function(element){
		element.observe('click', function(){
			element.up().className = element.id;
			var aForm = element.id+'_f';
			if (aForm == 'type1_f'){
				$('type2_f').hide();
				$('type1_f').show();
			}else{
				$('type1_f').hide();
				$('type2_f').show();
			}
		});
	});
	/*---*/
	
	/*Всплывающие окна - Авторизация*/
	$$('.popupshow').each(function(element){
		element.observe('click', function(){
			Effect.toggle('popup', 'appear', {delay: 0, duration: 0.2});
			Effect.toggle('loginform', 'appear', {delay: 0.5, duration: 0.2});
			elToHide = $('loginform');
		});
	});
	/*---*/
	
	/*Всплывающие окна - скрытие активного окна*/
	$$('.popuphide').each(function(element){
		element.observe('click', function(){
			hidePopupObj();
		});
	});
	/*---*/
	
	/*Всплывающие окна - описание продукта и заказ*/
	$$('.catitem').each(function(element){
		element.observe('click', function(){
			productGetMeta(element.id);
		});
	});
	/*---*/
	
	/*Каталог - действия при наведении на букет*/
	$$('.catlink').each(function(element){
		element.observe('mouseover', function(){
			element.up('li').className = "czbig";
		});
		element.observe('mouseout', function(){
			element.up('li').className = "czsmall";
		});
	});
	/*---*/
	
	/*Интерфейс - альтернатива SELECT'у*/
	$$('SPAN.sel').each(function(element){
		lastShowed = '';
		if ((element.id!='order_mail') || (element.id!='order_phone') || (element.id!='order_pay')){
			element.observe('click', function(){
				selSelect = $(element);
				showSelect = $(element.id+"_show");
				if ((lastShowed != '') && (lastShowed != showSelect)){
					selHide(lastShowed,'0px','');
				};
				if (showSelect.getStyle('display') == "none"){
					elPosition = element.cumulativeOffset(); //Получаем координаты элемента по которому кликнули
					elDimensions = element.getDimensions(); //Получаем его размеры
					selDimensions = showSelect.getDimensions(); //Получаем размеры всплывающего окна
					toLeft = elPosition[0]; //Рассчитываем отступ слева
					toTop = elPosition[1]+elDimensions.height/2-selDimensions.height/2; //Рассчитываем отступ справа
					var m = elDimensions.width+15+'px'; //Отступ всплывающего окна от элемента
					showSelect.setStyle({
						left: toLeft+'px',
						top: toTop+'px'
					});
					selHide(showSelect,m,showSelect);
				}else{
					selHide(showSelect,'0px','');
				};
			});
		}
	});
	/*---*/
});

function alternateSelect(element){
	selSelect = $(element);
	showSelect = $(element.id+"_show");
	if ((lastShowed != '') && (lastShowed != showSelect)){
		selHide(lastShowed,'0px','');
	};
	if (showSelect.getStyle('display') == "none"){
		elPosition = element.cumulativeOffset(); //Получаем координаты элемента по которому кликнули
		elDimensions = element.getDimensions(); //Получаем его размеры
		selDimensions = showSelect.getDimensions(); //Получаем размеры всплывающего окна
		toLeft = elPosition[0]; //Рассчитываем отступ слева
		toTop = elPosition[1]+elDimensions.height/2-selDimensions.height/2; //Рассчитываем отступ справа
		var m = elDimensions.width+15+'px'; //Отступ всплывающего окна от элемента
		showSelect.setStyle({
			left: toLeft+'px',
			top: toTop+'px'
		});
		selHide(showSelect,m,showSelect);
	}else{
		selHide(showSelect,'0px','');
	};
}

function hidePopupObj(){ //Скрытие всплывающих окон
	Effect.toggle(elToHide, 'appear', {delay: 0, duration: 0.2});
	Effect.toggle('popup', 'appear', {delay: 0.5, duration: 0.2});
	if (elToHide == $('restoreform')){
		$('loginform').setStyle({
			left: "50%",
			marginLeft: "-207px"
		});
		$('restoreform').setStyle({
			left: "100%",
			marginLeft: "0px"
		});
	};
	if (elToHide == $('byestatus')){
		$('catalogform').setStyle({
			left: "50%",
			marginLeft: "-230px"
		});
		$('byestatus').setStyle({
			left: "100%",
			marginLeft: "0px"
		});
	};
}

function selHide(obj,margin,last){ //Скрытие селекта
	Effect.toggle(obj, 'appear', {delay: 0, duration: 0.8});
	new Effect.Morph(obj, {
		style: {
			marginLeft: margin
		},
		delay: 0, duration: 0.8
	});
	lastShowed = last;
};

function setTime(){ //Установка времени
	var text = 'время';
	var timeFrom = parseInt($('setTimeFrom').value,10);
	var timeTo = parseInt($('setTimeTill').value,10);
	if ((!isNaN(timeFrom)) && (isNaN(timeTo))) timeTo = timeFrom;
	if ((isNaN(timeFrom)) && (!isNaN(timeTo))) timeFrom = timeTo;
	if ((!isNaN(timeFrom)) && (!isNaN(timeTo))){
		if (timeFrom<1) timeFrom = 1;
		if (timeFrom>24) timeFrom = 24;
		if (timeTo<1) timeTo = 1;
		if (timeTo>24) timeTo = 24;
		if (timeTo<timeFrom) timeTo = timeFrom;
		if (timeTo!=timeFrom) text = 'c '+timeFrom+' до '+timeTo+' часов';
		else{
			var hourtext = ' часов';
			if ((timeFrom<5) || (timeFrom>20)) hourtext = ' часа';
			if ((timeFrom==1) || (timeFrom==21)) hourtext = ' час';
			text = 'в '+timeFrom+hourtext;
		}
		selSelect.className = 'sel checked';
	}
	else{
		timeFrom = 0;
		timeTo = 0;
		$('setTimeFrom').value = '';
		$('setTimeTill').value = '';
		selSelect.className = 'sel';
	}
	$('setTimeFrom').value = timeFrom;
	$('setTimeTill').value = timeTo;
	selHide(showSelect,'0px','');
	selSelect.innerHTML = text;
};

function setAddress(){ //Установка адреса
	var correct = true;
	var address = $('order_address_text').value;
	var text = address;
	if (trim(address)==''){
		correct = false;
		text = 'адрес';
	}
	var dtlist = $$('INPUT.radio');
	var checked = false;
	for (var i=0; i<dtlist.length; i++){
		if (dtlist[i].name=='order_delivery_type') if (dtlist[i].checked) checked = true;
	}
	if (!checked) correct = false;
	selHide(showSelect,'0px','');
	selSelect.innerHTML = text;
	selSelect.className = 'sel'+((correct)?' checked':'');
};

function setPayment(obj,id){ //Установка типа оплаты
	selHide(showSelect,'0px','');
	$('order_payment_type').value = id;
	$('order_pay').innerHTML = obj.innerHTML;
	selSelect.className = 'sel checked';
};

function setFromInput(obj,restoreText){ //Установка значения из 1 поля
	selHide(showSelect,'0px','');
	if (trim(obj.value)!=''){
		selSelect.innerHTML = obj.value;
		selSelect.className = 'sel checked';
	}else{
		selSelect.innerHTML = restoreText;
		selSelect.className = 'sel';
	};
};

function setReg(text){ //Регистрация
	selHide(showSelect,'0px','');
	$('reg_text').innerHTML = 'Поздравляем! Вы успешно зарегестрированы на сайте. Регистрационные данные будут высланы на адрес электронной почты <a href="mailto:ivanov@mail.ru">ivanov@mail.ru</a>.';
};

function setRecipient(){ //Автозаполнение данных заказчика
	$('order_recipient_name1').value = $('order_customer_name1').value;
	$('order_recipient_name2').value = $('order_customer_name2').value;
	$('order_recipient_phone').value = $('order_customer_phone').value;
};

function basketDelete(obj){ //Удалить элемент из корзины
	new Effect.Fade(obj, {from: 1, to: 0, duration: 1});
	$(obj).addClassName('todelete');
	var num = parseInt(obj.replace(/^tr([0-9]+)$/,'$1'),10);
	if (isNaN(num)) num = 0;
	if (num>0){
		$('basket_view_'+num+'_count').value = '';
		var product_id = $('basket_view_'+num+'_count').name.replace(/^basket_product_([0-9]+)_count$/,'$1');
		var ao = new ajaxInit('/inc/ajax/productdelete.php','');
		ao.sendPost('product_id='+product_id+'&uniqueBuyCode='+uniqueBuyCode);
	}
	var actcount = basketRecount();
	if (actcount==0){
		$('left').innerHTML = '<div class="padding"><div class="title"><h2><span>Моя корзина</span></h2></div><h3>Ваша корзина пуста</h3></div>';
	}
};
function basketRecount(){
	var totalsum = 0;
	var price = 0;
	var count = 0;
	var sum = 0;
	var num = 0;
	var actcount = 0;
	var counternum = 0;
	var ilist = $$('INPUT.input.tright');
	for (var i=0; i<ilist.length; i++){
		if (ilist[i].name.match(/^basket_product_[0-9]+_count$/)){
			counternum = ilist[i].id.replace(/^basket_view_([0-9]+)_count$/,'$1');
			if (!$('tr'+counternum).hasClassName('todelete')) actcount++;
			num = ilist[i].name.replace(/^basket_product_([0-9]+)_count$/,'$1');
			count = parseInt(ilist[i].value,10);
			if (isNaN(count)) count = 0;
			if (count<0) count = 0;
			ilist[i].value = count;
			price = parseInt($('basket_product_'+num+'_price').innerHTML,10);
			if (isNaN(price)) price = 0;
			if (price<0) price = 0;
			sum = price*count;
			$('basket_product_'+num+'_sum').innerHTML = sum;
			if ($('tr'+counternum).hasClassName('todelete')) sum = 0;
			totalsum+= sum;
		}
	}
	$('basket_view_totalsum').innerHTML = totalsum+' рублей';
	return actcount;
}

function reversForms(obj1,obj2){ //Смена всплывающих окон
	obj1el = $(obj1);
	obj2el = $(obj2);
	obj1elDem = obj1el.getDimensions(); //Получаем его размеры
	obj2elDem = obj2el.getDimensions(); //Получаем его размеры
	obj1elW = obj1elDem.width;
	obj2elW = obj2elDem.width;
	new Effect.Morph(obj1el, {
		style: {
			left: "0%",
			marginLeft: -1*obj1elW+"px"
		},
		delay: 0, duration: 0.5
	});
	new Effect.Fade(obj1el, {from: 1, to: 0, delay: 0, duration: 0.5});
	obj2el.show();
	new Effect.Morph(obj2el, {
		style: {
			left: "50%",
			marginLeft: -1*obj2elW/2+"px"
		},
		delay: 0.4, duration: 0.5
	});
	new Effect.Fade(obj2el, {from: 0, to: 1, delay: 0.4, duration: 0.5});
	elToHide = obj2el;
};

function fl(obj,set,ids){ //Автоматическое определение ширины под букеты на главной
	docWidth = $('main').getWidth();
	lineWidth = obj.getWidth();
	temp1 = docWidth/214;
	temp1 = temp1.floor();
	if (ids == 'f2'){temp1--};
	elements = set;
	xx = (elements-elements-temp1*-1)+1;
	for(var i=1; i<temp1+1; i++){
		el = ids+i;
		elLink = ids+i+'s';
		$(el).show();
		$(elLink).show();
		nWidth = i*214+'px';
		obj.setStyle({
			width: nWidth
		});
	};
	for(var i=xx; i<elements; i++){
		el = ids+i;
		elLink = ids+i+'s';
		$(el).hide();
		$(elLink).hide();
	};
};

function catWidth(){ //Автоматическое определение ширины под букеты в каталоге (только для Opera)
	ulDocWidth = $('body').getWidth();
	temp2 = ulDocWidth/214;
	temp2 = temp2.floor();
	$('ulcatalog').setStyle({
		width: temp2*214+"px"
	});
};

function uniqueCheckForm(buttonid,inputids){ // проверка заполненности формы
	var button = $(buttonid);
	var d = false;
	for (var i=0; i<inputids.length; i++){
		var io = $(inputids[i]);
		if (trim(io.value)=='') d = true;
	}
	button.writeAttribute('disabled',d);
	if (d) button.up('div').addClassName('disabled');
	else button.up('div').removeClassName('disabled');
}

/*PNG прозрачность*/
function fixPNG(element){
	if (/MSIE (5\.5|6).+Win/.test(navigator.userAgent)){
		var src;
		if (element.tagName=='IMG'){
			if (/\.png$/.test(element.src)){
				src = element.src;
				element.src = "/pics/blank.gif";
			};
		}else{
			src = element.currentStyle.backgroundImage.match(/url\("(.+\.png)"\)/i);
			if (src){
				src = src[1];
				element.runtimeStyle.backgroundImage="none";
			};
		};
		if (src) element.runtimeStyle.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + src + "',sizingMethod='scale')";
	};
};
/*---*/

/*Всплывающие окна - описание продукта и заказ*/
function productGetMeta(id){
	var ao = new ajaxInit('/inc/ajax/productmeta.php','productOnLoadMeta(response);');
	ao.sendPost('id='+id);
}
function productOnLoadMeta(meta){
	meta = meta.split('|');
	if (meta[0]>0){
		if (meta[1]>0) $('catalogform').addClassName('desc');
		else  $('catalogform').removeClassName('desc');
		$('catalogform').innerHTML = '<div class="fbg"></div><div class="floaded"><img src="/pics/wait.gif" width="48" height="48" alt=""/></div>';
		Effect.toggle('popup', 'appear', {delay: 0, duration: 0.2});
		Effect.toggle('catalogform', 'appear', {delay: 0.5, duration: 0.2});
		elToHide = $('catalogform');
		productGetView(meta[0]);
	}
}
function productGetView(id){
	var ao = new ajaxInit('/inc/ajax/productview.php','productOnLoadView(response);');
	ao.sendPost('id='+id+'&uniqueBuyCode='+uniqueBuyCode);
}
function productOnLoadView(htmlcode){
	$('catalogform').innerHTML = htmlcode;
}
function productViewRecountSum(){
	var count = parseInt($('view_product_count').value,10);
	if (isNaN(count)) count = 0;
	if (count<0) count = 0;
	var price = parseInt($('view_product_price').value,10);
	if (isNaN(price)) price = 0;
	if (price<0) price = 0;
	$('view_product_totalsum').value = price*count;
}
function productViewFormSubmit(f){
	f = $(f);
	var showBasketView = parseInt(f.down('INPUT#view_product_showafterbuy').value,10);
	if (isNaN(showBasketView)) showBasketView = 1;
	var product_id = parseInt(f.down('INPUT#view_product_id').value,10);
	if (isNaN(product_id)) product_id = 1;
	var product_count = parseInt(f.down('INPUT#view_product_count').value,10);
	if (isNaN(product_count)) product_count = 1;
	if (showBasketView>0){
		$('byestatus').innerHTML = '<div class="fbg"></div><form><div class="title fl">Регистрация покупки, пожалуйста подождите...</div><div class="floaded"><img src="/pics/wait.gif" width="48" height="48" alt=""/></div></form>';
		reversForms('catalogform','byestatus');
		window.setTimeout('productBuyRegistration('+product_id+','+product_count+',"productOnLoadBuy(response);")',2000);
	}
	else{
		productBuyRegistration(product_id,product_count,'productUpdateBasket();');
		hidePopupObj();
	}
}
function productBuyRegistration(product_id,product_count,onload){
	var ao = new ajaxInit('/inc/ajax/productbuy.php',onload);
	ao.sendPost('product_id='+product_id+'&product_count='+product_count+'&uniqueBuyCode='+uniqueBuyCode);
}
function productOnLoadBuy(response){
	$('byestatus').innerHTML = response;
	productUpdateBasket();
}
function productUpdateBasket(){
	if ($('catalogue_basket')){
		var ao = new ajaxInit('/inc/ajax/basket.php','productUpdateBasketOnLoad(response)');
		ao.sendPost('uniqueBuyCode='+uniqueBuyCode);
	}
}
function productUpdateBasketOnLoad(response){
	$('catalogue_basket').innerHTML = response;
}
function showBasketViewChange(show){
	var ao = new ajaxInit('/inc/ajax/basketviewchange.php','');
	ao.sendPost('show='+show+'&uniqueBuyCode='+uniqueBuyCode);
}
/*---*/

function trim(s){ return s.replace(/^(\s*)/,"$`").replace(/(\s*)$/,"$'"); }

function ajaxInit(url,oncomplete){
	url += ((url.indexOf('?')>-1)?'&':'?') + 'uniqueID=' + (new Date()).getTime();
	var req = (window.XMLHttpRequest) ? new XMLHttpRequest : new ActiveXObject("Microsoft.XMLHTTP");
	req.onreadystatechange = processRequest;
	function processRequest(){
		if (req.readyState == 4){
			if (req.status == 200){
				var response = req.responseText;
				if (oncomplete!='') eval(oncomplete);
			}
		}
	}
	this.sendPost = function(postStr){
		req.open("POST", url, true);
		req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
		req.send(postStr);
	}
}

function productViewGalleryShow(el){
	el = $(el);
	var previewParent = el.up();
	previewParent.childElements().each(function(element){
		element.removeClassName('active');
	});
	el.addClassName('active');
	var fullimageParent = previewParent.previous(".fullimage");
	var previousImage = fullimageParent.down("IMG");
	fullimageParent.innerHTML = '<img src="'+el.readAttribute('href')+'" width="'+previousImage.readAttribute('width')+'" height="'+previousImage.readAttribute('height')+'" alt="'+el.down("IMG").readAttribute('alt')+'" title="'+el.down("IMG").readAttribute('title')+'"/>';
}

function increaseCounter(el){
	var input = false;
	var parent = $(el.parentNode);
	parent.childElements().each(function(element){
		if (element.tagName=='INPUT') input = element;
	});
	if (input){
		var n = parseInt(input.value,10);
		if (isNaN(n)) n = 0;
		n++;
		if (n<1) n = 1;
		input.value = n;
	}
}

function decreaseCounter(el){
	var input = false;
	var parent = $(el.parentNode);
	parent.childElements().each(function(element){
		if (element.tagName=='INPUT') input = element;
	});
	if (input){
		var n = parseInt(input.value,10);
		if (isNaN(n)) n = 0;
		n--;
		if (n<0) n = 0;
		input.value = n;
	}
}

function CalendarLoad(name,value){
	value = validateDate(value);
	var mainparent = $(name+'_calendar');
	if (!mainparent) return false;
	value = value.split('.');
	var m = parseInt(value[1],10);
	var y = parseInt(value[2],10);
	CalendarBuild(name,m,y);
}
function CalendarBuild(name,m,y){
	var date = new Date();
	var nowDateMonth = parseInt(date.getMonth(),10)+1;
	var prevy = y;
	var prevm = m-1; if (prevm<1) { prevm = 12; prevy = prevy-1; }
	var nexty = y;
	var nextm = m+1; if (nextm>12) { nextm = 1; nexty = nexty+1; }
	var startdate = new Date(); startdate.setFullYear(y,m-1,1);
	var startday = startdate.getDay(); if (startday==0) startday = 7;
	var prevmaxday = getMonthDaysCount((m>1)?m-1:12,y);
	var maxday = getMonthDaysCount(m,y);
	var calendarInside = '';
	for (var i=1; i<startday; i++) calendarInside = calendarInside+'<span>&nbsp;</span>';
	for (var i=1; i<=maxday; i++) calendarInside = calendarInside+'<a href="javascript:;"'+(((i==date.getDate()) && (m==nowDateMonth) && (y==date.getFullYear()))?' class="now"':'')+' onclick="CalendarSelect(\''+name+'\',\''+i+'.'+m+'.'+y+'\')">'+i+'</a>';
	var nextmonthcount = (startday-1+maxday)%7;
	if (nextmonthcount>0) for (var i=1; i<=(7-nextmonthcount); i++) calendarInside = calendarInside+'<span>&nbsp;</span>';
	obj = $(name+'_calendar'); if (!obj) return;
	var prevhref = '<a href="javascript:CalendarBuild(\''+name+'\','+prevm+','+prevy+')"><img src="/pics/back.gif" width="16" height="7" alt=""/></a>';
	var nexthref = '<a href="javascript:CalendarBuild(\''+name+'\','+nextm+','+nexty+')"><img src="/pics/next.gif" width="16" height="7" alt=""/></a>';
	obj.innerHTML = '<div class="year">'+prevhref+getMonthName(m)+' '+y+nexthref+'</div><div class="days">'+calendarInside+'</div>';
}
function CalendarSelect(name,value){
	value = validateDate(value);
	var dmyvalue = value.split('.');
	$(name).value = value;
	selHide(showSelect,'0px','');
	selSelect.innerHTML = parseInt(dmyvalue[0],10)+' '+getMonthRName(parseInt(dmyvalue[1],10))+' '+dmyvalue[2];
	selSelect.className = 'sel checked';
}
function getMonthDaysCount(m,y){
	m = parseInt(m,10) - 1; if (isNaN(m)) return 31;
	y = parseInt(y,10); if (isNaN(y)) return 31;
	var	VVMonths = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
	var	NVMonths = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
	if ((y%4)==0){ if ((y%100)==0 && (y%400)!=0) return VVMonths[m]; return NVMonths[m]; }
	else return VVMonths[m];
}
function getMonthName(m){
	m = parseInt(m,10) - 1; if (isNaN(m)) return '';
	var	monthsNames = ["Январь","Февраль","Март","Апрель","Май","Июнь","Июль","Август","Сентябрь","Октябрь","Ноябрь","Декабрь"];
	return monthsNames[m];
}
function getMonthRName(m){
	m = parseInt(m,10) - 1; if (isNaN(m)) return '';
	var	monthsNames = ["января","февраля","марта","апреля","мая","июня","июля","августа","сентября","октября","ноября","декабря"];
	return monthsNames[m];
}
function validateDate(date){
	var error = false;
	var retval = new Date();
	date = date.split('.');
	var d = parseInt(date[0],10);
	var m = parseInt(date[1],10);
	var y = parseInt(date[2],10);
	if (isNaN(d) || isNaN(m) || isNaN(y)) error = true;
	if ((y<1000) || (y>3000)) error = true;
	if ((m<1) || (m>12)) error = true;
	if ((d<1) || (d>getMonthDaysCount(m,y))) error = true;
	if (!error) retval.setFullYear(y,m-1,d);
	d = retval.getDate().toString(); if (d.length==1) d = "0"+d;
	m = (retval.getMonth()+1).toString(); if (m.length==1) m = "0"+m;
	y = retval.getFullYear().toString();
	return d+'.'+m+'.'+y;
}
