/* ---------------- Regular Expressions ------------------- */
var regEx = new Array();
regEx['email']="^(([a-zA-Z0-9_\\-\\.]+)@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.)|(([a-zA-Z0-9\\-]+\\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\\]?))?$";
regEx['url']="^(http|https|ftp)\://[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(:[a-zA-Z0-9]*)?/?([a-zA-Z0-9\-\._\?\,\'/\\\+&%\$#\=~])*$";
regEx['currency']="^([0-9]{1,3}((,|\\.)[0-9]{1,2})?)?$";
regEx['date']="^(([0-9]{1,2})\\.){2}([0-9]{4})$";
regEx['decimal']="^([0-9]{1,7}((,|\\.)([0-9]{1,2})?)?)?$";
regEx['password']="^(([a-zA-Z0-9_\\-]){6,12})?$";
regEx['username']="^(([a-zA-Z0-9_\\-]){4,12})?$";
regEx['integer']="^[0-9]*$";
regEx['integerX']="^[0-9Xx]*$";	// integer mit X für EAN
regEx['text']="^[a-zA-ZäöüÄÖÜß\\-\\.\\ ]{1,99}$";
regEx['textNoSpaces']="^[a-zA-ZäöüÄÖÜß0-9\\-\\.\\_]*$";
regEx['houseNo']="^[0-9]{1,5}([a-zA-Z]{0,1}|\ 1/2)$";
regEx['alphanumeric']="^[a-zA-ZäöüÄÖÜß\\ ]{2,99}$";
regEx['notNull']="^[^0]$";
regEx['noHTML']="^[^<@>]*$";
regEx['noNumber']="[^0-9]";
regEx['title']="^[^<@>\"]*$";


function openNewWindow(url,height,width,name){
	if(!height) var height = 700;
	if (!width)	var width = 950;
	if (!name)	var name = 'Fenster';

	if (url.indexOf(".doc") != -1 || url.indexOf(".pdf") != -1){
		var params="menubar=yes,toolbar=no,height="+height+",width="+width+",resizable,scrollbars=yes,status=no";
	}
	else{
		var params="menubar=no,toolbar=no,height="+height+",width="+width+",resizable,scrollbars=yes,status=no";
	}

	win1=window.open(url,name,params);
	win1.focus();
}





/* ruft edithandler-window auf, nachdem Löschen bestätigt wurde */
function deleteObject(url,height,width,name) {
	Check = confirm("Wollen Sie dieses Objekt wirklich löschen?");
	if(Check == true) {
		var params="menubar=no,toolbar=no,height=100,width=400,resizable=no,scrollbars=no,status=no";

		win1=window.open(url,name,params);
		win1.focus();
	}
}


/* selektiert den übergebenen selectValue aus der übergebenen selectBox */
function optionSelect(selectName,selectValue){
	document.getElementsByName(selectName)[0].value = selectValue;
}

/* checkBox als gecheckt markieren */
function checkboxCheck(selectName){
	document.getElementsByName(selectName)[0].checked = true;
}

/* überprüft, ob das angegebene Datum gueltig ist, Format: YYYY-MM-DD*/
function isValidDate (datum){
	//(Schritt 1) Fehlerbehandlung
	if (!datum) return false;

	datum=datum.toString();

	//(Schritt 2) Aufspaltung des Datums in ein Array
 	datum=datum.split("-");
	if (datum.length!=3) return false;

	//(Schritt 3) Entfernung der fuehrenden Nullen und Anpassung des Monats
	datum[2]=parseInt(datum[2],10); 		// Tag
 	datum[1]=parseInt(datum[1],10)-1;		// Monat

	//(Schritt 4) Behandlung Jahr nur zweistellig
	if (datum[0].length==2) datum[0]="20"+datum[0];

	//(Schritt 5) Erzeugung eines neuen Dateobjektes
	var kontrolldatum=new Date(datum[0],datum[1],datum[2]);

	//(Schritt 6) Vergleich, ob das eingegebene Datum gleich dem JS-Datum ist
	if (kontrolldatum.getDate()==datum[2]
			&& kontrolldatum.getMonth()==datum[1]
			&& kontrolldatum.getFullYear()==datum[0])
    	return true;
    else
    	return false;

}

//globale JS-Variable, die anzeigt, ob das gerade geprüfte Feld gültig ist
var valueOK=true;

// Prüft die übergebenen Werte anhand von Regular Expressions
// umrahmt das Feld ROT und entfernt danach Umrandung wieder
// bei onblur aufrufen!
function testRegEx(fieldName,regExType,message,b_mandatory){
	//default: kein Pflichtfeld
	if(!b_mandatory){
		b_mandatory = 0;
	}

	thisField=document.getElementsByName(fieldName)[0];

	// wenn kein Pflichtfeld und TextFeld ist leer >> OK
	if(b_mandatory == 0 && !thisField.value.length){
		valueOK = true;
	// wenn Pflichtfeld und TextFeld ist leer >> False
	}else if(b_mandatory == 1 && !thisField.value.length){
		valueOK = false;
	// ansonsten Regex prüfen
	}else{
		valueOK = thisField.value.match(regEx[regExType]);
	}


	if(!valueOK){
		alert(message);
		origClassName=thisField.className
		thisField.className=thisField.className + " redBorder";
		thisField.focus();
		valueOK=false;
		return false;
	}else{
		//roten Rahmen wieder entfernen
		thisField.className=thisField.className.replace(/ redBorder/, "");
		valueOK=true;
		return true;
	}
}





