var Sapi ;
var Action  = new Array();
var c_Suburb = "Suburb";
var c_Postcode = "Postcode";
var c_State = "State";
var divHeight = "150px";
    
    
function LoadSuburbAPI() {

	Sapi = new SuburbAPIClass() ;

	//Sapi.GetSuburbAllList();	
	//document.getElementById('txtSuburb').setAttribute('autocomplete','off');
	document.getElementById('txtPropertySuburb1').setAttribute('autocomplete','off');
	document.getElementById('txtPropertySuburb2').setAttribute('autocomplete','off');
	document.getElementById('txtPropertySuburb3').setAttribute('autocomplete','off');
	document.getElementById('txtPropertySuburb4').setAttribute('autocomplete','off');
	document.getElementById('txtPropertySuburb5').setAttribute('autocomplete','off');
	document.getElementById('txtPropertySuburb6').setAttribute('autocomplete','off');
	document.getElementById('txtPropertySuburb7').setAttribute('autocomplete','off');
	document.getElementById('txtPropertySuburb8').setAttribute('autocomplete','off');
	document.getElementById('txtPropertySuburb9').setAttribute('autocomplete','off');
	document.getElementById('txtPropertySuburb10').setAttribute('autocomplete','off');
	
	if (window.stop) {
		window.onkeyup = CheckKeyPress ;
	} else {
		document.body.onkeyup = function () 
	    { 
		    CheckKeyPress(event) ;
		}
	}
	
}

function clearControl(controlID)
{
    var index = controlID.charAt(controlID.length - 1);
    if (!Sapi.isDigit(index)){ index = 0;}
    
    var postcodeID = controlID.replace(c_Suburb,c_Postcode);
    document.getElementById(postcodeID).disabled = false;
    document.getElementById(controlID).disabled = false;
    document.getElementById(postcodeID).value = "";
    document.getElementById(controlID).value = "";
    hideSuburbList(controlID)
    Sapi.clearArray(index);
}

function SelectSuburb(Suburb,State,Postcode,txtFieldName,type) {

    var txtState ;
    var txtPostcode ;
    var txtSuburb ;
    if (type == c_Suburb){
        txtState = txtFieldName.replace(c_Suburb,c_State);
        txtPostcode = txtFieldName.replace(c_Suburb,c_Postcode);
        txtSuburb = txtFieldName;
    }
    if (type == c_Postcode){
        txtState = txtFieldName.replace(c_Postcode,c_State);
        txtPostcode = txtFieldName;
        txtSuburb = txtFieldName.replace(c_Postcode,c_Suburb);
    }
       
	document.getElementById(txtState).value = State ;
	document.getElementById(txtSuburb).value = Suburb ;
	document.getElementById(txtPostcode).value = Postcode;
	hideSuburbList(txtFieldName);
	document.getElementById(txtState).onkeydown = function() { return true; } ;
	document.getElementById(txtSuburb).focus();
}

function SeeSuburb(Str,txtFieldName,type) {
    var tdName;
    var stateFieldID;
    
    var index = txtFieldName.charAt(txtFieldName.length - 1);
    if (!Sapi.isDigit(index)){ index = 0;}
    
    
    if (type == c_Suburb){
        divHeight = "150px";
        tdName = txtFieldName.replace(c_Suburb,c_Postcode);
        stateFieldID = txtFieldName.replace(c_Suburb,c_State);
        
        document.getElementById("SuburbName").value = txtFieldName;
        document.getElementById("StateName").value = stateFieldID;
        document.getElementById("PostcodeName").value = tdName;
        
        document.getElementById("DivLeftPosition").value = "440";//not in use currently
    }
    if (type == c_Postcode){
        divHeight = "100px";
        tdName = txtFieldName.replace(c_Postcode,c_Suburb);
        stateFieldID = txtFieldName.replace(c_Postcode,c_State);
        
        document.getElementById("SuburbName").value = tdName;
        document.getElementById("StateName").value = stateFieldID;
        document.getElementById("PostcodeName").value = txtFieldName;
        
        document.getElementById("DivLeftPosition").value = "340";//not in use currently
    }
    
    //this is for div position. Currently not in use
    if (txtFieldName == "txtSuburb")
    {
        document.getElementById("DivLeftPosition").value = "700";
    }
    else if (txtFieldName == "txtPostcode")
    {
        document.getElementById("DivLeftPosition").value = "650";
    }
        
    var stateID = document.getElementById(stateFieldID).value;
    //document.getElementById(txtFieldName + "TD").style.position = "fixed";
    //document.getElementById(tdName + "TD").style.position = "fixed";
    if (Str.length>0)
    {
        if (Sapi)
	    {
		    var Arr = Sapi.MatchSuburb(Str,stateID,100,index);	
		    if (Arr.length>0)
		    {
			    dispListSuburb(Arr, txtFieldName, type);
		    } else {
			    hideSuburbList(txtFieldName);
		    }
	    } 
    }
    else
    {
        hideSuburbList(txtFieldName);
    }
	
}


