var zipCID=clientID+'tbZip';

var type=0;	
var current_type;
var zip=null;
var loaded=true;
	
	
	
var req=new Array(3);
req[0]=null;req[1]=null;req[2]=null;	

var header=new Array();
header[0]='Select Region';header[1]='Select Country';header[2]='Select City';


var c_idLookup=new Array(3);
	c_idLookup[0]=clientID+'Country';c_idLookup[1]=clientID+'State';c_idLookup[2]=clientID+'City';

var reqLookup=new Array(3);
	reqLookup[0]=null;reqLookup[1]=null;reqLookup[2]=null;	

var panel_id=new Array(3);
	panel_id[0]='popupCountry';panel_id[1]='popupState';panel_id[2]='popupCity';
	
var selectedIndex=-1;
var prev=null;


var item_id=new Array(3);
item_id[0]='Country';item_id[1]='State';item_id[2]='City';

var c_id=new Array(3);
c_id[0]=clientID+'ddlCountry';c_id[1]=clientID+'ddlState';c_id[2]=clientID+'ddlCity';
	


function GetTopItem(str){
	str=str.substring(3);
	var obj1=str.indexOf("###");
	var v1=str.substring(0,obj1);
	str=str.substring(obj1+3);
	var obj2=str.indexOf("###");
	var v2=str.substring(0,obj2);
	str=str.substring(obj2+3);
	
	var name="";
	var temp="";
	while(v2.length!=0){
		if(v2.indexOf(" ")>0){
			temp=v2.substring(0,v2.indexOf(" "));
			v2=v2.substring(v2.indexOf(" ")+1,v2.length);
		}
		else {
			temp=v2;
			v2="";
		}
		
		temp=temp.substring(0,1)+(temp.substring(1,temp.length)).toLowerCase();
		
		if(name=="")
			name+=temp;
		else name+=" "+temp;
	}
	
	
	v2=name;
	if(v2=='' || v2==null)
		return null;
		
	var item=new Array();
	item[0]=v1;
	item[1]=v2;
	return item;		
}

function DeleteTopItem(str){
	str=str.substring(3);
	var obj1=str.indexOf("###");
	str=str.substring(obj1+3);
	var obj2=str.indexOf("###");
	str=str.substring(obj2+3);
	
	return str;
}

function IgnoreKeyPress(event1){	
	if(event1!=null)
		event1.returnValue=false;
	else 
		window.event.returnValue = false;
}

function CreatePanel(id,str){						

	var html='<table width=200 cellspacing=0 cellpadding=0>';
	
	if(str=='')
		return html+"<tr><td class=address_lookup>No matches found</td></tr></table>";				
	
		
	var i=0;	
	var item=null			
	while((item=GetTopItem(str))!=null)	{
		
		str=DeleteTopItem(str);
		
				
		if(i>10){
			html+="<tr><td class=\"address_lookup\">...</td></tr>";
			break;
		}
		
		while(item[1].indexOf(" ")>=0)
			item[1]=item[1].replace(" ","&nbsp;");
		
		html+='<tr><td';
		html+=' name=\"'+item[0]+'\" id=\"'+item_id[id]+i+'\" onclick=ClickItem(\"'+id+'\",\"'+item[1]+'\",\"'+item[0]+'\") class=\"address_lookup\" onmouseover=ChangeSelection(\"'+id+'\",false,\"'+i+'\") onmouseout=this.className=\"address_lookup\">'+item[1]+'</td></tr>';
		i++;						
	}
	
	return html+"</table>";
}

function LoadingPanel(){
	var html='<table width=200 cellspacing=0 cellpadding=0>';		
	return html+"<tr><td class=address_lookup>Loading...</td></tr></table>";
}

function FillLookupPanel(){
	if(reqLookup[current_type].readyState==4)
		if(reqLookup[current_type].status==200)
			LoadPanel(current_type,reqLookup[current_type].responseText);			
}	

