


ClixForm = function(form){
	this.form = form;
	
	this.form.submit(function(){
		if(ClixForm_Validate(form)){
			var postdata = $(this).serialize();
			alert(postdata);
		}
		return false;
	});
		
	this.InitInputs();
	
}

ClixForm.prototype.InitInputs = function(){
	this.form.valid = 0;
	var elem ;
	
	if(coll = this.form.elements){
		for(var e=0; e<coll.length;e++){
			elem = $(coll[e]);
			if(required = elem.getAttribute('required')) elem.required = required;
			if(vartype = elem.getAttribute('vartype')) elem.vartype = vartype;
			if(elem.required || elem.vartype) {
				elem.blur(function(){
					ValidateInput(this);				
				});
			}
			else{
				elem.valid = true;	
			}
		}
	}
}

ClixForm.prototype.ValidateInput = function(elem){
	var current_state = elem.valid ? 1 : 0;
	var valid = true;
	
	switch(elem.required){
		case "true":
		case "required":
		case "1":
			switch(elem.tagName.toLowerCase()){
				case "input":
				case "select":
					valid = elem.value.trim().length ? 1 : 0;
					break;
				
				default:
					break;
			}
			break;

		default:
			break;
	}
	
	if(valid) valid = this.UpdateVartype(elem);
	
	if(! valid && typeof elem.valid != 'undefined'){
		if(elem.onValidateFailed) {
			ClixMessage.show('Form', elem.onValidateFailed);
		}
	}
	
	elem.valid = valid;
//	elem.setAttribute('valid',valid);
	
	var result = valid - current_state;
	
	return result  // als nu c=0,v=1:r=1; c=1,v=0:r=-1;c=1,v=1:r=0
}

ClixForm.prototype.UpdateVartype = function(elem){
	var valid = true;
	
	switch(elem.vartype){
		case 'decimal':
		case 'valuta':
			var value = elem.value.replace(/[a-zA-Z]/g,'');
			value = value.replace(/,/g,'.');
			value = value.trim();
			
			elem.value = currency(parseFloat(value.length ? value : 0));
			break;
		
		case 'integer':
			var value = elem.value.replace(/[a-zA-Z]/g,'');
			value = value.replace(/,/g,'.');
			value = value.trim();
			
			elem.value = value.length ? parseInt(value) : 0;		
			break;	
		
		case 'posinteger':
			var value = elem.value.replace(/[a-zA-Z-]/g,'');
			value = value.replace(/,/g,'.');
			value = value.trim();
			
			elem.value = value.length ? parseInt(value) : '';		
			break;	
		
		case 'accountnr':
			elem.value = elem.value.replace(/[^0-9]/g,'').substr(0,9);
			break;	
		
		case 'time':
			if(elem.value && elem.value.length){
				var value = elem.value.replace(/[\.,]/g,':').split(':');
				if(value[0] && value[0].substr(0,1) == "0") value[0] = value[0].substr(1,1);
				if(value[1] && value[1].substr(0,1) == "0") value[1] = value[1].substr(1,1);
				var H = (value[0]) ? Math.min(23,parseInt(value[0].replace(/[^0-9]/g,''))) : 0;
				var i = (value[1]) ? Math.min(59,parseInt(value[1].replace(/[^0-9]/g,''))) : 0;
				
				if(i<10) i = '0' + i;				
				elem.value = H + ':' + i;
			}
			break;	
		
		case 'duration':
			if(elem.value && elem.value.length){
				var value = elem.value.replace(/[\.,]/g,':').split(':');
				if(value[0] && value[0].substr(0,1) == "0") value[0] = value[0].substr(1,1);
				if(value[1] && value[1].substr(0,1) == "0") value[1] = value[1].substr(1,1);
				
				var H = value[0] ? parseInt(value[0].replace(/[^0-9]/g,'')) : 0;
				var i = value[1] ? Math.min(59,parseInt(value[1].replace(/[^0-9]/g,''))) : 0;
				
				if(i<10) i = '0' + i;				
				elem.value = H + ':' + i;
			}
			break;	
		
		case 'phone':
			elem.value = elem.value.replace(/[^0-9\(\)\+\-]/g,'').trim();
			break;
		
		case 'initials':
			var value = elem.value.trim()
			if(value.length){
				var value = elem.value.toUpperCase();
				value = value.trim().replace(/ /g,'.').replace(/[^a-zA-Z\.]/g,'').replace(/\.\./g,'.');
				if(value.indexOf('.') == -1){
					value = value.split('');
				}
				else{
					value = value.split('.');
					for(var i=0;i<value.length;i++){
						if(value[i].length > 1) value[i] = value[i].substr(0,1) + value[i].substr(1).toLowerCase();
					}
				}
				value = (value.join('.') + '.').replace('..','.');
			}
			elem.value = value;
			break;	
		
		case 'lastname':
			var value = elem.value.trim();
			if(value.length){
				value = value.split('-');
				for(var i=0;i<value.length;i++){
					value[i] = value[i].substr(0,1).toUpperCase() + value[i].substr(1).toLowerCase();
				}
				value = value.join('-');
				
				value = value.split(' ');
				for(var i=0;i<value.length;i++){
					value[i] = value[i].substr(0,1).toUpperCase() + value[i].substr(1);
				}
				value = value.join(' ');
			}
			elem.value=value;
			break;	
			
		case 'name':
			var value = elem.value.trim();
			value = value.substr(0,1).toUpperCase() + value.substr(1);
			value = value.split(' ');
			for(var i=0;i<value.length;i++){
				value[i] = value[i].substr(0,1) + value[i].substr(1).toLowerCase();
			}
			elem.value = value.join(' ');
			break;	
		
		case 'text':
			elem.value = elem.value.replace(/[^a-zA-Z '\.]/g,'');
			break;	
		
		case 'ltext':
			elem.value = elem.value.toLowerCase();
			break;
		
		case 'utext':
			elem.value = elem.value.toUpperCase();
			break;	
		
		case 'url':
			elem.value = elem.value.replace('http://','').trim();
			if(elem.value.length) elem.value = 'http://' + elem.value;
			break;	
			
		case "email":
			elem.value = elem.value.trim();
			valid = !( elem.value.length && ! is_email(elem.value));
			break;

		default:
			valid = true;
			break;
	}
	
	return valid;
	
}

ClixForm_Validate = function(form){
	var result = true;
	var subject = 'form_validation';
	var msg = '<strong>' + 'form_validate_error' + '</strong><br/><br/>';
	if(coll = form.elements){
		for(var e=0; e<coll.length;e++){
			elem = $(coll[e]);
			if(! elem.valid && (elem.required || elem.vartype)){
				label = elem.form.down('*[for="' + elem.name + '"]');
				if(!label){
					label = elem.up('td').previous('th');
				}
				msg += label.innerHTML + '<br/>';
				result = false			
			}
		}
	}

	if(! result ){
		alert(msg);
	}
	
	return result;
}



