var AVAILALBE_ELEMENT_NAMES_ARRAY = new Array();
var ELEMENT_NAMES_ARRAY = new Array();

/*
 * This uses settings in each elements config file to build up an image lookup array
 * mapping period number to image symbolic link
  */
function buildImageLookupArray(a) {
   element = a[WEATHER_ELEMENT_ARRAY_ELEMENT_NAME_INDEX];
   timeperiod = a[WEATHER_ELEMENT_ARRAY_ELEMENT_TIMEPERIOD_TYPE];
   a[WEATHER_ELEMENT_ARRAY_ELEMENT_IMAGE_NAME_LOOKUP] = new Array();
   switch(timeperiod) {
		case ELEMENT_TIMEPERIOD_12_HOURLY:
         if(element == ELEMENT_NAME_MAXTMINT) {
            for(var i = 1; i < 8; i++) {
               if(!(i == 1 && periodDayNight[0] == NIGHT_FLAG)) { a[WEATHER_ELEMENT_ARRAY_ELEMENT_IMAGE_NAME_LOOKUP].push(new Array(ELEMENT_NAME_MAXT + i)); };
               if(!(i == 7 && periodDayNight[NUMBER_OF_PERIODS-1] == DAY_FLAG)) a[WEATHER_ELEMENT_ARRAY_ELEMENT_IMAGE_NAME_LOOKUP].push(new Array(ELEMENT_NAME_MINT + i));
            }
         }
         break;
      case ELEMENT_TIMEPERIOD_24_HOURLY:
      case ELEMENT_TIMEPERIOD_24_HOURLY_DAY0_AND_DAY1_ONLY:
         var period;
         for(var i = 0; i < NUMBER_OF_PERIODS; i++) {
            period = i+1;
            // DailyPop elements have an 'm' between the PoP mm number and the image number
            //if(isDailyPopElement(element)) a[WEATHER_ELEMENT_ARRAY_ELEMENT_IMAGE_NAME_LOOKUP][i] = new Array(element +"m"+ period);
            if(isDailyPopElement(element)) a[WEATHER_ELEMENT_ARRAY_ELEMENT_IMAGE_NAME_LOOKUP][i] = new Array(element + period);
            else a[WEATHER_ELEMENT_ARRAY_ELEMENT_IMAGE_NAME_LOOKUP][i] = new Array(element + period);
         }
         break;
      default:
         var elementcounter = 1;
         for(var i = 0; i < NUMBER_OF_PERIODS; i++) {
            a[WEATHER_ELEMENT_ARRAY_ELEMENT_IMAGE_NAME_LOOKUP][i] = new Array(NUMBER_OF_THREE_HOURLY_TIMESLOTS);
            for(var t = 0; t < NUMBER_OF_THREE_HOURLY_TIMESLOTS; t++) {
               a[WEATHER_ELEMENT_ARRAY_ELEMENT_IMAGE_NAME_LOOKUP][i][t] = element + elementcounter;
               elementcounter++;
            }
         }
   }
}

function isDailyPopElement(element) {
   if(element.indexOf("DailyPoP") != -1) { 
      return true;
   }
   else {
      return false;
   }
}

var NUMBER_OF_PERIODS = broadcastNumOfPeriod; //the number of periods shown

var DAY_FLAG = "Day";
var NIGHT_FLAG = "Night";

var PAGE_TYPE_DAY = "Day";
var PAGE_TYPE_LOOP = "Loop";
var PAGE_TYPE_WEEK = "Week";

var LOOP_PERIOD_ALL_PERIODS = 3; // Wind and Temperature
var LOOP_PERIOD_ALL_PERIODS_FIRST_THREE_DAYS = 6;
var LOOP_PERIOD_DAYS_0_1_AND_2 = 5;
var LOOP_PERIOD_DAYS_0_AND_1 = 4;
var LOOP_PERIOD_DAYS = 0; // Daytime Max and Daily rainfall
var LOOP_PERIOD_NIGHTS = 1; // Overnight Min
var LOOP_PERIOD_24HR_DAYS = 7;

var DEGREES_SYMBOL = "\u00B0C"; // unicode degrees symbol + celcius symbol
var NON_BREAKING_SPACE = "\u00A0"; // unicode nbsp

// these are just varants so easier to pick up typos (gives javascript error)
var HTML_ATTRIBUTE_ALIGN = 'align';
var HTML_ATTRIBUTE_COLSPAN = 'colSpan';
var HTML_ATTRIBUTE_HEIGHT = 'height';
var HTML_ATTRIBUTE_ROWSPAN = 'rowSpan';
var HTML_ATTRIBUTE_TITLE = 'title';
var HTML_ATTTRIBUTE_ID = 'id';
var HTML_DISPLAY_VALUE_NONE = 'none';
var HTML_DISPLAY_VALUE_SHOW = '';
var HTML_ELEMENT_OPTION = 'option';
var HTML_ELEMENT_SELECT = 'select';
var HTML_ELEMENT_TBODY = 'tbody';
var HTML_ELEMENT_TD = 'td';
var HTML_ELEMENT_THEAD = 'thead';
var HTML_ELEMENT_TH = 'th';
var HTML_ELEMENT_TR = 'tr';
var OPTION_SELECTED_TRUE_VALUE = "true";
var PIXELS_UNIT = 'px';