function CreateLoadingPanel(_type){
	var html=LoadingPanel();
	var obj=document.getElementById(panel_id[_type]);

	obj.style.display='block';
	obj.innerHTML=html;		
					
	selectedIndex=0;
	
	ChangeSelection(_type,false,0);
}
	
	
function ZeroizeControl(_type,flag){
	if(flag)
		document.getElementById(c_idLookup[_type]).value="";			
	document.getElementById(c_idLookup[_type]+'ID').value="-1";
	
	if(_type<2)
		ZeroizeControl(_type*1+1,true);
}

function LoadPanel(_type,str)	{
	var html=CreatePanel(_type,str);
	var obj=document.getElementById(panel_id[_type]);	
	
	obj.style.display='block';
	obj.innerHTML=html;		
					
	selectedIndex=0;		
	ChangeSelection(_type,false,0);
}	

function GetCountryList(event1){
	GetLookupList(event1,0);
}

function GetStateList(event1){
	GetLookupList(event1,1);
}

function GetCityList(event1){
	GetLookupList(event1,2);
}


function ClickItem(_type,name,ID)
{
	while(name.indexOf("&nbsp;")>=0)
		name=name.replace("&nbsp;"," ");
		
	document.getElementById(c_idLookup[_type]).value=name;
	document.getElementById(c_idLookup[_type]+'ID').value=ID;					
	
	prev=name;
	
	if(_type<2)
		ZeroizeControl(_type*1+1,true);
}

function ChangeSelection(_type,b,select)
{
	var i=0;
	var obj;
	while((obj=document.getElementById(item_id[_type]+i))!=null)
	{						
		obj.className='address_lookup';
		i++;
	}
		
	var obj=document.getElementById(item_id[_type]+select);
	if(obj!=null)
	{
		
		obj.className='address_lookup_select';
		
		if(b)
			ClickItem(_type,obj.innerHTML.replace("&nbsp;"," ").replace("&nbsp;"," ").replace("&nbsp;"," "),obj.name);
	}		
}

function ExistItem(_type,id){		
	return (document.getElementById(item_id[_type]+id) != null) ;
}


function CheckStateLabel()
{
	if(document.getElementById(c_idLookup[0]+'ID').value=="2")
		document.getElementById('lbState').innerHTML="State";
	else if(document.getElementById(c_idLookup[0]+'ID').value=="5")
		document.getElementById('lbState').innerHTML="Province";
	else document.getElementById('lbState').innerHTML="Country";
}
function ArrowPressCountry(event1){
	ArrowPress(0,GetKeyCode(event1),event1);
}

function ArrowPressState(event1){
	ArrowPress(1,GetKeyCode(event1),event1);
}

function ArrowPressCity(event1){
	ArrowPress(2,GetKeyCode(event1),event1);
}		

function ArrowPress(_type,key,event1)
{
	if(key=='40') //down
	{	
		if(ExistItem(_type,selectedIndex+1))
		{
		
			selectedIndex++;
			ChangeSelection(_type,true,selectedIndex);
		}
		
		IgnoreKeyPress(event1);
		return;
	}
	if(key=='38')//up
	{
		if(ExistItem(_type,selectedIndex-1))
		{
			selectedIndex--;
			ChangeSelection(_type,true,selectedIndex);							
		}
		IgnoreKeyPress(event1);
		return;
	}
	if(key=='13')
	{
		ChangeSelection(_type,true,selectedIndex);
		document.getElementById(panel_id[_type]).style.display='none';
		
		selectedIndex=-1;
					
		IgnoreKeyPress(event1);
		return;
	}		
	
	if(key=='9' && selectedIndex!=-1)
	{
		ChangeSelection(_type,true,selectedIndex);
		document.getElementById(panel_id[_type]).style.display='none';
		
		selectedIndex=-1;
		
		IgnoreKeyPress(event1);
		return;
	}				
}	

function Null(slv,id){
	if(document.getElementById(slv).value.length==0)
		document.getElementById(clientID+id).value="-1";
}


