var textLocationCountry = 'Country:';
var textLocationTown    = 'Town:';
var textLocationRegion  = 'Region:';
var textLocationWait    = 'Please wait..';

var styleLocationTable  = 'locationTable';
var styleLocationRow    = 'locationRow';
var styleLocationSelect = 'locationSelect';
var styleLocationTitle  = 'locationTitle';
var styleLocationField  = 'locationField';
var styleLocationTitleWait = 'locationTitleWait';

function Location () {
    var _ = this; _.cache = {}; _.eu = '../js/location.php'; _.rq = new JsRequest (); _.mt = null; _.tb = null; _.rn = null; _.rw = {}; _.s = {}; _.v = {};
    function ac (p, e) {return p.appendChild (e);}
    function ce (e) {return document.createElement (e);}
    function ct (t) {return document.createTextNode (t);}
    function cs (o, s) {var e = ce ('SELECT'); e.className = styleLocationSelect; for (var i in o) {var f = ac (e, ce ('OPTION')); f.value = i; if (i == s) f.selected = true; ac (f, ct (o [i]));} return e;}
    function orw (r, t, o, v) {_.rr (r); _.rw [r] = _.tb.insertBefore (ce ('TR'), _.rn)/*ac (_.tb, ce ('TR'))*/; _.rw [r].className = styleLocationRow; var th = ac (_.rw [r], ce ('TD')); th.className = styleLocationTitle; ac (th, ct (t)); var ts = ac (_.rw [r], ce ('TD')); ts.className = styleLocationField; var s = cs (o, v); ac (ts, s); return s;}
    _.rr = function (r) {if (_.rw [r] != null) _.tb.removeChild (_.rw [r]); delete (_.rw [r]); _.rw [r] = null;}
    _.ow = function (r) {_.rw [r] = _.tb.insertBefore (ce ('TR'), _.rn) /*ac (_.tb, ce ('TR'))*/; _.rw [r].className = styleLocationRow; var td = ac (_.rw [r], ce ('TD')); td.className = styleLocationTitleWait; td.colSpan = 2; ac (td, ct (textLocationWait));}
    _.gc = function (k) {if (_.cache [k]) {if (_.cache [k] ['Regions']) _.or (_.cache [k] ['Regions']); if (_.cache [k] ['Towns'])   _.ot (_.cache [k] ['Towns']); return true;} return false;}
    _.sc = function (k, v) {_.cache [k] = v;}
    _.oc = function (o) {var s = orw ('c', textLocationCountry, o, _.v ['CountryID']); _.s ['CountryID'] = s; s.onchange = function () {_.v ['CountryID'] = s.value; _.v ['RegionID'] = ''; _.v ['TownID'] = ''; _.rr ('r'); if (_.s ['RegionID']) {delete (_.s ['RegionID']); _.s ['RegionID'] = null;}; _.rr ('t'); if (_.s ['TownID']) {delete (_.s ['TownID']); _.s ['TownID'] = null;}; if (s.value == '--' || s.value == '') return; if (_.gc ('c:' + s.value)) return; s.disabled = 1; _.ow ('r'); _.rq.onLoad = function () {s.disabled = 0; _.rr ('r'); var ro = _.rq.getResponseObject (); _.sc ('c:' + _.v ['CountryID'], ro); if (ro ['Regions']) _.or (ro ['Regions']); if (ro ['Towns']) _.ot (ro ['Towns']);}; _.rq.sendGet (_.eu + '?c=' + _.v ['CountryID']);};}
    _.or = function (o) {var s = orw ('r', textLocationRegion, o, _.v ['RegionID']);   _.s ['RegionID'] = s;  s.onchange = function () {_.v ['RegionID'] = s.value; _.v ['TownID'] = ''; _.rr ('t'); if (_.s ['TownID']) {delete (_.s ['TownID']); _.s ['TownID'] = null;}; if (s.value == '--' || s.value == '') return; if (_.gc ('r:' + s.value)) return; s.disabled = 1; _.ow ('t'); _.rq.onLoad = function () {s.disabled = 0; _.rr ('t'); var ro = _.rq.getResponseObject (); _.sc ('r:' + _.v ['RegionID'], ro); if (ro ['Towns']) _.ot (ro ['Towns']);}; _.rq.sendGet (_.eu + '?c=' + _.v ['CountryID'] + '&r=' + _.v ['RegionID']);};}
    _.ot = function (o) {var s = orw ('t', textLocationTown, o, _.v ['TownID']);       _.s ['TownID'] = s;    s.onchange = function () {_.v ['TownID'] = s.value;};}
    _.output = function () {_.ow ('c'); _.rq.onLoad = function () {_.rr ('c'); var ro = _.rq.getResponseObject (); if (ro ['Countries']) _.oc (ro ['Countries']); if (ro ['Regions']) _.or (ro ['Regions']); if (ro ['Towns']) _.ot (ro ['Towns']);}; var url = _.eu + '?i'; if (_.v ['CountryID']) url += '&c=' + _.v ['CountryID']; if (_.v ['RegionID'])  url += '&r=' + _.v ['RegionID']; _.rq.sendGet (url);}
    _.create = function (p) {_.mt = ac (p, ce ('TABLE')); _.mt.className = styleLocationTable; _.tb = ac (_.mt, ce ('TBODY'));};
    _.assign = function (tb, rn) {_.tb = tb; _.rn = rn;};
    _.setValues = function (c, r, t) {_.v ['CountryID'] = c; _.v ['RegionID'] = r; _.v ['TownID'] = t;};
    _.getValues = function () {return _.v;};
    _.getControls = function () {return _.s;};
}