PFPortal = window.PFPortal || {'_uninitialized' : true};
// -- newage
$$('link[rel=wobase]').forEach(function(e){
	PFPortal.baseUrl = e.href;
	PFPortal.articleBaseUrl = '/a/';
});
if(!PFPortal.baseUrl){
	PFPortal.baseUrl = this.baseUrl = /(.+\.woa)/.exec(location.pathname)[0]+'/';
	PFPortal.articleBaseUrl = PFPortal.baseUrl+'a/';
}
PFPortal.PortalPage = new Class({
	Implements : Events,
	initialize : function(){
		this.baseUrl = PFPortal.baseUrl;
	},
	installI18N : function(){
	},
	installCart : function(){
		var cart = undefined;
		this.fireEvent('cartSetup', cart);	
		$$('link[rel=cart]').forEach(function(cartRel){
			var ieFix1 = cartRel+''+cartRel;
			var cartURL = cartRel.href;
			if(!$defined(cartURL) || cartURL == ""){
				alert("Missing href on cart relation "+cartURL);
			}else{
				PFPortal.sharedCart = new PFCart($('cart'), cartURL, {offerings : PFPortal.offerings});
				PFPortal.sharedCart.cartActionIcon = $('notification_success');
			}		
		});
		 // here goes the cart setup code
		this.fireEvent('cartReady', cart);
	},
	installSearchBox : function(){
	},
	installOfferings : function(){
		var ol = $$('.pf-offering'), accessRequirement;
		if(PFPortal.user.groups.length > 0){
			ol.forEach(function(e){
				accessRequirement = e.getElement('.pf-access-requirement');
				if(accessRequirement){
					PFPortal.user.groups.forEach(function(group){
						if(new RegExp(group.permission).test(accessRequirement.get('text'))){							
							e.show();
						}else{
							e.destroy();
						};
					});
				}			
			});
		}else{
			ol.show();	
		}
	},
	installNewsletterSubscribtionBox : function(){
	},
	hideJsHidden : function(){
		$$('.pf-jshidden').hide().removeClass('pf-jshidden');
	},
	relatedArticlesOptions : {},
	installRelatedArticles : function(){
		var options = this.relatedArticlesOptions || {};
	 	$$('.pf-related-articles').grabRelatedArticles(MooTools.lang.get('Feed').get('relatedArticles'), $$('link[rel=related-articles]').get('href'), options);	 	
	},
	installBitrateEstimate : function(){
	},
	/*  Utilitties */
	estimateDownloadTime : function(byteCount){
	}
});
window.addEvent('domready', function(){
 	var page = new PFPortal.PortalPage();
	window.fireEvent('portalPageSetup', page);
	function ii(f){
		try{
			f.call(page);
		}catch(e){
			if(window.console && window.console.error){console.error('Failed to call '+f+'...'+e);}
		}
	}
	ii(page.installI18N);
	ii(page.installCart);
	ii(page.installSearchBox);
	ii(page.hideJsHidden);
	ii(page.installOfferings);
	ii(page.installNewsletterSubscribtionBox);
	ii(page.installBitrateEstimate);
	ii(page.installRelatedArticles);
	window.fireEvent('portalPageReady', page);
});
PFPortal.ArticleBrief = new Class({
	Implements : Options,
		options : {includeThumbnail : true, imageSize : 64},
	initialize : function(item, options){	
		this.setOptions(options);
		this.item = item;		
	},
	toElement : function(){
		var posturl = [PFPortal.articleBaseUrl, /\.\w+\/(.+)$/.exec(this.item.link)[1]].join(''),
			imageSize = this.options.imageSize,
			imgHtml = null, altAtt = null, height = null, width = null, src = null,
			e, i = null, itemDate = new Date(this.item.publishedDate),
			month = itemDate.getMonth() +1 , day = itemDate.getDate() 
			fMonth = month < 10 ? '0'+month : month,
			fDay = day < 10 ? '0'+day : day,
			element = new Element('div', {'class' : 'pf-article'})
			.grab(new Element('h3', {html : this.item.title}))
			.grab(new Element('p', {'class' : 'pf-date', 
				text : [itemDate.getFullYear(), fMonth, fDay].join('.')}))
			.grab(new Element('p', {'class' : 'pf-author', text : this.item.author}));
		if(this.options.includeThumbnail){
			imgHtml = /(<img.+?>)/m.exec(this.item.content);
			if(imgHtml){
				altAtt = /alt="(.*?)"/.exec(imgHtml[1]);
				if(altAtt && altAtt[1].length > 0){
					height = parseInt(/height="(.+?)"/.exec(imgHtml[1])[1]);
					width = parseInt(/width="(.+?)"/.exec(imgHtml[1])[1]);
					if(height > width){
						if(height > imageSize){
							width = width * (imageSize / height); 
							height = imageSize;
						}
					}else{
						if(width > imageSize){
							height = height * (imageSize / width); 
							width = imageSize;
						}					
					}
					src = /src="(.+?)"/.exec(imgHtml[1])[1]; 
					element.grab(new Element('img', {src : src, height : height, width : width})); 
				}
			}
		}
		element.grab(new Element('p', {html : this.item.contentSnippet}))
			.grab(new Element('a', {href : posturl, text : MooTools.lang.get('Feed').get('readMore')}));
		return element;
	}
});
PFPortal.GoogleFeed = new Class({
	Implements : Options,
	options : {maxEntries : 4, displayClass : PFPortal.ArticleBrief},
	initialize : function(title, url, options){
		this.setOptions(options);
		this.title = title; this.url = url;
	},
	toElement : function(){
		var rootElement, i, max;
		if(!this.entries){return new Element('div');}
		this.element = rootElement = new Element('div', {'class' : 'pf-feed'})
			.grab(new Element('h2', {text : this.title}));
		max = this.options.maxEntries || this.entries.length;
		if(max > this.entries.length){max = this.entries.length;} 
		for(i = 0; i < max; i++){		
			rootElement.grab(new this.options.displayClass(this.entries[i], this.options));
		}
		return rootElement;
	},
	load : function(opts){
		var f = new google.feeds.Feed(this.url),
			opts = opts || {}, self = this;
		f.setNumEntries(this.options.maxEntries);
		f.load(function(r){
			if(r.error){
				if(window.console && window.console.error){window.console.error(r.error.message);}
				if(opts.onFailure){opts.onFailure(r);} 
				return;
			}
			self.entries = r.feed.entries;
			if(opts.onSuccess){opts.onSuccess(r);}
			if(opts.onEmptyResult && !self.entries){opts.onEmptyResult();}
			if(opts.inject){opts.inject.grab(self);}
		});
		return this;
	},
	destroy : function(){
		this.element.destroy();
	}
});
PFPortal.Expandable = new Class({
	isExpanded : true,
	getHideLabel : function(){return MooTools.lang.get('UI').get('hide');},
	getExpandLabel : function(){return MooTools.lang.get('UI').get('expand');},
	initialize : function(element){
		var self = this;
		this.control = new Element('a', {href:'#', text : this.getHideLabel()}).addEvent('click', function(e){
			if(self.isExpanded){
				this.addClass('pf-show').removeClass('pf-hide');
				self.collapse();
			}else{
				this.addClass('pf-hide').removeClass('pf-show');
				self.expand();
			}
			return false;
		});
		this.wrapper = new Element('div', {'class' : 'pf-expandable'}).grab(this.control);
		this.wrapper.replaces(element);
		this.wrapper.grab(element);
		this.element = element; 
	},
	collapse : function(options){
		options = options || {};
		this.isExpanded = false;
		this.control.set('text', this.getExpandLabel());
		if(options.quick){
			this.element.hide();
		}else{
			this.element.dissolve();
		}
	},
	expand : function(){
		this.isExpanded = true;
		this.control.set('text', this.getHideLabel());
		this.element.reveal();		
	}
});
PFPortal.scanForSkus = function(element){
	function f(val){
		if(!val)return false;
		var skus = val.match(/sku=(\d+)/);
		if(skus){return skus[1];}
		return false;		
	}
	return element.getElements('a').get('href').map(f).filter(function(val){return val});

}
PFPortal.ProductList = new Class({
	initialize : function(skus){
		this.skus = skus;
	},	
	fetch : function(opt){
		if(!this.skus || this.skus.length < 1){return false};
		var cList = this.skus.join(','), self = this, title = opt.title || ''
			r = new Request({
				onSuccess : function(content){
					self.content = content;
					if(opt.onSuccess){opt.onSuccess(content);}
				},
				onFailure : function(){
					alert('Fetching product list failed');
				}
			});
		r.get(PFPortal.baseUrl+'/wa/TPSProductList/?skus='+cList+'&title='+title);
	},
	toElement : function(){
		if(this.content){
			return new Element('div', {html : this.content});
		}else{
			if(window.console && window.console.warn){console.warn('The content has not yet been fetched');}
			return null;
		}
	}
});
Element.implement({
	grabGoogleFeed : function(title, url, options){
		var f = new PFPortal.GoogleFeed(title, url, options).load({inject : this});
	},
	grabRelatedArticles : function(title, urls, options){
		var index = 0, feed, self = this;
		function startFetch(){
			if(index < urls.length){
				if(window.console && window.console.debug){console.debug("Fetching "+urls[index]);}
				feed = new PFPortal.GoogleFeed(title, urls[index++], options);
				feed.load({
					onEmptyResult : startFetch,
					onSuccess : self.grab.pass(feed, self)
				}); 
			}
		};
		startFetch();
	},
	makeExpandable : function(){
		var ex = new PFPortal.Expandable(this);
		ex.collapse({quick : true});
	},
	scanForSkus : function(){
		return PFPortal.scanForSkus(this);
	},
	injectProductList : function(skus, title){
		var r = new PFPortal.ProductList(skus), title = title || "";
		r.fetch({title : title, onSuccess : function(){$(document.body).grab(r);}.bind(r)});
	}
});
// -- newpage end
/*
Class: Application

Singleton containing state end functionality global in
the loaded page.
*/
PFPortal.Application = new Class({
	'Implements' : Events,
	/* Method: initialize
		Initializes with a sequence of 1.
	*/
	'initialize' : function(){
		this.seq = 1;
	},
	'nextIdValue' : function(){
		return '_pf-' + this.seq++;
	},
	toString : function(){return "[Application]";} 
});
PFPortal.app = new PFPortal.Application();
PFPortal.decorators = new Array();
if(Cookie.read('wosid')){
	var sess = null;
	$$('link[rel=session]').forEach(function(item){
		sess = item;
	});
	if($defined(sess)){
		new Request.JSON({'async' : false, 
			'onComplete' : function(data){
				PFPortal.user = data.user;
				PFPortal.offerings = data.cart.items;				
			}
		}).get(sess.href);
	}
}
(function(){
var links = $$('link[rel=i18n]');
if(links.length > 0){
	new Request.JSON({async:false,
 		onComplete:function(data){
 			var lastLang = null; 			
			for(lang in data){
				lastLang = lang;
				var langObject = data[lang]; 
				for(domain in langObject){
					MooTools.lang.set(lang, domain, langObject[domain]);	
				}
			}
			if(lastLang)MooTools.lang.setLanguage(lastLang);
		}
	}).get(links[0].href);
}
})();

