/** 
 * Attention prototype est modifié pour IE :
 * ligne  3701 - 3707
 * 
 * todo modifié le fork : git@github.com:mainman/prototype.git dans src/prototype/dom/layout.js et pusher
 * 
 **/

function cl () {
	if(typeof console == 'undefined')
		return;

	$A(arguments).each(function (ele) {
		console.log(ele);
	});
}

Prototype.Browser.IE6 = Prototype.Browser.IE && parseInt(navigator.userAgent.substring(navigator.userAgent.indexOf("MSIE")+5)) == 6;
Prototype.Browser.IE7 = Prototype.Browser.IE && parseInt(navigator.userAgent.substring(navigator.userAgent.indexOf("MSIE")+5)) == 7;


var Colaco = {};

Colaco.Autocompleter = Class.create(Ajax.Autocompleter, {
	initialize: function ($super, a, b, c, d) {
		$super(a, b, c, d);
	},
	onComplete: function(response) {
		$("hide-panel").innerHTML = response.responseText;
		if($("hide-panel").down('ul').empty()) {
			this.onEmptyResult(response);
		}
		this.updateChoices(response.responseText);
	},
	onEmptyResult: function(response) {
		new Effect.Highlight(this.element, {
			'startcolor':	'#ff6666',
			'endcolor':		'#f4f4f4',
			'duration':		1.0
		});
	}
});

var Toggler = Class.create({

	initialize: function (eleId, switcherId) {
		this.ele = $(eleId);
		this.switcher = $(switcherId);
		if(!this.ele.visible())
			this.changeTxt()
		this.switcher.observe("click", this.process.bind(this));
	},

	process: function () {
		this.changeTxt();
		this.toggle();
	},

	changeTxt : function () {
		var tmp =this.switcher.readAttribute('rel')
		this.switcher.writeAttribute('rel', this.switcher.innerHTML);
		this.switcher.innerHTML = tmp;
	},

	toggle: function () {
		Effect[this.ele.visible()? 'BlindUp' : 'BlindDown'](this.ele, { duration: 0.33 });
	}

});

var ElementExtensions = {
	center: function ( element, limitX, limitY ) {
		element = $(element);
		
		var elementDims = element.getDimensions();
		var viewPort = document.viewport.getDimensions();
		var offsets = document.viewport.getScrollOffsets();
		var centerX = viewPort.width / 2 + offsets.left - elementDims.width / 2;
		var centerY = viewPort.height / 2 + offsets.top - elementDims.height / 2;
		if (limitX && centerX < limitX ) {
			centerX = parseInt(limitX);
		}
		if (limitY && centerY < limitY ) {
			centerY = parseInt(limitY);
		}
		element.setStyle( { position: 'absolute', top: Math.floor(centerY) + 'px', left: Math.floor(centerX) + 'px' } );
		return element;			
	}
}
Element.addMethods(ElementExtensions);

