if (typeof(HotNews) == 'undefined') HotNews = {};
if (typeof(JSON) == 'undefined') JSON = {};



HotNews.ItemRenderStrategy = { story:{}, featured:{} };
Object.extend(HotNews.ItemRenderStrategy.story, {
	render: function(item) {
		var title = this.renderTitle(item);
		var date = this.renderDate(item);
		var description = this.renderDesc(item);

		var item = document.createElement('li');
		item.appendChild(title);
		item.appendChild(date);
		item.appendChild(description);

		return item;
	},

	outsideLink: function(item) {
		if (item.link.match('http://')) {
			if (!item.link.match('http://www.apple.com/fr/')) {
				return true;
			}
		}

		return false;
	},

	newWin: function(link, isImage) {
		if(!isImage) link.addClassName('external');
		link.target = '_blank';

		return link;
	},

	renderTitle: function(item) {
		if(item.link){
			var link = $(document.createElement('a'));
			link.setAttribute('href', item.link);
			link.innerHTML = unescape(item.title);
			// try { console.log(unescape(item.title)); } catch(e) {}
			if (this.outsideLink(item)) link = this.newWin(link);

			var title = document.createElement('h3');
			title.appendChild(link);
		} else {
			var title = document.createElement('h3');
			title.innerHTML = item.title;
		}

		return title;
	},

	renderDate: function(item) {
		var wrapper = $(document.createElement('p'));
		wrapper.addClassName('date');
		wrapper.innerHTML = item.date;

		return wrapper;
	},

	renderDesc: function(item) {
		var description = document.createElement('p');
		description.innerHTML = unescape(item.copy);

		/*if (item.section.length>0) {
			var sections = $(document.createElement('span'));
			sections.addClassName('section');
			sections.innerHTML = 'Filed under: ~%#@~';
			
			item.section.each(function(section, i) {
				if (i>0) {
					sections.appendChild(document.createTextNode(', ~%#@~'));
				}
				for (name in HotNews.sections) {
					var title = HotNews.sections[name].trigger.innerHTML.stripTags().strip();
					if (section == title) var sectionName = name;
				}
				var link = document.createElement('a');
				link.setAttribute('href', '#section='+sectionName)
				link.innerHTML = section;
				
				sections.insert(link)
				if (i==item.section.length-1) {
					sections.appendChild(document.createTextNode('.'));
				}
			});
			description.appendChild(document.createTextNode(' ~%#@~'));
			description.appendChild(sections);
		}*/

		if(item.link){
			var link = $(document.createElement('a'));
			link.setAttribute('href', item.link)
			link.innerHTML =item.readmore;
		
			if (this.outsideLink(item)) link = this.newWin(link);
			var source = $(document.createElement('span'));
			source.addClassName('source');
			source.innerHTML = 'En savoir plus : ~%#@~';
			source.appendChild(link);
		}
		
		description.appendChild(document.createTextNode(' ~%#@~'));
		if(source) description.appendChild(source);

		description.innerHTML = description.innerHTML.replace(/~%#@~/g, '');
		return description;
	}
});
Object.extend(Object.extend(HotNews.ItemRenderStrategy.featured, HotNews.ItemRenderStrategy.story), {
	render: function(item) {
		var image = this.renderImage(item);
		var title = this.renderTitle(item);
		var date = this.renderDate(item);
		var description = this.renderDesc(item);

		var item = document.createElement('li')
		item.appendChild(image);
		item.appendChild(title);
		item.appendChild(date);
		item.appendChild(description);

		return item;
	},
	
	renderImage: function(item) {
		var image = new Element('img', { src:item.image, alt:unescape(item.title), className:'left', border:'0' });
		
		var link = document.createElement('a');
		link.setAttribute('href', item.link)
		link.appendChild(image);
		
		// pass true if it is an image
		if (this.outsideLink(item)) link = this.newWin(link, true);

		return link;
	}
});

HotNews.ListRenderStrategy = { stories:{}, featured:{} };
Object.extend(HotNews.ListRenderStrategy.stories, {
	classNames: 'stories',
	itemRenderStrategy: HotNews.ItemRenderStrategy.story,
	pageSize: 15,

	render: function(list, options) {
		this.options = options || {};
		if (!this.options.removeFeatured) this.options.removeFeatured = false;

		this.pages = [];

		var featured = HotNews.ListRenderStrategy.featured.render(list);
		if (this.options.removeFeatured) var list = HotNews.ListRenderStrategy.featured.getList();

		list.eachSlice(this.pageSize).each(this.renderList.bind(this));

		if (featured) {
			var newFeature = $(document.createElement('div'))
			newFeature.appendChild(featured)
			newFeature.appendChild(this.pages[0]);
			this.pages[0] = newFeature;
		}
		return this.pages;
	},
	
	renderList: function(list, i) {
		var itemRenderStrategy = this.itemRenderStrategy;
		var ul = new Element('ul', { className:this.classNames });

		list.each(function(item, i) {
			ul.appendChild(itemRenderStrategy.render(item));
		});

		if (this.pages) this.pages.push(ul);
		return ul;
	}
});
Object.extend(Object.extend(HotNews.ListRenderStrategy.featured, HotNews.ListRenderStrategy.stories), {
	classNames: 'stories featured',
	itemRenderStrategy: HotNews.ItemRenderStrategy.featured,
	pageSize: 0,

	render: function(list) {
		this.pages = false;
		var featured = [];

		list.each(function(item) {
			if (item.featured == true) {
				featured.push(item);
				list = list.without(item);
			}
		});

		this.list = list;
		var list = this.renderList(featured);
		if (list.innerHTML && list.innerHTML != '') return list;
		return false;
	},

	getList: function() {
		return this.list;
	}
});

JSON.ListRenderStrategy = HotNews.ListRenderStrategy.stories;





Event.onDOMReady(function() {

	var scrollToPage = function(app, oldPage, newPage, forced) {
		var wasNavigated = !forced;
		if (wasNavigated) {
			$(newPage).setOpacity(0);
			$(oldPage).setOpacity(0);
			new Effect.ScrollTo($('content'), { duration:.3 });
		}
	};
	
	var revealPage = function(app, oldPage, newPage, forced) {
		var wasNavigated = !forced;
		if (wasNavigated) {
			new Effect.Appear(newPage, { duration:.4,
				afterFinish: function() {
					//force repaint in safari 2 to prevent artifacting
					newPage.style.height = $(newPage).getDimensions().height + 1 + 'px';
				}
			});
		}

		if (!app.getCache()) {
			var triggers = app.container.select('p span.section a');
			triggers.each(function(trigger) {
				trigger.observe('click', jsonApp.activateByName.bind(jsonApp));
			});
		}
	}

	var jsonApp = new JSON.Gallery('latestnews');
	
	var options = {
		beforeShow: scrollToPage,
		afterShow: revealPage
	}

	var allOptions = {};
	Object.extend(Object.extend(allOptions, options), {
		renderList: {
			removeFeatured: true
		}
	});

	JSON.Section.prototype.wrapper = $('latestnewsstories');
	HotNews.sections = {
		all: new JSON.Section('all', 'sn-all','/fr/hotnews/feeds/all.json', allOptions)/*, 
		mac: new JSON.Section('mac', 'sn-mac','/fr/hotnews/feeds/mac.json', options),
		itunes: new JSON.Section('itunes', 'sn-itunes','/fr/hotnews/feeds/itunes.json', options),
		iphone: new JSON.Section('iphone', 'sn-iphone','/fr/hotnews/feeds/iphone.json', options),
		business: new JSON.Section('business', 'sn-business','/fr/hotnews/feeds/business.json', options),
		science: new JSON.Section('science', 'sn-science','/fr/hotnews/feeds/science.json', options),
		education: new JSON.Section('education', 'sn-education', '/fr/hotnews/feeds/education.json', options),
		pro: new JSON.Section('pro', 'sn-pro','/fr/hotnews/feeds/pro.json', options)*/
	}
	
	
	for (var sectionId in HotNews.sections) {
		jsonApp.addSection(HotNews.sections[sectionId]);
	}
	
	// default inital loads
	var initialSection = jsonApp.sections.values()[0];
	var initialPage = 0;
	
	// these are for deep linking to sections and pages
	var params = document.location.hash.replace('#', '?').toQueryParams();
	if (params.section) initialSection = jsonApp.sections.get(params.section);
	if (params.page) initialPage = params.page - 1;
	
	jsonApp.load(initialSection, initialPage);

});
