var originalUnits, currentUnits;

function switchUnits(newUnits, initialConvRequired) {
	  var activeOrgUnits = originalUnits;
	  
      if ((newUnits == currentUnits) && !initialConvRequired) return true;
	  
	  var allSpans = document.getElementsByTagName ? document.getElementsByTagName('span') : new Array();
	  var val, newVal, converted, className, tmp;
	  $('img.flscale').each(function(item) {
          if (newUnits == "Metric") {
            item.src = item.src.sub("imperial", "metric");
	      } else {
  	        item.src = item.src.sub("metric", "imperial");
	      }
	  });
	  for (var i=0;	i < allSpans.length; i++) {
	  	className = allSpans[i].className;
		if  (className == "Metric") {
			activeOrgUnits = "Metric";
		} else if (className == "Imperial") {
			activeOrgUnits = "Imperial";
		} else if (className == "Original") {
			activeOrgUnits = originalUnits;
		} else if ((className =="height") || (className =="heightfl") || (className =="heighttide") || (className == "heightu") || (className =="temp") || (className == "tempu") || (className == "snow") || (className == "snowu") || (className == "wind") || (className == "windu") || (className == "rain") || (className == "rainu") || (className == "dist") || (className == "distu") || (className == "phrase")) {
			if (newUnits == activeOrgUnits) {
				if (!initialConvRequired) {
					allSpans[i].innerHTML = allSpans[i].backup;
				}
			} else {
			    converted = false;
				if (typeof allSpans[i].backup == "undefined") {
					allSpans[i].backup = allSpans[i].innerHTML;
					val = parseFloat(allSpans[i].innerHTML);
				  } else {
					val = parseFloat(allSpans[i].backup);
				  }
				  if (activeOrgUnits != "Metric") {
					switch (allSpans[i].className) {
					  case "temp": // F -> C
						if (!isNaN(parseInt(val))) {
							newVal = Math.round((val - 32) / 1.8);
							converted = true;
						}							
						break;
					  case "tempu": // F -> C
						newVal = "C";
						converted = true;
						break;
					}
				  }
				  if (activeOrgUnits == "Metric") {
					switch (allSpans[i].className) {
					  case "temp": // C -> F
						if (!isNaN(val)) {
							newVal = Math.round(val * 1.8 + 32);
							converted = true;
						}
						break;
					  case "tempu": // C -> F
						newVal = "F";
						converted = true;
						break;
					}
				  }
			  
				  if (activeOrgUnits == "Metric") {
					switch (allSpans[i].className) {
					  case "height": // m -> ft
						newVal = Math.round(val * 3.281);
						converted = true;
						break;
					  case "dist": // km -> mi
						newVal = Math.round(val / 1.609);
						converted = true;
						break;
					  case "heightfl": // m -> ft
						newVal = Math.round(val * 3.281 / 100) * 100;
						converted = true;
						break;
					  case "heighttide": // m -> ft
					  if (val == parseFloat(val)) {
  						newVal = Math.round(val * 3.281 * 100) / 100;
  						converted = true;
  					}
						break;
					  case "heightu": // m -> ft
						newVal = "ft";
						converted = true;
						break;
					  case "distu": // km -> mi
						newVal = "miles";
						converted = true;
						break;
					  case "snow": // cm -> in
						if (!isNaN(val)) {
						  newVal = (val * 0.3937).toFixed(1);
						  converted = true;
						}
						break;
					  case "wind": // kph -> mph
						if (!isNaN(val)) {					
						  newVal = Math.round(val * 0.6214 / 5) * 5;
						  converted = true;
						}
						break;
					  case "windu": // kph -> mph
						newVal = "mph";
						converted = true;
						break;
					  case "rain": // mm -> in
						if (!isNaN(val)) {
						  newVal = (val * 0.03937).toFixed(1);
						  converted = true;
						}
						break;
					  case "rainu": // mm -> in
					  case "snowu": // cm -> in
						newVal = "in";
						converted = true;
						break;
					}
				  }
				  
				  if (activeOrgUnits != "Metric") {
					switch (allSpans[i].className) {
					  case "height": // ft -> m
						newVal = Math.round(val / 3.281);
						converted = true;
						break;
					  case "dist": // mi -> km
						newVal = Math.round(val * 1.609);
						converted = true;
						break;
					  case "heightfl": // ft -> m
						newVal = Math.round(val / 3.281 / 50) * 50;
						converted = true;
						break;
					  case "heighttide": // ft -> m
					  if (val == parseFloat(val)) {
  						newVal = Math.round(val / 3.281 * 100) / 100;
  						converted = true;
  					}
						break;
					  case "heightu": // ft -> m
						newVal = "m";
						converted = true;
						break;
					  case "distu": // mi -> km
						newVal = "km";
						converted = true;
						break;
					  case "snow": // in -> cm
						if (!isNaN(val)) {
						  newVal = (val / 0.3937).toFixed(1);
						  converted = true;
						}
						break;
					  case "snowu": // in -> cm
						newVal = "cm";
						converted = true;
						break;
					  case "wind": // mph -> kph
						if (!isNaN(val)) {
						  newVal = Math.round(val / 0.6214 / 5) * 5;
						  converted = true;
						}
						break;
					  case "windu": // mph -> kph
						newVal = "kph";
						converted = true;
						break;
					  case "rain": // in -> mm
						if (!isNaN(val)) {
						  newVal = Math.round(val / 0.03937);
						  converted = true;
						}
						break;
					  case "rainu": // in -> mm
						newVal = "mm";
						converted = true;
						break;					
					}
	
				}
				if (className == "phrase") {
				  if (typeof allSpans[i].backup == "undefined") {
					allSpans[i].backup = allSpans[i].innerHTML;
					val = allSpans[i].innerHTML;
				  } else {
					val = allSpans[i].backup;
				  }	
				  newVal = val;
				  if (activeOrgUnits != "Metric") { // F -> C
					  var pattern = /([-\d.]+)(.|&deg;)F/g;
					  var result;
					  result = pattern.exec(val);
					  while(result != null) {
						tmp = Math.round((result[1] - 32) / 1.8);
						newVal = newVal.replace(result[0], tmp + "&deg;C");
						converted = true;
						result = pattern.exec(val);
					  };
				  }
				  if (activeOrgUnits == "Metric") { // C -> F
					  var pattern = /([-\d.]+)(.|&deg;)C/g;
					  var result;
					  result = pattern.exec(val);
					  while(result != null) {
						tmp = Math.round(32 + result[1] * 1.8);
						newVal = newVal.replace(result[0], tmp + "&deg;F");
						converted = true;
						result = pattern.exec(val);
					  };
				  }
				  if (activeOrgUnits == "Metric") { // mm -> in
					  var pattern = /([-\d.]+)mm/g;
					  var result;
					  result = pattern.exec(val);
					  while(result != null) {
						tmp = (result[1] * 0.03937).toFixed(1);
						newVal = newVal.replace(result[0], tmp + "in");
						converted = true;
						result = pattern.exec(val);
					  };
				  }
				  if (activeOrgUnits == "Metric") { // km/h -> mph
					  var pattern = /([-\d.]+) km\/h/g;
					  var result;
					  result = pattern.exec(val);
					  while(result != null) {
						tmp = Math.round(result[1] / 1.609);
						newVal = newVal.replace(result[0], tmp + " mph");
						converted = true;
						result = pattern.exec(val);
					  };
				  }
				  if (activeOrgUnits != "Metric") { // mph -> km/h
					  var pattern = /([-\d.]+) mph/g;
					  var result;
					  result = pattern.exec(val);
					  while(result != null) {
						tmp = Math.round(result[1] * 1.609);
						newVal = newVal.replace(result[0], tmp + " km/h");
						converted = true;
						result = pattern.exec(val);
					  };
				  }
				  if (activeOrgUnits == "Metric") { // km -> mi
					  var pattern = /([-\d.]+) km/g;
					  var result;
					  result = pattern.exec(val);
					  while(result != null) {
						tmp = Math.round(result[1] / 1.609);
						newVal = newVal.replace(result[0], tmp + " miles");
						converted = true;
						result = pattern.exec(val);
					  };
				  }
				  if (activeOrgUnits != "Metric") { // mi -> km
					  var pattern = /([-\d.]+) miles/g;
					  var result;
					  result = pattern.exec(val);
					  while(result != null) {
						tmp = Math.round(result[1] * 1.609);
						newVal = newVal.replace(result[0], tmp + " km");
						converted = true;
						result = pattern.exec(val);
					  };
				  }
				  if (activeOrgUnits == "Metric") { // m -> ft
					  var pattern = /([-\d.]+) m/g;
					  var result;
					  result = pattern.exec(val);
					  while(result != null) {
						tmp = Math.round(result[1] * 3.281);
						newVal = newVal.replace(result[0], tmp + " ft");
						converted = true;
						result = pattern.exec(val);
					  };
				  }
				  if (activeOrgUnits == "Metric") { // ft -> m
					  var pattern = /([-\d.]+) ft/g;
					  var result;
					  result = pattern.exec(val);
					  while(result != null) {
						tmp = Math.round(result[1] / 3.281);
						newVal = newVal.replace(result[0], tmp + " m");
						converted = true;
						result = pattern.exec(val);
					  };
				  }
				  if (activeOrgUnits == "Metric") { // cm -> in
					  var pattern = /([-\d.]+)cm/g;
					  var result;
					  result = pattern.exec(val);
					  while(result != null) {
						tmp = (result[1] * 0.3937).toFixed(1);
						newVal = newVal.replace(result[0], tmp + "in");
						converted = true;
						result = pattern.exec(val);
					  };
				  }
				  if (activeOrgUnits != "Metric") { // in -> mm
					  var pattern = /([-\d.]+)in/g;
					  var result;
					  result = pattern.exec(val);
					  while(result != null) {
						tmp = Math.round(result[1] / 0.03937);
						newVal = newVal.replace(result[0], tmp + "mm");
						converted = true;
						result = pattern.exec(val);
					  };
				  }
				}
						  
			  if (converted) {
				allSpans[i].innerHTML = newVal;
			  }
			}
		  }
	  }
	  var allImgs = document.getElementsByTagName ? document.getElementsByTagName('img') : new Array();
	  var pattern;
	  var wind_pattern = /(\/windicons\/wind[A-Z-]+)(\d+)(imperial|metric)\.gif/;
	  var swell_pattern = /(\/largeswellicons\/swell\.[A-Z-]+)\.(\d+)\.(imperial|metric)\.([\d-]+)\.gif/;
	  // 1 -> /swellicons/swell.W
	  // 2 -> 160 (means 16.0m)
	  // 3 -> metric
	  // 4 -> 10
	  // imperial - all rounded by 5
	  // metric - 0 to 25 rounded by 1; 30 to 200 rounded by 5
	  var result;
	  for (var i=0;	i < allImgs.length; i++) {
  		className = allImgs[i].className;
  		if (className == "windimg" || className == "swellimg") {
  			if (newUnits == activeOrgUnits) {
  				if (!initialConvRequired && allImgs[i].backup) {
  					allImgs[i].src = allImgs[i].backup;
  				}
  			} else {
  			  converted = false;
  			  if (className == "windimg") {
    			  pattern = wind_pattern;
  			  } else {
    			  pattern = swell_pattern;
  			  }
  			  result = pattern.exec(allImgs[i].src);
  			  if (result != null) {
    				if (typeof allImgs[i].backup == "undefined") {
    					allImgs[i].backup = allImgs[i].src;
    				} else {
  					  result = pattern.exec(allImgs[i].backup);
  				  }
  				  val = parseFloat(result[2]);
  				  if (activeOrgUnits != "Metric") {
              // alert("Please contact us - such conversion should not be happening.");
  					  tmp = Math.round(val / 0.6214 / 5) * 5;
  				  	allImgs[i].src = result[1] + tmp + 'metric.gif';
  				  }
  				  if (activeOrgUnits == "Metric") {
  				    if (className == "windimg") {
    					  tmp = Math.round(val * 0.6214 / 5 ) * 5;
  				  	  allImgs[i].src = result[1] + tmp + 'imperial.gif';
				  	  } else { // swell
    					  tmp = Math.round(val * 3.281 / 5 ) * 5;
  				  	  allImgs[i].src = result[1] + '.' + tmp + '.imperial.' + result[4] + '.gif';
				  	  }
  				  }
  			  }			
  			}
  		}				  
	  }
	  if (activeOrgUnits == "Metric") {
  	  $('.surfscale').each(function(i) {
  	    if (newUnits == activeOrgUnits) {
  	      $(this).css('background-image', this.backup)
  	    } else {
  	      this.backup = $(this).css("background-image");
  	      $(this).css('background-image', 'url(/images/surfscale.imperial.gif)');
  	    }  	    
  	  });
  	  $('.surfbackdrop').each(function(i) {
  	    if (newUnits == activeOrgUnits) {
  	      $(this).css('background-image', this.backup)
  	    } else {
  	      this.backup = $(this).css("background-image");
  	      $(this).css('background-image', 'url(/images/surfbackdrop.imperial.gif)');
  	    }
  	  });
	  }
	  currentUnits = newUnits;
  }
  
  function initUnits() {
	  if (typeof height_units != "undefined") {
		if (height_units == "ft") {
			originalUnits = currentUnits = "US";
		} else {
			originalUnits = currentUnits = "Metric"
		}
	  } else {
		  var allSpans = document.getElementsByTagName ? document.getElementsByTagName('span') : new Array();
		  for (var i=0;	i < allSpans.length; i++) {
			className = allSpans[i].className;
			if (className == "heightu") {
				if (allSpans[i].innerHTML == "ft") {
					originalUnits = currentUnits = "US";
				} else {
					originalUnits = currentUnits = "Metric"
				}
				break;
			}
		  }
	  }
  }
	function showUnitsSelector(default_units, horiz) {
		initUnits();
		if (default_units) {
		  var units = default_units;
		} else {
		  var units = currentUnits;
		}
		if (document.getElementById) {
		    if (horiz) {
    			document.write('<label><nobr><input type="radio" id="metricradio" name="units" ' + ((units == "Metric") ? 'checked="checked"' : '') + ' onClick="javascript: switchUnits(\'Metric\');"/>Metric</nobr></label>');
    			document.write('&nbsp;&nbsp;<label><nobr><input type="radio" name="units" ' + ((units == "US") ? 'checked="checked"' : '') + ' onClick="javascript: switchUnits(\'US\');"/>Imperial</nobr></label>');
		    } else {
    			document.write('<ul class="units"><li class="metric"><label><nobr>Metric<input type="radio" id="metricradio" name="units" ' + ((units == "Metric") ? 'checked="checked"' : '') + ' onClick="javascript: switchUnits(\'Metric\');"/></nobr></label></li>');
    			document.write('<li class="imperial"><label><nobr>Imperial<input type="radio" name="units" ' + ((units == "US") ? 'checked="checked"' : '') + ' onClick="javascript: switchUnits(\'US\');"/></nobr></label></li></ul>');
			}
			uj_funcs[uj_funcs.length] = "initialSwitch()";
		}
	}
	function initialSwitch() {
		var metricSwitch = document.getElementById("metricradio");
		if (metricSwitch.checked && (currentUnits == "US")) {
			switchUnits("Metric");
		} else if (!metricSwitch.checked && (currentUnits != "US")) {
			switchUnits("US");
		}
	}
