/********************************************************
 * Copyright (C) 2008-2009, Appasaheb Sawant All rights reserved.
 * Appasaheb Sawant is a registered trademark.
 *
 * THIS SOURCE CODE MAY BE USED FREELY PROVIDED THAT
 * IT IS NOT MODIFIED OR DISTRIBUTED, AND IT IS USED
 * ON A PUBLICLY ACCESSIBLE INTERNET WEB SITE.
 * 
 * AutoComplete Liabry for gettinglist of contry 
 *
 * You can obtain this script at http://www.codehouse.com
 

 
 /****************************************************************************************************************
 /*********************************************************JSON list of Cities************************************/
 //----------------------------------------------------------------------------------------------------------------
 
var COUNTRY_LIST=["India","United States","Afghanistan","Aland Islands","Albania","Algeria","American Samoa","Andorra","Angola","Anguilla","Antarctica","Antigua and Barbuda","Argentina","Armenia","Aruba","Australia","Austria","Azerbaijan","Bahamas","Bahrain","Bangladesh","Barbados","Belarus","Belgium","Belize","Benin","Bermuda","Bhutan","Bolivia","Bosnia and Herzegovina","Botswana","Bouvet Island","Brazil","British Indian Ocean Territory","Brunei Darussalam","Bulgaria","Burkina Faso","Burundi","Cambodia","Cameroon","Canada","Cape Verde","Cayman Islands","Central African Republic","Chad","Chile","China","Christmas Island","Cocos (Keeling) Islands","Colombia","Comoros","Congo","Cook Islands","Costa Rica","Cote DIvoire (Ivory Coast)","Croatia (Hrvatska)","Cuba","Cyprus","Czech Republic","Democratic Republic of the Congo","Denmark","Djibouti","Dominica","Dominican Republic","East Timor","Ecuador","Egypt","El Salvador","Equatorial Guinea","Eritrea","Estonia","Ethiopia","Faroe Islands","Federated States of Micronesia","Fiji","Finland","France","France, Metropolitan","French Guiana","French Polynesia","French Southern Territories","Gabon","Gambia","Georgia","Germany","Ghana","Gibraltar","Great Britain (UK)","Greece","Greenland","Grenada","Guadeloupe","Guam","Guatemala","Guinea","Guinea-Bissau","Guyana","Haiti","Heard Island and McDonald Islands","Honduras","Hong Kong","Hungary","Iceland","Indonesia","Iran","Iraq","Ireland","Israel","Italy","Jamaica","Japan","Jordan","Kazakhstan","Kenya","Kiribati","Korea (North)","Korea (South)","Kuwait","Kyrgyzstan","Laos","Latvia","Lebanon","Lesotho","Liberia","Libya","Liechtenstein","Lithuania","Luxembourg","Macao","Macedonia","Madagascar","Malawi","Malaysia","Maldives","Mali","Malta","Marshall Islands","Martinique","Mauritania","Mauritius","Mayotte","Mexico","Moldova","Monaco","Mongolia","Montserrat","Morocco","Mozambique","Myanmar","Namibia","Nauru","Nepal","Netherlands","Netherlands Antilles","New Caledonia","New Zealand (Aotearoa)","Nicaragua","Niger","Nigeria","Niue","Norfolk Island","Northern Mariana Islands","Norway","Oman","Pakistan","Palau","Palestinian Territory","Panama","Papua New Guinea","Paraguay","Peru","Philippines","Pitcairn","Poland","Portugal","Puerto Rico","Qatar","Reunion","Romania","Russian Federation","Rwanda","S. Georgia and S. Sandwich Islands ","Saint Helena","Saint Kitts and Nevis","Saint Lucia","Saint Pierre and Miquelon","Saint Vincent and the Grenadines","Samoa","San Marino","Sao Tome and Principe","Saudi Arabia","Senegal","Serbia and Montenegro","Seychelles","Sierra Leone","Singapore","Slovakia","Slovenia","Solomon Islands","Somalia","South Africa","Spain","Sri Lanka","Sudan","Suriname","Swaziland","Sweden","Switzerland","Syria","Taiwan","Tajikistan","Tanzania","Thailand","Timor-Leste","Togo","Tokelau","Tonga","Trinidad and Tobago","Tunisia","Turkey","Turkmenistan","Turks and Caicos Islands","Tuvalu","Uganda","Ukraine","United Arab Emirates","United Kingdom","Uruguay","Uzbekistan","Vanuatu","Vatican City State (Holy See)","Venezuela","Viet Nam","Virgin Islands (British)","Virgin Islands (U.S.)","Wallis and Futuna","Western Sahara","Yemen","Zambia","Zimbabwe"];

