function getCaretStart(obj)
{
	if(typeof obj.selectionStart != "undefined")
	{
		return obj.selectionStart;
	}
	else if(document.selection&&document.selection.createRange)
	{
		var M=document.selection.createRange();

		try
		{
			var Lp = M.duplicate();
			Lp.moveToElementText(obj);
		}
		catch(e)
		{
			var Lp=obj.createTextRange();
		}

		Lp.setEndPoint("EndToStart",M);
		var rb=Lp.text.length;

		if(rb>obj.value.length)
		{
			return -1;
		}

		return rb;
	}
}

function getCaretEnd(obj)
{
	if(typeof obj.selectionEnd != "undefined")
	{
		return obj.selectionEnd;
	}
	else if(document.selection&&document.selection.createRange)
	{
		var M=document.selection.createRange();

		try
		{
			var Lp = M.duplicate();
			Lp.moveToElementText(obj);
		}
		catch(e)
		{
			var Lp=obj.createTextRange();
		}

		Lp.setEndPoint("EndToEnd",M);
		var rb=Lp.text.length;

		if(rb>obj.value.length)
		{
			return -1;
		}

		return rb;
	}
}

function setCaret(obj,l)
{
	obj.focus();

	if (obj.setSelectionRange)
	{
		obj.setSelectionRange(l,l);
	}
	else if(obj.createTextRange)
	{
		m = obj.createTextRange();
		m.moveStart('character',l);
		m.collapse(true);
		m.select();
	}

	obj.focus();
}


//zahlen und punkt, mit den letzten beiden stellen kann man vor- und nachkommastellen bestimmen
//onkeypress="return checkDecimal(this,event,2,2);", wobei die letzten beiden parameter optional sind
//wenn es eine unbegrenzte anzahl an vorkommastellen geben soll, bitte '' uebergeben
function checkDecimal(obj,evt,scale,prec,b_neg)
{
	if (checkDecimal.arguments.length < 3)
		scale	= 11;

	if (checkDecimal.arguments.length < 4)
		prec	= 2;
		
	if (checkDecimal.arguments.length < 5)
		b_neg	= false;

	if(obj.readOnly || obj.disabled)
		return false;

	if(b_neg)
	{
		if(obj["on_blur_auto_add"] != 1)
		{
			var oldonblur = obj.onblur;

			if (typeof obj.onblur != 'function')
			{
				obj.onblur = function(event) 
							 { 
								if(trim(this.value," ") == "-")
									this.value = "";
							 };
			}
			else
			{
				obj.onblur = 	function(event)
								{
									if(trim(this.value," ") == "-")
										this.value = "";

									if(oldonblur)
										return oldonblur();
								}
			}

			obj["on_blur_auto_add"] = 1;
		}
	}

	//[1-9]{1}[0-9]{0,2}(\,[0-9]{3})*(\.[0-9]{0,'+dec+'})?|
	//?|0(\.|\,[0-9]{0,'+prec+'})?|(\.|\,[0-9]{1,'+prec+'})?
	if(scale > 0) 	scale -= 1;

//	var pattern 	= '^([0-9]{1}[0-9]{0,'+scale+'}(\\.[0-9]{0,'+prec+'})?)$';
	var pattern 	= '^([\-0-9]{1}[0-9]{0,'+scale+'}(\\.[0-9]{0,'+prec+'})?)$';
	var reg			= new RegExp(pattern);

	evt 			= (evt) ? evt : window.event;
    var unicode		= (evt.which) ? evt.which : ((evt.keyCode) ? evt.keyCode : 0);

	if(obj != null)
	{
		if(	unicode != 8 &&
			unicode != 35 &&
			unicode != 36 &&
			unicode != 37 &&
			unicode != 38 &&
			unicode != 39 &&
			unicode != 40 &&
			(evt.which == null || (evt.which != null && evt.keyCode != 46 && evt.which != 0))	//firefox hack (bei del ist der keycode 46 und which 0) scheiss teil
		)
		{
//			if(unicode > 31 && (unicode<48||unicode>57))
			if(unicode > 31 && (unicode<48||unicode>57) && ((unicode != 45 && b_neg) || !b_neg))
			{
				if(unicode == 44)
				{
					unicode = 46; 	//wenn wir ein komma reinbekommen, interpretieren und setzen wir dieses als punkt
									//zwecks der calc funktionen
				}

				if((parseInt(prec) > 0 && unicode != 46 /*&& unicode != 44*/) || (parseInt(prec) <= 0))
					return false;
			}
			
			var sText 		= String.fromCharCode(unicode);
			var teststr	 	= "";

			if(document.selection && document.selection.createRange)
			{
				var begCaret	= getCaretStart(obj);	//merke dir die caretStartPos
				var endCaret	= getCaretEnd(obj);		//merke dir die caretEndPos

				var org 		= obj.value;

				var sel 		= document.selection;
				var rgn			= sel.createRange();

				var org			= obj.value;

				rgn.text		= sText;

				teststr			= obj.value;
				obj.value		= org;
			}
			else
			{
				var begCaret	= getCaretStart(obj);	//merke dir die caretStartPos
				var endCaret	= getCaretEnd(obj);		//merke dir die caretEndPos
				var iStart 		= obj.selectionStart;
				teststr			= obj.value.substring(0, iStart) + sText + obj.value.substring(obj.selectionEnd, obj.value.length);
			}
			
			if(!reg.test(teststr))
			{
				//nothing todo
			}
			else
			{
				obj.value		= teststr;
				if(begCaret == endCaret) endCaret++;
			}

			setCaret(obj,endCaret);

			return false;
		}
	}

	return true;
}