function GetLookupList(event1,_type)
{
	CheckStateLabel();
	
	var key=GetKeyCode(event1);	
		
	if(key=='40' || key=='38' || key=='13' || key=='9')	
		return false;		
		
	var prevID=null;
	var prevName=null;
	
	if(_type>0)
	{
		prevID=document.getElementById(c_idLookup[_type-1]+'ID').value;
		prevName=document.getElementById(c_idLookup[_type-1]).value;


		if(prevID=='-1' || prevID==null || prevID.length==0)	
			prevID=-1;
			
		if(prevID==-1 && prevName.length!=0)
			prevID=-2;
	}
	
	var cntryID;
	var cntryName;
	if(_type>1)
	{
		cntryID=document.getElementById(c_idLookup[_type-2]+'ID').value;
		cntryName=document.getElementById(c_idLookup[_type-2]).value;


		if(cntryID=='-1' || cntryID==null || cntryID.length==0)	
			cntryID=-1;
			
		if(cntryID==-1 && cntryName.length!=0)
			cntryID=-2;				
	}

	ZeroizeControl(_type,false);
	
	prev=document.getElementById(c_idLookup[_type]).value;
			
	reqLookup[_type]=createRequester();
	
	if(reqLookup[_type]!=null)
	{			
		CreateLoadingPanel(_type);
		
		current_type=_type;
		
		//alert(1);
		reqLookup[_type].onreadystatechange=FillLookupPanel;
		reqLookup[_type].open("GET",addPath+"/getaddresslist.aspx?type="+_type+"&id="+prevID+"&cID="+cntryID+"&start="+prev,true);	
		reqLookup[_type].send(null);
	}
}

function ChangeView(val)
{
	if((document.getElementById(clientID+'cbNoAddress')!=null && document.getElementById(clientID+'cbNoAddress').checked) || defSuggest=='True')
	{
		type=1;
		
		if(!(val==false))				
			if(document.getElementById(c_id[0]).value!=null && document.getElementById(c_id[0]).value!="" && document.getElementById(c_id[0]).value!="-1")
			{
				document.getElementById(c_idLookup[0]).value=document.getElementById(c_id[0]).options[document.getElementById(c_id[0]).selectedIndex].text;
				document.getElementById(c_idLookup[0]+"ID").value=document.getElementById(c_id[0]).value;
				
				if(document.getElementById(c_id[1]).value!=null && document.getElementById(c_id[1]).value!="" && document.getElementById(c_id[1]).value!="-1")
				{
					document.getElementById(c_idLookup[1]).value=document.getElementById(c_id[1]).options[document.getElementById(c_id[1]).selectedIndex].text;
					document.getElementById(c_idLookup[1]+"ID").value=document.getElementById(c_id[1]).value;
					
					if(document.getElementById(c_id[2]).value!=null && document.getElementById(c_id[2]).value!="" && document.getElementById(c_id[2]).value!="-1")
					{
						document.getElementById(c_idLookup[2]).value=document.getElementById(c_id[2]).options[document.getElementById(c_id[2]).selectedIndex].text;
						document.getElementById(c_idLookup[2]+"ID").value=document.getElementById(c_id[2]).value;
					}
				}
			}
			
		CheckStateLabel();
	}
	else type=0;
	
	
	document.getElementById('type_'+type).style.display="block";
	document.getElementById('type_'+(1-type)).style.display="none";
}	

function loadZipCodeInfo()
{
	if(reqZip.readyState == 4) 				
		if (reqZip.status == 200) 
		{	
			var str=reqZip.responseText;
			
			if(str=="-1")
			{
				alert("No matches found. (such zip code doesn't exists!!!)");
				return;
			}
			
			var obj=document.getElementById(clientID+'cbNoAddress');
			if(obj!=null)
			{
				obj.checked=false;
				ChangeView();
			}
			
			var item;
			for(var j=0;j<3;j++)
			{
				item=GetTopItem(str);				
				selected[j]=item;
				str=DeleteTopItem(str);
			}
			
			SaveDropDownsValues();
			
			document.getElementById(c_id[0]).value=selected[0][1];
			LoadDropDownList(1);				
		}
}

function CheckZip()
{
	var obj=document.getElementById(zipCID);
	if(obj.value.length==5 && obj.value!=zip)
	{
		zip=obj.value;
		ZipLookup();				
	}
}

var reqZip;

