function getE(htmlElementName) {
 return document.getElementById(htmlElementName);
}

function getCallbackFunction(req, processData) {
 return function () {
   if (req.readyState == 4) {
     if (req.status == 200) {
       processData(req.responseXML);
     } else {
       alert("HTTP error: "+req.status);
     }
   }
 }
}

function disableEnterKey(e) {
 var key = e ? e.keyCode : window.event.keyCode;
 if (key == 13) return false;
 else return true;
}


function ctrlInput(e, inputType) {
 var key;
 var keychar;
 var characters;

 switch (inputType) {
	case 'email':
		characters = 'abcdefghijklmnopqrstuxyvwzABCDEFGHIJKLMNOPQRSTUXYVWZ0123456789.@-_'
	 	break
	case 'emailpromo':
		characters = 'abcdefghijklmnopqrstuxyvwzABCDEFGHIJKLMNOPQRSTUXYVWZ0123456789.@-_;, '
	 	break
	case 'phone':
		characters = '0123456789()-+ /'
	 	break
	case 'pwd':
		characters = 'abcdefghijklmnopqrstuxyvwzABCDEFGHIJKLMNOPQRSTUXYVWZ0123456789'
	 	break
	case 'general':
		characters = 'abcdefghijklmnopqrstuxyvwzABCDEFGHIJKLMNOPQRSTUXYVWZöüóőúéáäűíÖÜÓŐÚÉÁÄŰÍ0123456789 \'"+!%/=()<>#&@,.-?:_;*$€äÄß'
	 	break
	case 'city':
		characters = 'abcdefghijklmnopqrstuxyvwzABCDEFGHIJKLMNOPQRSTUXYVWZöüóőúéáäűíÖÜÓŐÚÉÁÄŰÍ0123456789,- äÄß'
	 	break
	case 'address':
		characters = 'abcdefghijklmnopqrstuxyvwzABCDEFGHIJKLMNOPQRSTUXYVWZöüóőúéáäűíÖÜÓŐÚÉÁÄŰÍ0123456789./,- äÄß'
	 	break
	case 'fulladdress':
		characters = 'abcdefghijklmnopqrstuxyvwzABCDEFGHIJKLMNOPQRSTUXYVWZöüóőúéáäűíÖÜÓŐÚÉÁÄŰÍ./,- äÄß'
	 	break
	case 'url':
		characters = 'abcdefghijklmnopqrstuxyvwz0123456789.-'
	 	break
	case 'num':
		characters = '0123456789'
	 	break
	case 'decimal':
		characters = '0123456789.'
	 	break
	case 'code':
		characters = '23456789bcdfghjkmnpqrstvwxyz'
	 	break
	case 'firmname':
		characters = 'abcdefghijklmnopqrstuxyvwzABCDEFGHIJKLMNOPQRSTUXYVWZöüóőúéáäűíÖÜÓŐÚÉÁÄŰÍ0123456789 äÄß'
//		characters = 'abcdefghijklmnopqrstuxyvwzABCDEFGHIJKLMNOPQRSTUXYVWZöüóőúéáäűíÖÜÓŐÚÉÁÄŰÍ0123456789 \'+!&.-'
	 	break
	case 'keyword':
		characters = 'abcdefghijklmnopqrstuxyvwzABCDEFGHIJKLMNOPQRSTUXYVWZöüóőúéáäűíÖÜÓŐÚÉÁÄŰÍ0123456789 ,-äÄß'
	 	break
	default:
		characters = 'abcdefghijklmnopqrstuxyvwz0123456789'
		break
 }
	 
 if (window.event) key = window.event.keyCode;
 else if (e) key = e.which;
 else return true;
 
 keychar = String.fromCharCode(key);
 
// Values:
//  8: [Backspace]
//  9: [Tab]
// 13: [Enter]
// 27: [Esc]
// 36: [Home]
// 37: [LeftArrow]
// 39: [RightArrow]

if ((key==null) || (key==0) || (key==8) || (key==9) || (key==13) || (key==27) ) return true;
 else if (characters.indexOf(keychar) > -1) return true;
 else return false;
}


function textCounter(field, countfield, maxlimit) {
 if (field.value.length > maxlimit)
  field.value = field.value.substring(0, maxlimit);
 else
  countfield.value = maxlimit - field.value.length;
}


