var intHintIndex = -1;
var objHint;

function kH(e) {
	var pK = e ? e.which : window.event.keyCode;
	return pK != 13;
}
document.onkeypress = kH;
				
function hideMe(){
	var objLayer = document.getElementById("theLayer");
	objLayer.style.visibility="hidden";
}

function showMe(){
	var objLayer = document.getElementById("theLayer");
	var objTown = FindDotNetControl('txtLocation', 'input');
	var newX = findPosX(objTown);
	var newY = findPosY(objTown);
	
	objLayer.style.visibility="visible";	

	newY += objTown.offsetHeight + 2;		
	
	objLayer.style.width=objTown.offsetWidth + 'px';
	objLayer.style.top = newY + 'px';
	objLayer.style.left = newX + 'px';

	addEvent(document,"mousedown",mouseUpHandlder,true);
}

//Cross browser event handlers
function addEvent(obj, evType, fn, useCapture){
  if (obj.addEventListener){
    obj.addEventListener(evType, fn, useCapture);
    return true;
  } else if (obj.attachEvent){
    var r = obj.attachEvent("on"+evType, fn);
    return r;
  } else {
    alert("Handler could not be attached");
  }
}

function removeEvent(obj, evType, fn, useCapture){
  if (obj.removeEventListener){
    obj.removeEventListener(evType, fn, useCapture);
    return true;
  } else if (obj.detachEvent){
    var r = obj.detachEvent("on"+evType, fn);
    return r;
  } else {
    alert("Handler could not be removed");
  }
}

function mouseUpHandlder(e) {
    if (!e) e = window.event;

	if(e.srcElement){    	
		var objName = e.srcElement.id.toUpperCase();
	}
	else{
		var objName = e.target.id.toUpperCase();
	}
	
	if(objName.substring(0,8) == "HINTITEM" || objName=="MAINCONTENT"){
		return;
	}	
	removeEvent(document,"mousedown",mouseUpHandlder,true);
	hideMe();
}
//Find the position of an element
function findPosX(obj)
{
	var intCurrentLeft = 0;
	if (obj.offsetParent)
	{
		while (obj.offsetParent)
		{
			intCurrentLeft += obj.offsetLeft
			obj = obj.offsetParent;
		}
	}
	else if (obj.x)
		intCurrentLeft += obj.x;
	return intCurrentLeft;
}

function findPosY(obj)
{
	var intCurrentTop = 0;
	if (obj.offsetParent)
	{
		while (obj.offsetParent)
		{
			intCurrentTop += obj.offsetTop
			obj = obj.offsetParent;
		}
	}
	else if (obj.y)
		intCurrentTop += obj.y;
	return intCurrentTop;
}
function FirstTime(){
    var txtLocation;
    txtLocation=FindDotNetControl('txtLocation', 'input');
    
	if(txtLocation.length > 2){		
		UserRegister.GetMatchingPlaces(txtLocation,GetHintItems_callback);	
	}
}
function textChanged(key){	
	var objTown = FindDotNetControl('txtLocation', 'input');
	var objLayer = document.getElementById("theLayer");
	var strHint = objTown.value;	
	
	if(key==38 || key==40 || key==32 || key==13){
		if(objLayer.style.visibility=="visible" && objHint.length>0){
		
			if(key==32 || key==13){ 		
				if(intHintIndex<objHint.length && intHintIndex>-1){
					objTown.value=objHint[intHintIndex].Name;	
					hideMe();
				}
				key =null;				
				return
			}
			if(key==40){ 		
				intHintIndex+=1;
				if (intHintIndex>objHint.length-1){
					intHintIndex=objHint.length-1;
				}
			}
			if(key==38){ 		
				intHintIndex-=1;
				if (intHintIndex<0){
					intHintIndex=0;
				}
			}
			
			if(intHintIndex>-1){
				objTown.value=objHint[intHintIndex].Name;
						
				for(x=0; x<objHint.length; x++){
					if(intHintIndex==x){
						document.getElementById("HintItem" + x).className="layeritemselected";
					}
					else{
						document.getElementById("HintItem" + x).className="layeritem";
					}
				}
			}
		}
	}
	else{ 
		if(strHint.length>2){		
			UserRegister.GetMatchingPlaces(strHint,GetHintItems_callback);	
		}
		else{
			hideMe();
		}
	}	
}
function GetHintItems_callback(response){
	if (response != null && response.value != null){		
			objHint = response.value;			
			ShowHint();			
	}
}
function ShowHint(){
	var objTown = FindDotNetControl('txtLocation', 'input');
	var objLayer = document.getElementById("theLayer");
	
	objLayer.style.left = findPosX(objTown);
	objLayer.style.top = findPosY(objTown)+ objTown.offsetHeight+2;
			
	intHintIndex = -1;
	
	if(!objHint){
	
		hideMe();
		return;
	}
	if (objHint.length > 0){
		if (objHint.length==1){
			intHintIndex=0;
			if(objHint[0].Name.toUpperCase()==objTown.value.toUpperCase()){
				hideMe();
				return;
			}			
		}
		
		if(parseInt(objTown.value.charAt(2))){
			hideMe();
			return;
		}
		var strTemp = "";
		
		for(x=0; x<objHint.length; x++){
			strTemp += '<div class=\"layeritem\" id=\"HintItem' +  x + '\"><a href=\"javascript: SelectHint(' + x + ')\;\" id=\"HintItemA' +  x + '\">' + objHint[x].Name + '<\/a><\/div>\n';
		}
		document.getElementById("mainContent").innerHTML = strTemp;	
		showMe();

	}
	else{
	//alert("Please select one of the suggested cities")
	return;
		hideMe();
	}			
}



function SelectHint(intIndex){
	var objTown = FindDotNetControl('txtLocation', 'input');
	intHintIndex = intIndex;
	objTown.value=objHint[intIndex].Name;
	hideMe();
}

function FindDotNetControl(strName, strType)
{
    var objInputs = document.getElementsByTagName(strType);
    for (i=0;i<objInputs.length;i++)
    {
        if (objInputs[i].id.indexOf(strName)>=0)
        {
            return objInputs[i];
            break;
        }
    }
}
function CheckCityEntered()
{

			var Username=document.getElementById("txtUname").value;
			
			var valid1=Username.indexOf("'");
			var valid2=Username.indexOf("?");
			var valid3=Username.indexOf("*");
			var valid4=Username.indexOf("@");
			var valid5=Username.indexOf("/");
			var valid6=Username.indexOf("&");
			var valid7=Username.indexOf("+");
			var valid8=Username.indexOf("$");
			if ((valid1 != -1)||(valid2 != -1)||(valid3 != -1)||(valid4 != -1)||(valid5 != -1)||(valid6 != -1)||(valid7 != -1)||(valid8 != -1))
			{
			var message="please do not use symbols /,?,+,@,',*,$,& when entering username.";
			alert(message);
			return false;
			}

/*	if (!objHint || objHint.length == 0) 
	{
		alert("Please select one of the suggested cities");
		
		return false;
		
		} 
			else {
				return true;
				}
				
*/				
	
}	