// images
var IMAGE_EXTENSION = ".png";
var IMAGES_DIR = PRODUCT_LOC + '/images'; //IMAGES_DIR + "";
var IMAGES_UI_DIR = PRODUCT_LOC + '/images-ui';
var WTHER_ICO_DIR = '/images/weather_icons';
var WTHER_ICO_H = 22;
var WTHER_ICO_W = 23;

//    var IMAGE_DIR_LOOP_BUTTONS = IMAGES_DIR + "/";
var IMAGE_FOOTER_HEIGHT = 54;
//var IMAGE_HEADER_HEIGHT = 40;
var IMAGE_HEADER_HEIGHT = 45;
var IMAGE_PATH_LOOP_BUTTON_FASTER_DISABLED   = IMAGES_UI_DIR + "/forecastexplorer_loop_faster_disabled" + IMAGE_EXTENSION;
var IMAGE_PATH_LOOP_BUTTON_FASTER_ENABLED    = IMAGES_UI_DIR + "/forecastexplorer_loop_faster" + IMAGE_EXTENSION;
var IMAGE_PATH_LOOP_BUTTON_NEXT_DISABLED     = IMAGES_UI_DIR + "/forecastexplorer_loop_next_disabled" + IMAGE_EXTENSION;
var IMAGE_PATH_LOOP_BUTTON_NEXT_ENABLED      = IMAGES_UI_DIR + "/forecastexplorer_loop_next" + IMAGE_EXTENSION;
var IMAGE_PATH_LOOP_BUTTON_PLAY_DISABLED     = IMAGES_UI_DIR + "/forecastexplorer_loop_play_disabled" + IMAGE_EXTENSION;
var IMAGE_PATH_LOOP_BUTTON_PLAY_ENABLED      = IMAGES_UI_DIR + "/forecastexplorer_loop_play" + IMAGE_EXTENSION;
var IMAGE_PATH_LOOP_BUTTON_PREVIOUS_DISABLED = IMAGES_UI_DIR + "/forecastexplorer_loop_previous_disabled" + IMAGE_EXTENSION;
var IMAGE_PATH_LOOP_BUTTON_PREVIOUS_ENABLED  = IMAGES_UI_DIR + "/forecastexplorer_loop_previous" + IMAGE_EXTENSION;
var IMAGE_PATH_LOOP_BUTTON_SLOWER_DISABLED   = IMAGES_UI_DIR + "/forecastexplorer_loop_slower_disabled" + IMAGE_EXTENSION;
var IMAGE_PATH_LOOP_BUTTON_SLOWER_ENABLED    = IMAGES_UI_DIR + "/forecastexplorer_loop_slower" + IMAGE_EXTENSION;
var IMAGE_PATH_LOOP_BUTTON_STOP_DISABLED     = IMAGES_UI_DIR + "/forecastexplorer_loop_stop_disabled" + IMAGE_EXTENSION;
var IMAGE_PATH_LOOP_BUTTON_STOP_ENABLED      = IMAGES_UI_DIR + "/forecastexplorer_loop_stop" + IMAGE_EXTENSION;
var THUMBNAIL_IMAGE_DIR                      = IMAGES_DIR + "/thumbnail/"; // N.B. Trailing slash!

var STATIC_IMAGES_DIR = PRODUCT_LOC + '/staticimages'; //"../staticimages/";

var NO_DATA_AVAILABLE_FFDI_IMAGE = STATIC_IMAGES_DIR + "/no_data_available_ffdi" + IMAGE_EXTENSION; // image shown when no data available (ffdi > 2 days out)
var NO_DATA_AVAILABLE_FFDI_THUMBNAIL_IMAGE = STATIC_IMAGES_DIR + "/thumb_no_data_available_ffdi" + IMAGE_EXTENSION; // image shown when no data available (ffdi > 2 days out)
var NO_DATA_AVAILABLE_IMAGE = STATIC_IMAGES_DIR + "/no_data_available" + IMAGE_EXTENSION; // image shown when no data available (when only 6 hourly data)
var NO_DATA_AVAILABLE_THUMBNAIL_IMAGE = STATIC_IMAGES_DIR + "/thumb_no_data_available" + IMAGE_EXTENSION; // image shown when no data available (when only 6 hourly data)

