/* ******************************************************************************
  JavaScript Belle Shop COntroller
	
 	Copyright (c) 2008 David Turner (davidturner.info)
 	Date: 30/07/2009	 
		 
****************************************************************************** */

document.observe('dom:loaded', function(){	
	
	if($('productThumbnails')){
		
		$('productThumbnails').ancestors()[0].removeClassName('scroll');
		
		var totalItems = $$('ul#productThumbnails li').size();
		var totalPages = (totalItems/10).ceil();
		//console.log(totalPages);
		if(totalPages>1){
			var thumbNav = new Element('div',{'id':'thumNav'});
			
			var thumbNavPages = new Element('span');
			
			for (pageNo=1; pageNo<=totalPages; pageNo=pageNo+1){
				var newPageLink = new Element('a',{'class':'page','id':'ThumbPage_'+pageNo}).update(pageNo);
				if(pageNo == 1){
					newPageLink.addClassName('selected');
				}
				Event.observe(newPageLink, 'click', function(event){	
					__thumbsMoveToPage(this.innerHTML);
				});
				thumbNavPages.insert({'bottom':newPageLink});
			}		
			
			thumbNav.insert({'bottom':thumbNavPages});
		}
			
		var thumbNav_prev = new Element('a',{'class':'prev'}).update('&laquo;'.unescapeHTML());
		Event.observe(thumbNav_prev, 'click', function(event){	
			__thumbsMoveToPrevPage();
		});
		var thumbNav_next = new Element('a',{'class':'next'}).update('&raquo;'.unescapeHTML());
		Event.observe(thumbNav_next, 'click', function(event){	
			__thumbsMoveToNextPage();
		});
		
		var beforeFirstSelected = $$('#productThumbnails li.selected')[0];		
		//console.log(((beforeFirstSelected.previousSiblings().size()+1)/10).ceil());
		if(totalPages>1){
			thumbNav.insert({'top':thumbNav_prev});
			thumbNav.insert({'bottom':thumbNav_next});
		
		$('productThumbnails').ancestors()[0].insert({'after':thumbNav});
			__thumbsMoveToPage(((beforeFirstSelected.previousSiblings().size()+1)/10).ceil());
		}
		
		$$('#productThumbnails a').each(function(thumbClick){
			//console.log('here');
			Event.observe(thumbClick, 'click', function(event){	
				Event.stop(event);
				
				if(!thumbClick.ancestors()[0].hasClassName('selected')){
						thumbClick.addClassName('loading');
		
						
						$('CurrentProduct').addClassName('loading');
						
						loadSrc = thumbClick.childElements()[1].innerHTML;
						loadAlt = thumbClick.childElements()[1].readAttribute('alt');
						loadTitle = thumbClick.readAttribute('title');
						
						//console.log(loadTitle);
						
						var newProdImageOb = new Element('img',{'alt':loadAlt});
						
						newProdImageOb.onload = function(){				
							//$$('#GalleryControls a.loading').each(function(loadingLink){ loadingLink.removeClassName('loading'); });
						
							$('CurrentProduct').fade({ duration: 0.15,
									afterFinish: function(){
											
											$$('#CurrentProduct img')[0].remove();
												
											//newProdImageOb.setOpacity(0);
											$('CurrentProduct').childElements()[0].insert({'top':newProdImageOb});
										
											$$('#CurrentProduct h4')[0].update(loadTitle);
											
											$$('#productThumbnails li.selected').each(function(thumbClick){
												thumbClick.removeClassName('selected');
											});
																									
											$$('#productThumbnails a.loading').each(function(thumbClick){
																																			// console.log(thumbClick.readAttribute('href'));
												$('CurrentProduct').childElements()[2].writeAttribute('href',thumbClick.readAttribute('href')+'/view/detail');
												thumbClick.removeClassName('loading');
												thumbClick.ancestors()[0].addClassName('selected');
											});
											
											if($$('#CurrentProduct a.button.Favourites').size()>0){
												favLink = $$('#CurrentProduct a.button.Favourites')[0];
													if($$('#'+thumbClick.identify()+' img.favourite').size()>0){
														//favourite
														favLink.addClassName('active');
														favLink.update('Remove from Favourites');
														favLink.writeAttribute('title','Remove from Favourites');
														favLink.writeAttribute('href',thumbClick.readAttribute('href').replace(/[^0-9]+/,'/favourites/remove/'));
													} else{
														//not favourite
														favLink.removeClassName('active');
														favLink.update('Add to Favourites');
														favLink.writeAttribute('alt','Add to Favourites');
														//alert(thumbClick.readAttribute('href').replace(/[^0-9]+/,'/favourites/add/'));
														favLink.writeAttribute('href',thumbClick.readAttribute('href').replace(/[^0-9]+/,'/favourites/add/'));
													}
											}
											
											$('CurrentProduct').appear({duration: 0.4});
											
									//}
									}
								});
							}
							newProdImageOb.src = loadSrc;
							
						//$$('#CurrentProduct img
																									}
				});
						
			});

		
	}
	
	if($('ProductOptions') && $('prodSelectOptions')){
		
		$('addToBasket').disable();
		$('addToBasket').addClassName('disabled');
		
		//hide select
		//==>
		$('ProductOptions').ancestors()[0].addClassName('hidden');
		$('prodSelectOptions').removeClassName('hidden');
		$('prodCustomField').addClassName('hidden');
		
		$$('#prodSelectOptions a.Option').each(function(optionClick){
			Event.observe(optionClick, 'click', function(event){	
				if(optionClick.hasClassName('disabled')){
					$$('#prodSelectOptions a.Option').each(function(optionClickDeactivate){
						optionClickDeactivate.removeClassName('selected');
					});
					optionClick.siblings().each(function(optionSib){optionSib.removeClassName('disabled')});
					optionClick.removeClassName('disabled');
				}
				__optionSelect(optionClick.identify())	
			});
		});
		
		var PriceContainer = new Element('label',{'class':'small','id':'PriceContainer'}).update('<b>Price:</b> updated after selection');
		$('prodQuantity').insert({'after':PriceContainer});				 
		var quanSel = $$('#prodQuantity select')[0];
		Event.observe(quanSel, 'change', function(event){	
			__updateSelection();	
		});
		
		__updateSelection();
	}
	
});


