function loadWindVane()
{
    try
    {
        var objS_SWF = flashRoot + "/common/WindVaneLite.swf";
	    var objS_ID = "windVaneFlash";
		var objS_Width = "80";
	    var objS_Height = "80";
	    var objS_Version = "7.0.61.0";
	    var objS_BGColor = "#264ebf";
	    var so = new SWFObject(objS_SWF, objS_ID, objS_Width, objS_Height, objS_Version, objS_BGColor);
	    so.addVariable("x", "x");
	    so.addParam("movie", objS_SWF);
	    so.addParam("quality", "high");
	    so.addParam("play", "false");
	    so.addParam("bgcolor", "30");
	    so.addParam("wmode", "transparent");
	    so.addParam("swLiveConnect", "true");
	    so.addParam("FlashVars", "speed=" + windSpeed + "&degree=" + windDir + "&units=" + windSpeedUnit);
        so.addVariable("x", "x");
        so.write("divWindVane");
     }
     catch (e) { }
     
     if (isapiUrl != "")
     {
    	 timer = setTimeout(getObsData, updateRate);
     }
}

function getObsData()
{
    
    var now = new Date(); 
    var t = Date.UTC(now.getFullYear(), now.getMonth(), now.getDate(), now.getHours(), now.getMinutes(), now.getSeconds(), now.getMilliseconds());
   
    try
    {
        if (callState != 1)
        {
            callState = 1;
            myHttp = getHttpObj();
            if (myHttp != null)
            {
                myHttp.open("GET", isapiUrl + "?" + "stat=" + stationID + "&units=" + units + "&t=" + t, true); 
                myHttp.onreadystatechange = function()
                {
                    if ((myHttp.readyState == 4) && (myHttp.status == 200))
                    {
                        var response = myHttp.responseText;
                        if (response != "-2")
                        {
                            setObsData(response);
                        }
                        else
                        {
                            timer = setTimeout(getObsData, updateRate);
                            callState = 0;
                        }    
                    }
                    else if(myHttp.readyState==4)
                    {
                        timer = setTimeout(getObsData, updateRate);
                        callState = 0;
                    }
                }
                myHttp.send(null);
            }
            //var obsData = loadASyncObsHttp(isapiUrl,"stat=" + stationID + "&units=" + units + "&t=" + cacheBuster);
        }
    }
    catch (e){}    
}

