// extend Apple Core's slider class
var switchSlider = Class.create();
Object.extend(Object.extend(switchSlider.prototype, AC.Slider.prototype), {
	// get's called in initialize upon construction
	populate: function() {
		//var switchBody = document.getElementsByClassName('easyoperation')[0];
		var items = document.getElementsByClassName('slideritem');
		for (var i=0; i<items.length; i++) {
			var html = items[i].getElementsByTagName('div')[0];
			var sliderItem = new AC.SliderItem(html);
			this.items.push(sliderItem);
			
		}
		//alert(items[0]);
		this.render(1);
	}
});


var slider_top = Class.create();
Object.extend(slider_top.prototype, Event.Listener);
Object.extend(Object.extend(slider_top.prototype, AC.Slider.prototype), {

	createArrows: function() {
		/*
		// previous arrow
		this.prevArrow = Builder.node('a', { 'class':'ACSliderPreviousArrow' }, '&lt;');
		Event.observe(this.prevArrow, 'click', function(evt) {
			Event.stop(evt);
			if (this.currentPage!=1) this.getPrevious();
		}.bind(this));
		this.container.appendChild(this.prevArrow);

		// next arrow
		this.nextArrow = Builder.node('a', { 'class':'ACSliderNextArrow' }, '&gt;');
		Event.observe(this.nextArrow, 'click', function(evt) {
			Event.stop(evt);
			if (this.currentPage!=this.totalPages) this.getNext();
		}.bind(this));
		this.container.appendChild(this.nextArrow);
		*/
	},

	// get's called in initialize upon construction
	populate: function() {
		var items = $$('.slideritem_top');
		for (var i=0; i<items.length; i++) {
			var html = items[i].down();
			var sliderItem = new AC.SliderItem(html);
			this.items.push(sliderItem);
			items[i].remove();
		}

		this.render(7);

	},

	scrolltoPageNumber: function(toPageNumber, direction) {
		// if we're not going to the current page & we're not already doing something ...
		if (this.currentPage != toPageNumber && !this.isAnimating) {

			// if we don't know the direction, figure it out (-1 is next, 1 is previous)
			if (!direction) var direction = this.currentPage-toPageNumber;

			var prop3 = (direction==1) ? 'Left Arrow' : 'Right Arrow';
			AC.Tracking.trackClick({
				prop3: document.title+' - TopSlider Button - '+prop3
			}, this, 'o', document.title);

			this.isAnimating = true;

			// set the current page to the one we're going to
			this.currentPage = toPageNumber;
			// and fix the number if we're going to before the first page or page after the last page
			this.resetPages();

			// remove the 'active' class on the page nav items
			var pageNavAnchors = this.pageNav.getElementsByTagName('a');
			for (var i=0, anchor; anchor=pageNavAnchors[i]; i++) {
				if (Element.hasClassName(anchor, 'active')) Element.removeClassName(anchor, 'active');
				if (anchor.innerHTML==this.currentPage) Element.addClassName(anchor, 'active');
			}

			// do the scroll
			var options = {
				duration: 0.5,
				queue: { position:'end', scope:'sliderQueue', limit:1 },
				afterFinish: this.afterScroll.bind(this)
			};

			// TODO slider needs to be reworked, pretty inflexible
			//may not always have the mask dimensions prior to this point.
			//probably need to maintain a reference to the mask itself to 
			//recalculate the dimendions if necessary. Only recalculating 
			//if it's 0 right now but could do it more often to aid in
			//flexibile resizing
			if (!this.maskInnerDimension) {
				this.positionWithinMask(this.container);
			}

			if (this.orientation == 'horizontal') {
				new Effect.MoveBy(this.list, 0, this.maskInnerDimension*direction, options);
			} else {
				new Effect.MoveBy(this.list, this.maskInnerDimension*direction, 0, options);
			}
		} else {
			this.resetArrows();
		}
	},

	resetArrows: function() {
		/*
		this.prevArrow.removeClassName('inactive');
		this.nextArrow.removeClassName('inactive');

		if (this.currentPage == 1) {
			this.prevArrow.addClassName('inactive');
		} else if (this.currentPage == this.totalPages) {
			this.nextArrow.addClassName('inactive');
		}
		*/
	},

	resetPages: function() {
		this.resetArrows();

		if (this.currentPage == 0) {
			this.currentPage = this.totalPages;
			this.positionOffset = -this.maskInnerDimension*this.totalPages + 'px';
			//this.prevArrow.addClassName('inactive');
		} else if (this.currentPage == 1) {
			this.currentPage = 1;
			this.positionOffset = -this.maskInnerDimension + 'px';
		} else if (this.currentPage == this.totalPages+1) {
			this.currentPage = 1;
			this.positionOffset = -this.maskInnerDimension+'px';
			this.nextArrow.addClassName('inactive');
		} else {
			this.positionOffset = false;
		}
	}

});

