var EHCheck=0;

var tmpStreet="";
var tmpCityArray=new Array();
var tmpStreetArray=new Array();

var cityhasselection = false;
var streethasselection = false;
var scrField ="";

function isANumber(n){
   var s = "" + n;
   var ziffern = "0123456789";
   for (var i=0; i<s.length; i++)
      if (ziffern.indexOf(s.charAt(i))==-1)
         return false;
   return true;
}

function ehPLZ(field,evt){
var text = field.value;
var selCityIndex = document.getElementById("selCity").selectedIndex;
resetFlagBac();

if (navigator.userAgent.indexOf('MSIE')!= -1) {
	pKey = window.event.keyCode;
}else {
	pKey = evt.which;
}
	 if (isANumber(text)) {
	 	if (text.length==5){
		document.getElementById("postcode").focus();
			switch(pKey) {
  			case 46:
				break;
			case 40:
				arrowdownCity(selCityIndex, "0");
				break;			
			case 38:
				arrowupCity(selCityIndex, "0");
				break;
			case 16:
				break;
			case 17:
				break;
			case 18:
				break;
			case 32:
				break;
			case 20:
				break;
			case 13:
				selectCity(document.getElementById("selCity"));
				break
			default:
                                tmpCityArray=new Array();
				bocuEH.ehPLZOrtSmall(createCityList,text);
				break;
			}						
		}
		else {
			show_hide("divSelCity", 0);
      			show_hide("selCity", 0);
			errorArray[1]["postcode"] = "#";
			setCSS("postcode",0);
			setCSS("txtpostcode",0); 
		}
         }
	 else {
		errorArray[1]["postcode"] = "Bitte nur Zahlen eingeben.";
		setCSS("postcode",1);
		setCSS("txtpostcode",1);
	 }
	 showErrorArray();
}

function requestCityList(postcode,city,evt){
var CityArray=new Array();

if (navigator.userAgent.indexOf('MSIE')!= -1) {
	pKey = window.event.keyCode;
}else {
	pKey = evt.which;
}
	if ((pKey>46 && pKey<91)){
 		CheckBig2(city);
		if (tmpCityArray.length==0 && postcode.value.length==5){
		}  else {
		if (errorArray[1]["postcode"]=="~" && postcode.value.length==5){
			CityArray = makeCityArray(city);
			showCityList(CityArray, city);
		}
		}
	 }else {
	 	var selCityIndex = document.getElementById("selCity").selectedIndex;
	 	if (pKey==38) {
	 		arrowupCity(selCityIndex, "0");
		}else if(pKey==40){
			arrowdownCity(selCityIndex, "0");
		}else if(pKey==13){
			selectCity(document.getElementById("selCity"));	
		} else if (pKey==8){
		        show_hide("divSelCity",0);
		        show_hide("selCity",0);
		}
	}
}

function makeCityArray(city){
var mCityArray=new Array();
var k=0;

	for(var i=0; i<tmpCityArray.length; i++){
		if(tmpCityArray[i].indexOf(city.value)==0){
			mCityArray[k]=tmpCityArray[i];
			k++;
		}
	}
	return mCityArray;
}

function showCityList(CityList, cityvalue){
 if (cityvalue!=document.getElementById('city').value) makeCityArray(document.getElementById('city'));
 	if (CityList.length==0){
 		show_hide("divSelCity", 0);                                                                                                              
		show_hide("selCity", 0);    
	 }else if(CityList.length==1){
	 	show_hide("divSelCity", 0);                                                                                                              
		show_hide("selCity", 0);    
		typeahead(document.getElementById('city'),CityList[0]);                                                                                       
    		//document.getElementById("city").value = CityList[0];
 	 }else{
 		show_hide("divSelCity", 1);                                                                                                              
		show_hide("selCity", 1);                                                                                                                 
		DWRUtil.fillList("selCity", CityList);
    		document.getElementById("selCity").selectedIndex=0; 
    		typeahead(document.getElementById('city'),CityList[0]);

   	}                                                                                                                                         
 }                                                                                  

function createCityList(data){
    if (data.length>0) { weather(document.getElementById('postcode'),true)} else { weather(document.getElementById('postcode'),false);}
	tmpCityArray=data;
    	showCitys(tmpCityArray);
 }
 
function typeahead(feld, targetText){
 	var startindex = feld.value.length;
 	var endindex = targetText.length;
 	
 	if (startindex!=endindex && startindex>0){
 		feld.value= targetText;
		if(feld.createTextRange){  //IE
			var txtR =feld.createTextRange();
			txtR.moveStart("character", startindex);
			txtR.moveEnd("character", endindex);
			txtR.select();
		} else if (feld.setSelectionRange){ //not IE
			feld.setSelectionRange(startindex,endindex);
		}
	}
 }