if(!$defined(PFPortal.user)){
	PFPortal.user = {'login' : 'guest','groups' : [], 'rights':['wbdl','wbst'],'guest':true, 'beta' : false};
}
if(!$defined(PFPortal.offerings)){
	PFPortal.offerings = [];
}
/* LastLocation */
window.addEvent('load', function(){
	var url = window.location.href;
	if(url.indexOf('PSShop') > -1 || url.indexOf('PSSearch') > -1 || url.indexOf('PSContributor') > -1){
		Cookie.write('LastLocation', url, {'path' : '/'});
	}	
});
/*  Video Message */
PFPortal.VideoMessage = function(msg){
	this.message = msg;
}
PFPortal.VideoMessage.prototype.display = function(){
	var para = new Element('div', {'class' : 'pf-video-message-p', 'html' : this.message});	
	para.inject(document.body);	
	(function(){
		var h = para.getSize().y;
		var fx = new Fx.Tween(para, {'duration' : 'long', 
			'onComplete' : function(){
				para.destroy();	
			}
		});
		fx.start('top', -1 * h);
		
	}).delay(4000); 
};
/* Newsletter */
PFPortal.Newsletter = new Class({
	'initialize' : function(form, args){
		var self = this;
		var subscribeLink = args.subscribeLink;
		var subscribeUrl = subscribeLink.href;
		function subscribe(event){
			self.invokeService(subscribeUrl, event);
		}
		this.form = form;
		form.addEvent('submit', subscribe);
		subscribeLink.addEvent('click', subscribe);
		this.messageElement = args.messageElement;
		this.errorElement = args.errorElement;		
		this.unsubscribeLink = args.unsubscribeLink;
						
		this.unsubscribeLink.addEvent('click', function(event){
			this.invokeService(this.unsubscribeLink.href, event);
		}.bind(this));
		$(form.login).addEvent('focus', function(){
				form.login.value = '';
		});
	},
	'invokeService' : function(url, event){
		new Event(event).preventDefault();
		this.errorElement.style.display = 'none'
		this.messageElement.style.display = 'none';		
		var email = this.form.login.value;
		if($chk(email) && email.indexOf('@') > -1){
			var req = new Request.JSON({
				onSuccess : function(reply){
					this.messageElement.style.display = 'block';
					this.messageElement.set('html', reply.localizedMessage);
				}.bind(this),
				onFailure : function(e){
					alert("Sorry, pleasy try again later");
				}
			}).post(url, {'login' : email});
		}else{
			alert('Please supply a valid email');
		}
	}
});
window.addEvent('domready', function(){// setup subscriber box	
	var newsletterForm = $('newsletterForm');
	if($defined(newsletterForm)){
		PFPortal.sharedNewsletter = new PFPortal.Newsletter(newsletterForm, {
			'messageElement' : $('newsletterMessage'), 
			'errorElement' : $('newsletterError'),
			'subscribeLink' :$('newsletterSubscribeLink'),	
			'unsubscribeLink' : $('newsletterUnsubscribeLink')
		});
	}
});
window.addEvent('domready', function(user){
	var element = $("logout");
	if($defined(element) && !PFPortal.user.guest){
		element.innerHTML = element.innerHTML.replace('email', PFPortal.user.login);
		element.style.display = 'block';
	}
});
var PFCart = new Class({
	'initialize' : function(cartElement, cartURL, opts){
		this.enabled = false;
		this.cartURL = cartURL;
		this.cartElement = cartElement;
		this.removeBtnElement = $(cartElement.getElementById('removeButton'));
		this.disabledControl = $(cartElement.getElementById('disabledCartActions'));
		this.enabledControl = $(cartElement.getElementById('enabledCartActions'));
		this.maxHeight = 0;
		var cartContent = $(cartElement.getElementById('cartContent'));
		this.contentElement = cartContent;
		this.contentElement.pfCart = this;
		this.enabledControl.pfenabled = false;
		this.enabledControl.pfCart = this;
		this.enabledControl.getElement('img').pfCart = this;
		var refreshLink = $('pf-payment-page-refresh');
		if($defined(refreshLink)){
			this.refreshLink = refreshLink.href;	 
		}else{
			this.refreshLink = null;
		}
		this.enabledControl.getElement('img').addEvent('click', function(){
			var myCart = this.pfCart;//cartContent.pfCart;
			var trans = myCart.enabled ? Fx.Transitions.Quad.easeIn : Fx.Transitions.Elastic.easeOut;
			var dur = myCart.enabled ? 400 : 800;
 			var myfx = new Fx.Tween(myCart.contentElement, 
 				{duration : dur, transition: trans,
					onComplete : function(obj){
						if(!myCart.enabled){
							myCart.contentElement.setStyle('visibility', 'hidden');
						}
				}
			});
  			if(myCart.enabled){
				myfx.start('height', 0);
				myCart.enabled = false;
			}else{
				myCart.contentElement.setStyle('visibility', 'visible');
				myfx.start('height', 0, myCart.maxHeight);
				myCart.enabled = true;
				
			}
		});
		this.total = 0;
		this.maxHeight = 0;
		if($defined(opts.offerings)){
			this.setOfferings(opts.offerings);
		}		
		
	},
	'notifySuccess' : function(ev){
		var myEv = new Event(ev);
		var cartActIcon = $('notification_success');
		if($defined(cartActIcon)){
			cartActIcon.setStyle("left", myEv.page.x);
			cartActIcon.setStyle("top", myEv.page.y);
		}				
	},
	'_removeItem' : function(ev){
		var myCart = this.pfCart;
		new Request.JSON({
			'url' : this.pfDisposeURL,
			'onSuccess' : function(data){
				if($defined(myCart.refreshLink)){
					window.location.href = myCart.refreshLink;
				}else{
					myCart.setOfferings(data.items);
				}
			}					 
		}).post();
	},
	'_createList2' : function(orgElement, offerings){
		var tableElm = new Element('table', {});
		tableElm.setStyle('overflow', 'hidden');
		tableElm.setStyle('display', 'block');
		if(this.enabled){
			tableElm.setStyle('visibility', 'visible');
		}
		tableElm.id = orgElement.id;
		var myCart = this;
		var myTotal = 0;
		var btnProt = this.removeBtnElement;
		offerings.forEach(function(item, index){
			var rowElm = new Element('tr', {}).injectInside(tableElm);
			new Element('td', {'class' : 'name'}).set('html', item.name).injectInside(rowElm);
			var artists  = "";
			if($defined(item.productVariant) && item.productVariant.product.displayArtists.length > 0){
				artists = item.productVariant.product.displayArtists[0];
			}
			new Element('td', {'class' : 'artist'}).set('html', artists).injectInside(rowElm);
			new Element('td', {'class' : 'format'}).setText(item.productVariant.format).injectInside(rowElm);
			new Element('td', {'class' : 'currency'}).setText(item.currency).injectInside(rowElm);
			new Element('td', {'class' : 'price'}).setText(new Number(item.price/100).toFixed(2)).injectInside(rowElm); 
			var control = new Element('td', {'class' : 'remove'}).injectInside(rowElm);
			control.pfDisposeURL = item.disposeURL;
			control.pfCart = myCart;
			control.addEvent('click', myCart._removeItem);
			var btnClone = btnProt.clone();//.setStyle('display', 'block').injectInside(control);
			var btn = new Element('img', {'src' : btnProt.src}); 
			btn.inject(control);
			control.inject(rowElm);
			myTotal += item.price;
		});
		this.total = myTotal;
		return tableElm;		
	},
	'_createList1' : function(orgElement, offerings){
		var cloneListElement = new Element('div', {'id' : orgElement.id});
		cloneListElement.setStyle('overflow', 'hidden');
		cloneListElement.setStyle('display', 'block');
		cloneListElement.setStyle('height', 'auto');
		if(this.enabled){
			cloneListElement.setStyle('visibility', 'visible');
		}//orgElement.clone(false);
		var myCart = this;
		var myTotal = 0;
		var btnProt = this.removeBtnElement;
		offerings.forEach(function(item, index){
			var row = new Element('div', {'class' : 'cartItemRow'}).inject(cloneListElement);
			var nameDiv = new Element('div', {'class' : 'name'});
			if($defined(item.productURL)){
				var anchor = new Element('a', {'href' : item.productURL, 'text' : item.name}).inject(nameDiv);;
			}else{
				nameDiv.set('html', item.name);
			}
			nameDiv.injectInside(row);
			new Element('div', {'class' : 'artist'}).set('html',
				$defined(item.productVariant) && item.productVariant.product.displayArtists.length > 0 ? 
				item.productVariant.product.displayArtists[0].name  : "").inject(row);
			new Element('div', {'class' : 'format'}).set('text', $defined(item.productVariant) && $defined(item.productVariant.format)? 
				item.productVariant.format : "").inject(row);			
			new Element('div', {'class' : 'currency'}).set('text', item.currency).inject(row);
			new Element('div', {'class' : 'price'}).set('text', new Number(item.price/100).toFixed(2)).inject(row); 						
			var control = new Element('div', {'class' : 'remove'}).inject(row);
			control.pfDisposeURL = item.disposeURL;
			control.pfCart = myCart;
			control.addEvent('click', myCart._removeItem);
			var btn = new Element('img', {'src' : btnProt.src});
			btn.inject(control);					
			myTotal += item.price;
		});	
		this.total = myTotal;
		return cloneListElement;		
	},
	'setOfferings' : function(offerings){
		this.offerings = offerings;
		var myElement = this.cartElement;
		var listElement = this.contentElement;
		var countElement = $(myElement.getElementById('cartItemCount'));
		var totalElement = $(myElement.getElementById('cartTotal'));
		this.contentElement = this._createList1(listElement, this.offerings).replaces(listElement);		
		this.maxHeight = this.contentElement.clientHeight;
		this.contentElement.setStyle('height', this.maxHeight);
		countElement.set('html', offerings.length);
		totalElement.set('html', new Number(this.total/100).toFixed(2));
		if(offerings.length == 0){
			this.disabledControl.setStyle('display', 'block');
			this.enabledControl.setStyle('display', 'none');
			this.contentElement.setStyle('visibility', 'hidden');
		}else{
			this.disabledControl.setStyle('display', 'none');
			this.enabledControl.setStyle('display', 'block');
		}
		if(!this.enabled){
			this.contentElement.setStyle('height', 0);
		}
		return this;
	},
	'jsonPut' : function(ev){
		ev = new Event(ev);
		ev.preventDefault();
		var oid = null;
		var items = $(ev.target).getElements('input[name=oid]');
		items = $A(items);									
		items.each(function(item){
			if(item.type == 'radio' && item.checked){
				oid = item.value;
			}else if(item.type != 'radio'){
				oid = item.value;
			}
		});
		var reqData = {'oid' : oid, '_f' : 'json'};
		if($defined(ev.target.manualAmount)){
			reqData.manualAmount = ev.target.manualAmount.value;
		}
		var $icon = this.cartActionIcon;
  		var req = new Request.JSON({
			'url' : ev.target.action,
			'onComplete' : function(data){
				PFPortal.sharedCart.setOfferings(data.items);
				if($defined($icon)){
					$icon.fireEvent('fade');
				}
			}
			// weno fail
		}).post(reqData);
	},
	'quickJsonPut' : function(ev){
		ev = new Event(ev);
		ev.preventDefault();
		var req = new Request.HTML({
			'url' : ev.target.action,
			'evalScripts' : true
		}).post($(ev.target));
	}	
});
PFPortal.FieldSuggester = new Class({
	'suggestions' : [],
	'suggestionsBox' : null,
	'field' : null,
	'lastKnownValue' : null,
	'monitor' : null,
	'initialize' : function(el){
		this.suggestionsBox = new Element('div', {'class' : 'search-suggestions pf-hidden', 
			'style' : 'position: absolute; background-color: lightgrey; width: 400px;'}).inject(el, 'after');
		this.field = el;
	},
	'handleFocus' : function(e){
		var field = e.target;
		this.monitor = window.setInterval(this.suggest.bind(this), 1000);
		if(this.suggestions.length > 0){this.suggestionsBox.removeClass('pf-hidden');}
	},
	'handleBlur' : function(e){
		window.clearInterval(this.monitor);
		this.suggestionsBox.addClass('pf-hidden');
	},
	'_navigate' : function(provider, wrappedProvider){
		var selectedClass = "pf-quick-selected";
		var el = this.suggestionsBox.getElement('.'+selectedClass);
		if(el != null){
			el.removeClass(selectedClass);
			var el2 = provider.call(el);
			if(el2 == null){
				this.suggestionsBox.getElement('ol').getLast().addClass(selectedClass);				
			}else{
				el2.addClass(selectedClass);
			}
		}else{
			this.suggestionsBox.getElement('ol').getLast().addClass(selectedClass);
		}		
	},
	'handleKeyDown' : function(e){
		e = new Event(e);
		var selectedClass = "pf-quick-selected";
		if(e.key == 'up'){
			var el = this.suggestionsBox.getElement('.'+selectedClass);
			if(el != null){
				el.removeClass(selectedClass);
				var el2 = el.getPrevious();
				if(el2 == null){
					this.suggestionsBox.getElement('ol').getLast().addClass(selectedClass);				
				}else{
					el2.addClass(selectedClass);
				}
			}else{
				this.suggestionsBox.getElement('ol').getLast().addClass(selectedClass);
			}
		}else if(e.key == 'down'){
			var el = this.suggestionsBox.getElement('.'+selectedClass);
			if(el != null){
				el.removeClass(selectedClass);
				var el2 = el.getNext.call(el);
				if(el2 == null){
					this.suggestionsBox.getElement('li').addClass(selectedClass);				
				}else{
					el2.addClass(selectedClass);
				}
			}else{ 
				this.suggestionsBox.getElement('li').addClass(selectedClass);
			}
		}else if(e.key == 'enter'){
			if(!this.suggestionsBox.hasClass('pf-hidden')){
				var element = this.suggestionsBox.getElement('.'+selectedClass);
				if(element){
					this.field.value = element.getElement('span').get('text');
				}
			}			
		}else if(e.key == 'esc'){
			this.suggestionsBox.toggleClass('pf-hidden');
			window.clearInterval(this.monitor);
			this.monitor = null;
		}		
	},
	'suggest' : function(){
		if(this.field.value != '' && this.field.value != null){
			this.suggestionsBox.removeClass('pf-hidden');
	 		if(this.lastKnowValue != this.field.value){			
				this.lastKnowValue = this.field.value;
				var self = this;
				var self = this;
				new Request.HTML({
					'url' : this.action,
					'update' : this.suggestionsBox,
					'onSuccess' : function(){
						self.suggestionsBox.getElements('li').addEvent('mousedown', function(event){														
							self.field.value = $(this).getElements('span').get('text')[0];
							self.field.form.submit();
						})
					}
				}).get({'q' : this.field.value, 'WOURLEncoding' : 'UTF-8'});
			}
		}else{
			this.suggestionsBox.addClass('pf-hidden');
		}
	}
});
PFPortal.FieldSuggester.register = function(selector){
	$$(selector).each(function(el){
		var sug = new PFPortal.FieldSuggester(el);
		el.addEvent('focus', sug.handleFocus.bind(sug))
		.addEvent('blur', sug.handleBlur.bind(sug))
		.addEvent('keydown', sug.handleKeyDown.bind(sug));
		sug.action = el.form.action.replace('simple', 'quick');
	});
}
window.addEvent('domready', function(){ 
	PFPortal.FieldSuggester.register('#searchbar input[type=text]');
});
(function(){	
	if(PFPortal._uninitialized){
		/*  Decorate */
		PFPortal.decorators.forEach(function(func){
			func();
		});
	}
	function installBuyForms(){
	/* Hook into cart forms. */
		var cartActIcon = $('notification_success');
		$$('form.phurchase').forEach(function(elem, index){
			var innerElem = elem.getElement('input[name="_f"]');
			innerElem.setProperty('value', 'json');
			elem.getElements("input[type=image]").forEach(function(subElem){
				subElem.addEvent('click', function(ev){
					var myEv = new Event(ev);					
					if($defined(cartActIcon)){
						cartActIcon.setStyle("left", myEv.page.x);
						cartActIcon.setStyle("top", myEv.page.y);
						cartActIcon.set('tween', {'duration' :  3400});
						cartActIcon.setStyle('display', 'block');
						cartActIcon.fade('hide');
						cartActIcon.addEvent('fade', function(ev){				
							cartActIcon.tween('opacity', 1, 0);				
						});			
					}				
				});
			});
			elem.addEvent('submit', function(ev){
				ev = new Event(ev);
				ev.preventDefault();
				var oid = null;
				var items = $(ev.target).getElements('input[name=oid]');
				items = $A(items);									
				items.each(function(item){
					if(item.type == 'radio' && item.checked){
						oid = item.value;
					}else if(item.type != 'radio'){
						oid = item.value;
					}
				});
				var reqData = {'oid' : oid, '_f' : 'json'};
				if($defined(ev.target.manualAmount)){
					reqData.manualAmount = ev.target.manualAmount.value;
				}			
  				var req = new Request.JSON({
					'url' : this.action,
					'onComplete' : function(data){
						var infoMessage = data.message; 
						if(infoMessage){
							var info = new PFPortal.VideoMessage(infoMessage);
							info.display();
						}
						PFPortal.sharedCart.setOfferings(data.items);
						if($defined(cartActIcon)){
							cartActIcon.fireEvent('fade');
						}
					}// TODO we need on failure
				}).post(reqData);
			});
		});
	}
	window.addEvent('portalPageSetup', function(portalPage){
		portalPage.addEvent('cartReady', installBuyForms);
		
	});
	PFPortal.PFCart = PFCart;
	PFPortal._uninitialized = false;
})();
(function(){	
	function fit(id){
		$$(id).forEach(function(roles){
			if(roles.offsetHeight > 100){
				var orgHeight = roles.getStyle('height');
				smallHeight = '60px'; 		
				roles.setStyle('height', smallHeight);
				roles.getNext('.pf-control .pf-show').toggleClass('pf-nodisplay').addClass('pf-reduced').addEvent('click', 
					function(){
						roles.tween('height', orgHeight);
						roles.getAllNext('.pf-control').toggleClass('pf-nodisplay').removeClass('pf-reduced');				
						return false;
					}
				);
				roles.getNext('.pf-control .pf-hide').addEvent('click', function(){
					roles.tween('height', smallHeight);
					roles.getAllNext('.pf-control').toggleClass('pf-nodisplay').addClass('pf-reduced');
					return false;
				});
			}
		});
	}
	window.addEvent('load', fit.pass('.pf-roles'));
	window.addEvent('load', fit.pass('.pf-artists'));
})();
/*  Contributor tabs */
(function(){
	window.addEvent('domready', function(){
		var currentTab = null, currentPane;
		$$('.pf-panes div').addClass('pf-nodisplay');
		$$('.pf-tabs a').addEvent('click', function(e){
		if(currentTab == this){
			this.removeClass('pf-selected');
				$$(currentPane).addClass('pf-nodisplay');
				currentTab = null;
				currentPane = null;
			}else{		
				if(currentPane){$$(currentPane).addClass('pf-nodisplay');}
				currentPane = this.hash;
				$$(currentPane).removeClass('pf-nodisplay');
				if(currentTab){currentTab.removeClass('pf-selected');}
				currentTab = this;		
				currentTab.addClass("pf-selected");
			}				
		}).addEvent('click', function(e){
			new Event(e).preventDefault();
		});
	});
})();
