var prodsPrice = 0;

function loadPage(){
	var params = (unescape(window.location.href)).toQueryParams();
	
	if(Object.isUndefined(params.type)){
		params.type = 'cat';
		params.id = 'sx-featured';
		params.page = '1';
	}

	
	if('cat' == params.type){
		var prods = [];

		var cat = g_cats.find(function(e){
			if(e.id == params.id){
				return true;
			}
		});

		if(cat){
			window.document.title = (window.document.title + ' : ' + cat.name);
			$('sx-products-area-caption').down('span').update(cat.name);

			cat.prods.each(function(prodId){new Ajax.Request('./prods/' + prodId + '/prod.js', {
					method: 'get',
					onSuccess:	function(req) {
						prods.push(eval('(' + req.responseText + ')'));

						if(prods.size() == cat.prods.size()){
							var pageIndex = parseInt(params.page);
							$('sx-products').update(getProdsHtmlCode( prods, pageIndex, params.id));
							$('sx-cat-pages').update(getPagesListHtmlCode(prods.size(), './index.htm?type=cat&id='+params.id, pageIndex));
						}
					}
				});
			});
		}
	}
	else if('prod' == params.type) {
		new Ajax.Request('./prods/' + params.id + '/prod.js', {
			method: 'get',
			onSuccess:	function(req) {
				var prod = eval('(' + req.responseText + ')');

				window.document.title = (window.document.title + ' : ' + prod.name);
				$('sx-products').update(getProdHtmlCode(prod, params.catId, getCategory(params.catId).name, params.page, ("sx-search" == params.catId)?params.query:null));

				onPreview.delay(1, 'prods/' + prod.id + '/pic0.png');
			}
		});
	}
	else if('cart' == params.type) {
		$('sx-products-area-caption').down('span').update('Votre panier');
		$('sx-products').update(getCartHtmlCode());
		updatePrice();
	}
	else if('search' == params.type) {
		var catName = getCategory('sx-search').name;

		window.document.title = (window.document.title + ' : ' + catName);
		$('sx-products-area-caption').down('span').update(catName);

		onSearch(params.query);
	}
	
	updateCart();
	LoadBanners([{num:'38', title:'MITSUBISHI HC 7000', text:'Concept et fonctionnalité en mouvement, un design d\'une élégance et d\'une pureté rare pour le plaisir des sens.', picPath:'banners/imgs/ban38.png', url:'./index.htm?type=prod&id=sx-product-49&catId=sx-cat-3&page=1'}, {num:'39', title:'SONY PS3', text:'Entrez dans l\'ère du jeu Haute Définition !', picPath:'banners/imgs/ban39.png', url:'./index.htm?type=prod&id=sx-product-32&catId=sx-cat-1&page=2'}, {num:'40', title:'Apple iPhone 3G', text:'Toutes les performances de son prédécesseur mais en mieux !', picPath:'banners/imgs/ban40.png', url:'./index.htm?type=prod&id=sx-product-40&catId=sx-cat-2&page=1'}, {num:'41', title:'PANASONIC DMC-G1', text:'La simplicité d\'utilisation d\'un appareil photo numérique compact à la qualité photo des reflex numériques !', picPath:'banners/imgs/ban41.png', url:'./index.htm?type=prod&id=sx-product-38&catId=sx-cat-1&page=1'}]);
}

