var comSvcBaseUrl = "/Community/services";
var comMediaBaseUrl = "/Community/media";
var comSiteName = "Dark Custom";
var comPageUrl = "art-of-rebellion.html";

var login = null;

var DarkCustom = (function() {
	// Base configuration.
	var itemsX = 3;
	var itemsY = 3;
	var startIndex = 1;
	var classes = HD.CSS_CLASSES;
	var dateFormat = "d mmm yyyy 'at' hh:MM tt";
	var services = HD.ShareWidget.SERVICES;
	var loadingHtml = '<div class="' + classes.LOADING + '"></div>';
	siteCategories = ['Dark Custom'];
	return {
		// #darkCustom (the parent container).
		containerEl: null,
		// #galleryContent
		galleryEl: null,
		// #detailContent
		detailEl: null,
		// Categories config.
		categories: [],
		// Whether a deep link is active.
		isDeepLink: false,
		// Whether an overlay is active.
		isOverlayOpen: false,
		// Whether a media request is active.
		isRequestActive: false,
		// Whether this is the initial load.
		isInitialLoad: true,
		// Whether to check the user prior to submitting comments.
		requiresLogin: true,
		analytics: {
			section: 'ArtRebellion'
		},
	
		// Initialize the page.
		init: function() {
			var self = this;
		
			// Preselect common elements.
			this.containerEl = HD.get('darkCustom');
			this.galleryEl = HD.get('galleryContent');
			
			// Update config.
			this.config.main.dao.categories = siteCategories;
			this.config.main.widgets.upload.categories = ['Art/Gas Tanks', 'Art/Graffiti & Tags', 'Art/Helmets', 'Art/Paintings', 'Art/Scars, Scrapes & Burns', 'Art/Sculptures', 'Art/Tattoos & Piercings', 'Art/Other'];
			this.config.main.widgets.upload.categoriesFriendly = ['Gas Tanks', 'Graffiti & Tags', 'Helmets', 'Paintings', 'Scars, Scrapes & Burns', 'Sculptures', 'Tattoos & Piercings', 'Other'];

			// Initialize the session.
			HD.util.DWR.initSession();
			HD.util.DWR.setErrorHandler();
			login = new HD.Login({siteName : comSiteName});
			login.model.init(function() {
				login.model.getUser();
			});
			
			
			// Override copy	
			HD.UploadWidget.templates.overlayHtml = this.templates.upload.uploadTemplates.overlayHtml;
			HD.SendFriendWidget.templates.sendFriendInstructionalText = this.templates.sendFriend.sendFriendTemplates.sendFriendInstructionalText;
			HD.FeatureStoriesWidget.templates.html = '\
				<div class="${classes.FEATURE_STORIES} ${classes.WIDGET}">\
					<span class="${classes.TITLE}">${templates.getFeatureStoriesLabel()}</span>\
						<ul class="${classes.LIST}">\
						{for item in items}\
							{var post = parseInt(item_index)+1}\
							{if post % 2 == 0}\
								<li class="${hooks.STORY} ${classes.ACTIVE}">\
							{else}\
								<li class="${hooks.STORY}">\
							{/if}\
							${item|facade}\
							</li>\
						{/for}\
						</ul>\
					<a href="#featAnchorAll" name="featAnchorAll" class="${classes.VIEW_ALL} ${classes.CONTROL} ${hooks.VIEW_ALL}">${templates.getViewAllStoriesText()}</a>\
				</div>';
				
			// Preload the data
			this.config.main.dao.preloadedMedia = this.preloadedMedia || null;

			// Initialize the main engine.
			this.engine = new HD.CommunityEngine(this.config.main);
			this.carouselEngine = new HD.CommunityEngine(this.config.carousel);
			
			// Attach widget observers.
			this.setObservers();
			
			// Attach DOM event listeners.
			this.setListeners();
			
			// Set global templates.
			this.setTemplates();
			
			// Set analytics
			if (this.setAnalytics) {
				this.setAnalytics();
			}
			
			// Create the object to be shared here
			var sharedItem = {
					author : "Dark Custom",
					category : "Dark Custom",
					description : 'Dark Custom Art of Rebellion Page',
					thumbUrl : '',
					title : 'Dark Custom Art of Rebellion Page'
			};
			
			this.engine.dao.notifyObservers.call(this.engine.dao, "loadShare_Start", sharedItem);
			this.engine.dao.notifyObservers.call(this.engine.dao, "loadSTAF_Start", sharedItem);
			
			// Get media.
			setTimeout(function getMedia() {
					self.engine.dao.getMedia(1);
					self.carouselEngine.dao.getMedia(1);
			}, 50);
			
		},
	
		// Engine/widget config.
		config: {
			main: {
				dao: {
					baseUrl : comSvcBaseUrl,
					siteName : comSiteName,
					contentType : 'blog',
					categories : ['Dark Custom'],
					startIndex : startIndex,
					pageSize : itemsX * itemsY,
					thumbWidth : 160,
					mediaWidth : 420,
					filters: { tags: 'art of rebellion' }
				},
				cluster: {
					baseUrl : comMediaBaseUrl
				},
				view: {
					navigation : 'nav',
					canvas : 'canvas'
				},
				widgets: {
					featuredPosts:{
						parent: 'artBlog',
						type: 'hd_feature_stories_widget',
						contentType: 'blog',
						pageSize: 5,
						previewLength: 0,
						contentFeed: 'getMedia'
					},
					upload: {
						type: 'hd_upload_widget',
						siteName: comSiteName,
						contentType :'both',
						title :'Upload',
						dialog: {
							confirm: ['580px','210px']
						}
					},
					share: {
						parent: 'share',
						type: 'hd_share_widget',
						standaloneMode: true,
						getPermalink: function(media) {
							return window.location.href;
						},
						services: [services.FACEBOOK, services.TWITTER, services.MYSPACE, services.BLOGGER, services.WORDPRESS],
						callback: function(service, title, description, thumbnail, permalink) {
						
						}
					},					
					sendFriend: HD.merge({
						parent: 'sendFriend',
						type: 'hd_send_friend_widget',
						standaloneMode : true
					}, sendFriendConfig)
				}
			},
			carousel: {
				dao: {
					baseUrl : comSvcBaseUrl,
					siteName : comSiteName,
					contentType : 'both',
					categories : ['Dark Custom'],
					preloadedMedia: {
						getMedia: function() {
							var populateMedia = function(media) {
								// Add dummy properties to each object.
								var dummy = {
									author: '', authorId: '', category: 'Dark Custom', city: '', comments: null, contentType: 'photo',
									country: null, currentUserRating: 0, description: 'Art of Rebellion',
									hiddenAuthor: true, index: 0, mediaId: '', numberOfComments: 0, numberOfViews: 0, rating: 1, state: '', 
									tags: null, thumbUrl: '', title: '', uploadedDate: new Date, url: '', viewUrl: '', zip: ''
								};
								var urlPrefix = '/en_US/Media/images/Content/Pictorial/dark_custom_v3/aor/';
								for (var i = 0; i < media.length; i++) {
									media[i] = HD.merge(HD.clone(dummy), media[i]);
									media[i].index = i + 1;
									media[i].thumbUrl = urlPrefix + media[i].thumbUrl;
									if (media[i].contentType == 'photo') {
										media[i].url = urlPrefix + media[i].url;
									}
									else if (media[i].contentType == 'video') {
										media[i].url = HD.util.Common.getServerUrl() + media[i].url;
										media[i].largeThumbUrl = HD.util.Common.getServerUrl() + urlPrefix + media[i].largeThumbUrl;
										media[i].viewUrl = media[i].url;
									}
								}
								return media;
							};
							var aorSantaMonica = ' (Art of Rebellion &ndash; Santa Monica, California event)';
							var aorNewYork = ' (Art of Rebellion &ndash;  New York City event)';
							return {
								contentType: 'both',
								errors: [],
								media: populateMedia([
									{ url: 'aor_nyc.jpg', thumbUrl: 'aor_nyc_thumb.jpg', description: 'Art of Rebellion Frank Kozik designed poster &ndash; ' + aorNewYork},
									{ url: 'Frank_Kozik.JPG', thumbUrl: 'Frank_Kozik_thumb.jpg', description: 'Frank Kozik' + aorNewYork },                 
									{ url: 'John_Van_Hamersveld.JPG', thumbUrl: 'John_Van_Hamersveld_thumb.jpg', description: 'John Van Hamersveld' + aorNewYork },             
									{ url: 'Dirty_Donny_tank.JPG', thumbUrl: 'Dirty_Donny_tank_thumb.jpg', description: 'Dirty Donny tank' + aorNewYork },                
									{ url: 'Derek_Hess_tank.JPG', thumbUrl: 'Derek_Hess_tank_thumb.jpg', description: 'Derek Hess tank' + aorNewYork },                 
									{ url: 'The_Pizz.JPG', thumbUrl: 'The_Pizz_thumb.jpg', description: 'The Pizz' + aorNewYork },                        
									{ url: 'Tara_McPherson.JPG', thumbUrl: 'Tara_McPherson_thumb.jpg', description: 'Tara McPherson' + aorNewYork },                  
									{ url: 'Harpoon.JPG', thumbUrl: 'Harpoon_thumb.jpg', description: 'Harpoon' + aorNewYork },                         
									{ url: 'Frank_Kozik_tank_and_fenders.JPG', thumbUrl: 'Frank_Kozik_tank_and_fenders_thumb.jpg', description: 'Frank Kozik tank and fenders' + aorNewYork },    
									{ url: 'Brian_Ewing.JPG', thumbUrl: 'Brian_Ewing_thumb.jpg', description: 'Brian Ewing' + aorNewYork },                     
									{ url: 'Art_Chantry_tank.JPG', thumbUrl: 'Art_Chantry_tank_thumb.jpg', description: 'Art Chantry tank' + aorNewYork },                
									{ url: 'Lindsey_Kuhn.JPG', thumbUrl: 'Lindsey_Kuhn_thumb.jpg', description: 'Lindsey Kuhn' + aorNewYork },  
									{ url: '/en_US/Media/flash/dark_custom/vid/ArtOFrebel_v16_FINAL.mov', largeThumbUrl: 'video_thumb_lg.jpg', thumbUrl: 'video_thumb.jpg', description: 'Check out the video from the Santa Monica show.', contentType: 'video' },
									{ url: 'alexpardee-art.jpg', thumbUrl: 'alexpardee-art_thumb.jpg', description: 'Alex Pardee art' + aorSantaMonica },
									{ url: 'alexpardee.jpg', thumbUrl: 'alexpardee_thumb.jpg', description: 'Alex Pardee' + aorSantaMonica },
									{ url: 'bobdob-tank.jpg', thumbUrl: 'bobdob-tank_thumb.jpg', description: 'Bob Dob tank' + aorSantaMonica },
									{ url: 'christianclayton-art.jpg', thumbUrl: 'christianclayton-art_thumb.jpg', description: 'Christian Clayton art' + aorSantaMonica },
									{ url: 'christianclayton-tank.jpg', thumbUrl: 'christianclayton-tank_thumb.jpg', description: 'Christian Clayton tank' + aorSantaMonica },
									{ url: 'claytonbrothers-art.jpg', thumbUrl: 'claytonbrothers-art_thumb.jpg', description: 'Clayton brothers art' + aorSantaMonica },
									{ url: 'davidtrulli.jpg', thumbUrl: 'davidtrulli_thumb.jpg', description: 'David Trulli' + aorSantaMonica },
									{ url: 'frankkozik-art.jpg', thumbUrl: 'frankkozik-art_thumb.jpg', description: 'Frank Kozik art' + aorSantaMonica },
									{ url: 'kozikcerasolimcphersonveca.jpg', thumbUrl: 'kozikcerasolimcphersonveca_thumb.jpg', description: 'Kozik, Cerasoli, McPherson, Veca' + aorSantaMonica },
									{ url: 'marcdeanveca.jpg', thumbUrl: 'marcdeanveca_thumb.jpg', description: 'Marc Dean Veca' + aorSantaMonica },
									{ url: 'oliververnon-tank.jpg', thumbUrl: 'oliververnon-tank_thumb.jpg', description: 'Oliver Vernon tank' + aorSantaMonica },
									{ url: 'robclayton.jpg', thumbUrl: 'robclayton_thumb.jpg', description: 'Rob Clayton' + aorSantaMonica },
									{ url: 'shawnbarber-art.jpg', thumbUrl: 'shawnbarber-art_thumb.jpg', description: 'Shawn Barber art' + aorSantaMonica },
									{ url: 'shawnbarber-tank.jpg', thumbUrl: 'shawnbarber-tank_thumb.jpg', description: 'Shawn Barber tank' + aorSantaMonica },
									{ url: 'shawnbarber.jpg', thumbUrl: 'shawnbarber_thumb.jpg', description: 'Shawn Barber' + aorSantaMonica },
									{ url: 'shepard-art.jpg', thumbUrl: 'shepard-art_thumb.jpg', description: 'Shepard Fairey art' + aorSantaMonica },
									{ url: 'stevenstone.jpg', thumbUrl: 'stevenstone_thumb.jpg', description: 'Steven Stone' + aorSantaMonica },
									{ url: 'taramcpherson-tank.jpg', thumbUrl: 'taramcpherson-tank_thumb.jpg', description: 'Tara McPherson tank' + aorSantaMonica },
									{ url: 'taramcpherson.jpg', thumbUrl: 'taramcpherson_thumb.jpg', description: 'Tara McPherson' + aorSantaMonica }
								]),
								pageNumber: 1,
								pageSize: 32,
								profile: null,
								success: true,
								tags: null,
								totalMedia: 32,
								totalPages: 1
							};
						}
					}
				},
				cluster: {
					baseUrl : comMediaBaseUrl
				},
				view: {
					navigation : 'nav',
					canvas : 'canvas'
				},
				widgets: {
					carousel: {
						parent: 'aorCarousel',
						type: 'hd_carousel_widget',
						compact: false,
						pageSize: 6,
						playerHeight: 273,
						playerWidth: 501
					}
				}
			}
		},
		
		
		// Attach observer methods to widgets.
		setObservers: function() {
			var self = this;
			
			// Attach dao/view observer.
			this.engine.addObserver({
				widgets: ['dao', 'view'],
				update: function(eventName, eventData) {
					if (eventName == "getMedia_Start") {
						// Show loading animation.
						
					}
					else if (eventName == "getMedia_Finish" && self.isInitialLoad) {
						self.isInitialLoad = false;
					}
				}
			});
		
			// Attach login observer.
			this.engine.addObserver({
				widgets: [login.model],
				update: function(eventName, eventData) {
			
		
						if (eventName == "logged_In") {

							var el = HD.get('detail');
							HD.addClass(el, "hdLI");
							HD.removeClass(el, "hdNLI");
						}
						else if (eventName == "notLogged_In") {
							var el = HD.get('detail');
							HD.addClass(el, "hdNLI");
							HD.removeClass(el, "hdLI");
						}
					
				}
			});
			
			// Attach gallery observer.
			this.engine.addObserver({
				widgets: ['featuredPosts'],
				update: function(eventName, eventData) {

					if (eventName == 'viewFeatureStory')  {
						HD.util.Player.View.stopAll();
			
						// Update navigation.
						window.location.href = 'blog.html#loc=detail/blog/'+eventData.mediaId;
					}	
				}
			});
			
			
			// Disable video players when overlays are opened.
		    this.engine.addObserver({
				widgets: [HD.util.Common.getObservable()],
		        update: function(eventName, eventData) {	    	
		    		if (eventName == "overlayOpen") {
						isOverlayOpen = true;
						HD.util.Player.View.stopAll();
			        }
					else if (eventName == "overlayClose") {
						setTimeout(function() {
							isOverlayOpen = false;
						}, 50);
					}
		        }
		    });
		},
		
		// Attach DOM event listeners.
		setListeners: function() {
			var self = this;
			
			// Submit a story.
			HD.getByClass('submitStory', 'a', this.containerEl, function(el) {
				el.onclick = function() {
					self.engine.widgets.upload.renderBoth('Select a category', self.config.main.widgets.upload.categories, self.config.main.widgets.upload.categoriesFriendly);
				};
			});
			
		},
		
		// Retrieve the current navigation location.
		getNavigation: function() {
			return window.location.href;
		},
	
		
		// Set custom templates.
		setTemplates: function() {
			// Custom templates as necessary.
		}
	};
})();

// Load the page.
HD.util.DOM.onDOMReady(function() {
	DarkCustom.init();
});

