//*******************************************************
//****************** AJAX FUNCTIONS* ********************
//*******************************************************


/**
*excute an request and dumps the request-response to the handler
*if the request-stats switch to ready
*/
function doRequest(url,handler,statusBar,query) {
	var request;
	
	function _request_dump() {
		switch(request.readyState) {
			case 1:
				if (statusBar) showStatusBar(1);
				break;
			case 2:
				if (statusBar) showStatusBar(2);
				break;
			case 3:
				if (statusBar) showStatusBar(3);
				break;
			case 4:
//				alert(4);
				if (statusBar) showStatusBar(-1);
				if(request.status!=200) {    
					alert('The request returned an error:'+request.status); 
				}else{
					handler(request.responseXML);
				}
			break;
			default:
			break;
		}
	};
	
	//construct the request object
	if (window.XMLHttpRequest) { 
		request = new XMLHttpRequest(); //Mozilla, Safari,Opera,...
	} else if (window.ActiveXObject) { 
		try {
			request = new ActiveXObject("Msxml2.XMLHTTP"); //IE 5
		} catch (e) {
			try {
				request = new ActiveXObject("Microsoft.XMLHTTP"); //IE 6
			} catch (e) {}
		}
	}

	if (!request) {
		alert('Cannot create an Instance of XMLHTTP-Request');
		return false;
	}else{
		request.onreadystatechange=_request_dump
		if (query == null) request.open("get",url,true);
		else request.open("post",url,true);
		request.send(query);
	}	     
}


function showStatusBar(status) {
	if (status == -1) {
		hideById("ajax_status_bar");
		document.getElementById("ajax_status_bar").getElementsByTagName("span")[0].style.visibility = "hidden";
		document.getElementById("ajax_status_bar").getElementsByTagName("span")[1].style.visibility = "hidden";
		document.getElementById("ajax_status_bar").getElementsByTagName("span")[2].style.visibility = "hidden";
		return;
	}
	showById("ajax_status_bar");
	document.getElementById("ajax_status_bar").getElementsByTagName("span")[status-1].style.visibility = "visible";
}

//*******************************************************
//***************** RESPONSE HANDLER ********************
//*******************************************************

//load locale events and show them
//used in templates_html/magazine_events.jsp
function eventLoadHandler(xmldocument) {
	var groups = xmldocument.getElementsByTagName("content")[0].getElementsByTagName("component")[0].getElementsByTagName("group");
	var group = getXMLElementById(groups,"eventlist_2");
	var events = group.getElementsByTagName("group");
	var holder = document.getElementById("show_local_events_area");
	
	for (var n=0;n<events.length;n++) {
		//create new event-structure
		//headline
		var head = document.createElement("h3");
		holder.appendChild(head);
		//Text
		var eventText = document.createElement("p");
		holder.appendChild(eventText);
		//Event-Table
		var eventTable = document.createElement("div");
		eventTable.setAttribute("class","event_table");
		holder.appendChild(eventTable);
		//Row ... Date
		div = document.createElement("div");
		div.setAttribute("class","row");
		eventTable.appendChild(div);
			//firstcol
			var dateDesc = document.createElement("div");
			dateDesc.setAttribute("class","cell first_col");
			div.appendChild(dateDesc);
			//secondcol
			var dateCell = document.createElement("div");
			dateCell.setAttribute("class","cell second_col");
			div.appendChild(dateCell);
		//Row ... Location
		div = document.createElement("div");
		div.setAttribute("class","row");
		eventTable.appendChild(div);
			//firstcol
			var locDesc = document.createElement("div");
			locDesc.setAttribute("class","cell first_col");
			div.appendChild(locDesc);
			//secondcol
			var locCell = document.createElement("div");
			locCell.setAttribute("class","cell second_col");
			div.appendChild(locCell);
		//Row ... Internet
		var netRow = document.createElement("div");
		netRow.setAttribute("class","row");
		//append this row only if we have content
			//firstcol
			var netDesc = document.createElement("div");
			netDesc.setAttribute("class","cell first_col");
			netRow.appendChild(netDesc);
			//secondcol
			var netCell = document.createElement("div");
			netCell.setAttribute("class","cell second_col");
			netRow.appendChild(netCell);
		//loading the content		
		var content = events[n].getElementsByTagName("text");
		for (var c=0;c<content.length;c++) {
			var id = content[c].getAttribute("id");
			//load text-content
			var text = document.createTextNode("");
			var texts = content[c].childNodes;
			for (var i=0;i<texts.length;i++) {
				text.appendData(texts[i].data);
			}
			
			//add Text-Content
			if (id == "head_txt") {	head.appendChild(text); }
			else if (id == "copy_txt") { eventText.appendChild(text); }
			else if (id == "desc0_txt") { dateDesc.appendChild(text); }
			else if (id == "content0_txt") { dateCell.appendChild(text); }
			else if (id == "desc1_txt") { locDesc.appendChild(text); }
			else if (id == "content1_txt") { locCell.appendChild(text); }
			else if (id == "desc2_txt") { netDesc.appendChild(text); }
			else if (id == "content2_txt") { netDesc.appendChild(text); eventTable.appendChild(netRow); }
		}
	}
}	//eventLoadHandler