function getProdsHtmlCode(prods, pageIndex, catId, searchParams){
	var prodsHtmlCode = '<table><tr>';
	var prodsCount = ((pageIndex * 6) <= prods.size())?6:prods.size()%6;
	
	$R(0, prodsCount-1).each(function(index) {
		if(0 == (index%2)) {
			prodsHtmlCode += '</tr><tr>';
		}

		var prod = prods[((pageIndex-1)*6)+index];
		prodsHtmlCode += '<td><div class="sx-product" id="' + prod.id + '"><h1><span>' + prod.name + '</span></h1><p class="sx-product-desc"><span>' + prod.smallDesc + '</span></p><a href="prods/' + prod.id + '/index.htm" onclick="window.location.href = \'./index.htm?type=prod&id=' + prod.id + '&catId=' + catId + '&page=' + pageIndex + (("sx-search" == catId)?('&query=' + searchParams):'') +'\'; return false;"><img src="prods/' + prod.id + '/small.png" alt="' + prod.name + '" width="100px" height="100px" /></a><div class="sx-product-buttons"><a class="sx-product-details" href="prods/' + prod.id + '/index.htm" onclick="window.location.href = \'./index.htm?type=prod&id=' + prod.id + '&catId=' + catId + '&page=' + pageIndex + (("sx-search" == catId)?('&query=' + searchParams):'') +'\'; return false;"><span>D&eacute;tails</span></a><a class="sx-product-addtocart" href="#"  onclick=' + ((prod.models)?('"window.location.href = \'./index.htm?type=prod&id=' + prod.id + '&catId=' + catId + '&page=' + pageIndex + (("sx-search" == catId)?('&query=' + searchParams):'') +'\'; return false;"'):('"addToCart(\'' + prod.id + '\', \'' + prod.name + '\', \'' + ((prod.price2)?prod.price2:prod.price1)+ '\', \'' + prod.availability + '\', \'' + catId + '\'); window.location.href = \'./index.htm?type=cart\'; return false;"')) + '"><span>Ajouter au panier</span></a></div><div class="sx-product-prices">'+ (Object.isUndefined(prod.price2)?'<span class="sx-product-price">&euro;' + prod.price1 + '</span>':'<span class="sx-product-old-price">&euro;' + prod.price1 + '</span><span class="sx-product-promo-price">&euro;' + prod.price2 + '</span>')+'</div></div></td>';

	});
	
	return prodsHtmlCode+'</tr></table>';
}

function getPagesListHtmlCode(prodsCount, curCatUrl, pageIndex){
	var htmlCode;
	
	if(6 >= prodsCount) {
		htmlCode = '';
	}
	else {
		htmlCode = '<ol><li><span>Page :</span></li>';
		htmlCode += (1 < pageIndex)?'<li><a href="' + curCatUrl + '&page=' + (pageIndex - 1) + '">Précédent</a></li>':'';
		
		for(var i = 3; i > 0; i--)
		{
			if( 0 <= (pageIndex - i - 1))
			{
				htmlCode += '<li><a href="' + curCatUrl + '&page=' + (pageIndex - i) + '">' + (pageIndex - i) + '</a></li>';
			}
		}
		
		htmlCode += '<li>' + pageIndex + '</li>';
		
		for(var i=1; i<= 3; i++)
		{
			if(prodsCount > ( 6 * (pageIndex + i - 1) ))
			{
				htmlCode += '<li><a href="' + curCatUrl + '&page=' + (pageIndex + i) + '">' + (pageIndex + i) + '</a></li>';
			}
		}
		
		if(prodsCount > ( 6 * pageIndex ))
		{
			htmlCode += '<li><a href="' + curCatUrl + '&page=' + (pageIndex + 1) + '">Suivant</a></li>';
		}
		
		htmlCode += '</ol>';
	}
	
	return htmlCode;
}


