AClipboard = Class.create();
AClipboard.prototype = {
	initialize: function(settings) {
		this._settings = Object.extend(Object.extend({}, AClipboardSettings), settings || {});
		this._projects = new Array();
		this._preload = new Hash();
		this._isCatalog = false;
		this._projectsData = null;

		if(!MyBudujemy.isUndefined && MyBudujemy.user) {
			MyBudujemy.fetchFavProjects(function(data, status) { this._getMBProjects(data, status) }.bind(this));
		} else {
			this._getClipProjects();
			this._getClipProjectsData();
		}

		this._event_onAddProject = this._onAddProject.bind(this);
		this._event_onRemoveProject = this._onRemoveProject.bind(this);

		if(this._settings.addTrigger && $(this._settings.addTrigger)) {
			Event.observe($(this._settings.addTrigger), 'click', this._event_onAddProject);
		}
	},

	_getMBProjects: function(data, status) {
		if(status == 1) {
			this._projects = data.projects;
		}

		if(this._projects.size() == 0) {
			this._getClipProjects();
		} else {
			this._isCatalog = true;
		}

		this._getClipProjectsData();
	},

	_getClipProjects: function() {
		var clipboard = CookieManager.getCookie(this._settings.cookieName);

		if(clipboard) {
			this._projects = clipboard.split('|');

			if(this._projects.size() != 0) {
				this._projects.each(function(item){
					if(item != parseInt(item)) {
						this._isCatalog = true;
						throw $break;
					}
				}, this);
			}
		}
	},

	_setSettings: function(settings, isAdded) {
		this._settings = null;
		this._settings = Object.extend(Object.extend({}, AClipboardSettings), settings || {});
		if(isAdded) {
			this._onAddProject();
		}
	},

	_getClipProjectsData: function() {
		var ajax = new Ajax.Request('index.php', {
			method: 'post',
			parameters: {p: 'GetClipboardProjects', cat: this._isCatalog, list: Object.toJSON(this._projects)},
 			onSuccess: function(transport) {
 				this._projectsData = transport.responseText.evalJSON().clipProjects;
				this._writeProjects();
			}.bind(this)
		}, this);
	},

	_writeProjects: function() {
		var projectsCompareBox = document.createElement('div');
		Element.extend(projectsCompareBox);
		projectsCompareBox.hide();
		projectsCompareBox.id = 'projectsCompareBox';

		var projectsCompareWrapper = document.createElement('div');
		Element.extend(projectsCompareWrapper);
		projectsCompareBox.insert(projectsCompareWrapper);

		var compareHeader = document.createElement('h2');
		Element.extend(compareHeader);
		compareHeader.update('Porównanie projektów');

		var clipFrame = document.createElement('div');
		Element.extend(clipFrame);
		clipFrame.id = 'clipFrame';

		projectsCompareWrapper.insert(compareHeader);
		projectsCompareWrapper.insert(clipFrame);

		var compareLink = document.createElement('div');
		Element.extend(compareLink);
		compareLink.addClassName('compare');
		var compareLinkImg = document.createElement('img');
		compareLinkImg.src = 'img/btnPorownaj.png';
		compareLinkImg.alt = 'Porównaj wybrane';
		Event.observe(compareLinkImg, 'click', function() { location = 'porownanieProjektow.html?uri=' + this._settings.uri }.bind(this));

		compareLink.insert(compareLinkImg);
		projectsCompareWrapper.insert(compareLink);

		var projectData = null;

		if(!this._isCatalog) {
			this._projects = new Array();
		}

		if(this._projectsData) {
			this._projectsData.each(function(item) {
				if(!this._isCatalog) {
					this._projects.push(item.catalog_id);
				}

				projectData = new Hash();
				projectData.set('pid', item.project_id);
				projectData.set('cid', item.catalog_id);
				projectData.set('name', item.projectName);
				projectData.set('sid', item.studio_id);
				projectData.set('symbol', item.symbol);
				projectData.set('value', item.value);

				clipFrame.insert(this._createClip(projectData, true));

			}, this);

			this._triggerPreload(projectsCompareBox, null);
		}

		if(!this._isCatalog) {
			this._isCatalog = true;
			CookieManager.setCookie(this._settings.cookieName, this._projects.join('|'), 365);
		}

		$('boxConsultations').insert({
			after: projectsCompareBox
		});
	},

	_createClip: function(projectData, isVisible) {
		var clipBox = document.createElement('div');
		Element.extend(clipBox);
		clipBox.setAttribute('id', 'clipBox_' + projectData.get('pid'));
		clipBox.addClassName('clipBox');
		if(!isVisible) {
			clipBox.setStyle({
				display: 'none'
			});
		}

		var clip = document.createElement('div');
		Element.extend(clip);
		clip.setAttribute('id', 'clip_' + projectData.get('pid'));
		clip.addClassName('clip');

		var removeImageBox = document.createElement('span');
		Element.extend(removeImageBox);
		removeImageBox.setAttribute('id', 'r_' + projectData.get('cid'));

		var removeImage = document.createElement('img');
		Element.extend(removeImage);
		removeImage.src = 'img/x.gif';
		removeImage.addClassName('remove');
		removeImage.setAttribute('alt', 'Usuń projekt');
		removeImage.setAttribute('id', 'remove_' + projectData.get('pid'));

		Event.observe(removeImage, 'click', this._event_onRemoveProject);

		if(typeof(this._preload.get('remover')) == 'undefined') {
			this._preload.set('remover', removeImage);
		}

		var clipLink = document.createElement('a');
		Element.extend(clipLink);
		clipLink.setAttribute('href', 'projekt,p,' + projectData.get('pid') + '.html');

		var clipImage = document.createElement('img');
		clipImage.id = 'i' + projectData.get('pid');
		clipImage.src = this._settings.path + '/' + projectData.get('sid') + '/' + projectData.get('pid') + '/maly_0.jpg';

		var projectNameBox = document.createElement('span');
		Element.extend(projectNameBox);
		var projectName = projectData.get('symbol') ? projectData.get('symbol') + ' ' + projectData.get('name') : projectData.get('name');
		projectNameBox.update(projectName);

		var area = document.createElement('abbr');
		Element.extend(area);
		area.setAttribute('title', 'powierzchnia');
		area.update('pow.');

		var usable = document.createElement('abbr');
		Element.extend(usable);
		usable.setAttribute('title', 'użytkowa');
		usable.update(' użytk.');

		var value = document.createElement('span');
		Element.extend(value);
		value.update(' ' + projectData.get('value') + ' m<sup>2</sup>');

		clipLink.insert(clipImage);
		clipLink.insert(projectNameBox);
		removeImageBox.insert(removeImage);
		clip.insert(removeImageBox);
		clip.insert(clipLink);
		clip.insert(area);
		clip.insert(usable);
		clip.insert(value);
		clipBox.insert(clip);

		this._preload.set(clipImage.id, clipImage);
		return clipBox;
	},

	_triggerPreload: function(projectsCompareBox, clip) {
		var c = 0;

		this._preload.each(function(item) {
			if(item.value.complete == true) {
				c++;
				if(c == this._preload.size()) {
					if(clip) {
						this._slideClip(projectsCompareBox, clip);
					} else {
						this._slideCompareBox(projectsCompareBox);
					}
				}
			} else {
				item.value.onload = function() {
					c++;
					if(c == this._preload.size()) {
						if(clip) {
							this._slideClip(projectsCompareBox, clip);
						} else {
							this._slideCompareBox(projectsCompareBox);
						}
					}
				}.bind(this);
			}
		}, this);
	},

	_slideCompareBox: function(projectsCompareBox) {
		this._preload = new Hash();

		$('boxConsultations').insert({
			after: projectsCompareBox
		});

		Effect.SlideDown(projectsCompareBox.id, { duration: 1.0 });
	},

	_slideClip: function(projectsCompareBox, clip) {
		this._preload = new Hash();

		if(projectsCompareBox) {
			Effect.SlideDown(projectsCompareBox.id, { duration: 1.0 });
		} else {
			Effect.SlideDown(clip.id, { duration: 1.0 });
		}
	},

	_onAddProject: function() {
		var ajax = new Ajax.Request('index.php', {
			method: 'post',
			parameters: {p: 'CountClipClicks'}
		});

		if(this._projects.length >= 6) {
			alert('Jeśli chcesz dodać ten projekt do porównania \nusuń dowolny projekt z listy by zwolnić miejsce.');
			return false;
		}

		if(this._projects.indexOf(this._settings.projectCid) != -1) {
			alert('Ten projekt znajduje się już w Twojej teczce.');
			return false;
		}

		if(!MyBudujemy.isUndefined && MyBudujemy.user) {
			MyBudujemy.addProjectToFav(this._settings.projectCid);

			this._projects.push(this._settings.projectCid);
			CookieManager.setCookie(this._settings.cookieName, this._projects.join('|'), 365);

			var projectData = new Hash();
			projectData.set('pid', this._settings.projectId);
			projectData.set('cid', this._settings.projectCid);
			projectData.set('name', this._settings.projectName);
			projectData.set('sid', this._settings.studioId);
			projectData.set('symbol', this._settings.projectSymbol);
			projectData.set('value', this._settings.projectArea);

			if(this._projects.size() == 1) {
				$('clipFrame').insert(this._createClip(projectData, true));
			} else {
				$('clipFrame').insert(this._createClip(projectData, false));
			}

			if(this._projects.size() == 1) {
				this._triggerPreload($('projectsCompareBox'), $('clipBox_' + this._settings.projectId));
			} else {
				this._triggerPreload(null, $('clipBox_' + this._settings.projectId));
			}
		} else {
			var panel = $('loginMyBudujemy');

			panel.setStyle({
				left: (document.viewport.getWidth() - 280)/2 + 'px',
				top: document.viewport.getScrollOffsets().top + (document.viewport.getHeight() - 350)/2 + 'px'
			});

			panel.show();

			Event.observe($('loginMyBudujemyHide'), 'click', function() {
				panel.hide();
				$('loginMyBudujemyForm').reset();
			});
		}
	},

	_onRemoveProject: function(event) {
		var trigger = Event.element(event);
		var triggerId = parseInt(trigger.id.replace('remove_', ''));
		var triggerCid = Event.findElement(event, 'span').id.replace('r_', '');

		this._projects = this._projects.without(triggerCid);

		if(!MyBudujemy.isUndefined && MyBudujemy.user) {
			MyBudujemy.deleteProjectFromFav(triggerCid, function(data) {} );
		}

		if(this._projects.size() == 0) {
			CookieManager.setCookie(this._settings.cookieName, '', -1);
		} else {
			CookieManager.setCookie(this._settings.cookieName, this._projects.join('|'), 365);
		}

		Event.stopObserving(trigger, 'click', this._event_onRemoveProject);

		if(this._projects.size() == 0) {
			Effect.SlideUp('projectsCompareBox', { duration: 1.0, afterFinish: function(){ $('clipBox_' + triggerId).remove(); } });
		} else {
			Effect.SlideUp('clipBox_' + triggerId, { duration: 1.0, afterFinish: function(effect){ effect.element.remove(); } });
		}
	}
}