function __optionSelect(option_id){
	$(option_id).siblings().each(function(optionSib){optionSib.removeClassName('selected')}); 
	$(option_id).addClassName('selected');
	if($(option_id).ancestors()[0].hasClassName('FrameStyle') && $('FramedImage')){
		$('FramedImage').writeAttribute('class',$(option_id).innerHTML+' '+$('FramedImage').readAttribute('title'));
	}

	var grpContainer = $(option_id).ancestors()[0];
	var countSibs_pre = grpContainer.previousSiblings().size();
	var countSibs_post = grpContainer.nextSiblings().size();
	
	//console.log(countSibs_pre+' == '+countSibs_post);
	
	var strMatchVals = "";
	for (i=1;i<=countSibs_pre;i=i+1){
		strMatchVals += "([^:(]+) :: ";
	}
	strMatchVals += $(option_id).innerHTML+' :: ';
	for (i=1;i<=countSibs_post;i=i+1){
		strMatchVals += "([^:(]+) :: ";
	}
	strMatchVals = strMatchVals.replace(/( :: )$/,'');
	
	//disable all other options
	var rowCount = 0;
	for(i=rowCount;i<countSibs_pre;i=i+1){
		var optContainer_id = $$('#prodSelectOptions label')[i].identify();
		$$('#'+optContainer_id+' a.Option').each(function(optDisable){
			optDisable.addClassName('disabled');
		});
	}
	rowCount = countSibs_pre+1;
	for(i=rowCount;i<rowCount+countSibs_post;i=i+1){
		var optContainer_id = $$('#prodSelectOptions label')[i].identify();
		//console.info($(optContainer_id));
		
		var aryDisableOptions = $$('#'+optContainer_id+' a.Option');
		//console.info(aryDisableOptions)
		aryDisableOptions.each(function(optDisable){
			optDisable.addClassName('disabled');
		});

	}
	
	//re enable available options based on last clicked option
	$('ProductOptions').childElements().each(function(optionSel){
		if(optionSel.innerHTML.match(strMatchVals)){
			matches = optionSel.innerHTML.match(strMatchVals);
			//console.info(matches);
			
			for(j=1;j<countSibs_pre+1;j=j+1){
				var matchClass = matches[j].strip().gsub(/([^0-9A-Za-z]+)/,'')
				//console.log(matchClass);
				$$('#prodSelectOptions label')[j-1].childElements().each(function(activateOption){
					if(activateOption.hasClassName(matchClass)){
						activateOption.removeClassName('disabled');
					}
				});

			}
			for(k=countSibs_pre+1;k<countSibs_pre+countSibs_post+1;k=k+1){
				var matchClass = matches[k].strip().gsub(/([^0-9A-Za-z]+)/,'')
				//console.log(matchClass);
				$$('#prodSelectOptions label')[k].childElements().each(function(activateOption){
					if(activateOption.hasClassName(matchClass)){
						activateOption.removeClassName('disabled');
						//optActive_id = activateOption.identify();	
					}
				});
				
				var countActive = 0;
				$$('#prodSelectOptions label')[k].childElements().each(function(activateOption){
					if(!activateOption.hasClassName('disabled') && activateOption.hasClassName('Option')){
						activateOption.removeClassName('disabled');
						optActive_id = activateOption.identify();
						countActive  ++;
					}
				});

				//console.log(countActive);
				/*
				if(countActive==1){
				
					__optionSelect(optActive_id);
					//__optionSelect(optActive_id);
				}
				*/
			}
			
			
			/*
			for(i=1;i<=countSibs_pre;i=i+1){
				var optContainer_id = $$('#prodSelectOptions label')[i-1].identify();
				var classMatch = matches[i].replace(/( )$/,'');
				//console.log(i+' == '+countSibs_pre+' == '+classMatch);
				if($$('#'+optContainer_id+' a.Option.'+matches[i]).size()>0){
					$$('#'+optContainer_id+' a.Option.'+matches[i])[0].removeClassName('disabled');
				}
			}
			*/
					
			
		}
	});

	__updateSelection();
	
}