function getXMLElementById(tagarray,id) {
	for (var n=0;n<tagarray.length;n++) {
		if (tagarray[n].getAttribute("id") == id) return tagarray[n];
	}
	return null;
}

function SuchenUndErsetzen(QuellText, SuchText, ErsatzText)
        {   // Erstellt von Ralf Pfeifer
            // Fehlerpruefung
            if ((QuellText == null) || (SuchText == null))           { return null; }
            if ((QuellText.length == 0) || (SuchText.length == 0))   { return QuellText; }

            // Kein ErsatzText ?
            if ((ErsatzText == null) || (ErsatzText.length == 0))    { ErsatzText = ""; }

            var LaengeSuchText = SuchText.length;
            var LaengeErsatzText = ErsatzText.length;
            var Pos = QuellText.indexOf(SuchText, 0);

            while (Pos >= 0)
            {
                QuellText = QuellText.substring(0, Pos) + ErsatzText + QuellText.substring(Pos + LaengeSuchText);
                Pos = QuellText.indexOf(SuchText, Pos + LaengeErsatzText);
            }
            return QuellText;
        }

function dealerLoadHandler(xmldocument) {
	var groups = xmldocument.getElementsByTagName("content")[0].getElementsByTagName("group");
	var group = getXMLElementById(groups,"dealer_result");
//	var xmlroot = getXMLElementById(xmldocument.getElementsByTagName("content")[0].getElementsByTagName("group"),"dealer_result");
	var d = document.getElementById("dealer_search_result");

	var groups = group.getElementsByTagName("group");
	var holder = document.getElementById("dealer_search_result_holder");
	removeAllChildNodes(holder);
	for (var n=0; n<groups.length;n++) {
		if (groups[n].getAttribute("id") == 1) {		//headline
			var e = d.getElementsByTagName("h3")[0];
			removeAllChildNodes(e);
			e.appendChild(getTextNode(getXMLElementById(groups[n].getElementsByTagName("text"),"head_txt")));
		} else {
			var item = document.createElement("div");
			item.setAttribute("class","dealer_search_result_item");
			holder.appendChild(item);
			
			var name = document.createElement("div");
		//	name.setAttribute("class","name");
		//	change for IE
			name.style.fontWeight = "bold";
		
			item.appendChild(name);
			var addr = document.createElement("div");
		//	addr.setAttribute("class","addr");
		//	change for IE
			addr.style.paddingBottom = "10px";
		
			item.appendChild(addr);
		
			
			var content = groups[n].getElementsByTagName("text");
			var head = "";
			var txt = "";
			for (var i=0;i<content.length;i++) {
				var id = content[i].getAttribute("id");
		//		if (id == "head_txt") name.appendChild(getTextNode(content[i]));
		//		else if (id == "copy_txt") addr.appendChild(getTextNode(content[i]));
				if (id == "head_txt") head += getText(content[i]);
				else if (id == "copy_txt") txt += getText(content[i]);
			}

			name.innerHTML = head;
			addr.innerHTML = SuchenUndErsetzen(txt, "nullh", "h");
			//alert("Ergebnis: "+head+" - "+txt);
		}
	}
}	//dealerLoadHandler

function getTextNode(element) {
	var text = document.createTextNode("");
	var texts = element.childNodes;
	for (var i=0;i<texts.length;i++) {
		text.appendData(texts[i].data);
	}
	return text;
}
function getText(element) {
	var text = "";
	var texts = element.childNodes;
	for (var i=0;i<texts.length;i++) {
		text += texts[i].data;
	}
	return text;
}
function removeAllChildNodes(element) {
	while(element.hasChildNodes()) {
		element.removeChild(element.firstChild);
	}
}

//*******************************************************
//***************** COMMON FUNCTIONS ********************
//*******************************************************

function hideById(element_id) {
	var div = document.getElementById(element_id);
	div.style.visibility = "hidden";
}

function showById(element_id) {
	var div = document.getElementById(element_id);
	div.style.visibility = "visible";
}

function popup(url,name,w,h) {
	args="width="+w+",height="+h+",resizable=yes,scrollbars=yes,status=0";
	//no whitespaces or -'s allowed in ie
	name = strReplaceAll(name, " ", "");
	name = strReplaceAll(name, "-", "");
	var remote=window.open(url,name,args);
}

function strReplaceAll(text, search, replace) {
	var index;
	while ((index = text.indexOf(search)) != -1) {
		text = text.replace(search, replace);
	}
	return text;
}