function setObsData(obsData)
{
    try
    {
        var windVaneArrow = document.getElementById("windVaneArrow");
        var windVaneSpeed = document.getElementById("windSpeed");
        var windVaneUnit = document.getElementById("windUnit");
        var divTemp = document.getElementById("divTemp");
        var divObsTime = document.getElementById("divObsTime");
        var divHi = document.getElementById("divHi");
        var divLo = document.getElementById("divLo");
        var divRain = document.getElementById("divRain");
        var divGust = document.getElementById("divGust");
        var divHumidity = document.getElementById("divHumidity");
        var divDewPoint = document.getElementById("divDewPoint");
        var divFeelsLike = document.getElementById("divFeelsLike");
        var spanFeelsLikeLabel = document.getElementById("spanFeelsLikeLabel");
        var windVane = document.getElementById("windVaneFlash");
        var thermobar = document.getElementById("thermobar");
        var divStationName = document.getElementById("divStationName");
        var spanWindVaneSpeed = document.getElementById("spanWindVaneSpeed");
        var divWindVaneUnit = document.getElementById("divWindVaneUnit");
        var divWindVaneDir = document.getElementById("divWindVaneDir");
        
        if (moreObs > 0)
        {
            var divMoreObsTime = document.getElementById("divMoreObsTime");
            var divAvgWind = document.getElementById("divAvgWind");
            var divPressure = document.getElementById("divPressure");
        }
        if (obsData != null)
        {
            showObsDiv(); // have data, show obs
        
        
            var obsDataAry = obsData.split("|");
            clearTimeout(timer);
            timer = null;
            if (obsDataAry != null)
            {
                if (obsDataAry.length > 1)
                {
                    var ts = obsDataAry[2].substring(0, obsDataAry[2].length -4);
                    var tp = obsDataAry[2].substring(obsDataAry[2].length -1, obsDataAry[2].length)
                    
                    if (tp=="p")
                    {
                        ts = ts + " PM";
                    }
                    else
                    {
                        ts = ts + " AM";
                    }
                    divObsTime.innerHTML = ts;
                    
                    try
                    {
                        windVane.SetVariable('speed', obsDataAry[6]); 
                        windVane.SetVariable('units', windSpeedUnit); 
                        windVane.SetVariable('degree', obsDataAry[5]);
                    }
                    catch(e){}
                    //this code put in to remove wierd ascii char coming from obs isapi
                    if (isNaN(obsDataAry[4]))
                    {
                        divTemp.innerHTML = obsDataAry[4].substring(0, obsDataAry[4].length-1) + tempUnit;
                    }
                    else
                    {
                        divTemp.innerHTML = obsDataAry[4] + tempUnit;
                    }
                    if (isNaN(obsDataAry[13]))
                    {
                        divHi.innerHTML = obsDataAry[13].substring(0, obsDataAry[13].length-1) + tempUnit;
                    }
                    else
                    {
                        divHi.innerHTML = obsDataAry[13] + tempUnit;
                    }
                    if (isNaN(obsDataAry[14]))
                    {
                        divLo.innerHTML = obsDataAry[14].substring(0, obsDataAry[14].length-1) + tempUnit;
                    }
                    else
                    {
                        divLo.innerHTML = obsDataAry[14] + tempUnit;
                    }
                   
                    divRain.innerHTML = obsDataAry[9] ;
                    divGust.innerHTML = getWindDegrees(obsDataAry[7]).toUpperCase() + " " + obsDataAry[8] ;
                    if (moreObs > 0)
                    {
                        if (isNaN(obsDataAry[16]))
                        {
                            divFeelsLike.innerHTML = obsDataAry[16].substring(0, obsDataAry[16].length-1) + tempUnit;
                            spanFeelsLikeLabel.innerHTML = getFeelsLikeLabel(obsDataAry[16].substring(0, obsDataAry[16].length-1));
                        }
                        else
                        {
                            divFeelsLike.innerHTML = obsDataAry[16] + tempUnit;
                            spanFeelsLikeLabel.innerHTML = getFeelsLikeLabel(obsDataAry[16]);
                        }
                                               
                        
                        divHumidity.innerHTML = obsDataAry[12];
                        if (isNaN(obsDataAry[15]))
                        {
                            divDewPoint.innerHTML = obsDataAry[15].substring(0, obsDataAry[15].length-1) + tempUnit;
                        }
                        else
                        {
                            divDewPoint.innerHTML = obsDataAry[15] + tempUnit;
                        }
                        divAvgWind.innerHTML = obsDataAry[28] + " " + getWindDegrees(obsDataAry[27]).toUpperCase();
                        divPressure.innerHTML = obsDataAry[11].substring(0, obsDataAry[11].length-1) + pressureUnit;
                        divMoreObsTime.innerHTML = "Data as of: " + ts;
                    }
                    else
                    {
                        if (isNaN(obsDataAry[16]))
                        {
                            divFeelsLike.innerHTML = obsDataAry[16].substring(0, obsDataAry[16].length-1) + tempUnit;
                            spanFeelsLikeLabel.innerHTML = getFeelsLikeLabel(obsDataAry[16].substring(0, obsDataAry[16].length-1));
                        }
                        else
                        {
                            divFeelsLike.innerHTML = obsDataAry[16] + tempUnit;
                            spanFeelsLikeLabel.innerHTML = getFeelsLikeLabel(obsDataAry[16]); 
                        }
                                               
                        divHumidity.innerHTML = obsDataAry[12];
                        if (isNaN(obsDataAry[15]))
                        {
                            divDewPoint.innerHTML = obsDataAry[15].substring(0, obsDataAry[15].length-1) + tempUnit;
                        }
                        else
                        {
                            divDewPoint.innerHTML = obsDataAry[15] + tempUnit;
                        }
                    }
                    
                    
                    /* Adjusting thermometer bar */
                    if (isNaN(obsDataAry[4]))
                    {
                        thermobar.style.marginTop =  getThermobarMargin(obsDataAry[4].substring(0, obsDataAry[4].length-1)) + "px";
                    }
                    else
                    {
                        thermobar.style.marginTop = getThermobarMargin(obsDataAry[4]) + "px";
                    }
                    
                    // set station name                    
                    divStationName.innerHTML = obsDataAry[36];
                    
                    // set non flash wind vane data
                    spanWindVaneSpeed.innerHTML = obsDataAry[6];
                    
                    divWindVaneUnit.innerHTML = windSpeedUnit;
                    divWindVaneDir.className = "wXconditions-wind-direction wXconditions-wind-" + getWindDegrees(obsDataAry[7]);
                }
            }
        }
        else // no data, hide obs
        {
            hideObsDiv();
        }
    }
    catch (e){  
    }
    timer = setTimeout(getObsData, updateRate);
    callState = 0;
}