document.observe("dom:loaded", function() {
	
	// Simulation du entrée sur les formulaire pour IE
	if (!Prototype.Browser.Gecko) {
		$$('#pseudo,#passwd,form[name=corps_page] input[type=text]').each(function(ele){
			ele.observe('keypress', function(event){
				if (event.keyCode == Event.KEY_RETURN)
					ele.up('form').submit();
			});
		});
	}
	
	// Transfert
	$$('.transfcart,#transfcart').each(function (ele) {
		ele.on('click', preOpenTransfertLayer);
	});

	if ($('toggle-as'))
		var toggler = new Toggler("advanced-search", "toggle-as");
	
	var acs = ['tri_editeur', 'tri_collection', 'tri_label'],
		url = 'ajax.php',
		actualReq = null,
		layerVisible = false,
		actualArticle = null;
	
	$$('.addcart').each(function (ele) {
		ele.on('click', preOpenCartLayer);
	});
	
	if($('sub-transfert'))
		var submitTransfertHandler = $('sub-transfert').on('click', saveTransfert);
	
	var closeClickHandler;
	
	function openCartLayer (source) {
		$('cart-layer').down('h5').update(this.next().innerHTML);
		$('cart-layer').absolutize()
		.clonePosition(this, {
			setWidth: false,
			setHeight: false,
			offsetLeft: -parseInt($('cart-layer').getStyle('width')),
			offsetTop: 30
		}).appear({
			duration: 0.5, 
			afterFinish: function(){
				layerVisible = true;
				actualArticle = this;
				autoScroll();
			}.bind(this)
		});
	}
	
	function preOpenCartLayer (event) {
		closeCartLayerAndJaquette(openCartLayer.bind(this, event.target));
		event.stop();
		return false;
	}
	
	function closeCartLayerAndJaquette (callback) {
		$$('#cart-layer,.jaquette').each(function(ele){
			ele.hide();
		});
		layerVisible = false;
		actualArticle = null;
		callback();
	}

	function autoScroll () {
		var checked = getCheckedElement();
		checked.up('div.carts-cnt').scrollTop = checked.positionedOffset().top > 100 ? checked.positionedOffset().top - 40 : 0;
	}

	function getCheckedElement() {
		return $$('.carts-cnt input').find(function(ele){
			return ele.checked == true;
		});
	}

	function getCheckedArticles() {
		return $$('input[type=checkbox]').select(function(ele){
			return ele.checked == true;
		});
	}
	
	function closeLayer(event) {
		var found = event.target.up('#cart-layer');
		if ((found == undefined || event.target.readAttribute('id') == 'close-layer') && event.target.readAttribute('id') != 'cart-layer') {
			$$('#cart-layer,.jaquette').each(function(ele){
				ele.hide();
			});
			layerVisible = false;
			actualArticle = null;
			if(event.target.readAttribute('id') == 'close-layer')
				event.stop();
		}
	}
	
	function saveCart(event){
		var checked = getCheckedElement();
		if (checked != undefined) {
			var url = actualArticle.readAttribute('href').slice(0, actualArticle.readAttribute('href').indexOf('#'))
				+ '&idp=' + checked.getValue()
				+ (actualArticle.readAttribute('href').indexOf('#') > -1 
					? actualArticle.readAttribute('href').slice(actualArticle.readAttribute('href').indexOf('#'))
					: ""
			);
			window.location = url;
		}
		event.stop();
	}
	
	if ($('close-layer')) {
		var closeClickBtntHandler = $('close-layer').on('click', closeLayer);
		if ($('sub-cart'))
			var submitHandler = $('sub-cart').on('click', saveCart);
	}
	
	function openTransfertLayer (source) {
		if (this.readAttribute('id') == 'transfcart') {
			$('cart-layer').center();
			
		} else {
			$('cart-layer').absolutize()
			.clonePosition(this, {
				setWidth: false,
				setHeight: false,
				offsetLeft: $$('.article').length ? -parseInt($('cart-layer').getStyle('width')) : -150,
				offsetTop: 30
			});
		}
			
		$('cart-layer').appear({
			duration: 0.5, 
			afterFinish: function(){
				layerVisible = true;
				actualArticle = this;
				autoScroll();
			}.bind(this)
		});
	}
	
	function preOpenTransfertLayer (event) {
		closeCartLayerAndJaquette(openTransfertLayer.bind(this, event.target));
		event.stop();
		return false;
	}
	
	function saveTransfert(event) {
		var panier = getCheckedElement();
		if (actualArticle.readAttribute('id') == 'transfcart') {
			var articles = getCheckedArticles().collect(function(ele) {
				return ele.readAttribute('value');
			});
			if (panier!= undefined && articles.length > 0) {
				var url = event.target.readAttribute('rel') + '&newidp=' + panier.getValue() + '&ida=' + articles.join(',');
				window.location = url;
			}
		} else {
			if (panier != undefined) {
				var url = event.target.readAttribute('rel') + '&newidp=' + panier.getValue() + '&ida=' + actualArticle.up('.article').readAttribute('id');
				window.location = url;
			}
		}
		event.stop();
	}
	
	$$('.article').each(function (ele) {
		var jaquette, article, image, id, timeout, mouseX;
		
		function enterArticle (event) {
			if (layerVisible) return;
			article = this;
			var rel = ele.readAttribute('rel');
			if (rel.length == 0) return;
			id = 'jaquette' + ele.readAttribute('id');	// rel n'est pas unique
			mouseX = event.pointerX();
			timeout = loadImage.delay(0.75, rel);
		}
		
		function loadImage(uri) {
			var img = new Image();
			img.onload = showJaquette;
			img.src = 'images/articles/' + uri + '.jpg';
		}
		
		function showJaquette(e) {
			try {
				image = this;
				jaquette = jaquette || new Element('div', {
					id : id,
					'class': 'jaquette'
				});
				
				image.writeAttribute({
					'width': image.width,
					'height': image.height
				});
			} catch(e) {
				return false;
			}
					
			if(!$(id)) article.insert(jaquette.insert(image));
			else $(id).update().insert(image);
			
			$(id).absolutize().setStyle({
				width: image.width+'px',
				height: image.height+'px'
			}).clonePosition(article, {
				setWidth: false,
				setHeight: false,
				offsetLeft: article.getWidth() - image.width,
				offsetTop: article.getHeight() + 7
			}).appear({duration: 0.001});
		}
		
		function leaveArticle (event) {
			clearTimeout(timeout || null);
			if($(id)) {
				$(id).fade({duration: 0.001});
			}
		}
		
		var enterHandler = ele.on('mouseenter', enterArticle);
		var leaveHandler = ele.on('mouseleave', leaveArticle);

	});

	if(!Prototype.Browser.IE6) {
		var ac = [];
		acs.each(function (acId) {
			if (!$(acId)) 
				return;
			ac[acId] = new Colaco.Autocompleter(acId, acId+"-results", url + '?t='+acId, {
				paramName: 'search',
				parameters: 'action=search',
				indicator: acId + '-indicator',
				minChars: 2,

				// redefinition de onshow
				onShow: function(element, update){
					if(!update.style.position || update.style.position=='absolute') {
						update.absolutize();
						Position.clone(element, update, {
							setHeight: false,
							setWidth: false,
							offsetTop: element.offsetHeight
						});
						update.style.minWidth = (element.getWidth() + 2) + 'px';
					}

					Effect.Appear(update,{
						duration: 0.15,
						afterFinish: function () {
							if(Prototype.Browser.IE7) {
								var w = parseInt(element.getWidth()) + 2;
								if (w > $(acId+"-results").getWidth())
									$(acId+"-results").setStyle({'width': w + 'px'});
							}
						}
					});

				}
			});
		});
	} else {
		$$("#nav > li.ie6").each(function (ele) {
			ele.observe('mouseenter', function() {
				$$('.ie6 select').invoke('makeHidden');
			});

			ele.observe('mouseleave', function() {
				$$('.ie6 select').invoke('makeVisible');
			});
		});
	}
});

var ASPrototypeUtils = {
    makeVisible: function(element){
        element = $(element);
	    element.style.visibility = 'visible';
	    return element;
    },
    makeHidden: function(element){
        element = $(element);
    	element.style.visibility = 'hidden';
    	return element;
    }
}

Element.addMethods(ASPrototypeUtils);