function replace(element,text) {
//	var l = element.nodeValue.length;
//	element.replaceData(0,l,text);
	element.innerHTML = text;
}

function change(id,max){
	for(var i = 1; i <= max; i++){
		if (i != id){
			document.getElementById("meinGarten_"+i).style.display='none';
			document.getElementById("selected_"+i).style.color='#666';
			document.getElementById("selected_"+i).style.background='#fff';
			document.getElementById("selected_"+i).style.borderColor='#666';
		}
		if (i == id){
			document.getElementById("meinGarten_"+i).style.display='block';
			document.getElementById("selected_"+i).style.color='#fff';
			document.getElementById("selected_"+i).style.background='#e75012';
			document.getElementById("selected_"+i).style.borderColor='#e75012';
			
		}
	}
}

function registrieren(){
	document.getElementById("start").style.display='none';
	document.getElementById("meinGarten_1").style.display='block';
}

function backToLogin(){
	document.getElementById("start").style.display='block';
	document.getElementById("meinGarten_1").style.display='none';
}

function checkZip(zip) {
	return (zip.length == 5 && isNumeric(zip));
}

function isNumeric(text) {
	var validChars = "0123456789";
	var isNumber = true;
	var char;
	for(i = 0; i < text.length && isNumber == true; i++) { 
		char = text.charAt(i);
		if(validChars.indexOf(char) == -1) {
			isNumber = false;
		}
	}
	return isNumber;
}

function emailCheck (emailStr) {
	var emailPat = /^(.+)@(.+)$/;
	var specialChars = "\\(\\)<>@,;:\\\\\\\"\\.\\[\\]";
	var validChars = "\[^\\s" + specialChars + "\]";
	var quotedUser = "(\"[^\"]*\")";
	var ipDomainPat = /^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/;
	var atom= validChars + '+';
	var word = "(" + atom + "|" + quotedUser + ")";
	var userPat = new RegExp("^" + word + "(\\." + word + ")*$");
	var domainPat = new RegExp("^" + atom + "(\\." + atom +")*$");

	var matchArray = emailStr.match(emailPat);
	if (matchArray == null) {
		return false;
	}
	var user=matchArray[1];
	var domain=matchArray[2];

	if (user.match(userPat) == null) {
    	return false;
	}

	var IPArray=domain.match(ipDomainPat)
	if (IPArray != null) {
    	for (var i=1; i<=4; i++) {
    		if (IPArray[i] > 255) {
    			return false;
    		}
    	}
   	 	return true;
	}

	var domainArray = domain.match(domainPat);
	if (domainArray == null) {
		return false;
	}

	var atomPat = new RegExp(atom,"g");
	var domArr = domain.match(atomPat);
	var len = domArr.length;
	if (domArr[domArr.length-1].length < 2 || domArr[domArr.length-1].length > 4) {
		return false;
	}

	if (len < 2) {
   	   return false;
	}
	
	return true;
}

function selectAll(oList)
{
	for (var i = 0; i < oList.length; i++){
 		oList[i].checked = true;
 	}
}

function insert(input, aTag, eTag) {
  input.focus();
  /* für Internet Explorer */
  if(typeof document.selection != 'undefined') {
    /* Einfügen des Formatierungscodes */
    var range = document.selection.createRange();
    var insText = range.text;
    range.text = aTag + insText + eTag;
    /* Anpassen der Cursorposition */
    range = document.selection.createRange();
    if (insText.length == 0) {
      range.move('character', -eTag.length);
    } else {
      range.moveStart('character', aTag.length + insText.length + eTag.length);      
    }
    range.select();
  }
  /* für neuere auf Gecko basierende Browser */
  else if(typeof input.selectionStart != 'undefined')
  {
    /* Einfügen des Formatierungscodes */
    var start = input.selectionStart;
    var end = input.selectionEnd;
    var insText = input.value.substring(start, end);
    input.value = input.value.substr(0, start) + aTag + insText + eTag + input.value.substr(end);
    /* Anpassen der Cursorposition */
    var pos;
    if (insText.length == 0) {
      pos = start + aTag.length;
    } else {
      pos = start + aTag.length + insText.length + eTag.length;
    }
    input.selectionStart = pos;
    input.selectionEnd = pos;
  }
  /* für die übrigen Browser */
  else
  {
    /* Abfrage der Einfügeposition */
    var pos;
    var re = new RegExp('^[0-9]{0,3}$');
    while(!re.test(pos)) {
      pos = prompt("Einfügen an Position (0.." + input.value.length + "):", "0");
    }
    if(pos > input.value.length) {
      pos = input.value.length;
    }
    /* Einfügen des Formatierungscodes */
    var insText = prompt("Bitte geben Sie den zu formatierenden Text ein:");
    input.value = input.value.substr(0, pos) + aTag + insText + eTag + input.value.substr(pos);
  }
 }