var IMG = {};


IMG.hideGallery = function() {

		var overlay_id		= 'modal_overlay';	
		var box_id			= 'modal_box';
		var loading_id		= 'modal_loading';
		var overlay			= $(overlay_id);
		var modal			= $(box_id);
		var loading			= $(loading_id);

		loading.hide();

		Effect.Fade(overlay, { duration: 0.4});
		Effect.Fade(modal, { duration: 0.4});

};


IMG.showGallery = function(path, type) {

		if (!path) return;
			
		var overlay_id		= 'modal_overlay';	
		var box_id			= 'modal_box';
		var loading_id		= 'modal_loading';
		var modal_html	 	= '<div id="modal_overlay"> </div>'
							+ '<div id="modal_loading"><div><img src="/assets/img/modal_loading.gif"/></div></div>'
							+ '<div id="modal_box">'
							+ '<div class="modal_inner">'
							+ '<div class="modal_close" onClick="IMG.hideGallery();"> </div>'
							+ '<div class="modal_content">'
							+ '</div></div></div>';
		
		if (!(modal = $(box_id))) {
			$('layout').insert({bottom: modal_html});			
		}
		
		var overlay			= $(overlay_id);
		var modal			= $(box_id);
		var inner			= modal.down('.modal_inner');
		var loading			= $(loading_id);
		
		inner.removeClassName('modal_runway');
		inner.removeClassName('modal_video');
		
		inner.addClassName('modal_'+type);
		
		modal.hide();


		// Set modal box position based on scroll
		var view_scroll 	= document.viewport.getScrollOffsets()[1];
		$(box_id).setStyle({paddingTop: (view_scroll+50)+'px'});
		$(loading_id).setStyle({paddingTop: (view_scroll+100)+'px'});


		// Show shaded overlay and loading state
		Effect.Appear(overlay, { duration: 0.4});
		Effect.Appear(loading, { duration: 0.4});
		

		// Get modal data, ajax request to CMS
		new Ajax.Request(path, {
			method: 'get'
			, onSuccess: function(transport) {
				var content = transport.responseText;			
				$(box_id).down('.modal_content').update(content);
				loading.hide();
				Effect.Appear(box_id, { duration: 0.6});
				stLight.options({publisher:'4a025e70-42d3-40c2-9f79-e8e94e82c14f', popup: 'true'});
			}
		});

		// Activate event listeners for closing modal
		document.observe('keydown', function(e) {
			if (e.keyCode != Event.KEY_RETURN && e.keyCode != Event.KEY_ESC) return;
			IMG.hideGallery();
		});
		overlay.observe('click', function(e) {
			IMG.hideGallery();
		});


};

IMG.showGalleryImage = function(num, btn) {

	$$('#modal_box .full DIV').invoke('hide');
	$('full_'+num).show();
	$$('#modal_box .thumbs .selected').invoke('removeClassName', 'selected');
	$(btn).addClassName('selected');

};


IMG.submitSubscribe = function(form) {
	
		var errors			= false;
	
		var pattern_email 	= /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
	
		var form 			= $(form);
		var email_field 	= form.down('.email');
		var email_input 	= email_field.down('INPUT[type=text]').value;
		var confirm_field 	= form.down('.check_confirm');
		var confirm_input 	= confirm_field.down('INPUT[type=checkbox]');
		var error_field 	= form.down('.form_error');		
		
		// Clear errors tates
		email_field.removeClassName('error');
		confirm_field.removeClassName('error');
		error_field.hide();
		
		// Test email
		if (!email_input.length || !pattern_email.test(email_input)) {
			email_field.addClassName('error');
			errors = true;
		}

		// Test confirmation
		if (confirm_input.checked == false) {
			confirm_field.addClassName('error');
			errors = true;
		}		
		
		if (errors) {
			error_field.show();
			return false;
		} else {
		
			// Successful, submit form.
			
			var loading 		= form.down('.loading');
			var submitbtn 		= form.down('.submit');
			var form_content 	= form.down('.form_content');
			var form_thanks		= form.down('.form_thanks');
			
			loading.show();
			submitbtn.hide();			
			
			form_thanks.setStyle({height: form_content.getStyle('height')});

			form.request({
				onComplete: function(){
					form_content.hide();
					form_thanks.show();			
				}
			})

			return true;		
		}
		
};


