﻿if (typeof(PressReleases) == 'undefined') PressReleases = {};
if (typeof(JSON) == 'undefined') JSON = {};



PressReleases.ItemRenderStrategy = { story:{}, featured:{} };
Object.extend(PressReleases.ItemRenderStrategy.story, {
	dates: [],
	render: function(item) {
		var li = $(document.createElement('li'));
		var link = $(document.createElement('a'));
		link.setAttribute('href', item.link);
		link.addClassName('link');
		link.innerHTML = unescape(item.title);
		li.appendChild(link);
		if(this.dates.indexOf(item.date) == -1) {
			var date = $(document.createElement('span'));
			date.addClassName('date');
			date.innerHTML = item.date;
			li.addClassName('newdate');
			li.appendChild(date);
			this.dates.push(item.date);
		}
		return li;
	}
});

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

	render: function(list, options) {
		this.options = options || {};
		if (!this.options.removeFeatured) this.options.removeFeatured = false;
		this.pages = [];
		list.eachSlice(this.pageSize).each(this.renderList.bind(this));
		return this.pages;
	},
	
	renderList: function(list, i) {
		var itemRenderStrategy = this.itemRenderStrategy;
		var ul = new Element('ul', { className:this.classNames });
		itemRenderStrategy.dates.clear();
		list.each(function(item, i) {
			ul.appendChild(itemRenderStrategy.render(item));
		});
		if (this.pages) this.pages.push(ul);
		return ul;
	}
});
JSON.ListRenderStrategy = PressReleases.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 = $('pr-listing');
	PressReleases.sections = {
		all: new JSON.Section('all', 'sn-all','/hk/en/about/feeds/all.json', allOptions), 
		mac: new JSON.Section('mac', 'sn-mac','/hk/en/about/feeds/mac.json', options),
		itunes: new JSON.Section('itunes', 'sn-itunes','/hk/en/about/feeds/itunes.json', options),
		iphone: new JSON.Section('iphone', 'sn-iphone','/hk/en/about/feeds/iphone.json', options),
		company: new JSON.Section('company', 'sn-company','/hk/en/about/feeds/company.json', options)
	}
	
	
	for (var sectionId in PressReleases.sections) {
		jsonApp.addSection(PressReleases.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);

});