function dispListSuburb(Arr, txtFieldName, type)
{
	var H = "" ;	
	var Regex ;
	Action = new Array();
	for (var i = 0; i < Arr.length; i++) {
 		var D = Arr[i].split("\t");
 		
		Regex = /\\\'/ ;
		D[1] = D[1].replace(Regex,"'");		
		D[3] = D[3].replace(Regex,"'");		
		Regex = /\'/ ;		
		D[1] = D[1].replace(Regex,"\'");
		D[3] = D[3].replace(Regex,"\'");
		Regex = /\"/ ;
		D[1] = D[1].replace(Regex,"&quot;");
		D[3] = D[3].replace(Regex,"&quot;");
		
		var N = D[0].split(",");
		var SubName = N[0].titleCase();
		var StateName = Trim(N[1]);
		//alert(N[1]);
		var Postcode = Trim(N[2]);
		

		//alert(D[1] + "  :  " + D[3]);
		Action.push("SelectSuburb('"+SubName+"','"+StateName+"','"+Postcode+"','"+txtFieldName+"','"+type+"')");

		H += "<tr><td onmouseover=\"SetTDMouseOver("+i+")\" nowrap class=\"content\" style=\"cursor: hand;\" onclick=\"javascript: SelectSuburb('"+SubName+"','"+StateName+"','"+Postcode+"','"+txtFieldName+"','"+type+"')\">"+SubName+", "+StateName+" " +Postcode+"</td></tr>" ;
	}

	KP_TableRow = Arr.length;

	if (Arr.length>0){
	    var openDiv = document.getElementById("suburbDiv").value;
	    if (openDiv != ""){hideSuburbList(openDiv);}
		var LS = document.getElementById(txtFieldName + "List");
		
		var fm = document.getElementById(txtFieldName + "frm");
		fm.style.top = (getY(document.getElementById(txtFieldName)) + 1) + "px";
		fm.style.left = (getX(document.getElementById(txtFieldName)) + 1) + "px";
		fm.style.position="absolute";
		fm.style.display='block';
		fm.style.visibility='visible';
		fm.style.height = (parseInt(divHeight) - 3) + "px";
		fm.style.width = "192px" ;
		fm.style.zIndex = 999;
		
		document.getElementById("suburbDiv").value = txtFieldName;
		LS.style.position="absolute";
		
		LS.style.top = getY(document.getElementById(txtFieldName)) + "px";//parseInt(document.getElementById("txtSuburbTopPosition").value);  //parseInt(document.getElementById("Top" + txtFieldName).value);
		LS.style.left = getX(document.getElementById(txtFieldName)) + "px";//parseInt(document.getElementById("txtSuburbLeftPosition").value);  //parseInt(document.getElementById("DivLeftPosition").value );
		LS.style.zIndex = 1000;
		LS.style.display='block';
		LS.style.visibility='visible';
		LS.style.height = divHeight ;
		LS.style.width = "196px" ;
		LS.style.overflow = "auto" ;
		LS.style.padding = "0px" ;
		LS.style.border = "1px solid #999999" ;
		KP_TablePos = 1 ;
		LS.innerHTML = '<table width="196px" cellspacing="0" cellpadding="2" bgcolor="#FFFFFF" id="TableKu"><tbody><tr><td height=5px bgcolor="blue"></td></tr>'+H+'</tbody></table>' ;
		
		
		
		KP_TableTop = StateName; // document.getElementById('txtState').value ;
		KP_setTableHighlight();
		var T = document.getElementById('TableKu') ;
		if (parseInt(LS.style.height,10) > T.offsetHeight)
        {
			LS.style.height = (T.offsetHeight)+"px" ;
			fm.style.height = (parseInt(T.offsetHeight) - 3)+"px" ;
		}	
	} else {
				hideSuburbList(txtFieldName);
	}
}
function getY(control)
{
    var Y = findPosY(control);
    Y = Y + 22;
    return Y;
}
function getX(control)
{
    var X = findPosX(control);
    return X;
}
function SetTDMouseOver(D) {
	KP_TablePos = D + 2;
	KP_setTableHighlight();
}

function hideSuburbList(txtFieldName)
{
	var LS = document.getElementById(txtFieldName + "List");
	LS.innerHTML = "" ;
	LS.style.display='none';
	LS.style.visibility='hidden';
	
	var fm = document.getElementById(txtFieldName + "frm");
	fm.style.display='none';
	fm.style.visibility='hidden';
}