IMG.initTopHeader = function() {

		var timer;
		var header_menus 		= $('header_location', 'header_subscribe');
		var header_between		= $('header_between');
		var list_init			= false;
		var pattern_numeric		= /[^0-9\s]/;
	
		// Init each menu generically
		header_menus.each(function(menu) {
			
			menu.observe('mouseenter', function() {
				// Make sure all the other menus are closed
				header_menus.invoke('removeClassName', 'open');
				// Clear any timers waiting to close this
				if (timer) clearInterval(timer);
				// Open it!
				menu.addClassName('open');
				header_between.addClassName('open');
				
				if (!list_init) {
					// Add listener first time user interacts, so it's not always there.
					$$('#header_subscribe_designers .title').each(function(listtitle) {

						var listmenu 		= listtitle.up('#header_subscribe_designers');		

						listtitle.observe('click', function() {listmenu.toggleClassName('open');});
						
					});
					list_init = true;
				}


			});
			menu.observe('mouseleave', function() {
				// Set timer to close panel
				timer = setTimeout(function() {
					header_between.removeClassName('open');
					menu.removeClassName('open');
					}, 500);
			});
			
		});
		
		// Init mobile field in subscrube menu
		var mobile_field		= $('header_subscribe').down('INPUT.mobile');
		
		mobile_field.onchange = function() {
			if (!$F(mobile_field)) return;
			mobile_field.value = $F(mobile_field).gsub(pattern_numeric, '');						
		};
		
};


IMG.scrollDesignerBrowser = function(l, button) {

		var menu 		= $('main_menu_designers');
		var menu_items	= $$('#drop_designers .menu A');
		var list 		= $('main_menu_designers_list');

		if (!l) return;

		var letters = l.split(',');
		var scrollto	= false;
				
		// Loop through all letters to find first matching header. Sometimes one is missing.
		while((scrollto == false) && (letters.length > 0)) {
			var letter = letters.shift();
			if ((heading = $('list_header_'+letter))) {
				scrollto = heading;
			}
		};			

					
		if (scrollto) {
			
			menu_items.invoke('removeClassName', 'current');
			$(button).addClassName('current');
			
			list_y 		= $(list).cumulativeOffset()[1];
			go_y		= $(scrollto).cumulativeOffset()[1];

			new Effect.Scroll(list, {x:0, y:(go_y-list_y)});
			
		}				

};


IMG.initDesignerBrowser = function() {

		var menu 		= $('main_menu_designers');
		var button		= menu.down('.menu_button');

		button.observe('click', function() {
			$('drop_designers').toggleClassName('open');
			menu.toggleClassName('open');
		});

};

IMG.homeSchedule = function(ident, car, current) {
	
	var schedule 	= $(ident);
	var navs		= schedule.select('.carousel_sched_days .day');
	var days		= schedule.select('.day_group');
	
	var events		= 0;
	var day_to_page	= [];
	var page_to_day	= [];

	car.afterMove = function(stats) {
		var slide_cur = stats.slide_cur;
		if ((num = page_to_day[slide_cur])) {
			navs.invoke('removeClassName', 'day_current');
			$('nav_'+num).addClassName('day_current');
		}
	};

	days.each(function(day) {
		
		var day_num 	= day.getAttribute('number');
		var day_page	= Math.floor(events / 5) + 1;
		var day_events 	= day.select('.item');
		
		if (day_page == 0) day_page = 1;
		
		events += day_events.length;
		
		day_to_page[day_num] 	= day_page;
		page_to_day[day_page] 	= day_num;
	
	});
	
	navs.each(function(btn) {
	
		btn.observe('click', function() {
			navs.invoke('removeClassName', 'day_current');
			btn.addClassName('day_current');
			moveToDay(btn.getAttribute('number'));
		});

	});
	
	var moveToDay = function(num) {
	
		if ((day = $('day_'+num))) {
				
			var offset 	= day.offsetLeft *-1;
			var page	= day_to_page[num];

			car.manual(offset, page);

		}
	
	};
	
	if (current) {
		moveToDay(current);
	}
	

};