function getProdHtmlCode(prod, catId, catName, pageIndex, searchParams){
	var modelsCode = '';
	var availability = prod.availability;

	if(prod.models){
			prod.models.values.each(function(model, index){
										modelsCode += '<option value ="' + model.availability + '">' + model.value + '</option>';
									});

			modelsCode = '<div id="sx-product-models">'+
				'<span class="sx-product-caption" id="sx-model-name">' + prod.models.type + ' :</span>'+
				'<span>'+
					'<select onchange="loadAvailability(this)">' + modelsCode + '</select>'+
				'</span>'+
			'</div>';

			availability = prod.models.values[0].availability;
	}

	var picsCode = '<li><img src="prods/' + prod.id + '/pic0.png" width="85" height="85" onclick="onPreview(\'prods/' + prod.id + '/pic0.png\')"/></li>';

	if(1 < prod.picsCount){
		picsCode += '<li><img src="prods/' + prod.id + '/pic1.png" width="85" height="85" onclick="onPreview(\'prods/' + prod.id + '/pic1.png\')"/></li>';

		if(2 < prod.picsCount){
			picsCode += '<li><img src="prods/' + prod.id + '/pic2.png" width="85" height="85" onclick="onPreview(\'prods/' + prod.id + '/pic2.png\')"/></li>';
		}
	}

	var priceCode = '<span id="sx-product-page-price">€ ' + prod.price1 + '</span>';

	if(prod.price2){
		priceCode = '<span id="sx-product-page-old-price">€ ' + prod.price1 + '</span>'+
				'<span id="sx-product-page-promo-price">€ ' + prod.price2 + '</span>';
	}

	var caption;

	if('sx-search' == catId) {
		caption = '<span id="sx-path"><a href=\'index.htm\'>Accueil</a> » <a href=\'./index.htm?type=search&query=' + searchParams + '\'>' + catName + '</a> » <span>' + prod.name + '</span></span>'
	}
	else {
		caption = '<span id="sx-path"><a href=\'index.htm\'>Accueil</a> » <a href=\'./index.htm?type=cat&id=' + catId + '&page=' + pageIndex + '\'>' + catName + '</a> » <span>' + prod.name + '</span></span>'
	}

	var htmlCode = '<div name="sx-product-page" id="sx-product-1">' + caption +
		'<div id="sx-product-infos">'+
			'<div id="sx-product-name">'+
				'<h1>' + prod.name + '</h1>'+
			'</div>'+ modelsCode +
			'<div id="sx-product-availability">'+
				'<span class="sx-product-caption">Disponibilité : </span> <span>' + availability + '</span>'+
			'</div>'+
			'<div id="sx-product-page-prices">'+ 
				'<span class="sx-product-caption">Prix : </span>'+ priceCode + 
			'</div>'+
			'<div id="sx-quantity">'+
				'<span class="sx-product-caption">Quantité : </span><input name="quantity" value="1" type="text"/>'+
			'</div>'+
			'<div id="sx-product-page-addtocart">'+
				'<a href="#" onclick="addToCart(\'' + prod.id  + '\', \'' + prod.name + '\', \'' + ((prod.price2)?prod.price2:prod.price1) + '\', \'' + availability + '\', \'' + catId +  '\', getQty()); window.location.href = \'./index.htm?type=cart\'; return false;"><span>Ajouter à mon panier</span></a>'+
			'</div>'+
		'</div>'+
		'<div id="sx-product-pics">'+
			'<div class="product-img-box">'+
				'<p id="zoom-container" class="main-product-img">'+
					'<img id="image" src="prods/' + prod.id + '/pic0.png" alt="' + prod.name + '"/>'+
				'</p>'+
				'<div class="image-zoom" id="track_outer">'+
					'<span id="zoom_out" class="btn-zoom-out"></span>'+
					'<div id="track">'+
						'<div id="handle"></div>'+
					'</div>'+
					'<span id="zoom_in" class="btn-zoom-in"></span>'+
				'</div>'+
			'</div>'+
			'<div  id="sx-thumbnails">'+
				'<span class="sx-product-caption">Autres vues : </span>'+
				'<ul>' + picsCode + '</ul>'+
			'</div>'+
			'<div id="sx-product-description">'+
				'<h2>Description du produit</h2>'+
				'<div>' + prod.fullDesc.unescapeHTML() + '</div>'+
			'</div>'+
		'</div>';

	return htmlCode;
}

function getCategory(catId){
	return g_cats.find(function(cat){
		if(cat.id == catId){
			return true;
		}
	});
}

function onPreview(imgSrc){
	$('image').src = imgSrc;
	$('image').show();

	product_zoom = new Product.Zoom('image', 'track', 'handle', 'zoom_in', 'zoom_out'/*, 'track_hint'*/);
}
function onSearch(searchParams){
	var prods = [];
	var prodIds = [];
	var values = [];

	searchParams.scan(/(\w|-)+/, function(match) {
		values.push(match[0].toLowerCase());
	});

	keywords.each(function(keyword, index){
		if(values.find(function(value){return (keyword.value == value)})){
			keywords[index].products.each(function(e){
				prodIds.push(e);
			})
		}
	});

	prodIds.each(function(prodId){
		var found = false;
		
		prods.each(function(prod){
			if(prodId == prod.id){
				found = true;
				prod.qty++;
				throw $break;
			}
		});
		
		if(!found){
			prods.push({"id": prodId, "qty": 1});
		}
	});

	prods = prods.sortBy(function(prod){
		return -(prod.qty);
	});

	var prodsToDisplay = [];

	prods.each(function(prod){new Ajax.Request('./prods/' + prod.id + '/prod.js', {
			method: 'get',
			onSuccess:	function(req) {
				prodsToDisplay.push(eval('(' + req.responseText + ')'));

				if(prodsToDisplay.size() == prods.size()){
					$('sx-products').update(getProdsHtmlCode( prodsToDisplay, 1, 'sx-search', searchParams));
				}
			}
		});
	});

}

