

	Effect.Scroll = Class.create();
	Object.extend(Object.extend(Effect.Scroll.prototype, Effect.Base.prototype), {
	  initialize: function(element) {
	    this.element = $(element);
	    var options = Object.extend({
	      x:    0,
	      y:    0,
	      mode: 'absolute'
	    } , arguments[1] || {}  );
	    this.start(options);
	  },
	  setup: function() {
	    if (this.options.continuous && !this.element._ext ) {
	      this.element.cleanWhitespace();
	      this.element._ext=true;
	      this.element.appendChild(this.element.firstChild);
	    }

	    this.originalLeft=this.element.scrollLeft;
	    this.originalTop=this.element.scrollTop;

	    if(this.options.mode == 'absolute') {
	      this.options.x -= this.originalLeft;
	      this.options.y -= this.originalTop;
	    } else {

	    }
	  },
	  update: function(position) {
	    this.element.scrollLeft = this.options.x * position + this.originalLeft;
	    this.element.scrollTop  = this.options.y * position + this.originalTop;
	  }
	});
	function moveTo(container, element){
	  Position.prepare();
	  container_x = Position.cumulativeOffset($(container))[0]
	  container_y = Position.cumulativeOffset($(container))[1]
	  element_y = Position.cumulativeOffset($(element))[1]
	  element_x = Position.cumulativeOffset($(element))[0]

  	  var dimensions = screenDimensions();
  	  var calc = dimensions[0]/2 - parseInt(element.getWidth())/2;

	  new Effect.Scroll(container, {x:(element_x-container_x-calc), y:(container_y)});
	  return false;
	}

	/*

	PDOCK CLASS

	*/
	var relatedTarget = null;
	var selProduct = null;
	BrowserDetect.init();

	Array.prototype.remove = function(from, to) {
	  var rest = this.slice((to || from) + 1 || this.length);
	  this.length = from < 0 ? this.length + from : from;
	  return this.push.apply(this, rest);
	};

	//
	//
	var loadgif = '<div id="load_wrapper"><div class="loading"></div></div>';
	var pDock = Class.create();
	pDock.prototype = {
		initialize: function(carouselObj,cID,catID,theCarousel,controllerType){

			this.carouselId = carouselObj.id; // carousel div ID
			this.cID = cID; 				  // Unqiue carousel ID 1,2 etc..
			this.categoryID = catID;		  // Category ID for carousel
			this.theCarousel = theCarousel;

			this.collectionContainer = $('#collectionContainer'+this.cID);
			this.controllerType = controllerType;
			this.carouselObj=carouselObj;
			this.largeIMGsize = "w370";
			//$('debug').insert({top:'<p>initialise:'+this.cID+'</p>'});
			this.alterCarouselWidth('normal');

			switch(controllerType){
				case 'inspiration':

				break;
				default:
					this.productSelection();
					this.filterWatch();
				break;
			}

			this.enlarge = Array();
			this.selProduct = null;
			this.itemWidth;
			this.dimensions;
			//
			// find loader
			//var tmpAR = $$('#collectionContainer'+this.cID+' .filter .loader');
			//this.loader  = tmpAR[0];
			//this.loader.setStyle({display:'none'});
			this.buttonNav();


		},
		buttonNav: function(){
			var that = this;
			var panTimer;

			//
			// move buttons
			$('previous_button'+this.cID).observe("mousedown",function(){
				panTimer = setTimeout(function(){
					that.panLeft(15);
				},120)
			})
			$('previous_button'+this.cID).observe("mouseup",function(){
				if(panTimer) {
			        clearTimeout(panTimer);
			        panTimer = null;
			        //return;
		      }

			})

			$('previous_button'+this.cID).observe("mouseout",function(){
			      if(panTimer) {
			        clearTimeout(panTimer);
			        panTimer = null;
			        return;
			      }
			})


			//
			// RIGHT
			$('next_button'+this.cID).observe("mousedown",function(){

				panTimer = setTimeout(function(){
					that.panRight(15);
				},120)
			})
			$('next_button'+this.cID).observe("mouseup",function(){
				if(panTimer) {
			        clearTimeout(panTimer);
			        panTimer = null;
			        //return;
		      }

			})

			$('next_button'+this.cID).observe("mouseout",function(){
			      if(panTimer) {
			        clearTimeout(panTimer);
			        panTimer = null;
			        return;
			      }
			})

		},
		panLeft: function(amnt){
				var panTimer;
				var positionLeft = $('horizontal_carousel'+this.cID).scrollLeft;
				var newPoss = positionLeft - amnt;
				var that = this;
				var amnt = amnt;

				if(newPoss > 0 || positionLeft > 0){

					$('horizontal_carousel'+this.cID).scrollLeft=newPoss;

					panTimer = setTimeout(function(){
						that.panLeft(amnt);
					},1)

					$('previous_button'+this.cID).observe("mouseup",function(){
						if(panTimer) {
					        clearTimeout(panTimer);
					        panTimer = null;
					        return;
				      }
					})
				}

				$('previous_button'+this.cID).observe("mouseout",function(){

				      if(panTimer) {
				        clearTimeout(panTimer);
				        panTimer = null;
				        return;
				      }
				})
		},
		panRight: function(amnt){

				var panTimer;
				var positionLeft = $('horizontal_carousel'+this.cID).scrollLeft;
				var newPoss = positionLeft + amnt;
				var that = this;
				var amnt = amnt;

				var negativeWidth = 0 - this.combinedWidth+600;

				if(newPoss > negativeWidth){

					$('horizontal_carousel'+this.cID).scrollLeft=newPoss;

					panTimer = setTimeout(function(){
						that.panRight(amnt);
					},1)

					$('next_button'+this.cID).observe("mouseup",function(){
						if(panTimer) {
					        clearTimeout(panTimer);
					        panTimer = null;
					        return;
				      }
					})

				}

				$('next_button'+this.cID).observe("mouseout",function(){

				      if(panTimer) {
				        clearTimeout(panTimer);
				        panTimer = null;
				        return;
				      }
				})
		},
		reinstateCarousel: function() {
			this.hideLoader();
			this.theCarousel = null;
			this.theCarousel = new UI.Carousel("horizontal_carousel"+this.cID);
			this.resized();
			this.productSelection();
		},
		updateCarouselSize: function(){
		    var dimensions = screenDimensions();
		    this.carParentWidh = this.carouselObj.up().getWidth();  // parent element width
			this.carouselObj.style.width = this.carParentWidh + "px";
		},
		alterCarouselWidth: function(method){
			combinedWidth1 = 0;
			c=0;
			tmp=0;
			ar_items = $$('#'+ this.carouselId +' ul li.item');
			var test = '';
			var mrg = 0;
			var lngth = ar_items.length;
			spacinglength=lngth;
			ar_items.each(
				function(itm){
					if(c<lngth){
					tmp=0;
					tmp = itm.getWidth();
					var mrg = itm.getStyle('marginRight');
					mrg.replace(/px/, "");

					var mrg2 = itm.getStyle('marginLeft');
					mrg2.replace(/px/, "");

					mrg = (parseInt(mrg) + parseInt(mrg2));

					tmp = tmp + mrg
					combinedWidth1 += tmp;

					}
					if(BrowserDetect.browser == 'Safari' || BrowserDetect.browser == 'Chrome') itm.down().setStyle({width:'100%'});

					c=c+1;
				}
			);

			this.combinedWidth = combinedWidth1;// - ar_items[ar_items.length -1].getWidth();

			//var mrg = ar_items[0].getStyle('marginRight');
			//mrg = mrg.substring(0,2);
			//this.spacing = spacinglength * mrg;

			//
			// Product container UL
			if(method=='smooth'){
				new Effect.Morph('productContainer'+ this.cID,{style: 'width:'+(this.combinedWidth+75)+'px',duration: 0.6})
				//$('debug').insert({top:'<p>MORP CID: '+this.cID+' alterwidth: '+combinedWidth1+'</p>'});
			}else{
				$('productContainer'+ this.cID).setStyle({width:this.combinedWidth+75+'px'});
				//$('debug').insert({top:'<p>CID: '+this.cID+' alterwidth: '+combinedWidth1+'</p>'});
			}
			this.checkScroll()

		},
		checkScroll: function(){
			//$('debug').insert({top:'<p>Check scroll: comwidth:'+this.combinedWidth+'</p>'});
			//
			// Hide buttons if size
			this.dimensions = screenDimensions();

			if(this.dimensions[0]>this.combinedWidth){
				//
				// attempt to center carousel
				if($('productContainer'+ this.cID)){
					if((BrowserDetect.browser == 'Safari' && BrowserDetect.version < 530) || (BrowserDetect.browser == 'Chrome' && BrowserDetect.version == 1)){
						setTimeout(function(){
							//$('debug').insert({top:'<p>webkit: comwidth:'+$('productContainer'+ this.cID).getWidth()+'</p>'});
							$('productContainer'+ this.cID).setStyle({marginLeft:-(parseInt(this.combinedWidth) / 2) +'px',marginRight:'auto',left:'50%',paddingLeft:'2em'});
						}.bind(this),500);
					}else{
						$('productContainer'+ this.cID).setStyle({marginLeft:'auto',marginRight:'auto',position:'relative',paddingLeft:'2em'});
					}
				}
				//
				// hide buttons
				$('previous_button'+ this.cID).hide();
				$('next_button'+ this.cID).hide();
			}else{
				if((BrowserDetect.browser == 'Safari' && BrowserDetect.version < 530) || (BrowserDetect.browser == 'Chrome' && BrowserDetect.version == 1))
					$('productContainer'+ this.cID).setStyle({marginLeft:'inherit',left:'inherit'});

				$('previous_button'+ this.cID).show();
				$('next_button'+ this.cID).show();
			}


			if($('productContainer'+this.cID).up().scrollLeft == 0){
				$('previous_button'+ this.cID).hide();
			}else{
				$('previous_button'+ this.cID).show();
			}
		},
		scrollTransition: function(pos,startPos,newPoss){

			var that = this;
			if(startPos>newPoss){
				var amnt = pos-40;
				$('productContainer'+this.cID).up().scrollLeft=  Math.round(amnt);
				if(amnt>newPoss){
					setTimeout(function(){
						that.scrollTransition(amnt,startPos,newPoss)
					},5)
				}
			}else{
				var amnt = pos+40;
				$('productContainer'+this.cID).up().scrollLeft=  Math.round(amnt);
				if(amnt<newPoss){
					setTimeout(function(){
						that.scrollTransition(amnt,startPos,newPoss)
					},5)
				}
			}


			this.checkScroll();

		},
		//
		// scroll to
		scrollToView: function(obj,mrg,width) {

			var cWidth = obj.up(1).getWidth(); // carousel parent width. determines screen width
			var that = this;

			if(width != ''){
				var scrollPos = (cWidth / 2) - (width / 2) - mrg;
			}else{
				var scrollPos = (cWidth / 2) - (obj.getWidth() / 2) - mrg;
			}
			var position = obj.positionedOffset();
			var newPoss = position[0] - scrollPos;
			that.scrollTransition($('productContainer'+that.cID).up().scrollLeft,$('productContainer'+that.cID).up().scrollLeft,newPoss);


		},
		showLoader: function() {
			this.loader.setStyle({display:'block'});
		},
		hideLoader: function(){
			this.loader.setStyle({display:'none'});
		},
		addToWishList: function(pid){
			new Ajax.Request( path_to_root + 'scripts/php/pDockService2.php', {
			parameters: "func=addToWishList&pid="+pid
			})
		},
		removeFromWishList: function(pid){
			new Ajax.Request( path_to_root + 'scripts/php/pDockService2.php', {
			parameters: "func=removeFromWishList&pid="+pid
			})
		},
		updateWishList: function () {
			//myRailLength = myRailLength + 1;
			new Ajax.Updater('productContainermyrail', path_to_root + 'scripts/php/pDockService2.php', {
			  	parameters: "func=updateRail",
			  	onComplete: function(){
			  	},
			  	insertion: Insertion.Top
			});
		},
		productSelection: function() {

			var enterTimer = null;
			var leaveTimer = null;
			var lastLink;
			var that = this;
			p_ar = $$('#horizontal_carousel'+this.cID+' ul li a.productLink');
			//
			// Loop though all items in carousel
			p_ar.each(
			function(link){


//					if(BrowserDetect.browser != 'Explorer')
				link.up(1).observe('mouseenter',that.itemMouseEnterHandeler.bind(this,link)).observe('mouseleave',that.itemMouseLeaveHandeler.bind(this,link));

				//
				// PRODUCT SELECTION - ENGAGE PRODUCT DETAIL VIEW
				Event.observe(link,"click",that.itemClickHandeler.bind(this,link))
				Event.observe(link,"click",function(e){
					link.stopObserving('click');
					that.productEngage(link);
					ClickTaleTag("Product View");
					Event.stop(e);
				})


				var rmLinks = $$('.wl_removeLnk');
				if(rmLinks[0]){
					rmLinks.each(function(element){
						element.observe("click",function(){
							setTimeout(function(){ that.alterCarouselWidth(); },500);
						})
					})
				}



			});
			
			ln2_ar = $$('#horizontal_carousel'+this.cID+' ul li .openme a');
			ln2_ar.each(function(link){
				//Event.observe(link,"click",that.itemClickHandeler.bind(this,link))
				Event.observe(link,"click",function(e){
					//link.stopObserving('click');
					that.productEngage(link.up(1).down());
					//Event.stop(e);
				})
			});
		
		},
		itemClickHandeler: function(link){
				this.itemWidth = link.down('img').getWidth();
		},
		itemMouseEnterHandeler: function (link){

				var queues = Effect.Queues.get('item'+link.up(1).id);
				if(queues)
					queues.each(function(effect) { effect.cancel(); });

				if(BrowserDetect.browser == 'Explorer2'){
					link.up(1).setStyle({height:'110%',marginTop:'0px',marginLeft:'9px',marginRight:'9px'})
				}else{

					var mr = 9;
			     	if(BrowserDetect.browser == 'Safari' || BrowserDetect.browser == 'Chrome'){
			     		new Effect.Morph(link.up(), {
						  style: 'width:110%;', // CSS class name
						  duration: 0.3
						});
						mr = 35;
			     	}

					new Effect.Morph(link.up(1), {
					  style: 'height:110%; margin-top:0px; margin-left:9px; margin-right:'+mr+'px;', // CSS class name
					  duration: 0.3,
					  queue: { position: 'front', scope: 'item'+link.up(1).id }
					});
				}

				var rmL = $$('#'+link.up(1).id+ ' .wl_removeLnk');
				if(rmL[0]){
//						new Effect.Appear(rmL[0],{queue: { position: 'end', scope: 'item'+link.up(1).id }, duration:0.3});
					rmL[0].show();
					rmL[0].observe("mouseenter",function(){ rmL[0].down('span').show(); })
					rmL[0].observe("mouseleave",function(){ rmL[0].down('span').hide(); })
				}
		},
		itemMouseLeaveHandeler: function (link){

				if(!link.up(1)) return;
				this.itemWidth = link.down('img').getWidth();

				var queue2 = Effect.Queues.get('item'+link.up(1).id);
				if(queue2)
					queue2.each(function(effect) { effect.cancel(); });

				if(!$(link.up(1).id+'_detail')){
					if(BrowserDetect.browser == 'Explorer2'){
						link.up(1).setStyle({height:'100%',marginTop:'20px',marginLeft:'20px',marginRight:'20px'})
					}else{

						if(BrowserDetect.browser == 'Safari' || BrowserDetect.browser == 'Chrome'){
				     		new Effect.Morph(link.up(), {
							  style: 'width:100%;', // CSS class name
							  duration: 0.7
							});
				     	}

						new Effect.Morph(link.up(1), {
						  style: 'height:100%; margin-top:20px; margin-left:20px; margin-right:20px;', // CSS class name
						  duration: 0.7,
						  queue: { position: 'front', scope: 'item'+link.up(1).id }
						});
					}
				}
				var rmL = $$('#'+link.up(1).id+ ' .wl_removeLnk');
				if(rmL[0]){
					//new Effect.Fade(rmL[0],{queue: { position: 'start', scope: 'item'+link.up(1).id }, duration:0.3});
					rmL[0].hide();
					rmL[0].observe("mouseleave",function(){ rmL[0].down('span').hide(); })
				}

		},
		productEngage: function (link){
				//$('debug').insert({top:'<p>engage: '+link.href+'</p>'});


				var plink = link.href;
				var parts = plink.split(/\_/);
				var pid = parts.pop();
				if(this.pid == pid) return;
				this.pid = pid;

					var itemId = link.up(1).id;
					if(itemId.slice(0,1) != 'm'){

						var parts = plink.split(/\//);
						var name = parts.pop();

						document.location.hash = "#"+name;
						var func = 'detailReq&pid='+pid;

					}else{
						//
						// media detail request
						var func = 'detailReqMedia&mid='+pid;
					}

					var currentWidth = parseInt($('productContainer'+ this.cID).getWidth());
					var selProduct = link.up(1); // get li up from a

					//
					// resize car width to make space for product engage mode
					var liWidth = 650 - selProduct.getWidth(); //920
					if(this.controllerType == 'collection') var liWidth = 580 - selProduct.getWidth();

//					alert(currentWidth)
					if(currentWidth < this.dimensions[0]){
						//FOR SMALLER CAROUSELS>
						new Effect.Morph('productContainer'+ this.cID,{style: 'width:'+(currentWidth+liWidth)+'px',duration: 0.6})
					}else{
						$('productContainer'+ this.cID).setStyle({width:currentWidth+liWidth+'px'});
					}
					//$('debug').insert({top:'<p>morph product: '+this.cID+' width: '+parseInt(currentWidth+liWidth)+'</p>'});


					current_sel = $$('.container .selected');
					if(current_sel[0])	current_sel[0].className = "";

					//
					// MAKE CALL TO GET PRODUCT DETAIL

					selProduct.stopObserving('mouseenter');
					selProduct.stopObserving('mouseleave');
					selProduct.down(1).stopObserving('click');

					//$(selProduct.id+'_thumbnail').setStyle({display:'none'});
					var imgWidth = selProduct.down('img').getWidth();
					selProduct.down().setStyle({width:(imgWidth + 16) + 'px'});

					var param = '';
					if(this.itemWidth) param = '&itemWidth='+this.itemWidth;

					var that = this;
					var morphClass = 'selectedProduct'; //selectedMedia
					if(this.controllerType == 'collection') morphClass = 'selectedMedia';

					/*if(BrowserDetect.browser != 'Firefox'){

						Position.prepare();
						var container_x = Position.cumulativeOffset($("horizontal_carousel"+this.cID))[0]
						var container_y = Position.cumulativeOffset($("horizontal_carousel"+this.cID))[1]
						var element_y = Position.cumulativeOffset($(selProduct))[1]
						var element_x = Position.cumulativeOffset($(selProduct))[0]


						new Effect.Parallel(
						[
						new Effect.Morph(selProduct,{style: morphClass, sync:true}),
						new Effect.Scroll("horizontal_carousel"+that.cID, {x:(element_x-container_x-300), y:(container_y), sync:true})
						],
						{ duration: 1.1, queue:{ position:'end',scope:'openFX'} }
						);
						setTimeout(function(){
						selProduct.insert({bottom:loadgif});
						},550)
					}else{*/
						selProduct.morph(morphClass,{duration:0.6, queue: 'end'});
						setTimeout(function(){
						selProduct.insert({bottom:loadgif});
						},200)
//					}



							/*
							*/
					new Ajax.Updater(selProduct, path_to_root + 'scripts/php/pDockService2.php', {
					  	parameters: "func="+func+"&wishlist="+this.wishlist+'&carousel_id='+this.cID+'&controllerType='+this.controllerType+'&domid='+selProduct.id+param+'&rand='+Math.floor(Math.random()*11),
					  	requestHeaders: ['cache-control','no-cache','pragma','no-cache'],
					  	onComplete: function(){
							$(selProduct.id+'_thumbnail').setStyle({display:'none'});

					  		//link.down().setStyle({display:'none'}); // thumbnail
							//

							new Effect.Morph(link.up(1), {
							  style: 'height:110%; margin-top:0px;', // CSS class name
							  duration: 0.5,
							  queue: { position: 'end', scope: 'item'+link.up(1).id }
							});

							new Effect.Morph(selProduct.down(1), {
							  style: 'width:'+(imgWidth+18)+'px', // CSS class name 282
							  duration: 0.6,
							  queue: 'end'
							});

							//
							// GRACEFULLY SHOW DETAILS
							var d = $$('#'+selProduct.id+'_detail .detail_wrapper');
							new Effect.Appear(d[0],{duration:0.5, queue: 'end'});
							new Effect.Appear(d[0].next(),{duration:0.5, queue: 'end'});
							//
							// check if rail remove button exists
							if($('rmvBtn_'+selProduct.id)){
								$('rmvBtn_'+selProduct.id).observe("click",function(){
									setTimeout(function(){ that.alterCarouselWidth(); },500);
								})

							}

							setTimeout(function(){
								$('load_wrapper').remove();
					  			that.registerCloseBtn(link.up(1));
								that.variationTrigger(selProduct);

							},500)

							//if($('load_wrapper')) $('load_wrapper').remove();


					  	},
					  	insertion: Insertion.Top,
					  	evalScripts:true,
						asynchronous:true
					});


					//
					// GET MARGINS AND SCROLL TO CENTER
					//if(BrowserDetect.browser == 'Firefox'){
						//var mrg = 0;
						//this.scrollToView(selProduct,mrg,690); //980


					//}else{
						Position.prepare();
						var container_x = Position.cumulativeOffset($("horizontal_carousel"+this.cID))[0]
						var container_y = Position.cumulativeOffset($("horizontal_carousel"+this.cID))[1]
						var element_y = Position.cumulativeOffset($(selProduct))[1]
						var element_x = Position.cumulativeOffset($(selProduct))[0]

						var dimensions = screenDimensions();
  	  					var calc = dimensions[0]/2 - 325;

						new Effect.Scroll("horizontal_carousel"+that.cID, {x:(element_x-container_x-calc), y:(container_y)})
					//}

					var oldLoc = ""+link+"";
					var newlink = oldLoc.replace(virtual_path,"");
					//moveTo($('horizontal_carousel'+ this.cID), selProduct)
				//
				// GOOGLE TRACKER
				pageTracker._trackPageview(newlink);

		},
		registerCloseBtn: function (selProduct){

			//
	  		// MONITOR CLOSE EVENT
	  		//this.selProduct = selProduct;
//	  		var selProduct = selProduct;
	  		var link = selProduct.down(1);
	  		var that = this;
	  		this.pid='';
	  		var close = $$('#'+selProduct.id+' .close');

			close[0].observe('click',function(){that.closeProductSection(selProduct)})

	  		$$('.sendLinks a').each(function(lnk){
	  			lnk.observe("click",function(e){
	  				Event.stop(e);
	  			})
	  		});
	  		$$('.sizeChart a').each(function(lnk){
	  			lnk.observe("click",function(e){
	  				Event.stop(e);
	  			})
	  		});

		},
		closeProductSection: function(selProduct){

				var that = this;
				var close = $$('#'+selProduct.id+' .close');
				close[0].stopObserving('click');
				//$('debug').insert({top:'<p>start close '+selProduct.id+':</p>'});

				$(selProduct.id+'_thumbnail').setStyle({width:'auto'});

				new Effect.Parallel(
				[
				Effect.Fade(selProduct.down(1).next(),{ sync:true }),
				Effect.Fade(selProduct.down(1).next(1),{ sync:true })
				],
				{ duration: 0.5, queue:{ position:'end',scope:'cloesFX'} }
				);


	  			//selProduct.setStyle({width: selProduct.getWidth() + 'px'});
	  			//
	  			// morph collapse image and detail areas
				new Effect.Parallel(
				[
				new Effect.Morph(selProduct, { sync:true, style: 'width:300px;margin-left:0px;margin-right:40px'}),
				new Effect.Morph(selProduct.down(1),{ sync:true, style: 'width:300px;'})
				],
				{ duration: 0.8, queue:{ position:'end',scope:'cloesFX'},
				afterFinish:function(){

					//$('debug').insert({top:'<p>Finish Close trans '+selProduct.id+':</p>'});
			  		if(selProduct.down(2).next()) selProduct.down(2).next().remove(); //remove flash

	  				/*new Effect.Morph(selProduct, {
					  style: 'height:100%; margin-top:20px; marginLeft:0px; marginRight:0px;', // CSS class name
					  duration: 0.3
					});*/
	  				selProduct.setStyle({width:'',marginLeft:'',marginRight:'',height:'100%',marginTop:'20px'});

	  				if($(selProduct.id+'_detail'))
	  					$(selProduct.id+'_detail').remove(); // Wait until fade has completed and remove detail area

		  			selProduct.className = "item";
		  			var currentWidth = parseInt($('productContainer'+ that.cID).getWidth());


					$(selProduct.id+'_thumbnail').setStyle({display:''})


					setTimeout(function(){
						//selProduct.setStyle({width:'',marginLeft:'',marginRight:'',height:'100%',marginTop:'20px'});
						that.alterCarouselWidth('smooth');
					},100)

		  			//
		  			//re-enable mouseleave event
		  			selProduct.down(1).observe('mouseenter',that.itemMouseEnterHandeler.bind(this,selProduct.down(1)));
		  			selProduct.down(1).observe('mouseleave',that.itemMouseLeaveHandeler.bind(this,selProduct.down(1)));
					Event.observe(selProduct.down(1),"click",function(e){
						selProduct.down(1).stopObserving('click');
						that.productEngage(selProduct.down(1));
						Event.stop(e);
					});
					}
				}
				);

		},
		variationTrigger: function (selProduct){

			var selProduct = selProduct;

			var theForm = selProduct.down('form');
			var varTriggers = $$('#'+selProduct.down().id+' .select li ul li a');
			var heldSize = selProduct.down(1).getWidth();

			var that = this;

			varTriggers.each(function(trig){

				trig.observe("click",function(e){

				Event.stop(e);
				selProduct.down().remove();
				new Ajax.Updater(selProduct, path_to_root + 'scripts/php/pDockService2.php', {
					parameters: Form.serialize(theForm)+"&func=detailReq",
					onComplete: function(transport){


//				  		selProduct.down(1).setStyle({width:'auto'});
//				  		var imgWidth = selProduct.down('img').getWidth();
				  		selProduct.down(1).setStyle({width:(heldSize + 0) + 'px'});
				  		//selProduct.setStyle({width:'650px'});

						that.registerCloseBtn(selProduct);
						that.variationTrigger(selProduct);

				  		fn_input_placeholders();
					},
					insertion: Insertion.Top,
					evalScripts:true
				})

				})
			})

		},
		mediaCallWatch: function (){

			var pid = this.pid;
			var largeIMGsize = this.largeIMGsize;

			var media_ar = $$('.product_media img');
			media_ar.each(
				function(media){
					Event.observe(media,'click',function(){
						//if(mSel)
							//mSel
						var mSel = media.id;
						//alert(pid);
						new Ajax.Updater('mainimage'+pid, path_to_root + 'scripts/php/pDockService2.php', {
						 	parameters: "func=requestmedia&mid="+media.id+"&pid="+pid+"&mediaSize="+largeIMGsize+'&carousel_id='+that.cID,
						 	onComplete: function(){

						 		if($('myRailContainer'))
						 			$('myRailContainer').morph('right:'+railin+'px');
						 	}
						});
					})
				}
			)
		},
		resized: function (){ // ################DEPERECATE???
			this.updateCarouselSize();
	  		//this.theCarousel.updateSize();
		},
		buildCarousel: function(data) {

			if(data.carouselItems!=undefined){

			var carouselItems = data.carouselItems;

		 	//
 			// loop through the product items
 			for (var i = 0; i < carouselItems.length; i++) {
 				//
 				// build new <li>
 				var li = '<li id="'+carouselItems[i].liID+'_'+carouselItems[i].carousel_id+'" class="item" style="height:100%;">';
 				li += '<div id="'+carouselItems[i].liID+'_'+carouselItems[i].carousel_id+'_thumbnail" class="image"><a class="productLink" href="'+carouselItems[i].productLink+'"><img src="'+carouselItems[i].mediaPath+'media/jpg/'+carouselItems[i].imageWidth+'/'+carouselItems[i].productImage+'" /></a>';
 				li += '<div id="p'+carouselItems[i].product_id+'_name" class="caption">'+carouselItems[i].productName+'<br/>'+carouselItems[i].productPrice+'</div>';

 				if(carouselItems[i].productStock == -1){
 					li += '<img class="stock_status comingsoon" title="Coming Soon" src="'+path_to_root+'media/ecommerce_skin/comingsoon.png" alt="Coming Soon" />';
 				}else if(carouselItems[i].productStock == -2){
 					li += '<img class="stock_status soldout" title="Sold Out" src="'+path_to_root+'media/ecommerce_skin/soldout.png" alt="Sold Out" />';
 				}else if(carouselItems[i].completeness < 11){
 					li += '<img class="stock_status limited" title="Limited Availablility" src="'+path_to_root+'media/ecommerce_skin/limited.png" width="20px" height="20px" alt="Limited Availablility" />'
 				}
 				li += '<div class="top"></div><div class="bottom"></div><div class="left"></div><div class="right"></div></div>';
 				li += '</li>';

 				//
				//
 				$('productContainer'+this.cID).insert(li);
 			}

			}else{
//				alert('no items within filter range');

				return;
			}

 			li = '<li class="clear"></li>';
 			$('productContainer'+this.cID).insert(li);




 			var filters = data.filters;
 			$('filter_controls').innerHTML="";

 			for(var i = 0; i < filters.length; i++) {

 				var sel = '<ul id="'+filters[i].att+'">';
				var options = filters[i].options;
 				var sel2 = '';
 				var selIn = 'no';

 				for(var n = 0; n < options.length; n++){
 					if(options[n].selected==1){
	 					sel += '<li><a href=?filter='+filters[i].att+'&val='+options[n].value+'"';
	 					if(options[n].disable==1) sel += 'class="filter_disabled"';
	 					sel += '>'+options[n].value+'</a><ul>';
	 					selIn = 'yes';
 					}else{
	 					sel2 += '<li><a href="?filter='+filters[i].att+'&val='+options[n].value+'"';
	 					if(options[n].disable==1) sel2 += 'class="filter_disabled"';
	 					sel2 += '>'+options[n].value+'</a></li>';
 					}
 				}
 				var ext ='';
 				//if(filters[i].att != 'Sort By Price') var ext = 'ALL';

 				var cleanName = filters[i].att;
 				cleanName = cleanName.replace('Std ','');

 				if(selIn == 'yes'){
 					var sel3 = '<li><a href="#">'+cleanName+'</a></li>';
 				}else{
 					var sel3 = '<li><a href="#">'+cleanName+'</a><ul>';
 				}

 				sel2 += '</ul></li></ul>';
 				sel4 =  sel + sel3+ sel2;
 				$('filter_controls').insert(sel4);
//							 				alert(filters[i].att);
 			}
 			//
 			// add clear filter option
 			var clearFilter = '<ul id="Clear_Filters"><li><a class="clear_filter" href="?clear_filters=true">Clear Filters</a></li></ul>';
			$('filter_controls').insert(clearFilter);

 			this.productSelection();
		},
		filterWatch: function() {

			var categoryID = this.categoryID;
			var filters = $$('#collectionContainer'+this.cID+' .filter ul a');
			var that = this;

			filters.each(function(filter){

				Event.observe(filter,"click",function(e){
					Event.stop(e);
					//that.showLoader();
					//if(filter.value != ''){

						var collCon = filter.up(6);
						var contain = $$('#productContainer'+that.cID);
						var extendParam = '';
						var filtParam = filter.innerHTML;
						//
						// check for apply new filter
						if(filter.className == 'filter_disabled')
							extendParam = "&cleanFilters=yes";



						var controlType = 'catid';
						if($('shopcol'))
							controlType = 'collection_id';

						new Ajax.Request(path_to_root + 'scripts/php/pDockService2.php', {
						 	parameters: "controllerType="+that.controllerType+"&"+controlType+"="+categoryID+"&offset=0&limit=200&carID="+that.cID+"&search_attribute="+filter.up(3).id+","+filtParam + extendParam,
						 	onComplete: function(transport){
						 			var data = transport.responseText .evalJSON(true);

						 			// do we have data?
						 			if(data.carouselItems!=undefined){
										var ULcontainer = contain[0];
							 			ULcontainer.innerHTML = "";

						 				contain[0].setStyle({width:'100000px'});
						 				that.buildCarousel(data);

							 			setTimeout(function(){

							 				contain[0].morph("left:0px");
							 				that.filterWatch();
							 				that.alterCarouselWidth('normal');
	//							 				that.hideLoader();

							 			},1600);
						 			}else{
						 				callErrorForm(1);
						 			}


					 		}

						});

				})
			})
		}

	};

	/**
	*	create the carousel controller class
	*	and create the carousel object
	*/
	var dockObj;
	function setup(carObj,dockObj,carID,catID,controllerType){

		var carObj = carObj;
		var pContainer = $('productContainer'+carID);
			dockObj = new pDock($("horizontal_carousel"+carID),carID,catID,pContainer,controllerType);

			//
			// controller type
			switch(controllerType){
				case 'category':
// 					dockObj.wishlist = 'yes';
					dockObj.wishlist = 'no';
				break;
				case 'myrail':
					/*ar_items = $$('#'+ "horizontal_carousel"+carID +' ul li.item');
					ar_items.each(
						function(itm){
							dockObj.productEngage(itm.down('a'));
						}
					)*/

				break;
				default:
					dockObj.wishlist = 'no';
				break;
			}


			Event.observe(window,"resize",function(){ setTimeout(function(){dockObj.checkScroll()},500); });
			Event.observe("horizontal_carousel"+carID, "scroll",function(){ dockObj.checkScroll() });


		//
		// anchor present? scroll to
		setTimeout(function(){
		var hash = document.location.hash;
		if(hash && carID == 1){
      if (hash.indexOf('?')!=-1) {
        var hashquery = hash.split('?');
        hash = hashquery[0];
      }
			var parts = hash.split(/\_/);
			var pid = parts.pop();
			if($('p'+pid+'_'+carID)){ //  does the item exist in this carousel??
				//dockObj.scrollToView($('p'+pid+'_'+carID),0,0);

				var link = $('p'+pid+'_1').down('a');
				//moveTo("horizontal_carousel"+carID, $('p'+pid+'_1'))
				dockObj.productEngage(link)
			}else{
				//check the product group siblings
				hash = hash.substring(1);
				if($(hash)){
					plink = $(hash).up().down('a').href;
					var parts = plink.split(/\_/);
					var new_path = '';
					var oldpid = parts.pop();
					for(var i=0; i<parts.length; i++){
						if(parts[i]!=undefined)
							new_path += parts[i]+"_";
					}
					var hparts=hash.split(/\_/);
					var newpid = hparts.pop();
					$(hash).up().down('a').href = new_path + newpid;
					dockObj.productEngage($(hash).up().down('a'))
				}

			}
		}
		},600)

	}

	function screenDimensions(){
		d = document;
		if (typeof window.innerWidth != "undefined")
		{
			h = window.innerHeight;
			w = window.innerWidth;
		}
		else if (d.documentElement && typeof d.documentElement.offsetWidth != "undefined" && d.documentElement.offsetWidth != 0)
		{
			h = d.documentElement.offsetHeight;
			w = d.documentElement.offsetWidth;
		}
		else if (d.body && typeof d.body.offsetWidth != "undefined")
		{
			h = d.body.offsetHeight;
			w = d.body.offsetWidth;
		};

		return[w,h];
	}