function CheckKey(e) {
 var key = e ? e.keyCode : window.event.keyCode;
 //var obj = document.getElementById('fullAddress');

 //if (key==13 && obj.value != '') {

 if (key==13) {
//alert(key);
   //if (cityList.length > 1) fillIn(cityListPos)
   if (cityList.length > 1) {
   //document.getElementById('tr'+cityListPos).click();
   //alert('HI');
   giveValue(this);
   mapPos(document.getElementById('mapLat').value,document.getElementById('mapLng').value,12);
   	
   //document.getElementById("cityName").value = document.getElementById('tr'+cityListPos).innerHTML.replace("<td> ","").replace("<TD>","").replace("</td>","").replace("</TD>","").replace("<b>","").replace("<B>","").replace("</b>","").replace("</B>","");
   //document.getElementById('cityId').value = 15056; 
   //document.getElementById('countyId').value = 0; 
   //document.getElementById('mapLat').value = 51.8125; 
   //document.getElementById('mapLng').value = 14.1844; 
   //document.getElementById('mapZL').value = 12; 
   //hideCityList(this);
	}
 }

// Down Arrow button
 if (key==40) {
   if (cityListPos != cityList.length-1) {
     unSelectLine(document.getElementById('tr'+cityListPos))
     cityListPos++
     selectLine(document.getElementById('tr'+cityListPos))
   }
 }

// Up Arrow button
 if (key==38) {
   if (cityListPos != 1) {
     unSelectLine(document.getElementById('tr'+cityListPos))
     cityListPos--;
     selectLine(document.getElementById('tr'+cityListPos))
   }
 }
}


function setLoupeImg(zoomLevel) {
 document.getElementById('loupeLevel').innerHTML = zoomLevel
}


// Map's Custom Control processing function
// dx, dy values:
//		-1: move to the left/up on the map
//		 0: no move in the given direction
//		 1: move to the right/down on the map
function ctrlPanDirection(dx, dy) {
 currentCenter = map.getCenter();
 // Calculate map's height and width pixels divided by 4 - this will be the movement scale
 deltaWidth = (parseFloat(map.getBounds().getNorthEast().lng()) - parseFloat(map.getBounds().getSouthWest().lng())) / 4;
 deltaHeight = (parseFloat(map.getBounds().getSouthWest().lat()) - parseFloat(map.getBounds().getNorthEast().lat())) / 4;
 var newLng;
 var newLat;
 var deltaX = 0
 var deltaY = 0;

 switch (dx)
 {
 	case -1:
		newLng = parseFloat(currentCenter.lng()) - deltaWidth;
		deltaX = -map.getSize().width / 4;
		break;
	case 0:
		newLng = parseFloat(currentCenter.lng());
		break;
	case 1:
		newLng = parseFloat(currentCenter.lng()) + deltaWidth;
		deltaX = map.getSize().width / 4;
	    break;
 }

 switch (dy) {
 	case -1:
		newLat = parseFloat(currentCenter.lat()) - deltaHeight;
		deltaY = -map.getSize().height / 4;
		break;
	case 0:
		newLat = parseFloat(currentCenter.lat());
		break;
	case 1:
		newLat = parseFloat(currentCenter.lat()) + deltaHeight;
		deltaY = map.getSize().height / 4;
	    break;
 }

 map.panTo(new GLatLng(newLat, newLng));
}


function getSubCategories(index) {
 function processSubCategories(xmlDoc) {
  subCategories = xmlDoc.documentElement.getElementsByTagName("sc");
  getE('selectSubCategory' + index).options.length = 0;
  getE('selectSubCategory' + index).options[0] = new Option('Wählen Sie eine Unterkategorie!', '0');
  for (var i = 0; i < subCategories.length; i++) {
   getE('selectSubCategory' + index).options[i+1] = new Option(subCategories[i].getElementsByTagName("n")[0].firstChild.nodeValue, subCategories[i].getElementsByTagName("i")[0].firstChild.nodeValue);
  }
  getE('progressDiv2').style.display = 'none';
 }
		
 getE('progressDiv2').style.display = 'block';

 var request = GXmlHttp.create();
 request.open("POST", "/get_subcategories.php", true);
 request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
 request.onreadystatechange = getCallbackFunction(request, processSubCategories);
 request.send('catId='+getE("selectCategory" + index).value);
}


