CStateCountries =Class.create();

CStateCountries.prototype = {

    initialize: function( objConfig )
	{
		this.sCountryFieldId	= objConfig.sCountryId;
		this.aStates			= objConfig.aStates;
		this.sStateFieldId		= objConfig.sStateId;
		this.sStateValue		= (objConfig.sStateValueDeafult)?objConfig.sStateValueDeafult:null;
		this.sCountryValue		= (objConfig.sCountryValueDefault)?objConfig.sCountryValueDefault:null;
		this.startOnDomLoaded	= (objConfig.startOnDomLoaded)?objConfig.startOnDomLoaded:true;
		this.__setDefVaueFlag	= false;
		Event.observe( document,'dom:loaded', this.init.bindAsEventListener(this) );
	},
	
	init: function()
	{
		this.checkStatesExists();
		Event.observe(this.sCountryFieldId,'change',this.checkStatesExists.bindAsEventListener(this) );
	},
	
	checkStatesExists: function(objEvent )
	{
		var iCountry	= $(this.sCountryFieldId).value;
		var aStates		= this.getStatesByCountryId(iCountry);
		if( aStates ){
				var className = $(this.sStateFieldId).className;
				var elWidth	  = $(this.sStateFieldId).getWidth();
				var prevInputObj = this.__getPrevElement(this.sStateFieldId);
				Element.remove( $(this.sStateFieldId) );			
				
				var objSelect		= document.createElement('select');
				objSelect.className = className;
				objSelect.style.width = elWidth + 'px';
				
				objSelect.id		= this.sStateFieldId;
				objSelect.name		= this.sStateFieldId ;
				
				Insertion.After(prevInputObj, objSelect );

				var objSelectBox = $(this.sStateFieldId);
				for( var i=0; i< aStates.length; i++ ){
					if( this.sCountryValue == iCountry && !this.getDefaultValueFlag() && aStates[i] == this.sStateValue){
						if( Prototype.Browser.IE){							var optValue = document.createElement('option');							
							optValue.text 		= aStates[i];	
							optValue.value 		= aStates[i];
							optValue.selected 	= true;
							objSelectBox.add( optValue );
						}  else {
							Element.append(objSelectBox,'option',{'value':aStates[i],'text':aStates[i],'selected':true} );
						}
						this.setDefaultValueFlag(true);
					}
					else {
						if( Prototype.Browser.IE){
							var optValue = document.createElement('option');							
							optValue.text = aStates[i];	
							optValue.value = aStates[i];
							objSelectBox.add( optValue );
						} else {
							Element.append(objSelectBox,'option',{'value':aStates[i],'text':aStates[i]} );
						}
					}
				}
		} else {
			if( $(this.sStateFieldId).tagName.toLowerCase() != 'input'){
			var objTextBox				= document.createElement('input');
				objTextBox.type			= 'text';
				objTextBox.className	= $(this.sStateFieldId).className;
				objTextBox.id			= this.sStateFieldId;
				objTextBox.name			= this.sStateFieldId;

				var prevInputObj = this.__getPrevElement(this.sStateFieldId);
				Element.remove( $(this.sStateFieldId) );				
				Insertion.After(prevInputObj, objTextBox );				
			} 
		}		
	},
	
	__getPrevElement: function( objInputId )
	{
		var prevInputObj = $(objInputId).previous();
		if( prevInputObj == null || !prevInputObj ){
			var objParent 	= $(objInputId).up(0);
			prevInputObj	= document.createElement('span');
			prevInputObj.innerHTML = '<!-- -->';
			objParent.appendChild( prevInputObj );
		}
		return prevInputObj;
	},
	
	 
	getStatesByCountryId: function( iCountryId )
	{
		for(var i=0;i<this.aStates.length;i++){
			if( this.aStates[i].id == iCountryId ){
				return this.aStates[i].hash;
			}
		}
		return false;	
	},
	
	setDefaultValueFlag: function( bFlag )
	{
		this.__setDefVaueFlag = bFlag;	
	},
	
	getDefaultValueFlag: function()
	{
		return this.__setDefVaueFlag;
	}
}
