//	TECHNIQUES ARCHIVE PAGE JAVASCRIPT
//
//	dependencies:	http://wdirect.apple.com/main/js/lib.js
//					http://wdirect.apple.com/main/js/scriptaculous/prototype.js
//					http://wdirect.apple.com/main/js/scriptaculous/scriptaculous.js?load=builder,effects
//

Techniques = Class.create();
Techniques.prototype = {
	disciplines: {
		'design': {'name': 'Design & Motion Graphics', 'aka': ['motiongraphics']},
		'filmvideo': {'name': 'Film & Video', 'aka': ['film', 'video']},
		'photography': {'name': 'Photography', 'aka': ['photo']},
		'musicaudio': {'name': 'Music & Audio', 'aka': ['music', 'audio']}
	},

	initialize: function(xmlurl, wrapperid) {
		if ($(wrapperid)) {
			this.wrapper = $(wrapperid);
		} else {
			this.wrapper = $('content');
		}
		// make the request for the XML
		try {
			var request = new Ajax.Request(xmlurl, { method: 'get', onSuccess: function(response) { this.handleRequest(response) }.bind(this) });
		} catch(e) { }
	},

	// Sort Functions
	sortByDate: function(a,b) {
		if (a.aDate[0] > b.aDate[0]) { return -1; }
		if (a.aDate[0] < b.aDate[0]) { return 1; }
		if (a.aDate[0] == b.aDate[0]) {
			if (a.aDate[1] > b.aDate[1]) { return -1; }
			if (a.aDate[1] < b.aDate[1]) { return 1; }
			if (a.aDate[1] == b.aDate[1]) {
				if (a.aDate[2] > b.aDate[2]) { return -1; }
				if (a.aDate[2] < b.aDate[2]) { return 1; }
				if (a.aDate[2] == b.aDate[2]) { 
					if (a.title > b.title) { return 1; }
					if (a.title < b.title) { return -1; }
				}
			}
			return 0;
		}
		return 0;
	},

	// Write Functions
	handleRequest: function(response) {
		// Get the response
		this.xml = response.responseXML.getElementsByTagName('storiesArchive')[0];

		// Results are stored as an array of objects inside this.results
		var xmlResults = this.xml.getElementsByTagName('story');
		results = new Array();
		
		for (var i=0; i<xmlResults.length; i++) {
			var result = xmlResults[i];

			results.push({
				title: (result.getAttribute('title')) ? result.getAttribute('title') : false,
				aDisciplines: (result.getAttribute('disciplines')) ? result.getAttribute('disciplines').split(',') : false,
				aDate: (result.getElementsByTagName('date').length > 0) ? result.getElementsByTagName('date')[0].firstChild.nodeValue.split(".") : false,
				description: (result.getElementsByTagName('description').length > 0) ? result.getElementsByTagName('description')[0].firstChild.nodeValue : false,
				url: (result.getElementsByTagName('url').length > 0) ? result.getElementsByTagName('url')[0].firstChild.nodeValue : false,
				thumbnail: (result.getElementsByTagName('thumbnail').length > 0) ? result.getElementsByTagName('thumbnail')[0].firstChild.nodeValue : false
			});
		}
		
		Element.hide('waitanimation');
		
		for (discipline in this.disciplines) {
			var div = Builder.node('div', {id: 'category_'+discipline}, [
				Builder.node('h3', this.disciplines[discipline].name),
				Builder.node('div', {'class': 'morestories', style: 'display:none;'})
			]);//div
			var aka = this.disciplines[discipline].aka;
			if (aka) { for (var i=0; i<aka.length; i++) {
				Element.addClassName(div, aka[i])
			} }
			this.wrapper.appendChild(div);
			if (discipline == 'filmvideo') {
				div = Builder.node('div', {'class': 'clearer'}, '');
				this.wrapper.appendChild(div);
			}
		}

		// Sort results by date
		results.sort(this.sortByDate);

		for (var i=0; i<results.length; i++) {
			this.parseResult(i, results[i]);
		}

		for (discipline in this.disciplines) {
			if ($c('morestories', $('category_'+discipline), 'div')[0].hasChildNodes()) {
				var amorestories = Builder.node('a', {'class': 'morestories', href: '#showmorestories', target: discipline, onclick: 'return false;'}, 'Show More Techniques');
				amorestories.onclick = function(ev) {
					if(!ev) { ev = window.event; }
					var amorestories = (window.event) ? window.event.srcElement : ev.target;
					while (!amorestories.tagName || amorestories.tagName.toLowerCase() != "a") amorestories = amorestories.parentNode;
					var morestories = $c('morestories', $('category_'+amorestories.target), 'div')[0];
					var open = (Element.hasClassName(amorestories, 'less')) ? false : true;
					if (open) {
						Element.addClassName(amorestories, 'less');
						amorestories.innerHTML = 'Show Fewer Techniques';
						amorestories.href = '#showfewerstories';
						Effect.BlindDown(morestories, {duration:.6});
					} else {
						Element.removeClassName(amorestories, 'less');
						amorestories.innerHTML = 'Show More Techniques';
						amorestories.href = '#showmorestories';
						Effect.BlindUp(morestories, {duration:.6});
					}
					return false;
				}
				$('category_'+discipline).appendChild(amorestories);
			}
		}
	},

	parseResult: function(iResult, result) {
		// date format
		var date = result.aDate[1]+'.'+result.aDate[2]+'.'+result.aDate[0].substring(2,result.aDate[0].length);
		var image = (!result.thumbnail) ? '' :
			Builder.node('a', {href: result.url}, [
				Builder.node('img', {src: result.thumbnail, alt: result.title, width: '80px', height: '80px', border: '0', 'class': 'left storythumbnail'})
			]);

		var resultnode = Builder.node('div', {'class': 'story'}, [
			image,
			Builder.node('h4', {'class': 'storytitle'}, [
				Builder.node('a', {href: result.url}, result.title)
			]), //h4
			Builder.node('p', {'class': 'storydescription'}, [
				Builder.node('span', {'class': 'storydate'}, date),
				Builder.node('span', {'class': 'separator'}, ' / '),
				result.description,
				Builder.node('a', {href: result.url}, ' Read More')
			]) //p
		]); //div.story

		// What disciplines?
		var appendto = [];
		for (var i=0; i<result.aDisciplines.length; i++) {
			var discipline = result.aDisciplines[i].replace(/\s/gi, "");
			if ($('category_'+discipline)) {
				appendto.push('category_'+discipline);
			}
			for (catdiscipline in this.disciplines) {
				if (Element.hasClassName($('category_'+catdiscipline), discipline)) {
					appendto.push('category_'+catdiscipline);
				}
			}
		}

		// Attach to disciplines
		appendto.sort();
		for (var i=0; i<appendto.length; i++) {
			if (i==0 || appendto[i] != appendto[i-1]) {
				var profiles = $c('story', $(appendto[i]), 'div'); //$(appendto[i]).getElementsByClassName('story');
				if (profiles.length < 4) {
					if (profiles.length==0) {
						Element.addClassName(resultnode, 'first');
					}
					$(appendto[i]).insertBefore(resultnode.cloneNode(true), $c('morestories', $(appendto[i]), 'div')[0]); //$(appendto[i]).getElementsByClassName('morestories')[0]
					if (Element.hasClassName(resultnode, 'first')) Element.removeClassName(resultnode, 'first');
				} else {
					$c('morestories', $(appendto[i]), 'div')[0].appendChild(resultnode.cloneNode(true)); //$(appendto[i]).getElementsByClassName('morestories')[0]
				}
			}
		}

		/* Only Display the Feature once, dates are out of order
		var feature_flag = false;
		for (var i=0; i<appendto.length; i++) {
			if (i==0 || appendto[i] != appendto[i-1]) {
				var profiles = $c('story', $(appendto[i]), 'div'); //$(appendto[i]).getElementsByClassName('story');
				if (profiles.length < 4) {
					if (profiles.length==0) {
						Element.addClassName(resultnode, 'first');
						if (feature_flag) {
							Element.removeClassName(resultnode, 'first');
						}
						feature_flag = true;
						$(appendto[i]).insertBefore(resultnode.cloneNode(true), $c('morestories', $(appendto[i]), 'div')[0]); //$(appendto[i]).getElementsByClassName('morestories')[0]
					} else if (profiles.length==1 && !Element.hasClassName(profiles[0], 'first')) {
						Element.addClassName(resultnode, 'first');
						$(appendto[i]).insertBefore(resultnode.cloneNode(true), profiles[0]); //$(appendto[i]).getElementsByClassName('morestories')[0]
					} else {
						$(appendto[i]).insertBefore(resultnode.cloneNode(true), $c('morestories', $(appendto[i]), 'div')[0]); //$(appendto[i]).getElementsByClassName('morestories')[0]
					}
					if (Element.hasClassName(resultnode, 'first')) Element.removeClassName(resultnode, 'first');
				} else {
					$c('morestories', $(appendto[i]), 'div')[0].appendChild(resultnode.cloneNode(true)); //$(appendto[i]).getElementsByClassName('morestories')[0]
				}
			}
		}*/
		
	}
}