var NO_DATA_TITLE_MESSAGE = "Data only available at 6 hourly intervals when forecast is more than 3 days into the future.";
var NO_DATA_TITLE_MESSAGE_RAINFALL = "Data not available when forecast is more than 3 days into the future.";

var CSS_CLASS_ELEMENTNAME = 'elementname';
var JAVASCRIPT_FUNCTION_CHANGE_LOOP_FORECAST_ELEMENT = "javascript:loopForecastElementChange();";
var JAVASCRIPT_FUNCTION_DAILY_VIEW_PERIOD_CHANGE = "javascript:selectPeriod();";
var JAVASCRIPT_FUNCTION_LOOP_ANIMATE = "loopAnimate(true)";
var JAVASCRIPT_LOOP_PERIOD_CHANGE = "javascript:loopPeriodChange()";
var PERIOD_NAME_HEADING_ID = "period-name";

// Constants for consistency sake (change one, change them all)
var ELEMENT_ROLLOVER_TABLE_HEADING_HEIGHT = '30';
var ELEMENT_ROLLOVER_TABLE_TIMESLOT_ALIGNMENT = 'center';
var TABLE_CELL_DEFAULT_COLOUR = "white";
var TABLE_CELL_HIGHLIGHT_COLOUR = "#c0cdda";

var WEATHER_ELEMENT_ARARY_ELEMENT_LOOP_PERIOD = 9;
var WEATHER_ELEMENT_ARRAY_ELEMENT_HEADING = 4;
var WEATHER_ELEMENT_ARRAY_ELEMENT_IMAGE_NAME_LOOKUP = 7;
var WEATHER_ELEMENT_ARRAY_ELEMENT_LOOP_TEXT = 8;
var WEATHER_ELEMENT_ARRAY_ELEMENT_NAME_INDEX = 0;
var WEATHER_ELEMENT_ARRAY_ELEMENT_PERIOD = 2;
var WEATHER_ELEMENT_ARRAY_ELEMENT_TIMEPERIOD_TYPE = 1;
var WEATHER_ELEMENT_ARRAY_ELEMENT_TITLE = 3;
var WEATHER_ELEMENT_ARRAY_ELEMENT_TWELVE_HOUR_TEXT_DAY = 5;
var WEATHER_ELEMENT_ARRAY_ELEMENT_TWELVE_HOUR_TEXT_NIGHT = 6;

var DEFAULT_TIMESLOT = 1; // used by full period elements (Max/Min/Daily Rainfall)
var DOM_ID_PREFIX = "Period";
var NUMBER_OF_ITEMS_SHOWN_AT_ONE_TIME_IN_SELECT_BOXES = "1";
var NUMBER_OF_THREE_HOURLY_TIMESLOTS = 4; // the number of three hourly timeslots in each 12 hour period
var NUMBER_OF_TIMESLOTS_WHEN_SIX_HOURLY = 2;
var NUMBER_OF_TIMESLOTS_WHEN_THREE_HOURLY = NUMBER_OF_THREE_HOURLY_TIMESLOTS;
var PERIOD_NUMBER_WHEN_SWITCHES_TO_SIX_HOURLY = 7;

var ELEMENT_TIMEPERIOD_12_HOURLY = 1;
var ELEMENT_TIMEPERIOD_24_HOURLY = 0;
var ELEMENT_TIMEPERIOD_24_HOURLY_DAY0_AND_DAY1_ONLY = 3;
var ELEMENT_TIMEPERIOD_3_HOURLY = 2;
var ELEMENT_TIMEPERIOD_3_HOURLY_DAY0_DAY1_AND_DAY2_ONLY = 4;

var FOCUS_WHEN_DISABLED = "";
var HREF_WHEN_DISABLED = "";
var MOUSEOVER_WHEN_DISABLED = "";

var BROWSER_NAME = navigator.appName;
var IS_IE = (BROWSER_NAME == "Microsoft Internet Explorer");

// Cookies
var CLICK_OR_MOUSEOVER_COOKIE_NAME = 'clickOrMouseover'; //"ingredient";
var CLICK_OR_MOUSEOVER_FORM_NAME = 'turnoncode';
var COOKIE_EXPIRE = 6;
var COOKIE_KEY_VALUE_DELIMINATOR = '=';
var COOKIE_PARAM_DELIMINATOR = '; ';
var COOKIE_VALUE_CLICK = 0;
var COOKIE_VALUE_DELIMINATOR = ':';
var COOKIE_VALUE_MOUSEOVER = 1;
var SHOW_ELEMENT_COOKIE_NAME = 'showElementParameter';

//switch(state) {
//   case 'NSW_fire':
//      var cookiePath = "/forecasts/graphical/reguser/";
//      break;
//
//   case 'VIC_fire':
//      var cookiePath = "/forecasts/graphical/reguser/";
//      break;
//
//   default:
//      var cookiePath = "/forecasts/graphical/sectors/";
//}
var COOKIEPATH = PWD;

