		var BrowserDetect = {
			init: function () {
				this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
				this.version = this.searchVersion(navigator.userAgent)
					|| this.searchVersion(navigator.appVersion)
					|| "an unknown version";
				this.OS = this.searchString(this.dataOS) || "an unknown OS";
			},
			searchString: function (data) {
				for (var i=0;i<data.length;i++)	{
					var dataString = data[i].string;
					var dataProp = data[i].prop;
					this.versionSearchString = data[i].versionSearch || data[i].identity;
					if (dataString) {
						if (dataString.indexOf(data[i].subString) != -1)
							return data[i].identity;
					}
					else if (dataProp)
						return data[i].identity;
				}
			},
			searchVersion: function (dataString) {
				var index = dataString.indexOf(this.versionSearchString);
				if (index == -1) return;
				return parseFloat(dataString.substring(index+this.versionSearchString.length+1));
			},
			dataBrowser: [
				{ 	string: navigator.userAgent,
					subString: "OmniWeb",
					versionSearch: "OmniWeb/",
					identity: "OmniWeb"
				},
				{
					string: navigator.vendor,
					subString: "Apple",
					identity: "Safari"
				},
				{
					prop: window.opera,
					identity: "Opera"
				},
				{
					string: navigator.vendor,
					subString: "iCab",
					identity: "iCab"
				},
				{
					string: navigator.vendor,
					subString: "KDE",
					identity: "Konqueror"
				},
				{
					string: navigator.userAgent,
					subString: "Firefox",
					identity: "Firefox"
				},
				{
					string: navigator.vendor,
					subString: "Camino",
					identity: "Camino"
				},
				{		// for newer Netscapes (6+)
					string: navigator.userAgent,
					subString: "Netscape",
					identity: "Netscape"
				},
				{
					string: navigator.userAgent,
					subString: "MSIE",
					identity: "Explorer",
					versionSearch: "MSIE"
				},
				{
					string: navigator.userAgent,
					subString: "Gecko",
					identity: "Mozilla",
					versionSearch: "rv"
				},
				{ 		// for older Netscapes (4-)
					string: navigator.userAgent,
					subString: "Mozilla",
					identity: "Netscape",
					versionSearch: "Mozilla"
				}
			],
			dataOS : [
				{
					string: navigator.platform,
					subString: "Win",
					identity: "Windows"
				},
				{
					string: navigator.platform,
					subString: "Mac",
					identity: "Mac"
				},
				{
					string: navigator.platform,
					subString: "Linux",
					identity: "Linux"
				}
			]
		
		};
		BrowserDetect.init();

		function populateShippingSelect()
		{
			var oShipping
			var oCountry;
			var sShippingMethod;
			var iCounter = 0;
			var oOption;
		
			try
			{
				oShipping 	= document.getElementsByName('shippingid')[0];
				oCountry	= document.getElementsByName('s_country')[0];				
			}
			catch(e) {}
			
			if(typeof oShipping == 'object')
			{
				if(typeof oCountry == 'object') 
					sCountry = oCountry.value;
				else
					sCountry = s_country;
									
				if(sCountry == config['country'])
					sShippingMethod = 'L';
				else
					sShippingMethod = 'I';
				
				if(BrowserDetect.browser != 'Explorer')
				{
					for(o in oShipping.options)
						oShipping.options[o] = null;
					
					oOption = document.createElement('option');
					oShipping.appendChild(oOption);
				}
				else
				{
					oOption = document.createElement('<option></option>');
					oShipping.appendChild(oOption);
					
					try
					{
						for(o in oShipping.options)
							oShipping.remove(o);
					} 
					catch(e){}
				}
				
				for(i in aShipping)
				{
					if(aShipping[i]['destination'] == sShippingMethod)
					{
						var label = aShipping[i]['shipping'];
						var value = aShipping[i]['shippingid'];
					
						oShipping.options[iCounter++] = new Option(label, value);
						oShipping.value = sShippingId;
					}
				}
				
				if(oShipping.value == '')
					oShipping.selectedIndex = 0;
			}
		}
		
		function notEqualCountry()
		{
			var oCountry;		
			var oSameAsBilling	= new Object(document.getElementById('shippingIsSameAsBilling'));	
			
			try
			{
				oCountry 	= document.getElementsByName('b_country')[0];
				oCountry2 	= document.getElementsByName('n_country')[0];
			}
			catch(e) {}
		
			if(typeof oCountry == 'object')
			{
				if(oCountry.value != config['country'] || oCountry2.value != config['country'])
				{
					oSameAsBilling.checked 	= true;
					oSameAsBilling.disabled = true;

					return true;
				}
				else
				{
					oSameAsBilling.disabled = false;

					return false;
				}
			}
			else
				return oSameAsBilling.checked;
		}
		
		function copyBillingToShipping()
		{
			var sTitle 			= new Object(document.getElementsByName('s_title')[0]);
			var bTitle 			= new Object(document.getElementsByName('b_title')[0]);
	
			var pFirstName 		= new Object(document.getElementsByName('firstname')[0]);
			var sFirstName 		= new Object(document.getElementsByName('s_firstname')[0]);
			var bFirstName 		= new Object(document.getElementsByName('b_firstname')[0]);
	
			var pLastName 		= new Object(document.getElementsByName('lastname')[0]);
			var sLastName 		= new Object(document.getElementsByName('s_lastname')[0]);
			var bLastName 		= new Object(document.getElementsByName('b_lastname')[0]);
	
			var sAddress		= new Object(document.getElementsByName('s_address')[0]);
			var bAddress		= new Object(document.getElementsByName('b_address')[0]);
			var sAddress2		= new Object(document.getElementsByName('s_address_2')[0]);
			var bAddress2		= new Object(document.getElementsByName('b_address_2')[0]);
	
			var sCity			= new Object(document.getElementsByName('s_city')[0]);
			var bCity			= new Object(document.getElementsByName('b_city')[0]);
			
			var sState			= new Object(document.getElementsByName('_s_state')[0]);
			var bState			= new Object(document.getElementsByName('_b_state')[0]);
			
			var isState 		= new Object(document.getElementsByName('s_state')[0]);
			var ibState 		= new Object(document.getElementsByName('b_state')[0]);
			
			var sCountry		= new Object(document.getElementsByName('s_country')[0]);
			var bCountry		= new Object(document.getElementsByName('b_country')[0]);
			var nCountry		= new Object(document.getElementsByName('n_country')[0]);
			
			var sZipCode		= new Object(document.getElementsByName('s_zipcode')[0]);
			var bZipCode		= new Object(document.getElementsByName('b_zipcode')[0]);
			
				sTitle.selectedIndex = bTitle.selectedIndex;
				sFirstName.value 	 = bFirstName.value;
				
				if(bFirstName.value != undefined)
					pFirstName.value = bFirstName.value;
				
				sLastName.value 	 = bLastName.value;
				
				if(bLastName.value != undefined)
					pLastName.value  = bLastName.value;
				
				sAddress.value 		 = bAddress.value;
				sAddress2.value		 = bAddress2.value;
				sCity.value			 = bCity.value;
				
				sState.value		 = bState.value;
				isState.value 		 = bState.value;
				ibState.value 		 = bState.value;
								
				sCountry.value		 = bCountry.value;
				nCountry.value		 = bCountry.value;
				sZipCode.value		 = bZipCode.value;
		}
	
		function copyShippingToBilling()
		{
			var sTitle 			= new Object(document.getElementsByName('s_title')[0]);
			var bTitle 			= new Object(document.getElementsByName('b_title')[0]);
	
			var pFirstName 		= new Object(document.getElementsByName('firstname')[0]);
			var sFirstName 		= new Object(document.getElementsByName('s_firstname')[0]);
			var bFirstName 		= new Object(document.getElementsByName('b_firstname')[0]);
	
			var pLastName 		= new Object(document.getElementsByName('lastname')[0]);
			var sLastName 		= new Object(document.getElementsByName('s_lastname')[0]);
			var bLastName 		= new Object(document.getElementsByName('b_lastname')[0]);
	
			var sAddress		= new Object(document.getElementsByName('s_address')[0]);
			var bAddress		= new Object(document.getElementsByName('b_address')[0]);
			var sAddress2		= new Object(document.getElementsByName('s_address_2')[0]);
			var bAddress2		= new Object(document.getElementsByName('b_address_2')[0]);
	
			var sCity			= new Object(document.getElementsByName('s_city')[0]);
			var bCity			= new Object(document.getElementsByName('b_city')[0]);
			
			var sState			= new Object(document.getElementsByName('_s_state')[0]);
			var bState			= new Object(document.getElementsByName('_b_state')[0]);
			
			var isState 		= new Object(document.getElementsByName('s_state')[0]);
			var ibState 		= new Object(document.getElementsByName('b_state')[0]);
			
			var sCountry		= new Object(document.getElementsByName('s_country')[0]);
			var bCountry		= new Object(document.getElementsByName('b_country')[0]);
			var nCountry		= new Object(document.getElementsByName('n_country')[0]);
			
			var sZipCode		= new Object(document.getElementsByName('s_zipcode')[0]);
			var bZipCode		= new Object(document.getElementsByName('b_zipcode')[0]);
			
				bTitle.selectedIndex = sTitle.selectedIndex;
				bFirstName.value 	 = sFirstName.value;
				pFirstName.value 	 = sFirstName.value;
				bLastName.value 	 = sLastName.value;
				pLastName.value 	 = sLastName.value;
				bAddress.value 		 = sAddress.value;
				bAddress2.value		 = sAddress2.value;
				bCity.value			 = sCity.value;
				bState.value		 = sState.value;
				ibState.value 		 = sState.value;
				isState.value 		 = sState.value;
				bState.value 		 = sState.value;
				bCountry.value		 = sCountry.value;
				nCountry.value		 = bCountry.value;
				bZipCode.value		 = sZipCode.value;
		}
		
		function changeShippingElementsStatus(bool)
		{
			var oSameAsBilling	= new Object(document.getElementById('shippingIsSameAsBilling'));

			var sTitle 			= new Object(document.getElementsByName('s_title')[0]);
			var bTitle 			= new Object(document.getElementsByName('b_title')[0]);
	
			var pFirstName 		= new Object(document.getElementsByName('firstname')[0]);
			var sFirstName 		= new Object(document.getElementsByName('s_firstname')[0]);
			var bFirstName 		= new Object(document.getElementsByName('b_firstname')[0]);
	
			var pLastName 		= new Object(document.getElementsByName('lastname')[0]);
			var sLastName 		= new Object(document.getElementsByName('s_lastname')[0]);
			var bLastName 		= new Object(document.getElementsByName('b_lastname')[0]);
	
			var sAddress		= new Object(document.getElementsByName('s_address')[0]);
			var bAddress		= new Object(document.getElementsByName('b_address')[0]);
			var sAddress2		= new Object(document.getElementsByName('s_address_2')[0]);
			var bAddress2		= new Object(document.getElementsByName('b_address_2')[0]);
	
			var sCity			= new Object(document.getElementsByName('s_city')[0]);
			var bCity			= new Object(document.getElementsByName('b_city')[0]);
			
			var sState			= new Object(document.getElementsByName('_s_state')[0]);
			var bState			= new Object(document.getElementsByName('_b_state')[0]);
			
			var isState 		= new Object(document.getElementsByName('s_state')[0]);
			var ibState 		= new Object(document.getElementsByName('b_state')[0]);
			
			var sCountry		= new Object(document.getElementsByName('s_country')[0]);
			var bCountry		= new Object(document.getElementsByName('b_country')[0]);
			var nCountry		= new Object(document.getElementsByName('n_country')[0]);
			
			var sZipCode		= new Object(document.getElementsByName('s_zipcode')[0]);
			var bZipCode		= new Object(document.getElementsByName('b_zipcode')[0]);
			
				sTitle.readOnly 	= bool;
				sFirstName.readOnly = bool;				
				sLastName.readOnly 	= bool;
				sAddress.readOnly 	= bool;
				sAddress2.readOnly 	= bool;
				sCity.readOnly 		= bool;
			
				if(sState.tagName.toLowerCase() == 'input')
					sState.readOnly	= bool;
				else if(sState.tagName.toLowerCase() == 'select')
					sState.disabled	= bool;
	
				bState.onchange = function()
				{
					if(notEqualCountry() == true || oSameAsBilling.checked == true)
						sState.value = bState.value;
					
					isState.value = sState.value;
					ibState.value = bState.value;
				}
	
				isState.readOnly 	= bool;
				ibState.readOnly 	= bool;

				sCountry.disabled 	= bool;
				
				sZipCode.readOnly 	= bool;
				
				if(bool == true)
				{
					sTitle.className 	= 'disabled';
					sFirstName.className = 'disabled';				
					sLastName.className = 'disabled';
					sAddress.className 	= 'disabled';
					sAddress2.className = 'disabled';
					sCity.className 	= 'disabled';
					sState.className	= 'disabled';
					isState.className 	= 'disabled';
					ibState.className 	= 'disabled';
					sCountry.className	= 'disabled';
					sZipCode.className 	= 'disabled';
				}
				else if(bool == false)
				{
					sTitle.className 	= 'enabled';
					sFirstName.className = 'enabled';				
					sLastName.className = 'enabled';
					sAddress.className 	= 'enabled';
					sAddress2.className = 'enabled';
					sCity.className 	= 'enabled';
					sState.className	= 'enabled';
					isState.className 	= 'enabled';
					ibState.className 	= 'enabled';
					sCountry.className	= 'enabled';
					sZipCode.className 	= 'enabled';
				}
		}
	
		function shippingIsSameAsBilling()
		{
			var oCountry;			
			var oSameAsBilling	= new Object(document.getElementById('shippingIsSameAsBilling'));
	
			var sTitle 			= new Object(document.getElementsByName('s_title')[0]);
			var bTitle 			= new Object(document.getElementsByName('b_title')[0]);
	
			var pFirstName 		= new Object(document.getElementsByName('firstname')[0]);
			var sFirstName 		= new Object(document.getElementsByName('s_firstname')[0]);
			var bFirstName 		= new Object(document.getElementsByName('b_firstname')[0]);
	
			var pLastName 		= new Object(document.getElementsByName('lastname')[0]);
			var sLastName 		= new Object(document.getElementsByName('s_lastname')[0]);
			var bLastName 		= new Object(document.getElementsByName('b_lastname')[0]);
	
			var sAddress		= new Object(document.getElementsByName('s_address')[0]);
			var bAddress		= new Object(document.getElementsByName('b_address')[0]);
			var sAddress2		= new Object(document.getElementsByName('s_address_2')[0]);
			var bAddress2		= new Object(document.getElementsByName('b_address_2')[0]);
	
			var sCity			= new Object(document.getElementsByName('s_city')[0]);
			var bCity			= new Object(document.getElementsByName('b_city')[0]);
			
			var sState			= new Object(document.getElementsByName('_s_state')[0]);
			var bState			= new Object(document.getElementsByName('_b_state')[0]);
			
			var isState 		= new Object(document.getElementsByName('s_state')[0]);
			var ibState 		= new Object(document.getElementsByName('b_state')[0]);
			
			var sCountry		= new Object(document.getElementsByName('s_country')[0]);
			var bCountry		= new Object(document.getElementsByName('b_country')[0]);
			var nCountry		= new Object(document.getElementsByName('n_country')[0]);
			
			var sZipCode		= new Object(document.getElementsByName('s_zipcode')[0]);
			var bZipCode		= new Object(document.getElementsByName('b_zipcode')[0]);
			
			try
			{
				try
				{
					oCountry = document.getElementsByName('b_country')[0];				
				}
				catch(e) {}
				
				if(oSameAsBilling.checked == true)
				{
					copyBillingToShipping();
					changeShippingElementsStatus(true);
				}
				else
					changeShippingElementsStatus(false);
				
				bFirstName.onchange = function()
				{
					if(notEqualCountry() == true || oSameAsBilling.checked == true)
						sFirstName.value = bFirstName.value;
						
					pFirstName.value = bFirstName.value;
				}
				
				bLastName.onchange = function()
				{
					if(notEqualCountry() == true || oSameAsBilling.checked == true)
						sLastName.value = bLastName.value;
						
					pLastName.value = bLastName.value;
				}
				
				bAddress.onchange = function()
				{
					if(notEqualCountry() == true || oSameAsBilling.checked == true)
						sAddress.value = bAddress.value;
				}
				
				bAddress2.onchange = function()
				{
					if(notEqualCountry() == true || oSameAsBilling.checked == true)
						sAddress2.value = bAddress2.value;
				}
				
				bCity.onchange = function()
				{
					if(notEqualCountry() == true || oSameAsBilling.checked == true)
						sCity.value = bCity.value;
				}
				
				bState.onchange = function()
				{
					if(notEqualCountry() == true || oSameAsBilling.checked == true)
						sState.value = bState.value;
					
					isState.value = sState.value;
					ibState.value = bState.value;
				}
				
				bCountry.onchange = function()
				{
					if(notEqualCountry() == true || oSameAsBilling.checked == true)
					{
						var reloadShipping;
						
						if(sCountry.value != bCountry.value)
							reloadShipping = true;
						
						sCountry.value = this.value;
						nCountry.value = this.value;
						
						populateShippingSelect();
	
						check_zip_code_field(document.forms['registerform'].s_country, document.forms['registerform'].s_zipcode); 
						change_states(document.getElementById('s_country'), 's_state', 's_county', 'State', '', '', '', '','','', true); 
						change_counties('s_county', document.getElementById('_s_state'), document.getElementById('s_country'), '','');					
						
						check_zip_code_field(document.forms['registerform'].b_country, document.forms['registerform'].b_zipcode); 
						change_states(document.getElementById('b_country'), 'b_state', 'b_county', 'State', '', '', '', '','','', true); 
						change_counties('b_county', document.getElementById('_b_state'), document.getElementById('b_country'), '','');

						if(notEqualCountry() == true)
						{
							copyBillingToShipping();
							changeShippingElementsStatus(true);
						}
						else
							changeShippingElementsStatus(false);
						
						if(reloadShipping)
							copyRegisterFormFields();
					}
				}

				nCountry.onchange = function()
				{
					if(notEqualCountry() == true || oSameAsBilling.checked == true)
					{

						var reloadShipping;
						
						if(nCountry.value != bCountry.value)
							reloadShipping = true;
						
						bCountry.value = this.value;
						sCountry.value = this.value;
						
						populateShippingSelect();
						
						check_zip_code_field(document.forms['registerform'].s_country, document.forms['registerform'].s_zipcode); 
						change_states(document.getElementById('s_country'), 's_state', 's_county', 'State', '', '', '', '','','', true); 
						change_counties('s_county', document.getElementById('_s_state'), document.getElementById('s_country'), '','');					
						
						check_zip_code_field(document.forms['registerform'].b_country, document.forms['registerform'].b_zipcode); 
						change_states(document.getElementById('b_country'), 'b_state', 'b_county', 'State', '', '', '', '','','', true); 
						change_counties('b_county', document.getElementById('_b_state'), document.getElementById('b_country'), '','');

						if(notEqualCountry() == true)
						{
							copyBillingToShipping();
							changeShippingElementsStatus(true);
						}
						else
							changeShippingElementsStatus(false);

						if(reloadShipping)
							copyRegisterFormFields();

					}
				}
				
				sCountry.onchange = function()
				{
					if(this.value != bCountry.value || oSameAsBilling.checked == true)
					{
						var reloadShipping;
						
						oSameAsBilling.checked = true;
						
						if(sCountry.value != bCountry.value)
							reloadShipping = true;
						
						bCountry.value = this.value;
						nCountry.value = this.value;
						
						populateShippingSelect();
						
						check_zip_code_field(document.forms['registerform'].s_country, document.forms['registerform'].s_zipcode); 
						change_states(document.getElementById('s_country'), 's_state', 's_county', 'State', '', '', '', '','','', true); 
						change_counties('s_county', document.getElementById('_s_state'), document.getElementById('s_country'), '','');					
						
						check_zip_code_field(document.forms['registerform'].b_country, document.forms['registerform'].b_zipcode); 
						change_states(document.getElementById('b_country'), 'b_state', 'b_county', 'State', '', '', '', '','','', true); 
						change_counties('b_county', document.getElementById('_b_state'), document.getElementById('b_country'), '','');

						if(notEqualCountry() == true)
						{
							copyShippingToBilling();
							changeShippingElementsStatus(true);
						}
						else
							changeShippingElementsStatus(false);

						
						if(reloadShipping)
							copyRegisterFormFields();
					}
				}
				
				bZipCode.onchange = function()
				{
					if(notEqualCountry() == true || oSameAsBilling.checked == true)
						sZipCode.value = bZipCode.value;
				}
				
				oSameAsBilling.onclick = function()
				{
					var reloadShipping;
				
					if(this.checked == true)
					{
						if(sCountry.value != bCountry.value)
							reloadShipping = true;
						
						copyBillingToShipping();
						changeShippingElementsStatus(true);
						
						if(reloadShipping)
						{
							populateShippingSelect();
							copyRegisterFormFields();
						}
					}
					else
						changeShippingElementsStatus(false);
				}
			}
			catch(e){}
		}
		
		function copyRegisterFormFields()
		{
			var registerform 	= document.registerform;
			var cartform 		= document.cartform;
			
			try
			{				
				for(i in registerform.elements)
				{
					if(BrowserDetect.browser == 'Explorer')
					{
						try 
						{		
							var element = registerform.elements[i];
						}
						catch(e){}

						if(typeof element == 'object' && element != null)
						{
							var name 	= element.name;
							var value 	= element.value;
							
							if(name != 'action')
							{
								if(name == 'shippingIsSameAsBilling')
								{
									if(registerform.elements[i].checked == true)
										value = 1;
									else	
										value = 0;
								}
		
								var cloned	= createNamedElement('input', name);
									cloned.setAttribute('type', 'hidden');
									cloned.setAttribute('name', name);
									cloned.setAttribute('value', value);
									cartform.appendChild(cloned);
							}
							
							var cloned	= createNamedElement('input', 'action');
								cloned.setAttribute('type', 'hidden');
								cloned.setAttribute('name', 'action');
								cloned.setAttribute('value', 'update');
								cartform.appendChild(cloned);
						}
					}
					else
					{
						var name 	= registerform.elements[i].name;
						var value 	= registerform.elements[i].value;
						
						if(name != 'action')
						{
							if(name == 'shippingIsSameAsBilling')
							{
								if(registerform.elements[i].checked == true)
									value = 1;
								else	
									value = 0;							
							}
	
							var cloned	= createNamedElement('input', name);
								cloned.setAttribute('type', 'hidden');
								cloned.setAttribute('name', name);
								cloned.setAttribute('value', value);
								cartform.appendChild(cloned);
						}
						
						var cloned	= createNamedElement('input', 'action');
							cloned.setAttribute('type', 'hidden');
							cloned.setAttribute('name', 'action');
							cloned.setAttribute('value', 'update');
							cartform.appendChild(cloned);
					}
				}
			}
			catch(e)
			{
				if(typeof cartform == 'object')
				{
					var input	= createNamedElement('input', 'justshipping');
						input.setAttribute('type', 'hidden');
						input.setAttribute('name', 'justshipping');
						input.setAttribute('value', 'true');
						cartform.appendChild(input);
				}
			}
			
			if(typeof cartform == 'object'){ 
				processing();
				document.cartform.submit();
			}
		}