/*
 	terem.js
*/


/**
 * t_basket
 * @return {}
 */
// alert(document.cookie);
function t_basket(){
	// ссылка на объект корзины
	var basket = this;

	// XMLHttpRequest
	basket.request = null;

	// Состояния запроса
	var XHR_REQUEST = 0,
		XHR_SUCCESS = 1,
		XHR_CANCELED = 3;

	// количество элементов в корзине
	var basket_count = $('Basket_Count');
	// общая сумма заказа
	var basket_price = $('Basket_Price');
	// ссылка на корзину
	var basket_readon = $('Basket_Readon');
		basket_readon_visible = basket_readon.onclick instanceof Function ? basket_readon.onclick() : true;

	if(!basket_readon.hasClass('compare')){//
		basket_readon.onclick = null;
	};

	basket_readon.removeAttribute('onclick');

	// Скрыть ссылку на корзину если товаров в ней нет
	if( !basket_readon_visible ) {
		basket_readon.setStyle( 'visibility', 'hidden');
	}else{
		basket_readon.setStyle( 'visibility', 'visible');
	}

	/**
	 *
	 * @param {HTMLElement} basketContainer
	 * @param {String} [sBasketActionURL] Опционально, по-умолчанию значение аттрибута "action" у basketContainer
	 */
	function initBasket( basketContainer, sBasketActionURL ) {
		//var x_add = $$('#' + id + ' .x-add');
		var x_add = $(basketContainer).getElements('.x-add');

		basket.request = newRequest(basketContainer, sBasketActionURL);
		if( !basket.request ) {
			return false;
		}
		basket.request.addEvents({
			onRequest: function( instanse ){
				//console.log('Request begins');
				return XHR_REQUEST;
			},
			onSuccess: function( response ){
				//console.log( 'Request ended successfully' );

				// TODO: Обновить корзину (@param "response" -- ответ сервера)
				//console.log(response["basketCount"]);
				basket_count.set( 'text', response["basketCount"] );
				//basket_price.set( 'text', (response["basketPrice"].round(2) + ' р.') );
				var nf = new NumberFormat(response["basketPrice"]);
				nf.setPlaces(2);
				nf.setSeparators(true, '\u00a0', ',');				
				basket_price.set( 'text', (nf.toFormatted() + '\u00a0р.') );
//console.log(response["basketPrice"]);

				// Отобразить ссылку на страницу с корзиной после добавления товара
				if( !basket_readon_visible ) {
					basket_readon.setStyle('visibility', 'visible');
				}

				return XHR_SUCCESS;
			}
		});

		//console.log( basket.request );

		if( !x_add.length ){
			return false;
		}

		// Класс для AJAX корзины
		x_add.addClass('x-js');

		// Изображение с процессом загрузки
		var IMGLoader = new Element('img', {
			'src': '/_pic/loader.gif',
			'class': 'loader'
		});

		x_add.each( function(item, index){
			//item.addClass('x-js');

			//var x_loader = IMGLoader.clone();
			item.loading = IMGLoader.clone();
			( item.getParent() ).grab( item.loading );

			// TESTME IE memory leaks
			/**
			 * 	кнопка добавить/отправить
			 * 	@param "state"
			 * 		"add": 	добавить товар (отобразить форму добавления товара)
			 * 		"send": отправить товар в корзину (+скрыть форму)
			 */
			item.btn = item.getElement('input.ico-cart');
			item.btn.state = 'add';


			/*
			 * 	Event listeners
			 */
			// Кнопка с корзиной
			item.btn.addEvent('click', function(){
				if( this.state == 'add' ){
					show_xbar( this );
					this.state = 'send';
				} else if( this.state == 'send' ){
					hide_xbar( this );
					this.state = 'add';
				}

				return false;
			});

			// Количество (input[type = text])
			item.i_text = item.getElement('input[type=text]');

			item.i_text.addEvents({
				'focus': function(){

				},
				'blur': function(){
					//hide_xbar( this );
				},
				'keydown': function( event ){
					if( event.key == 'enter' ){
						hide_xbar( this );
						item.btn.state = 'add';
					}
				}
			});

		} );
	}

	/**
	 *
	 * @param {HTMLElement} oBasket
	 * @param {String} [sUrl]
	 * @return {XMLHttpRequest}
	 */
	function newRequest( oBasket, sUrl ) {
		var sBasketActionURI = sUrl || oBasket.getAttribute('action'),
			sBasketRequestMethod = oBasket.getAttribute('method') || 'post',
			sBasketQueryString = '?' + (collectRequest( oBasket ) || '') + 'ajax=1';

		/** */
		return new Request.JSON({url: sBasketActionURI + sBasketQueryString, method: sBasketRequestMethod});
	}


	/**
	 *
	 */
	function show_xbar( el ){
		el = $(el);

		var x_addwrap = new Element('div', {'class':'x-add-wrap'});
		x_addwrap.wraps( el.getParent('div.x-add') );

		var i_text = x_addwrap.getElement('input.text');
		i_text.defValue = parseInt( i_text.value );
		i_text.focus();
	};

	/**
	 *
	 */
	function hide_xbar( el ){
		var x_addwrap = $(el).getParent('div.x-add-wrap');
		var i_text = x_addwrap.getElement('input.text');

		// принудительный repaint страницы, hello, opera
		x_addwrap.style.visibility = 'hidden';

		( x_addwrap.getChildren() ).replaces( x_addwrap );

		// Отправлять форму только если предыдущее количество измененно
		if( parseInt( i_text.value ) !== i_text.defValue  ){
			//var basket = i_text.form;

			// строка запроса (чтобы не отправлять всю форму)
			//var rq = collectRequest( basket ) + i_text.getProperty('name') + '=' + i_text.getProperty('value') + '&ajax=1';

			// картинка с процессом загрузки для данного товара
	/*pasaha*/
   	//	var item_loader = $(el).getParent('.basket_count').getChildren('img.loader');


			var itemToAdd = {
				name: i_text.getProperty('name'),
				count: i_text.getProperty('value')
			};
			addToCart( itemToAdd );


			/*
			 * FIXME
			 * Vii: Получается что для каждого товара создается отдельный объект Request? [2009/06/02]
			 */

			/*
			// отправлять только текущую позицию каталога (см. http://mootools.net/docs/Request/Request)
			var basketRequest = new Request.JSON({url: basket.action, method: basket.method}).addEvents({
				onRequest: function( instanse ){
					//console.log('Request begins');
					item_loader.setStyle('display', 'block');
				},
				onSuccess: function( response ){
					//console.log( 'Request ended successfully' );
					item_loader.setStyle('display', 'none');

					// TODO: Обновить корзину (@param "response" -- ответ сервера)
					//console.log(response["basketCount"]);
					basket_count.set( 'text', response["basketCount"] );
					basket_price.set( 'text', (response["basketPrice"].round(2) + ' р.') );

					// Отобразить ссылку на страницу с корзиной после добавления товара
					if( !basket_readon_visible ) {
						basket_readon.setStyle('display', '');
					}

					basketRequest = null;
				}
			});

			basketRequest.send.delay(20, basketRequest, rq);
			*/
		}
	};

	/**
	 * @returns строка запроса состоящая только из hidden полей
	 */
	function collectRequest( form ){
		var hiddens = $(form).getChildren('input[type=hidden]');
		var req = '';

		hiddens.each( function(it, ix){
			req += it.getProperty('name') + '=' + it.getProperty('value') + '&';
		} );

		return req;
	};

	/**
	 * @param {Object} item NAME:COUNT -hash объекта который необходимо добавить
	 */
	function addToCart( item ) {

		if( !basket.request ) {
			return false;
		}

		var rq = item.name + '=' + item.count

		return basket.request.send(rq);
		//basketRequest.send.delay(20, basketRequest, rq);
	}

	/*
	 * Vii:
	 * Public-метод для управления корзиной в том числе из карточки товара
	 * [2009/06/04]
	 */

	return {
		/**
		 *
		 * @type
		 */
		create: initBasket
	}

}