function cityOnKeyDown(feld){
	if(typeof document.selection != 'undefined') {
		var range = document.selection.createRange()
		var insText = range.text;
		if(insText.length==0){
			cityhasselection =false;
		} else {
			cityhasselection= true;	
		}	
	}
	 else if(typeof feld.selectionStart != 'undefined') {
		var start = feld.selectionStart;
    		var end = feld.selectionEnd;
    		if (start==end){
    			cityhasselection =false;
    		}else {
    			cityhasselection =true;
    		}
    	}
}
 
function showCitys(CityList){
  if(CityList.length==0){
	errorArray[1]["postcode"] = "Postleitzahl existiert nicht.";                                                                           
	setCSS("postcode",1);                                                                                                                  
	setCSS("txtpostcode",1);                                                                                                               
    } else if(CityList.length==1){                                                                                                                
    	document.getElementById("city").value = CityList[0];
	cityFound();                                                                                                               
     }else{                                                                                                                                     
 	show_hide("divSelCity", 1);                                                                                                              
	show_hide("selCity", 1);                                                                                                                 
 	DWRUtil.fillList("selCity", CityList);
 	cityFound();
	document.getElementById("selCity").selectedIndex=0;
	document.getElementById("city").value = "";
	//document.getElementById("city").value = document.getElementById("selCity").options[document.getElementById("selCity").selectedIndex].text
     }                                                                                                                                         
     showErrorArray();                                                                                                                         
  }   
                                                                                                                                           
function cityFound(){
 	errorArray[1]["postcode"] = "~";                                                                                                         
	errorArray[1]["city"]="~";                                                                                                               
	setCSS("postcode",0);                                                                                                                    
	setCSS("txtpostcode",0);                                                                                                                 
	setCSS("city", 0);        
 }
 
function arrowupCity(selCityIndex, type){
	if(selCityIndex > 0) selCityIndex --;
	if (document.getElementById("divSelCity").style.visibility == "visible"){
		document.getElementById("selCity").selectedIndex =selCityIndex;
		if(type==0) {
			document.getElementById("city").value = document.getElementById("selCity").options[document.getElementById("selCity").selectedIndex].text
		}
	}
}

function arrowdownCity(selCityIndex, type){
	if(selCityIndex < document.getElementById("selCity").length-1) {
		selCityIndex ++
		if(document.getElementById("selCity").options[selCityIndex].value=="") selCityIndex --;
	}
	if (document.getElementById("divSelCity").style.visibility == "visible"){
		document.getElementById("selCity").selectedIndex =selCityIndex;
		if(type==0) {
			document.getElementById("city").value = document.getElementById("selCity").options[document.getElementById("selCity").selectedIndex].text
		}
	}
} 

function selectSelCity(field){
    	document.getElementById("city").value = document.getElementById("selCity").options[document.getElementById("selCity").selectedIndex].text;
	selectCity(document.getElementById("selCity"));
  }                
                  
function selectSelCity2(field){
	//show_hide("divSelCity", 1);
        //show_hide("selCity", 1);  
	if(document.getElementById("selCity").options[document.getElementById("selCity").selectedIndex].text=="") {
		document.getElementById("city").value = document.getElementById("selCity").options[0].text;
		document.getElementById("selCity").selectedIndex=0;
	}else {	                
  		document.getElementById("city").value = document.getElementById("selCity").options[document.getElementById("selCity").selectedIndex].text;
	}                
	document.getElementById("city").focus(); 
  }
  
function ehStreet(field,evt){


CheckBig2(field);
var txtStreet = field.value; 
var txtLen = txtStreet.length;                                                     
var city =document.getElementById("city").value;                             
var postcode =document.getElementById("postcode").value;                     
var selStreetIndex = document.getElementById("selStreet").selectedIndex;
                                                             
resetFlagBac();                                                      

if (navigator.userAgent.indexOf('MSIE')!= -1) {              
	pKey= window.event.keyCode;                            
}else {
	pKey = evt.which;
}	
	if((txtLen>0) && (errorArray[1]["postcode"]=="~") && (errorArray[1]["city"]=="~")) {
		switch(pKey) {
			//case 8: // backspace
			//	break;
			//case 46: // delete
			//	break;
			case 40:// arrow down
				arrowdownStreet(selStreetIndex, "1");
				break;
			case 38:	// arrow up
				arrowupStreet(selStreetIndex, "1");				
				break;
			case 39:
				break;
			case 37:
				break;
			case 16:
				break;
			case 17:
				break;
			case 18:
				break;
			case 32:
				break;
			case 20:
				break;
			case 13:
				selectStreet(document.getElementById("selStreet"));
				break
			default:

				tmpStreetArray=new Array();
				syncCounter++;
				bocuEH.ehStrasseSync(createStreetList,txtStreet,postcode,city,syncCounter);
				break;							
			}
		} 
} 