function updateCart(){
	cart = new CookieJar({
	expires:3600,   // seconds
	path: '/'
	});
	
	var prods = [];
	prods = cart.get('sx-cart');
	
	if(null != prods) {
		var prodsQty = 0;
		
		prods.each(function(prod){
			prodsQty += prod.qty;
		});
		
		if(0 < prodsQty){
			$('sx-cart').update('<p><span><a href="#" onclick="window.location.href = \'./index.htm?type=cart\'; return false;">' + prodsQty + ' produits</a></span></p>');
		}
		else {
			$('sx-cart').update('<p><span>0 produits</span></p>');
		}
	
	}
	else {
			$('sx-cart').update('<p><span>0 produits</span></p>');
	}
}

function addToCart(id, name, price, availability, catId, qty){
	var model = 'N.A';
	var divModels = $('sx-product-models');

	if(divModels){
		var select = divModels.down('select');

		model = select.options[select.selectedIndex].text;
		availability = select.options[select.selectedIndex].value;
	}

	if(!qty) var qty = 1;

	cart = new CookieJar({
	expires:3600,   // seconds
	path: '/'
	});
	
	var prods = [];
	prods = cart.get('sx-cart');
	
	if(null != prods) {
	
		var found = false;
		
		prods.each(function(prod){
			if(id == prod.id){
				found = true;
				prod.qty += qty;
				throw $break;
			}
		});
		
		if(!found){
			prods.push({"id": id, "name": name, "price": price, "model": model, "availability": availability, "catId": catId, "qty": qty});
		}
		
		cart.put('sx-cart', prods);
	}
	else {
		var newProds = [];
		newProds.push({"id": id, "name": name, "price": price, "model": model, "availability": availability, "catId": catId, "qty": qty});
		
		cart.put('sx-cart', newProds);
	}
	
	updateCart();
}

function deleteProd(indexToDelete){
	cart = new CookieJar({
	expires:3600,   // seconds
	path: '/'
	});
	
	var prods = [];
	prods = cart.get('sx-cart');

	var newProds = [];
	prods.each(function(prod, index){
		if(indexToDelete != index){
			newProds.push(prod);
		}
	});
		
	cart.put('sx-cart', newProds);

	$('sx-products').update(getCartHtmlCode());

	updateCart();
	updatePrice();
}

