function SuburbAPIClass() {
	var StateList = new Array();
	var SL = new Array();

	StateList[1] = "NSW" ;
	StateList[2] = "VIC" ;
	StateList[3] = "ACT" ;
	StateList[4] = "TAS" ;
	StateList[5] = "QLD" ;
	StateList[6] = "WA" ;
	StateList[7] = "SA" ;
	StateList[8] = "NT" ;

    for (var i=0; i<=10; i++){
        SL[i] = new Array();
    }
    this.clearArray = clearArray;
    function clearArray(index)
    {
        SL[index] = null;
        SL[index] = new Array();
        SL[index].length = 0;
        
    }

	this.SaveSuburbData = SaveSuburbData ;
	function SaveSuburbData(Data,index) {
		
		var D = Data.split("\n");
		for (var i=0; i<D.length; i++) {
		    SL[index][i] = new Array();
			var A = D[i].split("\t");
			SL[index][i].push(Trim(A[1]));
			SL[index][i].push(Trim(A[2]));
			SL[index][i].push(Trim(A[0]));
			//alert (A[1] + ": " + A[2] + ": " + A[0] + ":  :" + SL[index][i][0] + " " +  SL[index][i][1] + " " +  SL[index][i][2]);
		}
		SL[index].sort() ;
	
	}

	this.MatchSuburb = MatchSuburb ;
	function MatchSuburb(Str,StateId,Numbers,index) {
        //alert(Str +" "+ StateId + " " + Numbers + " " + index);
		Numbers = (Numbers)?Numbers:100;
		var Result = new Array() ;
		if (Str.length > 1)
		{
		    //alert (SL[index].length);
		    if (SL[index].length<=0)
				{
					GetSuburbSelectedList(StateId,index);
				}
	       
		    var Reg = eval("/^"+Str+"/i"); 
		    for (var i=0; i<SL[index].length ; i++)
		    { //alert(SL[index].length);
		        if (isInteger(Str))
		        {
		            if (SL[index][i][2] != null)
		            {   //alert(SL[index][i][2]);
		                if (SL[index][i][2].match(Reg))
			            {
			                Result.push(SL[index][i][0].toUpperCase()+", "+SL[index][i][1]+", "+SL[index][i][2]+"\t"+SL[index][i][0].toUpperCase()+"\t"+SL[index][i][1]+"\t"+i+"\t"+SL[index][i][2]);
			                //alert(SL[index][i][0].toUpperCase()+", "+SL[index][i][1]+", "+SL[index][i][2]+"\t"+SL[index][i][0].toUpperCase()+"\t"+SL[index][i][1]+"\t"+i+"\t"+SL[index][i][2]);
				            if (Result.length >= Numbers)
				            {
					            return Result.sort() ;
				            }
			            } 
		            } 
		        }
		        else
		        {
		            if (SL[index][i][0] != null)
		            {
		                if (SL[index][i][0].match(Reg))
			            {
			                Result.push(SL[index][i][0].toUpperCase()+", "+SL[index][i][1]+", "+SL[index][i][2]+"\t"+SL[index][i][0].toUpperCase()+"\t"+SL[index][i][1]+"\t"+i+"\t"+SL[index][i][2]);
			                //alert(i +"  :" + SL[i][0].toUpperCase()+", "+SL[i][1]+", "+SL[i][2]);
				            if (Result.length >= Numbers)
				            {
					            return Result.sort() ;
				            }
			            } 
		            } 
		        }
		    }
		}
		return Result.sort() ;
	}

	this.GetSuburbSelectedList = GetSuburbSelectedList ;
	function GetSuburbSelectedList(stateID,index) {
	
        Req('GetSuburb','SuburbFile_'+ stateID +'.txt',index);
	}

	this.Req = Req ;
	function Req(ID,url,index) { 
		var url_post = url;
		var url_send = null;
		if (url.indexOf('?')>0)
		{
			url_post = url.substring(0,url.indexOf('?'));
			url_send = url.substring(url.indexOf('?')+1);
		} else {
			url_post = url ;
			url_send = null ;
		}

		var HtReq = false;

		if (window.XMLHttpRequest) { // Mozilla, Safari,...
			HtReq = new XMLHttpRequest();
			if (HtReq.overrideMimeType) {
				HtReq.overrideMimeType('text/xml');
				// See note below about this line
			}
		} else if (window.ActiveXObject) { // IE
			try {
				HtReq = new ActiveXObject("Msxml2.XMLHTTP");
			} catch (e) {
				try {
					HtReq = new ActiveXObject("Microsoft.XMLHTTP");
				} catch (e) {}
			}
		}
		if (!HtReq) {
			alert('Giving up :( Cannot create an XMLHTTP instance');
			return false;
		}

		HtReq.onreadystatechange = function() { 
			if (HtReq.readyState == 4) {
				if (HtReq.status == 200) {
					ReqDone(ID,HtReq,index) ;
				} else {
					alert('There was a problem with the data request. please refresh the page.');
				}
			}

		}
		if (url_send != null)
		{
			HtReq.open('POST', url_post, true);
			HtReq.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
			HtReq.setRequestHeader("Content-length", url_send.length);
			HtReq.setRequestHeader("Connection", "close");
			HtReq.send(url_send);
		} else {
			HtReq.open('GET', url_post, true);
			HtReq.send(url_send);
		}
	}

	this.ReqDone = ReqDone ;
	function ReqDone(ID,HtReq,index) {
		var Data = Trim(HtReq.responseText) ;
		if (Data) {
			if (ID == 'GetSuburb') {
			    if (SL[index].length<=0)
				{
					SaveSuburbData(Data,index);
				}
			}
		}
	}

	this.Trim = Trim ;
	function Trim(D) {
		if (D)
		{
			var Regex ;
			Regex = /\s*$/ ;
			D = D.replace(Regex,"");
			Regex = /^\s*/ ;
			D = D.replace(Regex,"");
		}
		return D ;
	}
	
	this.isInteger = isInteger;
	function isInteger(val){
	if (isBlank(val)){return false;}
	for(var i=0;i<val.length;i++){
		if(!isDigit(val.charAt(i))){return false;}
		}
	return true;
	}
	
	this.isDigit = isDigit;
    function isDigit(num) {
	    if (num.length>1){return false;}
	    var string="1234567890";
	    if (string.indexOf(num)!=-1){return true;}
	    return false;
	}
	
	this.isBlank = isBlank;
    function isBlank(val){
	    if(val==null){return true;}
	    for(var i=0;i<val.length;i++) {
		    if ((val.charAt(i)!=' ')&&(val.charAt(i)!="\t")&&(val.charAt(i)!="\n")&&(val.charAt(i)!="\r")){return false;}
		    }
	    return true;
	}

}