// Prüft ob die Checkbox markiert ist
// umrahmt das Feld ROT und entfernt danach Umrandung wieder
// bei onblur aufrufen!
function testChecked(fieldName,message){

	thisField=document.getElementsByName(fieldName)[0];

	// wenn checkbox markiert ist >> OK
	if(thisField.checked){
		valueOK = true;
	// ansonsten
	}else{
		valueOK = false;
	}


	if(!valueOK){
		alert(message);
		origClassName=thisField.className
		thisField.className=thisField.className + " redBorder";
		thisField.focus();
		return false;
	}else{
		//roten Rahmen wieder entfernen
		thisField.className=thisField.className.replace(/ redBorder/, "");
		return true;
	}
}




// Die Funktion testet die EAN-Nummer und trägt ggf. einen Standard-Wert ein
function testEAN(fieldName){
	thisField=document.getElementsByName(fieldName)[0];

	// alle nicht-Zahlen entfernen
	thisField.value=thisField.value.replace(/\D+/g,"");

	// Wert pruefen
	if(!thisField.value.length){
		valueOK = false;
	// ansonsten Regex prüfen
	}else{
		valueOK = thisField.value.match(regEx['integer']);
	}

	if(!valueOK){
		newEAN = confirm("Bitte geben Sie eine gültige EAN-Nummer an. " +
							"Die Nummer finden Sie unterhalb des Strich-Codes auf der Rückseite Ihres Artikels. "+
							"Sie ist notwendig, um den Artikel eindeutig zu identifizieren.\n\n"+
							"Bitte geben Sie ausschließlich Zahlen, keine Striche oder Leerzeichen an.\n\n"+
							"Möchten Sie OHNE Eingabe der EAN-Nummer fortfahren ?");
		if(newEAN == true){
			thisField.value="9999999999999";
			//roten Rahmen wieder entfernen
			thisField.className=thisField.className.replace(/ redBorder/, "");
			valueOK=true;
			return true;
		}else{
			origClassName=thisField.className
			thisField.className=thisField.className + " redBorder";
			thisField.focus();
			valueOK=false;
			return false;
		}
	}else{
		//roten Rahmen wieder entfernen
		thisField.className=thisField.className.replace(/ redBorder/, "");
		valueOK=true;
		return true;
	}
}


// funktion loopt über alle Felder eines Formulares und
// führt ggf. die Funktion im onchange-Handler aus, normalerweise testRegEx()
// valueOK ist eine globale Variable, die von der onChange-Funktion gesetzt werden muss
function testFields(formName){
	var i = 0;
	while(document[formName].elements[i]){
		if (document[formName].elements[i].onchange && document[formName].elements[i].type != "file"){
			document[formName].elements[i].onchange();
			if(valueOK == false)	return false;
		}
		i++;
	}
	return true;
}

function textarealength(number,field,info) {
	len = field.value.length;

	if (len > number){
		alert ("Es dürfen maximal "+number+" Zeichen eingegeben werden. Sie verwenden zur Zeit "+len+" Zeichen.");
		field.value=field.value.substring(0,number);
		len=field.value.length;
	}

	// ggf. Info-Feld füllen
	if(info){
		document.getElementById(info).innerHTML=len;
	}
}

function oneToThreeCatsChecked(formName){
	var i = 0;
	var checked=0;
	while(document[formName].elements[i]){
		if (document[formName].elements[i].name.search(/cat/) == 0 &&
			document[formName].elements[i].checked){
			checked ++;
		}
		i++;
	}

	if(checked == 0){
		alert("Bitte wählen Sie mindestens eine Kategorie aus. Sie haben keine Kategorie gewählt");
		valueOK=false;
		return false;
	}

	if(checked > 3){
		alert("Bitte wählen Sie nicht mehr als 3 Kategorien aus. Sie haben zur Zeit " + checked + " Kategorien gewählt.");
		valueOK=false;
		return false;
	}
	valueOK=true;
	return true;
}


function closeAndReload(){
	if(window.opener){
		try{
			window.opener.location.reload();
			window.opener.focus();
		}
		catch(e) {}
	}
	window.close();
}



/* *************************************************
		Ajax-HTTP-Request
***************************************************
Quelle: http://developer.mozilla.org/de/docs/AJAX:Getting_Started
*/

function fct_createHTTPRequest(){
	httpRequest = false;

    if (window.XMLHttpRequest) { // Mozilla, Safari,...
        httpRequest = new XMLHttpRequest();
        if (httpRequest.overrideMimeType) {
            httpRequest.overrideMimeType('text/xml');
        }
    } else if (window.ActiveXObject) { // IE
        try {
            httpRequest = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
            try {
                httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e) {}
        }
    }

    if (!httpRequest) {
        alert('Es kann keine XMLHTTP-Instanz erzeugt werden.');
        return false;
    }

    return httpRequest;
}


/* *************************************************
		Funktion berechnet die x-Koordinate
		der linken oberen Ecke eines Elements
*************************************************** */
function getXPos(element) {
	if (element.offsetParent)
		leftpos = element.offsetLeft+getXPos(element.offsetParent);
	else
		leftpos = element.offsetLeft;
	return leftpos;

}

/* *************************************************
		Funktion berechnet die y-Koordinate
		der linken oberen Ecke eines Elements
*************************************************** */
function getYPos(element) {
	if (element.offsetParent)
		toppos = element.offsetTop+getYPos(element.offsetParent);
	else
		toppos = element.offsetTop;
	return toppos;

}


function replaceQuotes(field){
	field.value=field.value.replace(/'/g,"");
}



function highlight(fieldName){
	thisField=document.getElementsByName(fieldName)[0];
	thisField.className=thisField.className + " redBorder";
	thisField.focus();
}



function checkBoxSwitch(activatorName,checkBoxesName){

	var checkBoxes = document.getElementsByName(checkBoxesName);
	var activator = document.getElementsByName(activatorName)[0];

	for(var i = 0; i < checkBoxes.length; i++){
		checkBoxes[i].checked = activator.checked;
	}
}
