function Captcha() {
	this.imageWidth = 0;
	this.imageHeight = 0;
	this.zoomIcon;
	
	/**
	 * Initialises the reload function.
	 */
	this.init = function() {
		// get captcha image
		var image = $('captchaImage');
		if (image) {
			var p = document.createElement('p');
			image.parentNode.appendChild(p);
			
			var a = document.createElement('a');
			a.onclick = function() { Captcha.reload(); };
			a.setStyle({
				cursor : 'pointer'
			});
			p.appendChild(a);
			
			var title = document.createTextNode(captchaLanguage['mmn.captcha.reload']);
			a.appendChild(title);
			
			// add onload event
			image.onload = function() { Captcha.initImageResizer(); };
		}
	}
	
	this.initImageResizer = function() {
		var image = $('captchaImage');
		if (image) {
			this.imageWidth = image.width;
			this.imageHeight = image.height;
			if (this.imageWidth > 0 && this.imageHeight > 0) {
				// change cursor
				image.style.cursor = 'pointer';
			
				// append zoom icon
				this.zoomIcon = document.createElement('img');
				image.parentNode.insertBefore(this.zoomIcon, image.nextSibling);
				this.zoomIcon.setStyle({
					display : 'none',
					cursor : 'pointer',
					'verticalAlign' : 'top',
					'marginLeft' : '-20px',
					'paddingTop' : '4px'
				});
			
				// add events
				image.onmouseover = function() { Captcha.zoomIcon.show(); };
				this.zoomIcon.onmouseover = image.onmouseover;
				image.onmouseout = function() { Captcha.zoomIcon.hide(); };
			
				this.minimize();
			}
		}
	}
	
	this.minimize = function() {
		var image = $('captchaImage');
		if (image) {
			// half image size
			image.width = Math.round(this.imageWidth / 2);
			image.height = Math.round(this.imageHeight / 2);
			
			// add onlick event
			image.onclick = function() { Captcha.maximize(); };
			
			// change zoom icon
			this.zoomIcon.src = './Themes/Default/Images/Icon/zoomInS.png';
			image.title = captchaLanguage['mmn.captcha.maximize'];
			this.zoomIcon.title = captchaLanguage['mmn.captcha.maximize'];
		}
	}
	
	this.maximize = function() {
		var image = $('captchaImage');
		if (image) {
			// set original image size
			image.width = this.imageWidth;
			image.height = this.imageHeight;
			
			// add onlick event
			image.onclick = function() { Captcha.minimize(); };
			
			// change zoom icon
			this.zoomIcon.src = './Themes/Default/Images/Icon/zoomOutS.png';
			image.title = captchaLanguage['mmn.captcha.minimize'];
			this.zoomIcon.title = captchaLanguage['mmn.captcha.minimize'];
		}
	}
	
	/**
	 * Starts the reload of the captcha.
	 */
	this.reload = function() {
		// request new captcha id
		var date = new Date();
		
		new Ajax.Request('index.php?page=Captcha&action=newCaptchaID&t='+date.getTime()+SID_ARG_2ND, {
			method: 'post',
			onSuccess: function(transport) {
				var captchaID = 0;
				var tags = transport.responseXML.getElementsByTagName('captchaid');
				
				if (tags.length > 0) {
					captchaID = tags[0].childNodes[0].nodeValue;
					
					// insert new captcha id in hidden field
					var hidden = $('captchaID');
					if (hidden) {
						hidden.value = captchaID;
					}
					
					// reload captcha image
					var image = $('captchaImage');
					if (image) {
						image.onload = function() {};
						image.src = 'index.php?page=Captcha&captchaID='+captchaID+SID_ARG_2ND;
					}
				}
			}
		});
	}
	
	this.init();
}

var Captcha = new Captcha();