function getCities() {
 function processCities(xmlDoc) {
  cities = xmlDoc.documentElement.getElementsByTagName("c");
  getE('selectCity').options.length = 0;
  getE('selectCity').options[0] = new Option('Wählen Sie einen Ort!', '0');
  for (var i = 0; i < cities.length; i++) {
   getE('selectCity').options[i+1] = new Option(cities[i].getElementsByTagName("n")[0].firstChild.nodeValue, cities[i].getElementsByTagName("i")[0].firstChild.nodeValue);
  }
  getE('progressDiv').style.display = 'none';
 }
		
 getE('progressDiv').style.display = 'block';

 var request = GXmlHttp.create();
 request.open("POST", "/get_cities.php", true);
 request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
 request.onreadystatechange = getCallbackFunction(request, processCities);
 request.send('coId='+getE("selectCounty").value);
}


//*****************************************************************************************-
//************* CUSTOMISATION FOR GERMANY
//*****************************************************************************************-

function hideCityList(obj) {
 //document.getElementById("cityName").value = obj.innerHTML.replace("<td> ","").replace("<TD>","").replace("</td>","").replace("</TD>","").replace("<b>","").replace("<B>","").replace("</b>","").replace("</B>","");
 document.getElementById("cityDropDown").style.display = 'none';
 document.getElementById("onlyImg").focus();
}

function selectLine(obj) {
 if (cityListPos != 0) unSelectLine(document.getElementById('tr'+cityListPos))
 obj.setAttribute('className','cityDDH');
 obj.setAttribute('class','cityDDH');
 cityListPos = parseInt(obj.id.substring(3,2))
}

function unSelectLine(obj) {
 obj.setAttribute('className','cityDDN');
 obj.setAttribute('class','cityDDN');
}

function giveValue(obj) {
		document.getElementById('cityName').value = document.getElementById('cityName'+cityListPos).value;
		document.getElementById('cityId').value = document.getElementById('cityId'+cityListPos).value;
		document.getElementById('countyId').value = document.getElementById('countyId'+cityListPos).value; 
		document.getElementById('countryId').value = document.getElementById('countryId'+cityListPos).value; 
		document.getElementById('mapLat').value = document.getElementById('mapLat'+cityListPos).value; 
		document.getElementById('mapLng').value = document.getElementById('mapLng'+cityListPos).value;
		document.getElementById('mapZL').value = document.getElementById('mapZL'+cityListPos).value; 
		document.getElementById("cityDropDown").style.display = 'none';
		//hideCityList(this);
		
}

function processMyCities(xmlDoc) {
 c = xmlDoc.documentElement.getElementsByTagName("c");
//   window.alert(c);
 getCitiesFromXML();
}

function getCities_de(filterStr) {

var request = GXmlHttp.create();
// request.open("GET", "get_cities.php?" + filterStr, false);
// request.onreadystatechange = getCallbackFunction(request, processMyCities);
// request.send(null);
//window.alert("getCities_de");
 request.open("POST", "get_cities_de.php", true);
 request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
 request.onreadystatechange = getCallbackFunction(request, processMyCities);
 request.send(filterStr);
}


function findPosX_Left(obj)
{
 var curleft = 0;
 if (document.getElementById || document.all)
 {
  while (obj.offsetParent)
  {
   curleft += obj.offsetLeft;
   obj = obj.offsetParent;
  }
 }
 else if (document.layers)
  curleft += obj.x;
 return curleft;
}



function findPosY_Top(obj)
{
 var curtop = 0;
 if (document.getElementById || document.all)
 {
  while (obj.offsetParent)
  {
   curtop += obj.offsetTop;
   obj = obj.offsetParent;
  }
 }
 else if (document.layers)
  curtop += obj.y;
 return curtop;
}



