var TipForm = new Class({
	Implements: [Options, Events],
	options: {
		form : 'form333669163'
	},
	formObj : null,
	defaultValues : null,
	initialize: function(options){
		
		this.setOptions(options);
		this.formObj = $(this.options.form);
		this.defaultValues = new Array();
		this.run();
		
		return this;
	},
	run: function() {
		var self = this;
		var inputs = new Array();
		// Achieve all the input fields and textarea
		if (!this.formObj) {
			return;
		}
		inputs.combine(this.formObj.getElements('input[type=text]'));
		inputs.combine(this.formObj.getElements('input[type=password]'));
		inputs.combine(this.formObj.getElements('select'));
		
		inputs.combine(this.formObj.getElements('textarea'));
		inputs.each(function(el, key) {
			if (el.type == 'text' || el.type== 'password' || el.get('tag') == 'textarea' || el.get('tag') == 'select') {
				if (el.get('value') == '') {
					el.set('value', '');
				}
				

				this.defaultValues[key] = this.getLabel(el);
				if ($chk(this.defaultValues[key])) {
					this.defaultValues[key].addEvent('click', function(e) {
						
						this.addClass('hidden');
						var li = this.getParent('li');
						var input = '';
						if ($chk(li)) {
							input = li.getElement('input') || li.getElement('select');
						} else {
							input = this.getNext('input');
						}
						
						input.focus();
					});


				}
			} else {
				var label = this.getLabel(el);
				if ($chk(label)) {
					label.addClass('hidden');
				}
			}
		}.bindWithEvent(this));

		
		inputs.each(function(el, key) {
			if (el.type == 'text' || el.type== 'password' || el.get('tag') == 'textarea' || el.get('tag') == 'select') {
				if (el.value != '') {
					if ($chk(this.defaultValues[key])) {
						this.defaultValues[key].addClass('hidden');
					}
				}
				if (el.get('type') == 'text' || el.get('type') == 'password') {
					el.addClass('text');
				}
				// Add focus event to remove the default label text
				el.addEvent('focus', function(e) {
					if (el.get('value') == '') {
						if ($chk(this.defaultValues[key])) {
							//this.defaultValues[key].addClass('hidden');
                                                        this.setLabelStatus(this.defaultValues[key], 'focus');
						}
					}
					el.addClass('active');
				}.bindWithEvent(this));

				el.addEvent('keyup', function(e) {
					if ($chk(this.defaultValues[key])) {
							this.setLabelStatus(this.defaultValues[key], 'keydown');
					}
					if (el.get('value').length == 0 && el.get('type') != 'select') {
						if ($chk(this.defaultValues[key])) {
							//this.defaultValues[key].addClass('hidden');
                                                        this.setLabelStatus(this.defaultValues[key], 'focus');
						}
					}

				}.bindWithEvent(this));

				if (el.get('tag') == 'select') {
					el.addEvent('change', function(e) {
					if ($chk(this.defaultValues[key])) {
							this.setLabelStatus(this.defaultValues[key], 'change');
					}

					}.bindWithEvent(this));
				}


				// Adds blur event to retrieve the default label text if nothing is input
				el.addEvent('blur', function(e) {
					if(el.value == '') {
						if (this.defaultValues[key]) {
							this.setLabelStatus(this.defaultValues[key], 'blur');
						}
					}
					el.removeClass('active');
				}.bindWithEvent(this));
			}

		}.bindWithEvent(this));
		return this;
	},
	setLabelStatus: function(el, status) {
		if (!$chk(el)) return;
		if(status == 'focus') {
			el.addClass('fade');
			el.removeClass('hidden');
		} else if (status == 'keydown' || status == 'change') {
			el.addClass('hidden');
			el.removeClass('fade');
		} else if (status == 'blur') {
			el.removeClass('hidden');
			el.removeClass('fade');
		}
	},
	getLabel: function(input) {
		var inputLabel = input.getPrevious('label');
		if ($chk(inputLabel)) {
			return inputLabel;
		}
		var inputLi = input.getParent('li');
		//var inputLi = inputDiv.parentNode;
		if ($chk(inputLi)) {
			inputLabel = inputLi.getElement('label');
			return inputLabel;
		}
		return null;
	},
	getLabelText: function(label) {
		return label.get('text');
	},
	hideLabel: function(input) {
		var label = this.getLabel(input);
		label.hide();
	},
	showLabel: function(input) {
		var label = this.getLabel(input);
		label.show();
	}
});