function hideObsDiv()
{   
    var obsDiv = document.getElementById("wXconditions-noscript");
    var noObsDiv = document.getElementById("noObsDiv");
    
    obsDiv.style.display = "none";
    noObsDiv.style.display = "block";
}

function showObsDiv()
{
    var obsDiv = document.getElementById("wXconditions-noscript");
    var noObsDiv = document.getElementById("noObsDiv");
    
    obsDiv.style.display = "block";
    noObsDiv.style.display = "none";
}


function getFeelsLikeLabel(feelsLikeTemp)
{
    if(units == 0)
    {
        if(feelsLikeTemp >= 70)
            return document.getElementById("Heat Index").value;
        else
            return document.getElementById("Wind Chill").value;
    }
    else
    {
        if(feelsLikeTemp >= 21)
            return document.getElementById("Heat Index").value;
        else
            return document.getElementById("Wind Chill").value;
    }
}


/**
*   Calculates the margin-top (px) for the thermometer bar
*/
function getThermobarMargin(temp)
{
    var margin = 0;
    var step = 155.0 / 47.0;
    if (temp < -30.0)
    {
    margin = 47;
    }
    if (temp < 125.0)
    {
        margin = (125.0 - temp) / step;
    }
    
    return margin
}



function getWindDegrees(wind)
{
    if (!isNaN(wind))
    {
        var windDirectionDegrees = Number(wind) + 11.5;
        var windDirectionString = "";
        if (windDirectionDegrees > 360)
        {
            windDirectionDegrees = 360;
        }
        else if(windDirectionDegrees < 0)
        {
            windDirectionDegrees = 0;
        }
        windDirectionDegrees = windDirectionDegrees / 22.5;
        windDirectionDegrees = Math.round(windDirectionDegrees);
        switch( windDirectionDegrees )
	    {
		    case 1:
			    windDirectionString = "nne";	
			    break;
		    case 2:
			    windDirectionString = "ne";
			    break;
		    case 3:
			    windDirectionString = "ene";
			    break;
		    case 4:
			    windDirectionString = "e";
			    break;
		    case 5:
			    windDirectionString = "ese";
			    break;
		    case 6:
			    windDirectionString = "se";
			    break;
		    case 7:
			    windDirectionString = "sse";
			    break;
		    case 8:
			    windDirectionString = "s";
			    break;
		    case 9:
			    windDirectionString = "ssw";
			    break;
		    case 10:
			    windDirectionString = "sw";
			    break;
		    case 11:
			    windDirectionString = "wsw";
			    break;
		    case 12:
			    windDirectionString = "w";
			    break;
		    case 13:
			    windDirectionString = "wnw";
			    break;
		    case 14:
			    windDirectionString = "nw";
			    break;
		    case 15:
			    windDirectionString = "nnw";
			    break;
		    default:  // 0, 16 
			    windDirectionString = "n";		
			    break;
	    }    
    }
    else
    {
        windDirectionString = "n";
    }
    return windDirectionString;
}