var Share = Class.create({
	initialize: function(divId) {
		this.divId = divId;
		this.div = $(divId);
		this.shareLinks = new ShareLinks();

		// Listen for actionhandler events
		document.observe('action:shareshow',(function(evt){
			this._show();
		}).bindAsEventListener(this));
		document.observe('action:shareopen',(function(evt){
			this.open(evt.memo.data.service);
		}).bindAsEventListener(this));
	},
	_show: function() {
		document.fire('overlaywindow:show',{'element': this.div});	
	},
	open: function(service) {
		this.hide();
		this.shareLinks.open(service);
	},
	show: function() {
		site.log('Please use the action:shareshow event instead of show()');
		this._show();
	},
	hide: function() {
		site.log('Please use an action element with the class "action_overlaywindowclose" instead of calling hide() to close the share window.');
		document.fire('overlaywindow:show');
	},
	effectEnds: function() {
		this.effects--;
	},
	checkfield: function(elementId,re) {
		var element = $(elementId);
		if (element.value.match(re)!=null) { return true; }

		/*
		var parentelement = element.up('.field');
		//parentelement.removeClassName('warning');
		//parentelement.addClassName('warning');
		*/

		new Effect.Highlight(element,{
			startcolor: '#ffaaaa',
			endcolor: '#ffffff',
			duration: 0.3,
			queue: 'end'
		});

		return false;
	},
	submit: function() {
		// Check for errors
		var errors=0;
		if (!this.checkfield('share_friendmail',/^[\.\-\w]+@[\.\-\w+]\.\w+$/)) { errors++; }
		if (!this.checkfield('share_username',/^\w+$/)) { errors++; }
		if (errors) { return false; }

		// Submit form!
		//alert("[form submit]");
		return false;
	}
});

var ShareLinks = Class.create({
	open: function(serviceStr) {
		// Service definition
		var services = {
			'facebook':		'http://www.facebook.com/share.php?u={url}&t={title}',
			'twitter':		'http://twitter.com/home?status={title}+-+{url}',
			'delicious':	'http://delicious.com/post?url={url}&title={title}&notes=',
			'stumpleupon':	'http://www.stumbleupon.com/submit?url={url}&title={title}',
			'google':		'http://www.google.com/bookmarks/mark?op=add&bkmk={url}&title={title}&annotation=',
			'live':			'https://favorites.live.com/quickadd.aspx?marklet=1&mkt=en-us&url={url}&title={title}&top=1'
		};
		// Report missing service
		if (services[serviceStr]===undefined) {
			alert('Unknown ShareIt service specified: '+serviceStr);
			return;
		}
		// Build URL
		var shareURL = services[serviceStr];
		shareURL = shareURL.replace('{url}',encodeURIComponent(location.href));
		shareURL = shareURL.replace('{title}',encodeURIComponent(document.title));
		// Open URL
		window.open(shareURL);
	}
});	