IMG.carousal = function(ident, options) {
			
		var slider 			= null;
		var prefs			= {
			slides_per_screen	: 5
			, slide_width		: 0
			, slide_class		: 'item'
			, slider_class		: 'carousel_slider'
			, nav_disable_class	: 'disable'
		}
		var slides			= {};
		var slide_cnt		= 0;
		var slide_cur		= 1;
		var slide_pages		= 1;
		var nav_prev		= false;
		var nav_next		= false;
		var nav_current		= false;
		var nav_pages		= null;
		
		var self			= this;
	
		// Public methods
		
		this.afterMove = function() {};
		
		this.goToPage = function(num) {
			
				num = num -1;

				var _move 	= (num * prefs.slides_per_screen * prefs.slide_width) * -1;
				move(_move);
				slide_cur = num + 1;
		
		};

		this.manual = function(offset, page) {
			slide_cur = page;
			return move(offset);
		};
		
		// Private methods

		var init = function(ident) {
			
			if (options && options.slides_per_screen) prefs.slides_per_screen = options.slides_per_screen;
			
			ident 			= $(ident);
			slider 			= ident.down('.'+prefs.slider_class);
			slides 			= slider.select('.'+prefs.slide_class);
			slide_cnt		= slides.length;
			
			if (!slide_cnt) return false;

			// Calculate slide width dynamically
			['width', 'borderRightWidth', 'borderLeftWidth', 'marginLeft', 'marginRight'].each(function(p) {
				// Use the last element, sometimes first is styled differently
				p_width = parseInt(slides.last().getStyle(p));
				if (p_width > 0) prefs.slide_width += p_width;
			});
			
			var total_width		= ((slide_cnt*prefs.slide_width)+100+'px');
			
			
			slide_pages		= Math.ceil(slide_cnt / prefs.slides_per_screen);
			slider.setStyle({width: total_width});
			
			if ((np = ident.down('.previous'))) {
				nav_prev = np;
//				nav_prev.setAttribute('onClick', 'return false;');
				nav_prev.observe('click', goPrevious);
			}
			if ((nn = ident.down('.next'))) {
				nav_next = nn;
//				nav_next.setAttribute('onClick', 'return false;');
				nav_next.observe('click', goNext);
			}			
			if ((nc = ident.down('.current'))) {
				nav_current = nc;
			}			
			if ((nt = ident.down('.total'))) {
				nt.update(slide_cnt);
			}			
			
			updateNav();	
			
		};

		var updateNav = function() {

//			console.log('slide_cur: '+slide_cur+' / slide_pages:'+slide_pages);

			if (nav_prev) {
				if (slide_cur > 1) {
					nav_prev.removeClassName(prefs.nav_disable_class);
				} else {
					nav_prev.addClassName(prefs.nav_disable_class);
				}
			}
			
			if (nav_next) {
				if (slide_cur < slide_pages) {
					nav_next.removeClassName(prefs.nav_disable_class);
				} else {
					nav_next.addClassName(prefs.nav_disable_class);
				}
			}		

			if (nav_current) {
				nav_current.update(slide_cur);			
			}
			
		};

		var goPrevious = function() {				

			if (slide_cur > 1) {
				slide_cur 	= slide_cur - 1;
				var _move 	= ((slide_cur - 1) * prefs.slides_per_screen * prefs.slide_width) * -1;
				move(_move);
			}			

		};

		var goNext = function() {
		
			if (slide_cur < slide_pages) {

				var _go_page 	= slide_cur + 1;
				var _move 		= (slide_cur * prefs.slides_per_screen * prefs.slide_width) * -1;
				
				//console.log('_go_page: '+_go_page+' / _move: '+_move+' / slide_cur: '+slide_cur+' / slide_pages:'+slide_pages + ' / mod: '+(slide_pages % prefs.slides_per_screen));

				if ((_go_page == slide_pages) && (slide_pages % prefs.slides_per_screen != 0)) {
					// Going to last page with incomplete set of tiles
					var offset	= (slide_cnt % prefs.slides_per_screen);
					var _move 	= _move + (offset * prefs.slide_width);
				}
				
				slide_cur = _go_page;
				move(_move);
			}			

		};

		var move = function(num) {				

			$(slider).morph('left: '+num+'px', {
				duration	: 1
				, beforeStart 	: function(e) {
					e.element.addClassName('scrolling');
				}
				, afterFinish 	: function(e) {
					e.element.removeClassName('scrolling');
					updateNav();
					self.afterMove({'slide_cur': slide_cur, 'slide_pages' : slide_pages});
				}
			});
		};

		// Trigger constructor
		init(ident);

};


IMG.homeNews = function() {

		var wrapper		= $('home_news');
		var browser		= $('home_news_browser');
		var viewer		= $('home_news_viewer');
		
		var _height		= browser.getHeight();

		var body_listener;

		this.show 		= function(id) {
		
			// TODO: Error checking
			
			// Is it already open?
			/*
			if (viewer.getStyle('display') == 'block') {
				return;
			}
			*/

			viewer.select('.news_item').invoke('hide');
			viewer.down('#newsitem_'+id).show();
		
			// Hide the brwoser
			//$(browser).fade();
	
			$(viewer).appear();
	
			// Set wapper height, animated
			var height   	= viewer.getHeight();
			$(wrapper).morph('height: '+height+'px', {
				afterFinish: function() {
//					$(viewer).appear();
				}
			});
			
			body_listener = Event.observe(document, 'click', function(event) {
			
				element = Event.element(event);
				if ($(element).hasClassName('home')) hide();
			});
			

		};
	

		hide 		= function() {
			$(viewer).hide();
			$(wrapper).morph('height: '+_height+'px');
			Event.stopObserving(document, 'click');
		};

		this.hide 		= function() {
			$(viewer).hide();
			$(wrapper).morph('height: '+_height+'px');
			Event.stopObserving(document, 'click');
		};



};


IMG.mapImage = function(address, size) {

		var size 	= size || '165x130';
		var sizes 	= size.split('x');
		var icon	= 'http://newyork.mbfashionweek.com/assets/img/map_marker.png';
		
		var path = 'http://maps.google.com/maps/api/staticmap'
				 + '?size='+size
				 + '&zoom=13&sensor=false'
				 + '&markers=icon:'+escape(icon)+'|'+ escape(address);			 	 

		document.write('<img src="'+path+'" width="'+sizes[0]+'" height="'+sizes[1]+'" />');

};