//zahlen und punkt, mit den letzten beiden stellen kann man vorkommastellen bestimmen
//functions aufruf z.b.: onkeypress="return numbersonly(this,event,2);", wobei der letzte parameter optional ist
function numbersonly(obj,e,scale)
{
	if (numbersonly.arguments.length < 3)
		scale = 11;
	return checkDecimal(obj,e,scale,0); //hier gibt es nur ganzzahlen...
}

//zahlen und punkt, mit den letzten beiden stellen kann man vor- und nachkommastellen bestimmen
//functions aufruf z.b.: onkeypress="return moneyonly(this,event,2,2);", wobei die letzten beiden parameter optional sind
//wenn es eine unbegrenzte anzahl an vorkommastellen geben soll, bitte '' uebergeben
//siehe checkDecimal
function moneyonly(obj,e,scale,prec)
{
	//11,2 haben wir ueberall auf der db als format
	if (moneyonly.arguments.length < 3)
		scale = 11;

	if (moneyonly.arguments.length < 4)
		prec = 2;

	return checkDecimal(obj,e,scale,prec);
}

function moneyonly2(obj,e,scale,prec,b_neg)
{
	//11,2 haben wir ueberall auf der db als format
	if (moneyonly2.arguments.length < 3)
		scale	= 11;

	if (moneyonly2.arguments.length < 4)
		prec	= 2;
		
	if (moneyonly2.arguments.length < 5)
		b_neg	= true;

	return checkDecimal(obj, e, scale, prec, b_neg);
}

function datumonly(obj,e)
{
	var unicode= e.charCode ? e.charCode : e.keyCode

	if(obj != null)
	{
		 //if the key isn't the backspace key (which we should allow)
		if (unicode!=8)
		{
			if(unicode == 46 && obj.value.indexOf('.') > -1)
				return false;

			if (unicode != 46 && (unicode < 48 || unicode > 57)) //if not a number
				return false //disable key press
		}
	}
}

function limitlength(obj, length)
{
	var maxlength=length

	if(obj != null)
	{
		if (obj.value.length>maxlength)
			obj.value=obj.value.substring(0, maxlength)
	}
}


//onkeypress="return numbersonly(this,event)"
//onkeyup="return limitlength(this, 20)"

function __validDate__(obj)
{
	if(obj != null)
	{
		//dump(obj);

		var date = obj.value;

		if(date.length > 0)
		{
			if(/[^\d.]|(\.\.)/g.test(date))
			{
				obj.value=obj.value.replace(/[^\d/]/g,'');
				obj.value=obj.value.replace(/\/{2}/g,'.');
				return
			}

			if (/^\d{2}$/.test(date))
			{
				obj.value=obj.value+'.';
				return
			}

			if (/^\d{2}\.\d{2}$/.test(date))
			{
				obj.value=obj.value+'.';
				return
			}

			if (!/^\d{1,2}\.\d{1,2}\.\d{4}$/.test(date))
				return

			test1=(/^\d{1,2}\.?\d{1,2}\.\d{4}$/.test(date))

			date	= date.split('.')
			d		= new Date(date[2],date[1]-1,date[0])
			test2	= (1*date[0]==d.getDate() && 1*date[1]==(d.getMonth()+1) && 1*date[2]==d.getFullYear())

			if (test1 && test2)
				return true;
		}
		else
			return true;
				
	}

	return false
}

function validDate(obj)
{
	var bSuccess = __validDate__(obj);
	
	if(!bSuccess)
	{
		setTimeout(	function() 
					{
						this.value = ""
						alert(language_array["Sie haben ein falsches Datum eingegeben (DD.MM.YYYY)!"])
						this.select()
						this.focus()
					}.bind(obj),10);
	}

	return bSuccess
}

function validDateById(id)
{
	var obj = document.getElementById(id);
	return validDate(obj);
}

// check(this.firstname.value,'name','Vorname',this.lastname.value,'name','Nachname',this.email.value,'email','Email',this.street.value,'notempty','Strasse',this.number.value,'notempty','Hausnummer',this.zip.value,'notempty','Postleitzahl',this.city.value,'notempty','Stadt',this.country.value,'notempty','Land',this.phone1.value,'notempty','Telefon',this.phone2.value,'notempty','Telefon',this.gtag.value,'notempty','Geburtstag',this.gmon.value,'notempty','Geburtstag',this.gjahr.value,'notempty','Geburtstag');

function check()
{
	reg_email=/^\w[\w|\.|\-]+@\w[\w|\.|\-]+\.[a-zA-Z]{2,4}$/;
	reg_name=/.+[a-zA-Z´\s].+ü*$/;

	var i,val,desc,feld,reg,err=0;

	var errtxt	= language_array["Es sind Fehler aufgetreten!\n----------------------------------------------------\n"];
	var args	= check.arguments;

	for (i=0; i<(args.length-2); i+=3)
	{
		desc	= args[i+2];
		reg		= args[i+1];
		val		= args[i];

		var	thiswasanerror=false;

		switch(reg)
		{
			case "email":
						if(!reg_email.test(val))
						{
							err++;
							thiswasanerror=true;
						}
						break;

			case "name":
						if(!reg_name.test(val))
						{
							err++;
							thiswasanerror=true;
						}
						break;

			case "notempty":
						if(val=='')
						{
							err++;
							thiswasanerror=true;
						}
						break;

 		}

 		if(thiswasanerror)errtxt+=language_array["-> Bitte überprüfen Sie das Feld: "]+desc+'.\n'

 	}

 	if(err==0)
 	{
 		return true;
 	}
 	else
 	{
		alert(errtxt);
 		return false;
 	}
}

function disable_event()
{
	return false;
}