window.addEvent('domready', function() {
	if ($(document.body).getElement('form.newForm')) myForm = new newForm($(document.body).getElement('form.newForm'));
});

var myForm, newForm = new Class({
	initialize: function(element) {
		var myForm = this;
		this.form = element;
		
		// Select
		if ($chk(this.form.getElement('div.select'))) $each(this.form.getElements('div.select'), function(item) { myForm.initSelect(item); });
		
		// Input Text
		if ($chk(this.form.getElement('input[type=text]'))) $each(this.form.getElements('input[type=text]'), function(item) { myForm.initInputText(item); });
		
		// Checkbox
		if ($chk(this.form.getElement('input[type=checkbox]'))) $each(this.form.getElements('input[type=checkbox]'), function(item) { myForm.checkbox(item); });
		
		// Input with Label inside
		if ($chk(this.form.getElements('label.inside'))) labels.run();
		
		// File
		if ($chk(this.form.getElement('input[type=file]'))) {
			var file = this.form.getElement('input[type=file]');
			// Set form target
			this.form.set('target', 'UploadFrame');
		}
		
		// Input Firefox
		if (Browser.Engine.gecko) {
			$each(this.form.getElements('input[type=text]'), function(input) {
				input.setStyles({'height': input.getSize().y, 'padding-top': 0});
			});
		}
		
		// Submit button
		if ($chk(this.form.getElement('a[name=submit]'))) this.form.getElement('a[name=submit]').addEvent('click', function(e) {
			e.stop();
			var submitbutton = this;
			
			if ($chk(myForm.form.getElement('input[type=file]'))) {
				new Request.JSON({url: myForm.form.action+'?'+myForm.form.toQueryString()+'&file='+$('file').get('value'), onSuccess: function(response) {
				    // Check for error, if ok, proceed to upload
				    if ($defined(response.msg)) {
				    	saveform.result = true;
				    	//alert('save true');
				    } else {
				    	saveform.result = false;
				    	//alert('save false');
				    }
				    myForm.form.getElement('input[type=submit]').click();
				}}).send();
			// Simple submit
			} else {
				myForm.form.getElement('input[type=submit]').click();
			}
		});
		
		// Submit events in Lightbox
		if ($chk(this.form.getParent('div[class*=lightbox]'))) saveform = new SaveForm(this.form);
	},
	
	initSelect: function(item) {
		// Add focus events
		item.getElement('select').addEvent('focus', function() { item.addClass('focus'); });
		item.getElement('select').addEvent('blur', function() { item.removeClass('focus'); });

		item.getElement('select').addEvent('change', function() {
			// Change span text
			item.getElement('span').set('html', this.getElement('option[value='+this.get('value')+']').get('html'));
		});
		// Trigger event
		item.getElement('select').fireEvent('change');
	},
	
	initInputText: function(item) {
		var myForm = this;
		// Check if input has autofill option
		if (item.get('onclick')) {
			item.addEvents({
				// Add key up and focus event to input 
				keyup: function() { var delayedFunction = function(){ myForm.requestAutoFill(item); }; delayedFunction.delay(200); }, 
				focus: function() { var delayedFunction = function(){ myForm.requestAutoFill(item); }; delayedFunction.delay(200); item.store('focus', 1); },
				blur: function() { item.store('focus', 0); }
			});
			$(document.body).addEvent('mouseup', function(){ 
				var delayedFunction = function(){ if (item.getNext('div.autofill') && !item.retrieve('focus')) item.getNext('div.autofill').destroy(); }; delayedFunction.delay(200);
			});
		}
	},
	
	requestAutoFill: function(item) {
		// Request suggestions
		new Request.HTML({url: item.get('onclick').replace(/\'/g, ''), data: myForm.form.toQueryString(), onSuccess: function (responseTree, responseElements) { 
			myForm.displayAutoFill(item, responseElements); 
		}}).send();
	},
	
	displayAutoFill: function(item, elements) {
		// Create or get autofill div
 		if (!$(document.body).getElement('form div.autofill')) var div = new Element('div', {'class': 'autofill'}).inject(item, 'after'); else var div = $(document.body).getElement('form div.autofill');
		// Set width of div to width of input minus 10
		div.setStyle('width', (item.getParent().getStyle('width').toInt() - 10));
		// Set content to response from ajax
		div.empty();
		$each(elements, function(list) {
			if (list.get('tag')=='ul') list.inject(div); 
		});
		// Destroy div if there is no result
		if (!div.getElement('ul')) div.destroy();
		// Add events to each anchors
		else $each(div.getElements('a'), function(anchor){
			// On click, set input value to autofill
			anchor.addEvent('click', function() { item.set('value', this.get('html')); div.destroy(); });
		});
	},
	
	checkbox: function (checkbox) {
		// Get label for the checkbox
		var label = $(document.body).getElement('label[for='+checkbox.get('id')+']');
		label.addClass('checkbox').inject(checkbox, 'after');
		// Check if checkbox is checked
		if (checkbox.get('checked')==true) { label.setStyle('background-position', '0 -24px'); }
		// Change label background
		label.addEvent('click', function() {
			if (checkbox.get('disabled')==false) {
				if (checkbox.get('checked')==true) label.setStyle('background-position', '0 0');
				else label.setStyle('background-position', '0 -24px');
			}
		});
	}
});