function getCitiesFromXML() {

 cityList.length = 0
 //alert(findPosX(document.getElementById("cn2"))+"px");
 document.getElementById("cityDropDown").style.top = findPosY_Top(document.getElementById("cityName"))+ 18 +"px";
 document.getElementById("cityDropDown").style.left = findPosX_Left(document.getElementById("cityName"))+"px";
 //document.getElementById("cityDropDown").style.top = document.getElementById("cityName").style.top + 20;
//  window.alert(c.length);
 for (var i = 0; i < c.length; i++) {
   // obtain the attributes of each marker
   var cityEntry = new Object;
   
   cityEntry.city_id = c[i].getElementsByTagName("cid")[0].firstChild.nodeValue;
   cityEntry.county_id = c[i].getElementsByTagName("coid")[0].firstChild.nodeValue;
   cityEntry.country_id = c[i].getElementsByTagName("couid")[0].firstChild.nodeValue;
   cityEntry.city_name = c[i].getElementsByTagName("cn")[0].firstChild.nodeValue;
   cityEntry.latitude = c[i].getElementsByTagName("ltd")[0].firstChild.nodeValue;
   cityEntry.longitude = c[i].getElementsByTagName("lng")[0].firstChild.nodeValue;
   cityEntry.city_list_name = cityEntry.city_id.substr(0,4) + " " + cityEntry.city_name;
   cityEntry.zoom_level = c[i].getElementsByTagName("zl")[0].firstChild.nodeValue;
				
   cityList[i+1] = cityEntry;
 }

 
   var html = "<table border=\"0\" width=\"178\" cellspacing=\"0\" >\n";
   var j = 0;

   for (i=1; i < cityList.length; i++) {
     if (cityList[i].city_name.substr(0,document.getElementById("cityName").value.length).toLowerCase() === document.getElementById("cityName").value.toLowerCase()) {
		//html = html + "<tr id=\"tr" + i + "\" class=\"cityDDN\" onkeyup=\"alert('HI');\" onMouseOver=\"selectLine(this);\" onMouseOut=\"unSelectLine(this);\" onClick=\"document.getElementById('cityId').value = " + cityList[i].city_id + "; document.getElementById('countyId').value = " + cityList[i].county_id + "; document.getElementById('mapLat').value = " + cityList[i].latitude + "; document.getElementById('mapLng').value = " + cityList[i].longitude + "; document.getElementById('mapZL').value = " + cityList[i].zoom_level + "; hideCityList(this);\" ><td>" + " <b>" + cityList[i].city_name.substr(0,document.getElementById("cityName").value.length) + "</b>" + cityList[i].city_name.substr(document.getElementById("cityName").value.length) + "</td></tr>\n";
		html = html + "<tr id=\"tr" + i + "\" class=\"cityDDN\" onMouseOver=\"selectLine(this);\" onMouseOut=\"unSelectLine(this);\" onClick= \"giveValue(this);mapPos(document.getElementById('mapLat').value,document.getElementById('mapLng').value,12);\"  ><td>" + " <b>" + cityList[i].city_name.substr(0,document.getElementById("cityName").value.length) + "</b>" + cityList[i].city_name.substr(document.getElementById("cityName").value.length) ;
		html = html + "<input type=\"hidden\" id=\"cityId" + i + "\" name=\"cityId" + i + "\" value=\"" + cityList[i].city_id + "\" >";
		html = html + "<input type=\"hidden\" id=\"countyId" + i + "\" name=\"countyId" + i + "\" value=\"" + cityList[i].county_id + "\" >";
		html = html + "<input type=\"hidden\" id=\"countryId" + i + "\" name=\"countryId" + i + "\" value=\"" + cityList[i].country_id + "\" >";
		html = html + "<input type=\"hidden\" id=\"cityName" + i + "\" name=\"cityName" + i + "\" value=\"" + cityList[i].city_name + "\" >";
		html = html + "<input type=\"hidden\" id=\"mapLat" + i + "\" name=\"mapLat" + i + "\" value=\"" + cityList[i].latitude + "\" >";
		html = html + "<input type=\"hidden\" id=\"mapLng" + i + "\" name=\"mapLng" + i + "\" value=\"" + cityList[i].longitude + "\" >";
		html = html + "<input type=\"hidden\" id=\"mapZL" + i + "\" name=\"mapZL" + i + "\" value=\"" + cityList[i].zoom_level + "\" >";
		html = html + "</td></tr>\n";
		j = j + 1;
	 }
   }

   html = html + "</table>\n";
   
   
   if (j > 0) {
	 document.getElementById("cityDropDown").innerHTML=html;
	 //document.getElementById("TEXTAREA1").value=html
	 document.getElementById("cityDropDown").style.display = 'block';
     cityListPos = 1
     selectLine(document.getElementById('tr1'))
   }
}