function getCartHtmlCode(){

	cart = new CookieJar({
	expires:3600,   // seconds
	path: '/'
	});
	
	var prods = [];
	prods = cart.get('sx-cart');

	var htmlCode = '<span id="sx-cart-empty">Votre panier est vide</span>';

	if(prods){
		if(0 < prods.size()){
			htmlCode = '<table id=\"sx-cart-view\">'+
				'<tr>'+
					'<th></th>'+
					'<th></th>'+
					'<th class=\"sx-row-header\">Modèle</th>'+
					'<th class=\"sx-row-header\">Quantité</th>'+
					'<th class=\"sx-row-header\">Disponibilité</th>'+
					'<th class=\"sx-row-header\">Prix</th>'+
					'<th class=\"sx-row-header\">Supprimer</th>'+
				'</tr>';

			prods.each(function(prod, index){
			htmlCode += '<tr id="sx-cart-' + prod.id + '" class="' + ((0 == index%2)?'sx-row-even':'sx-row-odd') + '">'+
										'<td class="sx-cart-pic"><a href="prods/' + prod.id + '/index.htm" onclick="window.location.href = \'./index.htm?type=prod&id=' + prod.id + '&catId=' + prod.catId + '\'; return false;"><img src="prods/' + prod.id + '/small.png"/></a></td>'+
										'<td class="sx-cart-name"><span>' + prod.name + '</span></td>'+
										'<td class="sx-cart-model"><span>' + prod.model + '</span></td>'+
										'<td class="sx-cart-qty"><span>' + prod.qty + '</span></td>'+
										'<td class="sx-cart-available"><span>' + prod.availability + '</span></td>'+
										'<td class="sx-cart-price"><span>€' + prod.price + '</span></td>'+
										'<td class="sx-cart-trash"><a href="#" onclick="deleteProd(' + index + '); return false;"><img src="css/images/trash.png"/></a></td>'+
										'</tr>';
			});

			htmlCode += '</table>';

			var shipmentHtmlCode;

			g_shippement.each(function(shipment){
				shipmentHtmlCode += '<option ' + ((shipment.selected)?'selected="selected" ':'') + 'value="' + shipment.code + '">' + shipment.country + '</option>';
			});

			htmlCode += '<table id="sx-cart-total">'+
				'<tr>'+
				'<th colspan="3"><span>Total de mon panier</span></th>'+
				'</tr>'+
				'<tr id="sx-cart-price-sum">'+
				'<td class="sx-cart-col1"><span>Montant de ma commande :</span></td>'+
				'<td colspan="2" class="sx-cart-col2"><span>€200</span></td>'+
				'</tr>'+
				'<tr id="sx-ship-name">'+
				'<td class="sx-cart-col1"><span>Nom et prénom :</span></td>'+
				'<td colspan="2" class="sx-cart-col2"><input name="name" value="" type="text" /></td>'+
				'</tr>'+
				'<tr id="sx-ship-addr">'+
				'<td class="sx-cart-col1"><span>Adresse :</span></td>'+
				'<td colspan="2" class="sx-cart-col2"><input name="addr" value="" type="text" /></td>'+
				'</tr>'+
				'<tr id="sx-ship-zip">'+
				'<td class="sx-cart-col1"><span>Code postal :</span></td>'+
				'<td colspan="2" class="sx-cart-col2"><input name="name" value="" type="text" /></td>'+
				'</tr>'+
				'<tr id="sx-ship-city">'+
				'<td class="sx-cart-col1"><span>Ville :</span></td>'+
				'<td colspan="2" class="sx-cart-col2"><input name="addr" value="" type="text" /></td>'+
				'</tr>'+
				'<tr id="sx-cart-delivery">'+
				'<td class="sx-cart-col1"><span>Pays :</span></td>'+
				'<td colspan="2" class="sx-cart-col2">'+
				'<select onChange="updatePrice(this.options[this.selectedIndex].value);">' + shipmentHtmlCode + '</select>'+
				'</td>'+
				'</tr>'+
				'<tr id="sx-cart-delivery-price">'+
				'<td class="sx-cart-col1"><span>Frais de traitement :</span></td>'+
				'<td colspan="2" class="sx-cart-col2"><span>€5,00</span></td>'+
				'</tr>'+
				'<tr id="sx-cart-price-total">'+
				'<td class="sx-cart-col1"><span>Total à régler :</span></td>'+
				'<td class="sx-cart-col2"><span>€1455,00</span></td>'+
				'<td id="sx-cart-checkout"><a href="sx-cart-checkout"><span>Je procède au paiement</span></a></td>'+
				'</tr>'+
			'</table>';	
		}
	}

	return htmlCode;
}

function updatePrice(){
	prodsPrice =0;

	cart = new CookieJar({
	expires:3600,   // seconds
	path: '/'
	});
	
	var prods = [];
	prods = cart.get('sx-cart');

	if(prods){
		if(0 < prods.size()){
			selectElt = $('sx-cart-delivery').down('select');
			var countryCode = selectElt.options[selectElt.selectedIndex].value;

			prods.each(function(prod, index){
				prodsPrice += (parseFloat(prod.price) * parseInt(prod.qty));
			});

			prodsPrice = Math.round(prodsPrice*100)/100;
			prodsPrice = prodsPrice.toFixed(2);

			var deliveryPrice = g_shippement.find(function(ship){
				if(ship.code == countryCode){
					return true;
				}
			}).price;

			deliveryPrice = Math.round(deliveryPrice*100)/100;
			deliveryPrice = deliveryPrice.toFixed(2);

			var totalPrice = parseFloat(prodsPrice) + parseFloat(deliveryPrice);

			totalPrice = Math.round(totalPrice*100)/100;
			totalPrice = totalPrice.toFixed(2);

			$('sx-cart-price-sum').down('td',1).down('span').update('€' + prodsPrice);
			$('sx-cart-delivery-price').down('td',1).down('span').update('€' + deliveryPrice);
			$('sx-cart-price-total').down('td',1).down('span').update('€' + totalPrice);
		}	
	}

}



function getQty(){
	return parseInt($('sx-quantity').down('input').value);
}

function loadAvailability(eltSelect)
{
	var option = eltSelect.selectedIndex; 
	var value = eltSelect.options[option].value;

	$('sx-product-availability').down('span', 1).update(value);
}