//------------------------------------------------------------------------------------------------------------------------------------
/*********************************************************End here **********************************************************************/
/*****************************************************************************************************************************************/ 
 
//Create Object of JSON String 
var objJSON= new Object();

//Evaluate object for values
objJSON=eval(COUNTRY_LIST);

GetCountry=function()
{
	
	//Access DOM elements
	this.element=document.getElementById('AutoCompleteCountry');
	this.objDiv=document.getElementById('AutoCompleteList');
	
	this.getCountryList=function()
	{	
		
		//Call function on onkey up events
		this.element.onkeyup=function(eEvent)
		{
			if(!eEvent)
			{
				eEvent=window.event;		
			}
			
			if(eEvent.keyCode==40 || eEvent.keyCode==38 || eEvent.keyCode==13)
			{
				return false;	
			}
			else
			{
				objGetCountry= new GetCountry();
				objGetCountry.searchCountry(objGetCountry.element,objGetCountry.objDiv);
				
				objEvent= new KeyboardEvents();
				objEvent.getKeyEvent();	
			}
		}	
		
	}
	
	//for serching elements in JSON string 
	this.searchCountry=function (element,objDiv) 
	{ 
		
		objGetCountry= new GetCountry();
		
		var strHTML='';
		var search_value =element.value;
		var allitems=eval(COUNTRY_LIST);
		
		if(search_value.length>0) 
		{
			for (var i=0;i<allitems.length;i++) 
			{
				var name = allitems[i];
				var exp = new RegExp(search_value,"i");
				if(name.match(exp) != null) 
				{
					var elementId = element.getAttribute("id");
					var divId = objDiv.getAttribute("id");
					strHTML+="<div onclick=\"objGetCountry.selectCountry('"+elementId+"','"+name+"','"+divId+"');\" onmouseover=\"this.className='selected';\" onmouseout=\"this.className='notselected';\">"+name+"</div>";
				}
			}
		
			objDiv.innerHTML=strHTML;
			objDiv.style.display="block";
			
		}
		
				
	}
	
	//Select highlighted Element
	this.selectCountry=function(elementId,value,divId)
	{
		document.getElementById(elementId).value=value;
		document.getElementById(divId).style.display="none";
	}
		
}

//Handle Keyboard Events

KeyboardEvents=function()
{
	this.element=document.getElementById('AutoCompleteCountry');
	var current=-1;
	var item_index=0;
	var oNode=0;
	this.getKeyEvent=function()
	{
		this.element.onkeydown=function(eEvent)
		{
			if(!eEvent)
			{
				eEvent=window.event;		
			}
	
			var objDiv=document.getElementById('AutoCompleteList');
			var element=document.getElementById('AutoCompleteCountry');
			
			switch(eEvent.keyCode)
			{
				case 40:
					var item_index=1;
				break;
				case 38:
					var item_index=-1;
					break;
				case 13:
					var strvalue=objDiv.getElementsByTagName("div").item(oNode).innerHTML;	
					objCountry= new GetCountry();	
					objCountry.selectCountry(element.getAttribute("id"),strvalue,objDiv.getAttribute("id")); 
				break;
			}
			
				var total_nodes=objDiv.getElementsByTagName("div").length;
				if(total_nodes>0)
				{		
					if(item_index>0)
					{		
						if(current < total_nodes-1)
						{
							oNode=++current;
						}
					}
					else
					{
						if(current > 0)
						{
							oNode=--current;	
						}
					}
					
					if(current>0)
					{
						if(item_index==1)
						{
							objDiv.getElementsByTagName("div").item(current-1).className="notselected";	
							if(current%10==0)
							{
								objDiv.scrollTop+=140;	
							}
						}
						else
						{
							objDiv.getElementsByTagName("div").item(current+1).className="notselected";		
							if(current%10==0)
							{
								objDiv.scrollTop-=140;	
							}
						}
					}
					else if(current==0 && item_index==-1)
					{
						objDiv.getElementsByTagName("div").item(current+1).className="notselected";	
					}
					
					if(oNode>=0)
					{
						objDiv.getElementsByTagName("div").item(oNode).className="selected";
					}
					
					
					
				}
			
		}
	}
}

window.onload=function()
{
	objCountry= new GetCountry();	
	objCountry.getCountryList(); 
}

//----------------------------------------------------------------------------------------------------------------------------------------------
//*********************************************************End here ******************************************************************************
//=================================================================================================================================================