var OPTION_VALUE_DELIMINATOR = COOKIE_VALUE_DELIMINATOR;

// cgi
var GET_FORECAST_FOR_POINT_URL = "/cgi-bin/adfd/gfe_get_forecast_for_xy_point.pl";
var GET_FORECAST_FOR_POINT_URL_METHOD = "GET";
var GET_MOUSEOVER_POPUP_NO_PRECIS_URL = "/cgi-bin/adfd/getMouseoverPopupNoPrecis.pl";
var GET_PRECIS_FORECAST_FOR_AAC_AND_PERIOD_METHOD = "GET";
// var GET_PRECIS_FORECAST_FOR_AAC_AND_PERIOD_URL = "/cgi-bin/adfd/getOneDayPrecisForecastForLocationAndPeriod.pl";
// var GET_PRECIS_FORECAST_FOR_AAC_AND_PERIOD_URL = PRODUCT_LOC + "/includes/get_forecast.php";
// var GET_PRECIS_FORECAST_FOR_AAC_METHOD = "GET";
var GET_FORECAST_SCRIPT_URL = "/cgi-bin/adfd/gfe_get_forecast_for_location.pl";
// var GET_FIRE_FORECAST_SCRIPT_URL =  PRODUCT_LOC + "/includes/get_fire_forecast.php";
// var GET_MARINE_FORECAST_SCRIPT_URL =  PRODUCT_LOC + "/includes/get_marine_forecast.php";
// var GET_PRECIS_FORECAST_FOR_AAC_URL = "/cgi-bin/adfd/getSevenDayPrecisForecastForLocation.pl";
var GET_PRECIS_FORECAST_FOR_AAC_URL = "/cgi-bin/adfd/getSevenDayPrecisForecastForLocationV2.pl";

// AJAX readyState
var AJAX_READY_STATE_FINISHED = 4;
var AJAX_READY_STATE_INTERACTIVE = 3;
var AJAX_READY_STATE_LOADED = 2;
var AJAX_READY_STATE_LOADING = 1;
var AJAX_READY_STATE_UNINITIALIZED = 0;
var AJAX_RESPONSE_HTTP_OK = 200;

var ELEMENT_ID_ELEMENT_PERIOD_DROP_DOWN = "element-period-drop-down";
var ELEMENT_ID_ELEMENT_PERIOD_SELECT = "element-period-select";
var ELEMENT_ID_FORECAST_ELEMENT_DROP_DOWN = "forecast-element-drop-down";
var ELEMENT_ID_FORECAST_ELEMENT_SELECT = "forecast-element-select";
var ELEMENT_ID_GO_TO_PERIOD_FORM = "goToPeriod";
var ELEMENT_ID_LOOP_BUTTON_FASTER = "loop-button-faster";
var ELEMENT_ID_LOOP_BUTTON_NEXT = "loop-button-next";
var ELEMENT_ID_LOOP_BUTTON_PLAY = "loop-button-play";
var ELEMENT_ID_LOOP_BUTTON_PREVIOUS = "loop-button-previous";
var ELEMENT_ID_LOOP_BUTTON_SLOWER = "loop-button-slower";
var ELEMENT_ID_LOOP_BUTTON_STOP = "loop-button-stop";

var MAP_IMAGE_ELEMENT_ID = "mapimage";
var MOUSECLICK_ELEMENTS_GROUP_NAME = "buttons";
var MOUSE_CLICK_ID = "radio_mouseclick";
var MOUSEOVER_ELEMENTS_GROUP_NAME = "links";
var MOUSE_OVER_ID = "radio_mouseover";
var PHP_FILE_EXTENSION = ".php";

// Animation
var delay = 2000;
var signal = 0; // animation stopped
var timeId = null;
var END_OF_LOOP_WAIT_FACTOR = 2;
var MAX_LOOP_ANIMATION_DELAY = 5000;
var MIN_LOOP_ANIMATION_DELAY = 400;
var OVERDIV_WIDTH = 450;

var FORECAST_ELEMENT_TABLE2_ID = "forecastelementtable2";
var FORECAST_ELEMENT_TABLE_ID = "forecastelementtable";
var MAP_IMAGE_ID = "mapimage";
var NEXT_TWELVE_HOUR_PERIOD_BUTTON_ID = "plusTwelve";
var OVER_DIV_ID = "overDiv";
var OVERVIEW_PIC_ID = "OverViewPic";
var PERIOD_DROP_DOWN_ID = "periodSelect";
var PREVIOUS_TWELVE_HOUR_PERIOD_BUTTON_ID = "minusTwelve";
var WHERE_USER_CLICKED_DIV_ID = "whereUAre";

var ERROR_MESSAGE_POINT_CLICK = "Sorry, we are unable to show forecast for point at this time.";