Event.onDOMReady(function() {

	// tracker and delegate
	var trackerDelegate = {
		trackingNameForSection: function(tracker, name, section) {
			tracker.count++;
			if (name.match('design_overlay_top')) return false;
			if (name.match('Step')) return false;
			if (tracker.count > 2) {this.trackClickedThumb(name); return name};
			return false;
		},
		trackClickedThumb: function(id) {
			if (document.getElementsByClassName('design_overlay_top')[0]){
			var tgt = document.getElementsByClassName('design_overlay_top')[0];
			if(tgt.getElementsByClassName(id)[1]) {
				var targetHTML = document.getElementsByClassName(id)[1];
				if (targetHTML.getElementsByTagName('h4')[0]) {
					var h4 = targetHTML.getElementsByTagName('h4')[0];
					var thisText = h4.childNodes[0].nodeValue;
					var trackingText = document.title.toString().replace('アップル - Macをはじめよう', 'Overlay')+' - '+thisText.toString();
					//alert('Track : '+trackingText);
					AC.Tracking.trackPage({pageName: trackingText});
				}
			}
			}
		}
	}
	var tracker = new AC.ViewMaster.Tracker('click');
	tracker.setDelegate(trackerDelegate);

	// change the overlay background for each overlay
	var overlayBackground = function(evt) {
		var overlay = evt.event_data.data.sender;
		var incoming = evt.event_data.data.incomingView;

		if (overlay && typeof(overlay.setOverlayShadowImageSrc) == 'function' && incoming) {
			if (incoming.id === 'windowsonamac') {
				overlay.setOverlayShadowImageSrc('http://images.apple.com/jp/getamac/faq/images/switch/overlay-designbg20081107.png');
			} else {
				AC.Tracking.trackPage({
					pageName: document.title.toString().replace('アップル - ', '') +' - Overlay (JP)'
				});
				//overlay.setOverlayShadowImageSrc('http://images.apple.com/jp/getamac/faq/images/switch/overlay-designbg20081107.png');
			}
		}
	}

	Event.Listener.listenForEvent(AC.ViewMaster, 'ViewMasterWillShowNotification', false, overlayBackground);

	// monsterlay...
	var gallerySections = $$('#design_overlay_top > ul > li > a.overlaythumb_top');

	var galleryViewMaster = new AC.ViewMaster.SlideshowViewer(gallerySections, 'designSwapView_top', 'overlaythumb_top', 'slideshow-action_top', {
		parentSectionId: 'design_overlay_top',
		parentTriggerClassName: 'OverlayPanel',
		silentTriggers: true,
		delay: 6000
	});

	var galleryViewMasterDelegate = {
		willShow: function(overlayPanel, outgoing, incoming) {
			if(incoming && incoming.id === 'easyoperation') {
				//alert('showing easyoperation');
			}
		}
	}
	galleryViewMaster.setDelegate(galleryViewMasterDelegate);
	var aSlider = new slider_top('slider_top');
	aSlider.direction = -1;

	var pageController = {
		isGalleryViewMasterSlideshowPlaying:false,
		isMotionPicturePlaying:false,
		motionPicturePlaying:null,
		shouldStartGalleryViewMasterSlideshow:false,
		motionPictureDidStart:  function(evt) {
			var data = evt.event_data.data;

			if (data === galleryViewMaster.slideshow) {
				this.isGalleryViewMasterSlideshowPlaying = true;
				if (this.isMotionPicturePlaying) {
					this.shouldStartGalleryViewMasterSlideshow = true;
					galleryViewMaster.slideshow.stop();
				}
			} else {
				this.isMotionPicturePlaying = true;
				this.motionPicturePlaying = data;
				if (this.isGalleryViewMasterSlideshowPlaying) {
					this.shouldStartGalleryViewMasterSlideshow = true;
					galleryViewMaster.slideshow.stop();
				}
			}

			this.fakeSlideshowTrigger();
		},

		motionPictureDidEnd: function(evt) {
			var data = evt.event_data.data;

			if (data === galleryViewMaster.slideshow) {
				this.isGalleryViewMasterSlideshowPlaying = false;
			} else {
				if (this.motionPicturePlaying === data) {
					this.isMotionPicturePlaying = false;
					if (this.shouldStartGalleryViewMasterSlideshow) {
						this.shouldStartGalleryViewMasterSlideshow = false;
						if (evt.event_data.event_name === 'didFinishMovie') {
							galleryViewMaster.slideshow.setProgress(galleryViewMaster.slideshow.delay()*2/3);
						} else {
							galleryViewMaster.slideshow.setProgress(galleryViewMaster.slideshow.delay());
						}
						galleryViewMaster.slideshow.start();
					}
				}
			}

			this.fakeSlideshowTrigger();
		},

		fakeSlideshowTrigger: function() {
			var playing = (this.shouldStartGalleryViewMasterSlideshow && this.isMotionPicturePlaying) || this.isGalleryViewMasterSlideshowPlaying;
			var triggers = $$('.'+galleryViewMaster.slideshow.triggerClassName); //+'[href="#slideshow-toggle"]'
			triggers.each(function(trigger) {
				if (playing) {
					trigger.addClassName('playing')
				} else {
					trigger.removeClassName('playing')
				}
			});
		}
	}; //pageController
	Object.extend(pageController, Event.Listener);
	window.pageController = pageController;

	pageController.listenForEvent(AC.ViewMaster, 'ViewMasterDidShowNotification', false, function(evt) {
		var data = evt.event_data.data,
		indexOfIncomingView;
		if (galleryViewMaster === data.sender) {
			indexOfIncomingView = data.sender.indexOfSection(data.incomingView);
			aSlider.scrolltoPageNumber(Math.floor((indexOfIncomingView/7)+1), aSlider.direction);
			if (aSlider.direction === 1) aSlider.direction = -1;
		}
	});

	pageController.listenForEvent(document.event, 'didStart', false, pageController.motionPictureDidStart.bind(pageController));
	pageController.listenForEvent(document.event, 'didEnd', false, pageController.motionPictureDidEnd.bind(pageController));
	pageController.listenForEvent(document.event, 'didFinishMovie', false, pageController.motionPictureDidEnd.bind(pageController));

	/*
	var galleryBack = $('slideshow-previous');
	var galleryNext = $('slideshow-next');
	galleryBack.observe('click', function(evt) {
		evt.stop();
		
		AC.Tracking.trackClick({
				prop3: document.title+' - Back Button'
			}, this, 'o', document.title);
			
		aSlider.direction = 1;
		galleryViewMaster.previous();
	});
	galleryNext.observe('click', function(evt) {
		evt.stop();
		
		AC.Tracking.trackClick({
				prop3: document.title+' - Next Button'
			}, this, 'o', document.title);
			
		galleryViewMaster.next();
	});
	*/
});