function arrowupStreet(selStreetIndex){
	if(selStreetIndex > 0) selStreetIndex --;
	if (document.getElementById("divSelStreet").style.visibility == "visible"){
		document.getElementById("selStreet").selectedIndex =selStreetIndex;
		document.getElementById("street").value = document.getElementById("selStreet").options[document.getElementById("selStreet").selectedIndex].text
	}
}
function arrowdownStreet(selStreetIndex){
	if(selStreetIndex < document.getElementById("selStreet").length-1){
		selStreetIndex ++;
		if(document.getElementById("selStreet").options[selStreetIndex].value=="") selStreetIndex --;
	}
	if (document.getElementById("divSelStreet").style.visibility == "visible"){
		document.getElementById("selStreet").selectedIndex =selStreetIndex;
		document.getElementById("street").value = document.getElementById("selStreet").options[document.getElementById("selStreet").selectedIndex].text
	}
}

function createStreetList(data){
var echoSyncCounter = data[0];
data.shift();
//alert(data.length);
if (data.length > 0)  {
	var firstSign = data[0].charAt(0);
	if (syncCounter == echoSyncCounter){
		tmpStreetArray = data.sort();
		showStreets(tmpStreetArray,firstSign);
	}
}
}	

function streetDispatcher(feld, evt){
var test="";
if (navigator.userAgent.indexOf('MSIE')!= -1) {
	pKey = window.event.keyCode;
}else {
	pKey = evt.which;
}
        if (pKey!=8 && pKey!=46) {
		if (feld.value.length==0) {
			show_hide("divSelStreet", 0);
	      		show_hide("selStreet", 0);
		}
		else if (feld.value.length==1 && pKey!=8) {
				ehStreet(feld,evt);
		}else {
			 requestStreetList(feld,evt);
		}
	}else {
              show_hide("divSelStreet", 0);
       	      show_hide("selStreet", 0);
	}
}

function requestStreetList(feld,evt){
var StreetArray=new Array();
var k=0;

if (navigator.userAgent.indexOf('MSIE')!= -1) {
	pKey = window.event.keyCode;
}else {
	pKey = evt.which;
}
	if ((pKey>46 && pKey<91) || pKey==32 || pKey==189 || pKey==221){ // 32 Space / 189 Binderstrich´/ 221 Accent über Vokal
		if (tmpStreetArray.length==0) {
		}  else {
			StreetArray = makeStreetArray(feld);
			showStreets(StreetArray, feld.value);
		}
	 }else {
	 	var selStreetIndex = document.getElementById("selStreet").selectedIndex;
	 	if (pKey==38) { //arrowup
	 		arrowupStreet(selStreetIndex, "0");
		}else if(pKey==40){ //arrowdown
			arrowdownStreet(selStreetIndex, "0");
		}else if(pKey==13){ //enter
			selectStreet(document.getElementById("selStreet"));	
		}
	}
}

function makeStreetArray(feld){
var mStreetArray=new Array();
var k=0;
        for(var i=0; i<tmpStreetArray.length; i++){
	if(tmpStreetArray[i].indexOf(feld.value)==0){
		mStreetArray[k]=tmpStreetArray[i];
		k++;
		}
	}
	return mStreetArray
}

function showStreets(StreetList, streetvalue){
        if (streetvalue != document.getElementById('street').value) StreetList = makeStreetArray(document.getElementById('street'));
	if (StreetList.length==0) {
		show_hide("divSelStreet", 0);
      		show_hide("selStreet", 0);
	}else if (StreetList.length==1){
		show_hide("divSelStreet", 0);
      		show_hide("selStreet", 0);
      		typeahead(document.getElementById('street'),StreetList[0]);
	}else {
		show_hide("divSelStreet", 1);
      		show_hide("selStreet", 1);
      		typeahead(document.getElementById('street'),StreetList[0]);
       		DWRUtil.fillList('selStreet',StreetList);
      		document.getElementById('selStreet').selectedIndex=0;
	}
}

