/*

	Basic Javascript functions
	
	copyleft 2006-2008 by October Labs GmbH
	feel free to use this
	
	Version 1.2

*/

// work
if (! window.console || !console.firebug) {
	var names = ["log", "debug", "info", "warn", "error", "assert", "dir", "dirxml",
	"group", "groupEnd", "time", "timeEnd", "count", "trace", "profile", "profileEnd"];

	window.console = {};
	for (var i = 0; i < names.length; ++i)
		window.console[names[i]] = function() {}
}

var Verify = Class.create({

	errorString: '',
	options: { 
			regex : '',
			error_msg: '',
			convert_function: null,
			verify_function: null
		},

	  initialize: function(options) {
			this.errorString = '';
			Object.extend(this.options, options || { });
	  },
  
	regex: function(dom_field) {

		this.errorString = '';
		// pre convert data
		if (Object.isFunction(this.options.convert_function)) {
			dom_field.value = this.options.convert_function(dom_field.value);
		}
		// verify input
		var vvalue = dom_field.value;
		var regex = new RegExp(this.options.regex);
	
		if ( ! regex.test(vvalue) || ( Object.isFunction(this.options.verify_function) && ! this.options.verify_function(dom_field.value) ) ) {
			if (this.options.error_msg == '' ) {
				this.errorString = 'Ungültige Daten.';
			} else {
				this.errorString = this.options.error_msg;
			}
		}

		return this.isError();
  	},  
	
	text: function (txt) {
		this.errorString = '';
		if (txt.length < 1) {
			this.errorString += 'Die Angaben sind nicht ausreichend.';
		}
		return this.isError();
	},
	
	name: function (txt) {
		this.errorString = '';
		if (txt.length < 2) {
			this.errorString += 'Es muss eine Name angeben werden.';
		}
		return this.isError();
	},
			
	number: function (num) {
		this.errorString = '';
		var regex = new RegExp("^\\d+$");
		if (! regex.test(num)) {
			if (num =='') {
				this.errorString += 'Es muss eine Zahl angeben werden.';
			} else {
				this.errorString += num+' ist keine Zahl.';
			}
		}
		return this.isError();
	},
	
	checkbox: function (val) {
		this.errorString = '';
		if (val != true) {
			this.errorString += 'Das Ankreuzfeld mus ausgewählt sein.';
		}
		return this.isError();
	},	

	email: function (email) {
		this.errorString = '';
		var strReg = "^([a-zA-Z0-9_\\.\\-])+\@(([a-zA-Z0-9\\-])+\.)+([a-zA-Z0-9]{2,4})+$";
		var regex = new RegExp(strReg);
		if (! regex.test(email)) {
			if (email == '') {
				this.errorString += 'Es muss eine E-Mail Adresse angeben werden.';
			} else {
				this.errorString += email+' ist keine gültige E-Mail Adresse.';
			}
		}
		return this.isError();
	},
	
	datum: function (test_datum) {
		this.errorString = '';
		var strReg = "^\\d\\d?\\.\\d\\d?\\.\\d\\d\\d\\d+$";
		var regex = new RegExp(strReg);
		return(regex.test(test_datum));
	},

	qutocorrectPhone: function (nummer, land) {
		this.errorString = '';
		var strReg = "^\\+\\d\\d+(( \\d+)+|\\d+)$";
		var regex = new RegExp(strReg);
		return(regex.test(nummer));
	} ,

	phone: function (nummer) {
		this.errorString = '';
		var strReg = "^\\+\\d\\d+(( \\d+)+|\\d+)$";
		var regex = new RegExp(strReg);
		return(regex.test(nummer));
	} ,
	
	stdName: function (str) {
		this.errorString = '';
		var strReg = "^[a-zA-Z0-9\\&\\,\\.\\+\\- ]+$";
		var regex = new RegExp(strReg);
		return(regex.test(str));
	},
	
	plz: function (plz, land) {
		this.errorString = '';
		if (land == "DE" || land == "de" ) {
			var strReg = "^[0-9][0-9][0-9][0-9][0-9]$";
		} else {
			var strReg = "^[0-9][0-9][0-9][0-9]";
		}
		var regex = new RegExp(strReg);

		return(regex.test(plz));
	},
	
	isError: function() {
		return (this.errorString == "") ? true : false;
	},
		
	getError: function() {
		return this.errorString;
	}

});



Element.addMethods({  

  appendText: function(element, text) {
		element = $(element);
		
		var textNode = document.createTextNode(String.interpret(text));
		element.appendChild(textNode);
		/*		
		try
		  {
				element.appendChild(textNode);
		  }
		catch(err)
		  {
		  txt="E Type : "  + typeof(element)  +  "\n";
		  txt+="E ID : "  + element.id  +  "\n";
		  txt+="Error description: " + err.description + "\n\n";
		  txt+="Click OK to continue.\n\n";
		  alert(txt);
		  }
		 */	
		return element;
  },

  removeText: function(element) {
		element = $(element);
		while (element.hasChildNodes()) {
			
			var delNode = element.firstChild;
			element.removeChild(delNode);
		}
		return element;
  },
  
  getPost: function(element, setParamName) {
		element = $(element);
		switch (element.type) {
			case "text":
			case "select-one":
			case "textarea":
			case "password":
				var paramName = element.name;
				if (setParamName && setParamName.length > 0)
					paramName = setParamName;
			break;
			default:
				console.warn ("convert %s unknown type %s to post.", element.name, element.type);
		}
		var result = paramName + "=" + encodeURIComponent(String.interpret(element.value));
		
		return result;
  }
  
});
