var PopUp = {
	Implements: [Options, Events],

	options: {
		windowOptions: {
			width: 1210,
			height: 880,
			resizable: 'yes',
			scrollbars: 'yes'
		},
		context: document,
		elemSelector: '.popup'
	},


	initialize: function(options){
		this.setOptions(options);

		this.popElems = this.getPopElems();

		this.prepPopElems(this.popElems);
	},


	/**
	 * Gets all the elements that marked as a popup
	 * @param {Object} context
	 * @return {Array} Returns an array of all elements marked as a popup
	 */
	getPopElems: function(context){
		context = ($defined(context)) ? context : this.options.context;

		return $(context).getElements(this.options.elemSelector);
	},


	prepPopElems: function(popElems){
		popElems.each(function(elem){
			elem.addEvent('click', this.popElemClick.pass(elem, this));
		}, this);
	},

	popElemClick: function(elem){
		var winOptions = this.getElemOptions(elem);
		var winUrl = elem.get('href');

		var winName = 'popup'+$random(0, 9999);

		window.open(winUrl, winName, winOptions);

		return false;
	},

	getElemOptions: function(elem){
		var rel = elem.get('rel');

		var options = this.options.windowOptions;

		if($defined(rel) && rel.indexOf('popup={') != -1) {
			var elemOptions = rel.substring(rel.indexOf('popup{'), rel.indexOf('}'));
			elemOptions = options.split(',');

			options.extend(elemOption);
		}

		var optionStr = '';

		$each(options, function(value, key){
			optionStr+= key+'='+value+',';
		});

		return optionStr;
	}
};

PopUp = new Class(PopUp);


window.addEvent('domready', function(){
	new PopUp();
});