function streetOnKeyDown(feld){
	if(typeof document.selection != 'undefined') {
		var range = document.selection.createRange()
		var insText = range.text;
		if(insText.length==0){
			streethasselection =false;
		} else {
			streethasselection= true;	
		}	
	}
	 else if(typeof feld.selectionStart != 'undefined') {
		var start = feld.selectionStart;
    		var end = feld.selectionEnd;
    		if (start==end){
    			streethasselection =false;
    		}else {
    			streethasselection =true;
    		}
    	}
}

function EHtabHandler(evt,feld) {
	if (navigator.userAgent.indexOf('MSIE')!= -1) {
		t = window.event.keyCode;
	}else {
		t = evt.which;
	}
	
	if(t==9) {
		if(feld.name=="postcode" && document.getElementById("divSelCity").style.visibility=="visible")
			document.getElementById("city").value="";
		if(feld.name=="city"){
			show_hide("divSelCity", 0);
      			show_hide("selCity", 0);
		}
		show_hide("divSelStreet", 0);
      		show_hide("selStreet", 0);
		checkStreet(document.getElementById("street"));
		//checkCity(document.getElementById("city"));
		stringCheck(document.getElementById("city"),40,2);
		
	}
}

function scroll(evt){
	if (navigator.userAgent.indexOf('MSIE')!= -1) {
		t = window.event.keyCode;
	}else {
		t = evt.which;
	}
	
	if(t==40) {
		arrowdownCity(document.getElementById("selCity").selectedIndex);
	}else {
		if(t==38) {
			arrowupCity(document.getElementById("selCity").selectedIndex);				
		}else {
			show_hide("divSelCity", 0);
      			show_hide("selCity", 0);
			show_hide("divSelStreet", 0);
      			show_hide("selStreet", 0);
		}
	}
}

function leaveHandler(feld) {
	scrField = feld;
	if (window.Event) {
		document.captureEvents(Event.MOUSEUP);
		document.onclick = mclick;
	} else{ //IE
		document.onclick = mclick;
	}
		
}


function mclick(e) {
	var ev;
	var ziel ;
	var ziel2;
	if (window.Event) {
		ev = e;
		ziel = ev.target.parentNode;
		ziel2 = ev.target.id;
	} else {
		ev = window.event;
		ziel = ev.srcElement;		
		ziel2 = ev.srcElement.id;
	}
	if (ziel2=="city" && document.getElementById("divSelCity").style.visibility=="visible"){
		if(scrField.id=="postcode") document.getElementById("city").value="";
	} else{
		if (!(ziel.id=="selCity") && !(ziel.id=="selStreet")) {
			if(document.getElementById("divSelCity").style.visibility=="visible"&&document.getElementById("city").value.length>0){
				document.getElementById("city").value = document.getElementById("selCity").options[document.getElementById("selCity").selectedIndex].text;
			}
			show_hide("divSelCity", 0);
      			show_hide("selCity", 0);
			show_hide("divSelStreet", 0);
      			show_hide("selStreet", 0);
		}
	}
	checkStreet(document.getElementById("street"));
	stringCheck(document.getElementById("city"),40,2);
}

function selectSelStreet(field){
    	document.getElementById("street").value = document.getElementById("selStreet").options[document.getElementById("selStreet").selectedIndex].text;
	selectStreet(document.getElementById("selStreet"));
}

function selectSelStreet2(field){
  	if(document.getElementById("street").value = document.getElementById("selStreet").options[document.getElementById("selStreet").selectedIndex].text=="") {
		document.getElementById("street").value = document.getElementById("selStreet").options[0].text;
		document.getElementById("selStreet").selectedIndex=0;
	}else {	
  		document.getElementById("street").value = document.getElementById("selStreet").options[document.getElementById("selStreet").selectedIndex].text;
	}
  	
	document.getElementById("street").focus(); 
  }


function selectStreet(objSel){
	show_hide('selStreet', 0);
        show_hide('divSelStreet', 0);
	checkStreet(document.getElementById("street"));
	document.getElementById("nr").focus();
}

function selectCity(objSel){
	if (document.getElementById("divSelCity").style.visibility=="visible"){
		document.getElementById("city").value = document.getElementById("selCity").options[document.getElementById("selCity").selectedIndex].text
		show_hide('selCity', 0);
		show_hide('divSelCity', 0)
	}
	document.getElementById("street").focus();	
	stringCheck(document.getElementById("city"),40,2);
}

function resetFlagBac(){
	document.getElementById("flagBAC").value = "0";
}

