/*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*/
/*            Validation             */
/*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*/
var validFields = Array();
var validateForm = '';

function validateField(field, type, required) {
	if (field) {
		if (required && field.value.length<=0) {return false;}
		switch( type ) {
	    	case 'year':
	        	if (!field.value.match (/^((19|20)[0-9]{2})?$/)) {return false;}
	        	break;
	    	case 'integer':
	        	if (!field.value.match (/^[0-9]*$/)) {return false;}
	        	break;
	    	case 'number':
		        if (!field.value.match (/^[0-9\., ]*$/) ) {return false;}
		        break;
		    case 'price':
		        if (!field.value.match (/^[0-9\., ]*$/) ) {return false;}
		        break;
		    case 'email':
		        if (!field.value.match (/^([^@]+@([^@\.]{1,}\.)+[^@\.]{2,})?$/i)) {return false;}
		        break;
		    case 'password':
		        if (!field.value.match (/^(.{5,})?$/)) {return false;}
		        break;
	    }
	}
    return true;
}

function markField(field, valid) {
	if (field) {
		if (valid) {
	        field.className = field.className.replace(/fillError/g, '');
	    } else if( field.className.indexOf('fillError')==-1 ) {
	    	field.className = field.className+' fillError';
	    }
	}
}

function disableButton () {
	var disable = false;
	var field;
	for (var iField in validFields) {
		field = document.getElementById(iField);
        valid = validateField(field, validFields[iField][0], validFields[iField][1]);
    	markField(field, valid);

    	if( !valid ) {
    		disable = true;
    	}
    }

    // locate button to disable
	var button;
    if ( document.getElementById ('submit') ) {
        button = document.getElementById ('submit');
    } else if ( document.getElementById ('superHiperMegaSubmit') ) {
        button = document.getElementById ('superHiperMegaSubmit');
    } else {
    	return false;
    }

    button.disabled = disable;

    if( !validateForm ) {
	    window.clearInterval(validateForm);
	   	validateForm = '';
	    if( disable ) {
	    	validateForm = window.setInterval("disableButton ()", 1000);
	    }
	}
}

function blurValid (field, type, required) {
	var valid = validateField(field, type, required);
	
    // return if no changes
    if ( typeof validFields[field]!='undefined' && validFields[field][0]==valid ) {
    	return;
    }
	
    // add entry into array
    validFields[field.id] = Array(type, required);
    // disable submit button if something wrong
    disableButton();
}

function textareaValid(field, maxLength) {
	if (field.value.length > maxLength) {
		if( field.className.indexOf('fillError')<0 ) {
			field.className += ' fillError';
		}

		// cut too long text
		field.value = field.value.substr(0, maxLength);
		// alert userabout to long text
		alert(descriptionexceed1 + ' ' + maxLength + ' ' + descriptionexceed2 + '.');
    } else {
    	field.className = field.className.replace(/fillError/g, '');
    }
}

function textareaLimit( field, maxLength, alertText ) {
	if (field.value.length > maxLength) {
		field.value = field.value.substr(0, maxLength);
		alert( alertText );
    }
}