function __updateSelection(){
	//update other option
	var SelectMatch = "";
	$$('#prodSelectOptions a.Option.selected').each(function(selectedOption){
		SelectMatch += selectedOption.innerHTML+' :: ';
	});
	SelectMatch = SelectMatch.replace(/( :: )$/,'');
	
	$('ProductOptions').value = '';
	$('PriceContainer').update('<b>Price:</b> updated after selection');
	$('addToBasket').disable();
	$('addToBasket').addClassName('disabled');
	
	$$('#prodSelectOptions a.Option.selected.disabled').each(function(optionClickSelDea){
		optionClickSelDea.removeClassName('selected');
	});
					
	$('ProductOptions').childElements().each(function(prodOpt){
		//console.info(prodOpt);
		//console.log(prodOpt.innerHTML.startsWith(SelectMatch+" ("));
		if(prodOpt.innerHTML.startsWith(SelectMatch+" (")){
			//console.log('found one');
			$('ProductOptions').value = prodOpt.readAttribute('value');
			if(prodOpt.hasClassName('custom')){
				$('prodCustomField').removeClassName('hidden');
			}else{
				$('prodCustomField').addClassName('hidden');
			}
			//console.log(prodOpt.innerHTML.escapeHTML());

			var price = prodOpt.innerHTML.escapeHTML().replace(',','').match('[0-9]+[.]{1}[0-9]+','') * $$('#prodQuantity select')[0].getValue();
			//console.log(price);
			$('PriceContainer').update('<b>Price: <em>&pound;'+price.toFixed(2)+'</em></b>');
			$('addToBasket').enable();
			$('addToBasket').removeClassName('disabled');
		}
		;
	});

}


function __thumbsMoveToPage(requestNo){
	//console.log(requestNo);
	if($$('#thumNav span a').size()>1){
		linkWidth = $$('#thumNav span a')[1].positionedOffset()['left'] - $$('#thumNav span a')[0].positionedOffset()['left'];
		//console.log( $$('#thumNav span a')[1].positionedOffset()[0]+' - '+$$('#thumNav span a')[0].positionedOffset()[0]);
		//alert(linkWidth);
	}
	
	$$('#thumNav span a').each(function(pageLink){
		$$('#thumNav span')[0].scrollLeft = (requestNo*linkWidth)-(2*linkWidth);
		//$('productThumbnails').scrollTop = 200;
		$('productThumbnails').ancestors()[0].scrollTop = ($$('#productThumbnails li a')[10].positionedOffset()['top']-$$('#productThumbnails li')[1].positionedOffset()['top'])*(requestNo-1);
		
		/*
		Effect.Fade($('productThumbnails'), {
																				duration: 0.4,
																				afterFinish:function(){
																					
																					Effect.Appear($('productThumbnails'), {duration: 0.4});
																					
																					//(requestNo-1)*$('productThumbnails').getHeight();
																			}
		});
	*/
		
		pageLink.removeClassName('selected');
	});
	
	$$('#thumNav a#ThumbPage_'+requestNo)[0].addClassName('selected');
}


function __thumbsMoveToPrevPage(){
	var currentPage = $$('#thumNav span a.selected')[0].innerHTML;
	
	if(1 == currentPage){
		__thumbsMoveToPage($$('#thumNav span a').size());
	}else{
		__thumbsMoveToPage((1*currentPage)-1);
	}
	
}

function __thumbsMoveToNextPage(){
	var currentPage = $$('#thumNav span a.selected')[0].innerHTML;
	if($$('#thumNav span a').size() == currentPage){
		__thumbsMoveToPage(1);
	}else{
		__thumbsMoveToPage((1*currentPage)+1);
	}
	
}