function hideSuburbList1()
{
    //'txtPropertySuburb1'
    for (var i = 1; i<=10; i++)
    {
        if (document.getElementById('txtPropertySuburb'+ i +'frm').style.display != 'none')
        {
            hideSuburbList('txtPropertySuburb' + i);
            break;
        }
        if (document.getElementById('txtPropertyPostcode' + i +'frm').style.display != 'none')
        {
            hideSuburbList('txtPropertyPostcode' + i);
            break;
        }
    }
}
//---------------------------------------------------------------------------------------------------------------------


var KP_TableTop = "" ;
var KP_TableRow = 10 ;
var KP_TablePos = 1 ;
var KP_TableDiv = 'TableKu' ;
var KP_HighlightColor = "#FFFFFF" ;
var KP_HighlightBgColor = "#CCCCCC" ;
var KP_NormalColor = "#000000" ;
var KP_NormalBgColor = "#FFFFFF" ;
var KP_NormalColor, KP_NormalBgColor ;

function CheckKeyPress(e) {
	var KC = e.keyCode ;
	var txtState = document.getElementById("StateName").value ;
    var txtPostcode = document.getElementById("PostcodeName").value ;
    var txtSuburb = document.getElementById("SuburbName").value ;
   // alert ('state: ' + txtState + ', Postcode:' + txtPostcode + ', Suburb:' + txtSuburb);
	if (KC == 38 || KC == 40) {
    	if (KC == 38) {
				if (KP_TablePos<=1)
                {
					KP_TablePos = 0 ;
					document.getElementById(txtSuburb).focus();
					document.getElementById(txtState).onkeydown = function() { return true; } ;
					document.getElementById(txtState).value = KP_TableTop ;
				} else {
						KP_TablePos = (KP_TablePos<=1)?1:KP_TablePos-1;
					}
		}
		if (KC == 40) {
		        
				document.getElementById(txtState).focus();
				if (document.getElementById(KP_TableDiv))
                {				
				    document.getElementById(txtState).onkeydown = function() { return false; } ;
				    document.getElementById(txtState).value = KP_TableTop ;
				}
				KP_TablePos = (KP_TablePos>=KP_TableRow+1)?KP_TableRow+1:KP_TablePos+1;
				
			}
			KP_setTableHighlight();
			if (document.getElementById(KP_TableDiv))
            {
				if (document.getElementById(KP_TableDiv).tBodies[0].rows[KP_TablePos-1])
            {
				document.getElementById(txtSuburb + 'List').scrollTop = document.getElementById(KP_TableDiv).tBodies[0].rows[KP_TablePos-1].offsetTop ;	
			}
		}
	}
	
	if (KC == 13) {
		//alert("Pilih "+document.getElementById(KP_TableDiv).tBodies[0].rows[KP_TablePos-1].cells[0].innerHTML);
		eval(Action[KP_TablePos-2]);
	}
}

function KP_setTableHighlight() {
	if (document.getElementById(KP_TableDiv)) {
		var T = document.getElementById(KP_TableDiv);
		for (var i = 0; i < T.tBodies[0].rows.length; i++) {
		   // alert (i + '  ' + KP_TablePos);
			var Color = (i == KP_TablePos-1)?KP_HighlightColor:KP_NormalColor;
			var BgColor = (i == KP_TablePos-1)?KP_HighlightBgColor:KP_NormalBgColor;
			T.tBodies[0].rows[i].style.color = Color ;
			T.tBodies[0].rows[i].style.backgroundColor = BgColor ;
		}
	}
}


//---------------------------------------------------------------------------------------------------------------------


function Trim(D) {
	if (D)
	{
		var Regex ;
		Regex = /\s*$/ ;
		D = D.replace(Regex,"");
		Regex = /^\s*/ ;
		D = D.replace(Regex,"");
    }
	
	return D ;
}

String.prototype.titleCase = function() {
    var parts = this.split(" ");
	if (parts.length==0) {
	    return "";
	}
	
	for (var i=0;i<parts.length;i++) {
		parts[i] = parts[i].substr(0,1).toUpperCase()+parts[i].substr(1,parts[i].length).toLowerCase();
	}
	return parts.join(" ");
}

function findPosX(obj)
  {
    var curleft = 0;
    if(obj.offsetParent)
        while(1) 
        {
          curleft += obj.offsetLeft;
          if(!obj.offsetParent)
            break;
          obj = obj.offsetParent;
        }
    else if(obj.x)
        curleft += obj.x;
    return curleft;
  }

  function findPosY(obj)
  {
    var curtop = 0;
    if(obj.offsetParent)
        while(1)
        {
          curtop += obj.offsetTop;
          if(!obj.offsetParent)
            break;
          obj = obj.offsetParent;
        }
    else if(obj.y)
        curtop += obj.y;
    return curtop;
  }
  