/**
 * 	Добавить/удалить из сравнения
 */
function t_compare() {
	var CompareUID = $('Compare_UID');
	if( !CompareUID ) {
		return false;
	}

	//var compare_readon = $$('#Compare_UID a.readon');
	var compare_readon = CompareUID.getElement('a.readon');
	var input_compare = $$('form#BasketGoods .x-compare');

	if( input_compare ) {
		//var form_url = input_compare[0].form.action;
		var form_url = $('compareID').getProperty('value');

		var CompareReq = new Request( {method: 'post', url: form_url} );
		CompareReq.onSuccess = function( sResponseText ){
			compare_readon.setStyle('visibility', !!parseInt( sResponseText ) ? 'visible' : 'hidden');
		}

		input_compare.addEvent('click', function(){
			//console.log( this );
			if( CompareReq ) {
				CompareReq.send( 'mode=compare_add&ajax=1&id=' + this.getProperty('id') );
			}
		});
	}
}


/**
 *
 * @param {} item_src
 */
function gallery_show( item_src ){
	$$('#GoodGallery_Root img')[0].src = item_src;
}


/**
 * Gallery
 *
 * @param elem
 */
function Gallery( elem ){
	// _PRIVATES
	var _gallery = null;
	var _gItems = [];

	/**
	 * Инициализация галлереи
	 *
	 * @param gallery
	 */
	function _init( gallery ){
		_gallery = $(gallery);
		_gItems = _gallery.getElement('img');

		return _gallery;
	};

	// PUBLIC METHODS
	this.prototype = {
		/**
		 * @return Количество элементвов в галерее
		 */
		count: function(){
			return _gItems.length;
		},

		/**
		 * @return Текущий активный элемент
		 */
		current: function(){
			// TODO
			return;
		},

		/**
		 * @param item Элемент галереи который необходимо отобразить
		 */
		show: function( item ){
			// TODO
			//console.log(  )
		}
	};

	return _init( elem );
}

window.addEvent('domready', function(){
	var basketElement = $('BasketGoods');
		var basket = new t_basket();
	if( basketElement ) {
		basket.create( basketElement );
	}

	t_compare();
});


/*pasaha*/