function ZipLookup()
{
	if(document.getElementById(zipCID).value.length!=5)
		alert('Please enter valid Zip Code! (5 digit number)');
	else
	{
		reqZip=createRequester();	
		
		reqZip.onreadystatechange = loadZipCodeInfo;
		reqZip.open("GET",addPath+"/getaddresslist.aspx?type=5&id="+document.getElementById(zipCID).value, true);
		reqZip.send(null);
	}
}

function SetDropDownValue(_type,val)
{
	var ddl=document.getElementById(c_id[_type]);
	for(var i=0;i<ddl.options.length;i++)
		if(ddl.options[i].value==val)
		{
			ddl.options[i].selected=true;
			return;
		}
		
	ddl.value="-1";
	
}	

function FillPanel(_type,str)
{					
	var listControl=document.getElementById(c_id[_type]);		
	listControl.options[0]=new Option('<<< '+header[_type]+' >>>','-1');
	
	var item=null
	while((item=GetTopItem(str))!=null)
	{
		str=DeleteTopItem(str);
		listControl.options[listControl.options.length]=new Option(item[1],item[0]);
	}		

	if(selected[_type]!=null)
		SetDropDownValue(_type,selected[_type][1]);
	
	selected[_type]=null;
	
	if(_type<2)
		LoadDropDownList(_type+1);
		
	SaveDropDownsValues();
}
	
function FillList()
{
	if(req[current_type].readyState==4)
		if(req[current_type].status==200){
			FillPanel(current_type,req[current_type].responseText);
		}
}


function LoadDropDownList(_type)
{
	if(_type!=2)
		loaded=true;
	
	// change 2-nd label
	if(document.getElementById(c_id[0]).value=="2")
		header[1]="Select State"
	else if(document.getElementById(c_id[0]).value=="5")
		header[1]="Select Province"
	else header[1]="Select Country";

	var obj =  document.getElementById(c_id[_type]);
	
	obj.options[0]=new Option('Loading...','-1');
	
	for(var i=_type;i<=2;i++)
	{
		var temp=document.getElementById(c_id[i]);
			for(var j=temp.options.length-1; j>=1;j--)
				temp.options[j]=null;
	}
	
	req[_type]=createRequester();
	if(req[_type]!=null)
	{
		current_type=_type;
		
		var temp=null;
		if(_type>0)
		{
			temp=document.getElementById(c_id[_type-1]).value;
			if(temp=='-1')
			{
				obj.options[0]=new Option('Select address part above','-1');
				return;
			}
		}
		
		req[_type].onreadystatechange=FillList;

		//req[_type].caching = false;
		req[_type].open("GET",addPath+"/getaddresslist.aspx?type="+_type+"&start=&id="+temp+"&cityID="+(selected[2]!=null && selected[2][1]!="" && selected[2][1]!="-1" ? selected[2][1] : ""),true);
		req[_type].send(null);
		if(selected[2]!=null && selected[2][1]!="" && selected[2][1]!="-1")
			loaded=false;
	}		
}

function _LoadDropDownList(_type)
{
	if(!loaded)
		LoadDropDownList(_type);
	loaded=true;
}


if(document.getElementById(clientID+'Country')!=null){
	document.getElementById(clientID+'Country').onkeydown=ArrowPressCountry;
	document.getElementById(clientID+'Country').onkeyup=GetCountryList;
}


if(document.getElementById(clientID+'State')!=null){
	document.getElementById(clientID+'State').onkeydown=ArrowPressState;	
	document.getElementById(clientID+'State').onkeyup=GetStateList;
}

if(document.getElementById(clientID+'City')!=null){
	document.getElementById(clientID+'City').onkeydown=ArrowPressCity;
	document.getElementById(clientID+'City').onkeyup=GetCityList;	
}


LoadDropDownList(0);	
ChangeView(false);

function SaveDropDownsValues(){
	document.getElementById(clientID+'ddlCountryValue').value=document.getElementById(c_id[0]).value;
	document.getElementById(clientID+'ddlStateValue').value=document.getElementById(c_id[1]).value;
	document.getElementById(clientID+'ddlCityValue').value=document.getElementById(c_id[2]).value;	
}
