//Synetic forms v1.0

var Settings = Settings || {};
Settings.validation = {}

Settings.forms = function(options){ 
	var defaults = { 
		text: false,
		textarea: false,
		select: false,
		radio: false,
		checkbox: false,
		file: false,
		validate: false
	};
	var options = $.extend(defaults, options);  

	if(options.validate){ this.validate(); }
	if(options.text){ this.text(); }
	if(options.file){ this.file(); }
	if(options.radio){ this.radio(); }
	if(options.select){ this.select(); }
	if(options.checkbox){ this.checkbox(); }
	if(options.textarea){ this.textarea(); }

};

// Validator defaults
$.extend($.validator.messages, {
	'required' : 'Dit veld is verplicht.',
	'email' : 'Vul een correct emailadres in.'
});

$.validator.setDefaults({
	highlight: function(element, errorClass, validClass) {		
		var sClass = element.className.split(' ');
		switch (sClass[0]){
			case 'form-checkbox':
				var oCheckboxes = $(element).parents('.form-checkboxes');
				if (oCheckboxes.length > 0) {
					oCheckboxes.removeClass(validClass).addClass(errorClass);
				}
				if( oCheckboxes.length <= 0){
					$(element).prev().removeClass(validClass).addClass(errorClass);
				}
				break;
			case 'form-radio':
				$(element).parents('.form-radios').addClass(errorClass);					
				break;				
			case 'form-file':
				$(element).next().next().addClass(errorClass);
				break;
			case 'form-select':
				$(element).next().addClass(errorClass);
				break;
			default:
				$(element).addClass(errorClass).removeClass(validClass);
				break;
		};
		
	},

	unhighlight: function(element, errorClass, validClass) {
		var sClass = element.className.split(' ');
		switch (sClass[0]){
			case 'form-checkbox':
				var oCheckboxes = $(element).parents('.form-checkboxes');
				if( oCheckboxes.length > 0 ){
				 	oCheckboxes.removeClass(errorClass).addClass(validClass);	
				}
				if( oCheckboxes.length <= 0){
					$(element).prev().removeClass(errorClass).addClass(validClass);	
				}
				break;		
			case 'form-radio':
				$(element).parents('.form-radios').removeClass(errorClass).addClass(validClass);	
				break;							
			case 'form-file':
				$(element).next().next().removeClass(errorClass).addClass(validClass);
				break;
			case 'form-select':
				$(element).next().removeClass(errorClass).addClass(validClass);
				break;
			default:
				$(element).removeClass(errorClass).addClass(validClass);
				break;
		};
	},
	ignoreTitle: true,
	errorPlacement: function(error, element){
		if(element.parents('fieldset').hasClass('collapsed')){
			element.parents('fieldset').removeClass('collapsed');
		}

		var sClass = element[0].className.split(' ');
		switch (sClass[0]) {
			case 'form-file':
			case 'form-select':
				error.appendTo($(element[0].parentNode.parentNode));
				break;
			case 'form-radio':
				error.insertBefore($(element[0].parentNode.parentNode.parentNode.parentNode.childNodes[0]));
				break;
			case 'form-checkbox':
				if ($(element).parents('.form-checkboxes').length > 0) {
					error.insertBefore($(element[0].parentNode.parentNode.parentNode.parentNode.childNodes[0]));
				}
				else {
					error.insertBefore($(element[0].parentNode.childNodes[0]));
				}
				break;
			default:
				error.appendTo($(element[0].parentNode));
				break;
		};
	}
});
jQuery.validator.addMethod('defaultvalue', function(val, el){ return !(val == '' || val == el.title); }, 'Dit veld is verplicht');
jQuery.validator.addMethod('isteacher', function(val, el){
	var bNormalUser = true;
	$.ajax({
		type: 'GET',
		async: false,
		url: 'index.php',
		data: 'action=checkuser',
		beforeSend: function(){ 
			var oValue = $('input[name=' + el.name +']:checked').val();
			return (oValue == 2 ? true : false);
		},
		success: function(sData){ bNormalUser = parseInt(sData); }
	});
	return bNormalUser;
}, 'U moet ingelogd zijn als een docent indien u dit exemplaar wilt bestellen');

// Validate forms
Settings.forms.prototype.validate = function(context){
	var oFormList = $('form', context);
	var oColMain = $('#col-main');
	oFormList.each(function(){
		var oRules = Settings.validation[this.id.toString().replace(/-/g,'_')] || {};
		if(typeof(oRules) == 'object' && oRules['validationstyle'] == 'summary'){
			var oThis = $(this);
			$('<div class="block block-systemmessages error" style="display: none;"><ul></ul></div>').prependTo(oThis);
			var oMessages = $('.block-systemmessages',oThis);
						
			oRules['errorContainer'] = oMessages;
			oRules['errorLabelContainer'] = $('ul', oMessages);
			oRules['wrapper'] = 'li';
		}
		$(this).validate(oRules);
	});
};

