var sims = {
	version: "0.1",
	g: function(){
		if(arguments.length > 0){ var id = arguments[0]; }
		if(arguments.length > 1){ var createSimsEl = arguments[1]; } else { createSimsEl = true; }
		if(document.getElementById(id) == undefined){
			return(false);
		}
		el = document.getElementById(id);
		if(createSimsEl && el.simsEl != true){
			el = sims.createSimsEl(el);
		}
		return(el);
	},
	createSimsEl: function(el){
		switch(el.tagName){
			case "FORM":
				el.validate = function(dispErrors){ if(dispErrors == ""){ dispErrors = false; } return(sims.security.validateForm(this,dispErrors)); }
			break;
			
			case "INPUT":
				el.validate = function(){
					if(this.value == "" && this.verplicht == false){
						return(true);
					} else if(this.validateAs != ""){
						return(sims.security.validate(this.value,this.validateAs));
					} else if(!this.validateAs){
						return true;
					}
				}
				if(el.type == "file"){
					el.getExtension = function(){
						filename = el.value;
						if(filename != ""){
							var dot = filename.lastIndexOf("."); 
							if( dot == -1 ){
								return false; 
							}
							var extension = filename.substr(dot + 1,filename.length); 
							return extension.toLowerCase(); 
						} else {
							return false;
						}
					}
				}
			break;
			
			default:
				
			break;
		}
		el.simsEl = true;
		el.insertAfter = function(el){
			var parent = this.parentNode;
			if(parent.lastchild == this) { parent.appendChild(el); } else { parent.insertBefore(el, this.nextSibling); }
		}
		el.remove = function(){
			this.parentNode.removeChild(this);
		}
		return(el);
	},
	addOnloadFunction: function(func){
		var oldonload = window.onload;
		if (typeof window.onload != 'function') {
			window.onload = func;
		} else {
			window.onload = function() {
				if (oldonload) {
					oldonload();
				}
				func();
			}
		}
	},
	
	url: {
		uri: location.href.replace(/\?.*/,''),
		queryString: window.location.search.substring(1),
		queryStringRestore: function() { this.queryString = window.location.search.substring(1); },
		queryStringValue: function(valName){
			var queryString = this.queryString;
			if(queryString != ""){
				var name_valueArray = queryString.split("&");
				for (i=0;i<name_valueArray.length;i++) {
					var name_value = name_valueArray[i].split("=");
					if(name_value[0] == valName){
						return name_value[1];
					}
				}
			}
			return(false);
		},
		queryStringAdd: function(valName,valValue){
			var valName = escape(valName);
			var valValue = escape(valValue);
			var queryString = this.queryString;
			var queryArray = new Array();
			if(queryString != ""){
				var name_valueArray = queryString.split("&");
				for (i=0;i<name_valueArray.length;i++) {
					var name_value = name_valueArray[i].split("=");
					var name = name_value[0];
					var value = name_value[1];
					queryArray[name] = value;
				}
			}
			queryArray[valName] = valValue;
			var newQueryString = "";
			for (name in queryArray){
				newQueryString += name + "=" + queryArray[name] + "&";
			}
			newQueryString = newQueryString.substring(0,newQueryString.length-1);
			this.queryString = newQueryString;
			return(newQueryString);
		},
		fullUrl: function(){ 
			if(this.queryString != ""){
				return(this.uri + "?" + this.queryString);
			} else {
				return(this.uri);
			}
		},
		queryStringRemove: function(valName){
			var valName = escape(valName);
			var queryString = this.queryString;
			var queryArray = new Array();
			if(queryString != ""){
				var name_valueArray = queryString.split("&");
				for (i=0;i<name_valueArray.length;i++) {
					var name_value = name_valueArray[i].split("=");
					var name = name_value[0];
					var value = name_value[1];
					queryArray[name] = value;
				}
			}
			var newQueryString = "";
			for (name in queryArray){
				if(name != valName){
					newQueryString += name + "=" + queryArray[name] + "&";
				}
			}
			newQueryString = newQueryString.substring(0,newQueryString.length-1);
			this.queryString = newQueryString;
			return(newQueryString);
		}	
	},
	//Ajax Functies
	ajax: {
		version: "0.1",
		getResponse: function(url,method,variables){
			xmlHttp = this.getXmlHttpObject();
			if(method == "POST"){
				var poststring = "";
				for (varName in variables){
					poststring += encodeURI(varName) + "=" + encodeURI( variables[varName] ) + "&";
				}
				poststring = poststring.substring(0,poststring.length-1);
				xmlHttp.open('POST', url, false);
				xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
				xmlHttp.setRequestHeader("Content-length", poststring.length);
				xmlHttp.setRequestHeader("Connection", "close");
				xmlHttp.send(poststring);
			} else {
				xmlHttp.open("GET",url,false);
				xmlHttp.send(null);
			}
			return(xmlHttp.responseText);
		},
		execResponse: function(url){
			eval(this.getResponse(url));
		},
		getObj: function(url){
			return(eval('(' + this.getResponse(url) + ')'));
		},
		getXmlHttpObject: function(){
			var xmlHttp=null;
			try{
				// Firefox, Opera 8.0+, Safari
				xmlHttp=new XMLHttpRequest();
			}
			catch(e){
				// Internet Explorer
				try{
					xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
				}
				catch(e){
					xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
				}
			}
			return xmlHttp;
		}
	},
	//Math functies
	math: {
		random: function(min,max){
			return Math.floor(Math.random()*(max-min+1)+min);
		}
	},
	//Security functies
	security: {
		validate: function(value,validateAs){
			var r_filter=/^.*$/;
			switch(validateAs){
				case "url":
					r_filter = /^s?https?:\/\/[-_.!~*'()a-zA-Z0-9;\/?:\@&=+\$,%#]+$/;
				break;
				
				case "pretty_url":
					r_filter = /^[-_.!~*'()a-zA-Z0-9;\/?:\@&=+\$,%#]+$/;
				break;
				
				case "bestandsnaam":
					r_filter = /^[A-Za-z0-9\.\_\(\)\-\ ]+$/;
				break;
			
				case "letters_numbers":
					r_filter = /^([A-Za-z0-9])+$/;
				break;
			
				case "letters_numbers_spaces":
					r_filter = /^([A-Za-z0-9\ ])+$/;
				break;
				
				case "pers_naam":
					r_filter = /^([A-Za-z0-9\ \'\.\-\&\(\)])+$/;
				break;
				
				case "text":
					r_filter = /^([a-zA-Z])+$/;
				break;
				
				case "letters":
					r_filter = /^([a-zA-Z])+$/;
				break;
				
				case "numbers":
					r_filter = /^([0-9])+$/;
				break;
				
				case "email":
					r_filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
				break;
		
				case "telnum":
					r_filter = /^(\+?(\-?\(?\d\)?\-?){10,13})$/;
				break;
				
				case "password":
					r_filter = /^[A-Za-z0-9\.\_\#\@\*\&]+$/;
				break;
				
				case "mysql_zoekterm":
					r_filter = /^([A-Za-z0-9\ \*\-\&\@\.\_])+$/;
				break;
				
				case "postcode":
					r_filter = /^[0-9]{4}\s?[A-Za-z]{2}$/;
				break;
				
				default:
					return(false);
				break;
			}
			return( r_filter.test(value) );
		},
		validateForm: function(el,alertErrors){
			allValid = true;
			foutmelding = "Het formulier is niet verwerkt.\n";
			for( var i = 0; i < el.elements.length; i++ ){
				if( el.elements[i].veldnaam != "" && el.elements[i].verplicht == true && el.elements[i].value == ""){
					foutmelding += "- Het veld '" + el.elements[i].veldnaam + "' is verplicht.\n";
					allValid = false;
					if(typeof el.elements[i].onblur == 'function'){
						el.elements[i].onblur();
					}
					if(typeof el.elements[i].onchange == 'function'){
						el.elements[i].onchange();
					}
				} else if (el.elements[i].value != "" && typeof el.elements[i].validate == 'function' && el.elements[i].validateAs && el.elements[i].validate() == false) {
					foutmelding += "- Het veld '" + el.elements[i].veldnaam + "' is niet juist ingevuld.\n";
					allValid = false;
					if(typeof el.elements[i].onblur == 'function'){
						el.elements[i].onblur();
					}
					if(typeof el.elements[i].onchange == 'function'){
						el.elements[i].onchange();
					}
				} else if(typeof el.elements[i].onblur == 'function'){
					el.elements[i].onblur();
				} else if(typeof el.elements[i].onchange == 'function'){
					el.elements[i].onchange();
				}
			}
			if(allValid == false){
				if(alertErrors){
					alert(foutmelding);
				}
			}
			return(allValid);
		}
	},
	// Google Analitics
	analytics: function(code){
		var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
		document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
		sims.addOnloadFunction(function(){
			try {
				var pageTracker = _gat._getTracker(code);
			} catch(err) {}
		});
	}
}
