var oDiv = document.createElement('div');
var oSpan = document.createElement('span');
var oA = document.createElement('a');
var oP = document.createElement('p');
var oImg = document.createElement('img');
var oH3 = document.createElement('h3');
var oH4 = document.createElement('h4');
var oH5 = document.createElement('h5');
var oUl = document.createElement('ul');
var oLi = document.createElement('li');

var SortArchive = {

	/** start of editable items **/
	iThumbWidth : 80,  // width of thumbnails
	iThumbHeight : 80,  // height of thumbnails
	iOnOpacity : 100,  // opacity for on state of stories
	iOffOpacity : 10,  // opacity for off state of stories
	iTeaserLength : 97,  // length of description teaser
	iTitleCutoff : 35,  // length of title, if longer add ...
	iHeadlineCutoff : 37,  // length of headline, if longer add ...
	sUlMargin : '10px 5px',  // margin for unordered lists of stories when month is open
	sLiHeight : '100px',  // height of stories
	/* month backgrounds opened and closed states */
	sMonthOpenBg : 'url(/euro/main/js/pro/images/header_opened20060405.gif) no-repeat',
	sMonthCloseBg : 'url(/euro/main/js/pro/images/header_closed20060405.gif) no-repeat',
	iMonthsToDisplay : 3,  // number of months opened on loading of page
	sSeminarsLink: 'http://seminars.apple.com/seminarsonline/',  // link to Seminars See All
	/** end of editable items **/
	
	aMonthNames : new Array(
						'January',
						'February',
						'March',
						'April',
						'May',
						'June',
						'July',
						'August',
						'September',
						'October',
						'November',
						'December'
					),
	oResults : new Object(),
	aStories : new Array(),
	aStoriesHash: new Array(),
	sType : new String(),
	sNav : new String(),
	sXMLFile : new String(),
	sContentId : new String(),
	aSections : new Array(),
	aMonths : new Array(),
	aNavItems: new Array(),
	bOnFlag : false,
	iCheckedNavItems: 5,
	sImgChecked: 'http://images.apple.com/euro/main/js/pro/images/check_on20060502.gif',
	sImgUnchecked: 'http://images.apple.com/euro/main/js/pro/images/check_off20060502.gif',
	
	fInit : function(type,nav,xmlfile,content) {
		this.sType = type;
		if(nav != null) {
			this.sNav = nav;
			var oNav = new HTMLObject($(this.sNav));
			var aNavItems = oNav.getElementsByTagName('a');

			for(var i=0;i<aNavItems.length;i++) {
				var oNavItem = new HTMLObject(aNavItems[i]);
				var sNavSection = oNavItem.id.split('_')[1];
				var aNavSections = new Array();
				if(oNavItem.id.indexOf('-') != -1) {
					aNavSections = sNavSection.split('-');
				} else {
					aNavSections[0] = sNavSection;
				}
				oNavItem.addEvent('onclick',this.fProcessStories);
				this.aNavItems[i] = {
					id: oNavItem.id,
					anchor: oNavItem,
					img: oNavItem.getElementsByTagName('img')[0],
					disciplines: aNavSections,
					checked: false,
					showing: false,
					showall: false
				};
			}
			for(var i=0; i<this.aNavItems.length; i++) { this.aNavItems[this.aNavItems[i].id] = this.aNavItems[i]; }
		}
		this.sXMLFile = xmlfile;
		this.sContentId = content;
		this.fShowAll();
		this.fDisplayContent();
	},
	fDisplayContent : function() {
		AppleJAX.getXML(this.sXMLFile,function(){
			SortArchive.oResults = results;
			$(SortArchive.sContentId).innerHTML = '';
			if(SortArchive.sType == 'resources') {
				SortArchive.fDisplayCategories();
			} else {
				SortArchive.fDisplayYears();
				//var aMonths = $c('month');
				//for(var i=SortArchive.iMonthsToDisplay;i<aMonths.length;i++) {
				//	SortArchive.fToggleMonth(aMonths[i].getElementsByTagName('h3')[0]);
				//}
			}
			SortArchive.fDisplayStories();
		});
	},
	fDisplayStories : function() {
		var oContent = new HTMLObject($(this.sContentId));
		var oImgClone = oImg.cloneNode(true);
		oImgClone.setAttribute('height',this.iThumbHeight+'px');
		oImgClone.setAttribute('width',this.iThumbWidth+'px');
		//oImgClone.style.height = this.iThumbHeight+'px'
		//oImgClone.style.width = this.iThumbWidth+'px';
		this.aStories = this.oResults.getElementsByTagName('story');
		
		for(var i=0;i<this.aStories.length;i++) {
			var oStory = this.aStories[i];
			var oThumbnailSrc;
			if(this.sType != 'tricksofthetradehome' &&
				this.sType != 'tricksofthetrade' &&
				this.sType != 'tips' &&
				this.sType != 'resources') {
				oThumbnailSrc = oStory.getElementsByTagName('thumbnailURL')[0];
			}
			var oTitle = oStory.getAttribute('title');
			var oHeadline;
			var oDescription;
			if(this.sType != 'tips' && this.sType != 'resources') {
				oHeadline = oStory.getElementsByTagName('headline')[0];
				oDescription = oStory.getElementsByTagName('description')[0];
			}
			var oDate = oStory.getElementsByTagName('date')[0];
			var oURL = oStory.getElementsByTagName('url')[0];
			var oStoryLi = oLi.cloneNode(true);
			var oContainer = new HTMLObject(oDiv.cloneNode(true));
			var oImgLink = oA.cloneNode(true);
			var oTitleLink = oA.cloneNode(true);
			var oMoreLink = oA.cloneNode(true);
			var oImgThumbnail = oImgClone.cloneNode(true);
			var oH4Title = oH4.cloneNode(true);
			var oSpanPart = oSpan.cloneNode(true);
			var oH5Headline = oH5.cloneNode(true);
			var oSpanDate = oSpan.cloneNode(true);
			var oPDescription = oP.cloneNode(true);
			if(this.sType == 'tips' || this.sType == 'resources') {
				this.iTitleCutoff = oTitle.length;
			}
			if(oTitle.length > this.iTitleCutoff) {
				oTitle = oTitle.substring(0,(this.iTitleCutoff-3));
				oTitle = oTitle.substring(0,oTitle.lastIndexOf(' '));
				oTitle += '...';
			}
			var sTitleEnd = '';
			if(this.sType != 'tricksofthetradehome' &&
				this.sType != 'tricksofthetrade' &&
				this.sType != 'tips' &&
				this.sType != 'resources') {
				sTitleEnd = ':';
			}
			var sTitle = document.createTextNode(oTitle+sTitleEnd);

			var sHeadlineData = '';
			if(this.sType != 'tips' && this.sType != 'resources') {
				sHeadlineData = oHeadline.firstChild.data;
				if(sHeadlineData.length > this.iHeadlineCutoff) {
					sHeadlineData = sHeadlineData.substring(0,(this.iHeadlineCutoff-3));
					sHeadlineData = sHeadlineData.substring(0,sHeadlineData.lastIndexOf(' '));
					sHeadlineData += '...';
				}
			}
			var sHeadline = document.createTextNode(sHeadlineData);
			var sYear = oDate.firstChild.data.split('.')[0];
			var sMonth = oDate.firstChild.data.split('.')[1];
			var sDay = oDate.firstChild.data.split('.')[2];
			var sShortYear = sYear.substring(2);
			var sDateSeparator = ' ';
			if(this.sType != 'tricksofthetradehome' && this.sType != 'tips') {
				sDateSeparator = ' / ';
			} 
			var sDate = document.createTextNode(sDay+'.'+sMonth+'.'+sShortYear+sDateSeparator);
			
			var sMore = document.createTextNode(' Read More');
			var sDescription;
			var sDescriptionTeaserToLength;
			var sDescriptionTeaser;
			if(this.sType != 'tips' && this.sType != 'resources') {
				sDescription = oDescription.firstChild.data;
				if(sDescription.length > this.iTeaserLength) {
				sDescriptionTeaserToLength = sDescription.substring(0,this.iTeaserLength);
				sDescriptionTeaser = document.createTextNode(
				sDescriptionTeaserToLength.substring(
					0,sDescriptionTeaserToLength.lastIndexOf(' ')
				)+'...');
				} else {
					if(sDescription.charAt(sDescription.length-1) == '.') {
						sDescriptionTeaser = document.createTextNode(
							sDescription.substring(0,sDescription.length-1)+'...');
					} else {
						sDescriptionTeaser = document.createTextNode(sDescription+'...');
					}
				}
			}
			oImgLink.className = 'storythumbnail';
			oH4Title.className = 'storytitle';
			oH5Headline.className = 'storyheadline';
			oPDescription.className = 'storydescription';
			oSpanDate.className = 'storydate';
			oImgLink.href = oURL.firstChild.data;
			oTitleLink.href = oURL.firstChild.data;
			oMoreLink.href = oURL.firstChild.data;
			if(this.sType != 'tricksofthetradehome' &&
				this.sType != 'tricksofthetrade' &&
				this.sType != 'tips' &&
				this.sType != 'resources') {
				oImgThumbnail.src = oThumbnailSrc.firstChild.data;
			}
			oTitleLink.appendChild(sTitle);
			var sPart;
			if(this.sType == 'tricksofthetradehome' || this.sType == 'tricksofthetrade') {
				sPart = document.createTextNode(oStory.getAttribute('part'));
				oSpanPart.appendChild(sPart);
				oTitleLink.appendChild(oSpanPart);
			}
			oH4Title.appendChild(oTitleLink);
			oH5Headline.appendChild(sHeadline);
			oMoreLink.appendChild(sMore);
			oSpanDate.appendChild(sDate);
			if(this.sType != 'resources') {
				oPDescription.appendChild(oSpanDate);
			}
			if(this.sType != 'tips' && this.sType != 'resources') {
				oPDescription.appendChild(sDescriptionTeaser);
				oPDescription.appendChild(oMoreLink);
			}
			if(this.sType != 'tricksofthetradehome' &&
				this.sType != 'tricksofthetrade' &&
				this.sType != 'tips' &&
				this.sType != 'resources') {
				oImgLink.appendChild(oImgThumbnail);
				oContainer.appendChild(oImgLink);
			}
			oContainer.appendChild(oH4Title);
			if(this.sType != 'tips' && this.sType != 'resources') {
				oContainer.appendChild(oH5Headline);
			}
			oContainer.appendChild(oPDescription);
			oContainer.id = 'story_'+i;
			oStoryLi.className = 'story';
			oStoryLi.appendChild(oContainer);
			var oCategoryUl = '';
			var oMonthUl = '';
			if(this.sType == 'resources') {
				oCategoryUl = $(oStory.getAttribute('category')).getElementsByTagName('ul')[0];
				oCategoryUl.appendChild(oStoryLi);
			} else {
				oMonthUl = $(sYear+'_'+sMonth).getElementsByTagName('ul')[0];
				oMonthUl.appendChild(oStoryLi);
			}
			Object.extend(oContainer,WhizBang.prototype);
			this.aStoriesHash[i] = {
				id: oContainer.id,
				obj: oContainer,
				height: oContainer.offsetHeight,
				width: oContainer.offsetWidth,
				top: oContainer.offsetTop,
				left: oContainer.offsetLeft,
				imglink: oImgLink,
				titlelink: oTitleLink,
				morelink: oMoreLink,
				opacity: this.iOnOpacity,
				disciplines: oStory.getAttribute('disciplines'),
				href: oURL.firstChild.data,
				month: oMonthUl
			};
		}
		for(var i=0; i<this.aStoriesHash.length; i++) {
			this.aStoriesHash[this.aStoriesHash[i].id] = this.aStoriesHash[i];
		}
	},
	fDisplayYears : function() {
		var oContent = new HTMLObject($(this.sContentId));
		this.aStories = this.oResults.getElementsByTagName('story');
		
		for(var i=0;i<this.aStories.length;i++) {
			var oDate = this.aStories[i].getElementsByTagName('date')[0];
			var sYear = oDate.firstChild.data.split('.')[0];
			var sMonth = oDate.firstChild.data.split('.')[1];
			var sYearMonth = sYear.toString()+'/'+sMonth.toString();
			if(this.aMonths.toString().indexOf(sYearMonth) < 0) {
				this.aMonths.push(sYear+'/'+sMonth);
			}	
		}
		this.aMonths.sort().reverse();
		for(var i=0;i<this.aMonths.length;i++) {
			var oMonthDiv = oDiv.cloneNode(true);
			var oMonthHeader = new HTMLObject(oH3.cloneNode(true));
			var oMonthUl = oUl.cloneNode(true);
			var sYearInt = this.aMonths[i].split('/')[0];
			var sMonthInt = this.aMonths[i].split('/')[1];
			var sMonthName = this.aMonthNames[parseInt(Number(sMonthInt))-1];
			var oMonthName = document.createTextNode(sMonthName+' '+sYearInt);
			oMonthDiv.id = sYearInt+'_'+sMonthInt;
			oMonthDiv.className = 'month';
			oMonthHeader.appendChild(oMonthName);
			oMonthHeader.className = 'monthheader';
			//oMonthHeader.addEvent('onclick',SortArchive.fProcessMonthToggle);
			oMonthDiv.appendChild(oMonthHeader);
			oMonthDiv.appendChild(oMonthUl);
			oContent.appendChild(oMonthDiv);
			if(this.sType == 'tips' && (i+1)%3 == 0) {
				oMonthDiv.className = 'month lastmonth';
				var oClearDiv = oDiv.cloneNode(true);
				oClearDiv.style.clear = 'left';
				oContent.appendChild(oClearDiv);
			}
		}
	},
	fDisplayCategories: function() {
		var oContent = new HTMLObject($(this.sContentId));
		this.aStories = this.oResults.getElementsByTagName('story');
		
		for(var i=0; i<this.aStories.length; i++) {
			var oCategory = this.aStories[i].getAttribute('category');
			if(this.aMonths.toString().indexOf(oCategory) < 0) {
				this.aMonths.push(oCategory);
			}
		}
		
		this.aMonths.sort();
		for(var i=0; i<this.aMonths.length; i++) {
			var oCategoryDiv = oDiv.cloneNode(true);
			var oCategoryHeader = new HTMLObject(oH3.cloneNode(true));
			var oCategoryUl = oUl.cloneNode(true);
			var sCategoryName = this.aMonths[i];
			var oCategoryName = document.createTextNode(sCategoryName);
			oCategoryDiv.id = sCategoryName;
			oCategoryDiv.className = 'category';
			oCategoryHeader.appendChild(oCategoryName);
			oCategoryHeader.className = 'categoryheader';
			if(sCategoryName == 'Seminars') {
				var oSeeAllAnchor = oA.cloneNode(true);
				oSeeAllAnchor.appendChild(document.createTextNode('See all'));
				oSeeAllAnchor.href = this.sSeminarsLink;
				oCategoryHeader.appendChild(oSeeAllAnchor);
			}
			oCategoryDiv.appendChild(oCategoryHeader);
			oCategoryDiv.appendChild(oCategoryUl);
			oContent.appendChild(oCategoryDiv);
		}
	},
	fProcessStories : function(ev) {
		stopDefaultAction(ev);
		var oClickedLink = new HTMLObject(getClickedLink(ev));
		var sSection = oClickedLink.id;
		var iClickedItems = 0;
		for(var i=0; i<SortArchive.aNavItems.length; i++) {
			if(SortArchive.aNavItems[i].showing == true) { iClickedItems++; }
		}

		var oNavItem = SortArchive.aNavItems[sSection];
		if(sSection == SortArchive.sNav+'_showall') {
			if(oNavItem.showall == false) { SortArchive.fShowAll(); }
		} else if(oNavItem.showing == false && oNavItem.showall == false) {
			oNavItem.showing = true;
			oNavItem.checked = true;
			if(!oNavItem.anchor.hasClass('hi')) { oNavItem.anchor.addClass('hi'); }
			oNavItem.img.src = SortArchive.sImgChecked;
		} else if(oNavItem.showing == true && oNavItem.showall == false && iClickedItems > 1) {
			oNavItem.showing = false;
			oNavItem.checked = false;
			if(oNavItem.anchor.hasClass('hi')) { oNavItem.anchor.removeClass('hi'); }
			oNavItem.img.src = SortArchive.sImgUnchecked;
		} else if(oNavItem.showall == true) {
			for(var i=0; i<SortArchive.aNavItems.length; i++) {
				var oShowAllNavItem = SortArchive.aNavItems[i];
				if(oShowAllNavItem.anchor.hasClass('all')) { oShowAllNavItem.anchor.removeClass('all'); }
				oShowAllNavItem.showall = false;
				oShowAllNavItem.anchor.appendChild(oShowAllNavItem.img);
				if(sSection == oShowAllNavItem.id) {
					oShowAllNavItem.showing = true;
					oShowAllNavItem.checked = true;
					if(!oShowAllNavItem.anchor.hasClass('hi')) { oShowAllNavItem.anchor.addClass('hi'); }
					oShowAllNavItem.img.src = SortArchive.sImgChecked;
				} else {
					oShowAllNavItem.showing = false;
					oShowAllNavItem.checked = false;
					if(oShowAllNavItem.anchor.hasClass('hi')) { oShowAllNavItem.anchor.removeClass('hi'); }
					oShowAllNavItem.img.src = SortArchive.sImgUnchecked;
				}
			}
		}
		SortArchive.fDisplaySections();
	},
	fShowAll : function() {
		var oShowAll = SortArchive.aNavItems[SortArchive.sNav+'_showall'];
		for(var i=0;i<SortArchive.aNavItems.length;i++) {
			var oNavItem = SortArchive.aNavItems[i];
			if(oNavItem != oShowAll) {
				if(oNavItem.anchor.hasClass('hi')) { oNavItem.anchor.removeClass('hi'); }
				if(!oNavItem.anchor.hasClass('all')) { oNavItem.anchor.addClass('all'); }
				oNavItem.checked = false;
				oNavItem.showing = true;
				oNavItem.showall = true;
				oNavItem.anchor.removeChild(oNavItem.img);
			} else {
				if(!oShowAll.anchor.hasClass('hi')) { oShowAll.anchor.addClass('hi'); }
				oShowAll.img.src = SortArchive.sImgChecked;
				oShowAll.checked = true;
				oShowAll.showing = true;
				oShowAll.showall = true;
			}
		}
	},
	fDisplaySections : function() {
		var iFadeCount = 0;
		for(var i=0;i<SortArchive.aStoriesHash.length;i++) {
			var oStory = SortArchive.aStoriesHash[i];
			var oStoryDiv = oStory.obj;
			for(var j=0; j<SortArchive.aNavItems.length; j++) {
				var oNavItem = SortArchive.aNavItems[j];
				if(oNavItem.showing == true) {
					for(var k=0; k<oNavItem.disciplines.length; k++) {
						var sDiscipline = oNavItem.disciplines[k];
						if(oStory.disciplines.indexOf(sDiscipline) >= 0 && SortArchive.bOnFlag == false) {
							SortArchive.bOnFlag = true;
						}
					}
					
				}
			}
			if(SortArchive.bOnFlag == true && oStory.opacity == SortArchive.iOffOpacity) {
				if(SortArchive.sType == 'stories' || SortArchive.sType =='tricksofthetrade') {
					oStory.month.style.display = 'block';
					oStory.month.previousSibling.style.display = 'block';
				}
				oStoryDiv.parentNode.style.display = 'block';
				oStoryDiv.style.display = 'block';
				//oStoryDiv.Fade(50,SortArchive.iOffOpacity,SortArchive.iOnOpacity,10,5,10,function() {iFadeCount++;});
				iFadeCount++;
				oStory.opacity = SortArchive.iOnOpacity;
				oStory.imglink.href = oStory.href;
				oStory.titlelink.href = oStory.href;
				oStory.morelink.href = oStory.href;
			} else if(SortArchive.bOnFlag == false && oStory.opacity == SortArchive.iOnOpacity) {
				var oContainer = oStoryDiv;
				//oStoryDiv.Fade(50,SortArchive.iOnOpacity,SortArchive.iOffOpacity,10,5,10,function() {iFadeCount++;});
				iFadeCount++;
				oStory.opacity = SortArchive.iOffOpacity;
				oStory.imglink.removeAttribute('href');
				oStory.titlelink.removeAttribute('href');
				oStory.morelink.removeAttribute('href');
			} else { iFadeCount++; }
			SortArchive.bOnFlag = false;
		}
		var removeObjs = function() {
			if(iFadeCount == SortArchive.aStoriesHash.length) {
				for(var i=0; i<SortArchive.aStoriesHash.length; i++) {
					var oStory = SortArchive.aStoriesHash[i];
					if(oStory.opacity == SortArchive.iOffOpacity) {
						var oStoryDiv = oStory.obj;
						//oStoryDiv.style.opacity = (0 / 101);
						//oStoryDiv.style.MozOpacity = (0 / 100);
						//oStoryDiv.style.KhtmlOpacity = (0 / 100);
						//oStoryDiv.style.filter = "alpha(opacity=" + 0 + ")";
						oStoryDiv.style.display = 'none';
						oStoryDiv.parentNode.style.display = 'none';
						if(SortArchive.sType == 'stories' || SortArchive.sType == 'tricksofthetrade') {
							var oMonth = oStory.month;
							var bMonthOpen = false;
							for(var j=0; j<SortArchive.aStoriesHash.length; j++) {
								if(SortArchive.aStoriesHash[j].month == oMonth &&
									SortArchive.aStoriesHash[j].opacity != SortArchive.iOffOpacity) {
									bMonthOpen = true;
								}
							}
							if(bMonthOpen == false) {
								oMonth.previousSibling.style.display = 'none';
								oMonth.style.display = 'none';
							} else {
								oMonth.previousSibling.style.display = 'block';
								oMonth.style.display = 'block';
							}
						}
					}
				}
			}
			else {
				setTimeout(function(){removeObjs();},10);
			}
		};
		setTimeout(function() {removeObjs();},10);
	},
	fProcessMonthToggle : function(ev) {
		stopDefaultAction(ev);
		if (!ev) ev = window.event;
		var clickedLink = (window.event) ? window.event.srcElement : ev.target;
		while (!clickedLink.tagName || clickedLink.tagName.toLowerCase() != "h3") clickedLink = clickedLink.parentNode;
		SortArchive.fToggleMonth(clickedLink);
	},
	fToggleMonth : function(month) {
		var oMonthUl = month.nextSibling;
		while (!oMonthUl.tagName || oMonthUl.tagName.toLowerCase() != 'ul') oMonthUl = oMonthUl.nextSibling;
		var oMonthLis = oMonthUl.getElementsByTagName('li');
		if(oMonthUl.style.visibility == 'hidden') {
			month.style.background = SortArchive.sMonthOpenBg;
			oMonthUl.style.visibility = 'visible';
			oMonthUl.style.margin = SortArchive.sUlMargin;
			for(var i=0;i<oMonthLis.length;i++) {
				oMonthLis[i].style.height = SortArchive.sLiHeight;
			}
		} else {
			month.style.background = SortArchive.sMonthCloseBg;
			oMonthUl.style.visibility = 'hidden';
			oMonthUl.style.margin = '0px';
			for(var i=0;i<oMonthLis.length;i++) {
				oMonthLis[i].style.height = '0px';
			}
		}
	}
};

//addEventToObject(window,'onload',SortArchive.fInit('nav','filter_text.xml','content'));