// Text
Settings.forms.prototype.text = function(context){
	var oText = $('input.form-text', context);
	if (oText.find('[title]').length > 0) {
		$(oText).each(function(){if (this.value == "") {this.value = this.title;}});
	}

	$(oText).focus(onFocus);
	$(oText).blur(onBlur);

	function onFocus(oEvent){
		if(this.value == this.title){ this.value = ""; }
		$(this).addClass('focus');
	}
	function onBlur(oEvent){
		if(this.value == ""){ this.value = this.title; }
		$(this).removeClass('focus');
	}		
};

// Textarea
Settings.forms.prototype.textarea = function(context){
	var oText = $('textarea', context);
	if (oText.find('[title]').length > 0) {
		$(oText).each(function(){if (this.value == "") {this.value = this.title;}});
	}

	$(oText).focus(onFocus);
	$(oText).blur(onBlur);

	function onFocus(oEvent){
		if(this.value == this.title){ this.value = ""; }
		$(this).addClass('focus');
	}
	function onBlur(oEvent){
		if(this.value == ""){ this.value = this.title; }
		$(this).removeClass('focus');
	}		
};

// Select
Settings.forms.prototype.select = function(context){
	var oSelect = $('select', context);
	if (oSelect.length > 0 && !$.isIE6) {
		$(oSelect).change(onChange);
		$(oSelect).focus(onFocus);
		$(oSelect).blur(onBlur);
	}
	
	function onChange(oEvent){
		var oTarget = oEvent.target || oEvent;
		var oParent = $(oTarget).parent();
		var oLink = $('.select-dummy .text', oParent);
		oLink.html($(':selected',oTarget).text());
	}
	
	var iLength = oSelect.length;
	for(i = 0; i < iLength; i++){ onChange(oSelect[i]); }
		
	function onFocus(oEvent){
		$('.select-dummy', oEvent.target.parentNode).addClass('focus');
	}
	function onBlur(oEvent){
		$('.select-dummy', oEvent.target.parentNode).removeClass('focus');
	}			
};

// Radios
Settings.forms.prototype.radio = function(context){
	var oRadio = $('.radio-dummy', context);	
	if (oRadio.length > 0) {
		
		
		var iLength = oRadio.length;
		for(i = 0; i < iLength; i++){ $(oRadio[i]).toggleClass('checked', $(oRadio[i]).next()[0].checked); }
			
		
		oRadio.click(function(oEvent){
			var oEl = $(this);
			if (!(oEl.hasClass('checked'))) {
				var oInput = oEl.next()[0];
				$(oInput).trigger('click').trigger('change').focus();
				var oRadios = $("input[name='" + oInput.name + "']");
				for (i = 0; i < oRadios.length; i++) {
					$(oRadios[i]).prev().removeClass('checked');
				}
				oEl.addClass('checked');
			}
			return false;
		});
	};
};

// Checkboxes
Settings.forms.prototype.checkbox = function(context){
	var oCheckbox = $('.checkbox-dummy', context);	
	if (oCheckbox.length > 0) {
		
		var iLength = oCheckbox.length;
		for(i = 0; i < iLength; i++){ $(oCheckbox[i]).toggleClass('checked', $(oCheckbox[i]).next()[0].checked); }
			
		oCheckbox.unbind().click(function(oEvent){
			var oInput = $(this).next()[0];
			$(oInput).trigger('click');
			$(this).toggleClass('checked', oInput.checked);

			return false;
		});
	};
};

// File
Settings.forms.prototype.file = function(context){
	var oFile = $('input.form-file', context);
	if (oFile.length > 0) {
		$(oFile).hover(
			function(){ $('a', this.parentNode).toggleClass('hover'); },
			function(){ $('a', this.parentNode).removeClass('hover'); }
		);
		
		$(oFile).change(function(oEvent){ 
			var sFilename = $(oEvent.target).val();
			var oParent = $(oEvent.target).parent();
			if (sFilename === ''){ sFilename = Settings.t('Upload uw bestand'); }
			else{
				sFilename = sFilename.split(/[\/\\]+/);
				sFilename = sFilename[(sFilename.length-1)];
			}
			$('.fileupload-file strong',oParent).text(sFilename);
			
			this.blur();
		});
	};
};
