function luiGetFormVars(formobj) {
    var obj;
    var value;
    var formvars;
    if(formobj.childNodes) {
        formvars = new Array(formobj.elements.length);
        for(var i = 0; i < formobj.elements.length; i++) {
            obj = formobj.elements[i];
            value = luiGetValue(obj);
            if(value != null) {
                formvars[obj.name] = value;
            }
        }
    } else {
        formvars = new Array(0);
    }
    return formvars;
}

function luiGetValue(obj) {
    var switcher;
    var result;
    var numselected;
    var i;
    var options;
    switcher = obj.tagName + (obj.tagName == 'INPUT' ? '/' + obj.type : '');
    switch (switcher) {
    case 'TEXTAREA':
        return obj.value;
    case 'INPUT/text':
        return obj.value;
    case 'INPUT/checkbox':
        return obj.checked;
    case 'INPUT/radio':
        if(obj.checked)
            return obj.value;
        else
            return null;
    case 'INPUT/hidden':
        return obj.value;
    case 'OPTION':
        return obj.selected;
    case 'SELECT':
        if(obj.multiple) {
            result = new Array(obj.length);
            numselected = 0;
            for(i = 0; i < obj.length; i++) {
                if(obj.options[i].selected) {
                    result[numselected] = obj.options[i].value;
                    numselected++;
                }
            }
            options = new Array(numselected);
            for(i = 0; i < numselected; i++) {
                options[i] = result[i];
            }
            return options;
        }
        return obj.value;
    }
    return null;
}

function luiGetForm(obj) {
    if(obj.form) {
        return obj.form;
    }
    while (obj && obj.tagName != 'FORM') {
        obj = obj.parentNode;
    }
    return obj;
}

function luiSetInnerHtmlById(id, html) {
    var element;
    element = document.getElementById(id);
    if(element) {
        element.innerHTML = html;
    }
}

function luiGetInnerHtmlById(id) {
    var element;
    element = document.getElementById(id);
    if(element) {
        return element.innerHTML;
    } else {
        return '';
    }
}

function luiSetValueById(id, value) {
    var element;
    element = document.getElementById(id);
    element.value = value;
}

function luiGetValueById(id) {
    var element;
    element = document.getElementById(id);
    if(element) {
        return element.value;
    } else {
        return undefined;
    }
}

function luiFormatPrice(price) {
    return parseFloat(price, 10).toFixed(2);
}

function luiFormatInteger(number) {
    return parseInt(number, 10);
}

function luiSubmitForm(e_form) {
    if(e_form.onsubmit()) {
        return e_form.submit();
    }
    return false;
}

function luiPopupForm(e_form, f_process, width) {
    var div_id;
    var e_div_prev;
    var e_div;
    var f_onkeydown;
    var f_onkeypress;
    var first_element;
    var last_element;

    if(width == undefined) {
        width = 300;
    } else {
        width = parseInt(width);
    }

    div_id = 'luiPopupForm';
    e_div_prev = document.getElementById(div_id);
    if(e_div_prev) {
        luiSubmitForm(e_div_prev.childNodes[0]);
    }
    e_div = document.createElement('div');
    e_div.id = div_id;
    e_div.className = 'luiPopupForm';

    e_div.style.zIndex = '10';

    e_div.style.width = '' + width + 'px';
    e_div.style.marginTop = '-150px';
    e_div.style.marginLeft = '-' + (width / 2) + 'px';

    e_div.appendChild(e_form);
    e_form.onsubmit = function() {
        if(f_process) {
            retval = f_process(e_form);
        }
        e_div = this.parentNode;
        e_div.parentNode.removeChild(e_div);
        luiFocusPage();
        return retval;
    };
    luiBlurPage();

    first_element = e_form.elements[0];
    last_element = e_form.elements[e_form.elements.length - 1];

    f_onkeypress = last_element.onkeypress;
    last_element.onkeypress = function(event) {
        if (! event) {
            var event = window.event;
        }
        if(this.last_key == 9) {
            if(event.shiftKey) {
            } else {
                first_element.focus();
                return false;
            }
        }
    };

    f_onkeydown = last_element.onkeydown;
    last_element.onkeydown = function(event) {
        if (! event) {
            var event = window.event;
        }
        if(f_onkeydown) {
            f_onkeydown(event);
        }
        this.last_key = event.which;
    };

    f_onkeypress = first_element.onkeypress;
    first_element.onkeypress = function(event) {
        if (! event) {
            var event = window.event;
        }
        if(this.last_key == 9) {
            if(event.shiftKey) {
                last_element.focus();
                return false;
            }
        }
    };

    f_onkeydown = first_element.onkeydown;
    first_element.onkeydown = function(event) {
        if (! event) {
            var event = window.event;
        }
        if(f_onkeydown) {
            f_onkeydown(event);
        }
        this.last_key = event.which;
    };

    luiGetBodyElement().appendChild(e_div);
    first_element.focus();
    return e_div;
}

function luiBlurPage() {
    var e_div;
    var e_parent;

    var e_html;
    var e_body;

    e_html = luiGetHtmlElement();
    e_html._style_overflow = e_html.style.overflow;
    e_html.style.overflow = 'hidden';

    e_body = luiGetBodyElement();
    e_body._style_overflow = e_body.style.overflow;
    e_body.style.overflow = 'hidden';

    luiDisableSelectBoxes();
    e_div = document.createElement('div');
    e_div.style.position = 'absolute';
    e_div.style.width = '100%';
    e_div.style.height = '100%';
    e_div.style.top = '0';
    e_div.style.left = '0';
    e_div.className = 'translucent';
    e_div.style.zIndex = '5';
    e_div.id = 'luiBlurPage';
    e_parent = luiGetBodyElement();
    e_parent.insertBefore(e_div, e_parent.childNodes[0]);
    luiDisableTabOrder();
}

function luiFocusPage() {
    var e_parent;

    var e_html;
    var e_body;

    e_html = luiGetHtmlElement();
    e_html.style.overflow = e_html._style_overflow;
    e_body = luiGetBodyElement();
    e_body.style.overflow = e_body._style_overflow;

    luiEnableSelectBoxes();

    e_parent = luiGetBodyElement();
    e_parent.removeChild(document.getElementById('luiBlurPage'));
    luiEnableTabOrder();
}

function luiGetBodyElement() {
    return document.getElementsByTagName('body')[0];
}

function luiGetHtmlElement() {
    return document.getElementsByTagName('html')[0];
}

function luiIterateOverTree(f, e_parent) {
    var i;
    if(e_parent) {
        f(e_parent);
    } else {
        e_parent = luiGetHtmlElement();
    }
    for(i = 0; i < e_parent.childNodes.length; i++) {
        luiIterateOverTree(f, e_parent.childNodes[i]);
    }
}

function luiDisableTabOrder() {
    var f;
    f = function(e) {
        if(e.tabindex) {
            e._tabindex = e.tabindex;
            e.tabindex = -1;
        }
    };
    luiIterateOverTree(f);
}

function luiEnableTabOrder() {
    var f;
    f = function(e) {
        if(e._tabindex) {
            e.tabindex = e._tabindex;
        }
    };
    luiIterateOverTree(f);
}

function luiDisableSelectBoxes() {
    var f;
    f = function(e) {
        if(e.tagName == 'SELECT') {
            e._disabled = e.disabled;
            e.disabled = true;
        }
    }
    luiIterateOverTree(f);
}

function luiEnableSelectBoxes() {
    var f;
    f = function(e) {
        if(e.tagName == 'SELECT') {
            if(typeof(e._disabled) != 'undefined') {
                e.disabled = e._disabled;
            }
        }
    }
    luiIterateOverTree(f);
}

function luiSetPointer(cursor_style) {
    var f;
    f = function(e) {
        if(e.style) {
            e._style_cursor = e.style.cursor;
            e.style.cursor = cursor_style;
        }
    };
    luiIterateOverTree(f);
}

function luiResetPointer() {
    var f;
    f = function(e) {
        if(e.style) {
            e.style.cursor = e._style_cursor;
        }
    };
    luiIterateOverTree(f);
}

function luiNoBubbleHandler(event) {
    if (! event) var event = window.event;
    event.cancelBubble = true;
    if (event.stopPropagation) event.stopPropagation();
}

function luiPrepareNoBubble() {
    var f;
    f = function(e) {
        var old_fn;
        if(e.className == 'noBubble') {
            if(e.onclick) {
                old_fn = e.onclick;
                e.onclick = function(event) { 
                  var retval = old_fn(event);
                  luiNoBubbleHandler(event);
                  return retval;
                }
            } else {
                e.onclick = luiNoBubbleHandler;
            }
        }
    }
    luiIterateOverTree(f);
}

function luiPopupOkCancelFormSingleInput(e_input, f_process, title) {
    var e_form;
    e_form = luiMakeFormSingleInput(e_input, title);
    luiPopupOkCancelForm(e_form, f_process);
}

function luiPopupOkCancelForm(e_form, f_process, width) {
    var f_ok;
    var f_cancel;
    f_ok = function() {
        luiSubmitForm(this.form);
        return false;
    };
    f_cancel = function() {
        e_div = this.form.parentNode;
        e_div.parentNode.removeChild(e_div);
        luiFocusPage();
        return false;
    };
    e_form = luiMakeOkCancelForm(e_form, f_ok, f_cancel);
    luiPopupForm(e_form, f_process, width);
}

function luiMakeFormSingleInput(e_input, title) {
    var e_form;
    e_form = document.createElement('form');
    e_form.appendChild(e_input);
    if(title) {
        luiAddTitleToForm(e_form, title);
    }
    return e_form;
}

function luiAddTitleToForm(e_form, title) {
    var e_table;
    var e_tr;
    var e_td;
    e_table = document.createElement('table');
    e_table.appendChild(document.createElement('tbody'));
    e_tr = document.createElement('tr');
    e_td = document.createElement('th');
    e_td.appendChild(document.createTextNode(title));
    e_tr.appendChild(e_td);
    e_table.tBodies[0].appendChild(e_tr);
    e_form.insertBefore(e_table, e_form.childNodes[0]);
}

function luiMakeOkCancelFormSingleInput(e_input, f_ok, f_cancel, title) {
    var e_form;
    e_form = luiMakeFormSingleInput(e_input, title);
    e_form = luiMakeOkCancelForm(e_form, f_ok, f_cancel);
    return e_form;
}

function luiMakeOkCancelForm(e_form, f_ok, f_cancel) {
    var e_ok;
    var e_cancel;
    e_form.appendChild(document.createElement('br'));
    e_ok = luiMakeElementInputButton('ok', 'ok', f_ok);
    e_cancel = luiMakeElementInputButton('cancel', 'cancel', f_cancel);
    e_form.appendChild(e_ok);
    e_form.appendChild(e_cancel);
    return e_form;
}

function luiMakeElementInputButton(name, value, f_onclick) {
    var e;
    e = document.createElement('input');
    //e.setAttribute('type', 'button');
    e.type = 'button';
    e.id = name;
    e.name = name;
    e.value = value;
    if(f_onclick) {
        e.onclick = f_onclick;
    }
    return e;
}

function luiMakeElementInputText(name, size, maxlength) {
    var e;
    e = document.createElement('input');
    e.id = name;
    e.name = name;
    if(size) {
        e.size = size;
        //e.setAttribute('size', size);
    }
    if(maxlength) {
        //e.setAttribute('maxlength', maxlength);
        e.maxlength = maxlength;
    }
    return e;
}

function luiMakeElementTextarea(name, cols, rows) {
    var e;
    e = document.createElement('textarea');
    e.id = name;
    e.name = name;
    if(cols) {
        //e.setAttribute('cols', cols);
        e.cols = cols;
    }
    if(rows) {
        e.rows = rows;
        //e.setAttribute('rows', rows);
    }
    return e;
}

function luiMakeFormEditAddress(title, name, street_address, suburb,
  city, state, postcode, country) {
    var e_form;
    var e_input_name;
    var e_input_street_address;
    var e_input_suburb;
    var e_input_city;
    var e_input_state;
    var e_input_postcode;
    var e_input_country;
    var e_table;
    var e_td;
    var e_tr;
    var a_cells;
    var a_rows;

    a_rows = new Array(7);

    a_cells = new Array(2);
    a_cells[0] = document.createTextNode('Name:');
    e_input_name = document.createElement('input');
    e_input_name.type = 'text';
    e_input_name.name = 'name';
    if(name) {
        e_input_name.value = name;
    }
    a_cells[1] = e_input_name
    a_rows[0] = a_cells

    a_cells = new Array(2);
    a_cells[0] = document.createTextNode('Street Address:');
    e_input_street_address = document.createElement('input');
    e_input_street_address.type = 'text';
    e_input_street_address.name = 'street_address';
    if(street_address) {
        e_input_street_address.value = street_address;
    }
    a_cells[1] = e_input_street_address;
    a_rows[1] = a_cells

    a_cells = new Array(2);
    a_cells[0] = document.createTextNode('Suite:');
    e_input_suburb = document.createElement('input');
    e_input_suburb.type = 'text';
    e_input_suburb.name = 'suburb';
    if(suburb) {
        e_input_suburb.value = suburb;
    }
    a_cells[1] = e_input_suburb;
    a_rows[2] = a_cells

    a_cells = new Array(2);
    a_cells[0] = document.createTextNode('City:');
    e_input_city = document.createElement('input');
    e_input_city.type = 'text';
    e_input_city.name = 'city';
    if(city) {
        e_input_city.value = city;
    }
    a_cells[1] = e_input_city;
    a_rows[3] = a_cells

    a_cells = new Array(2);
    a_cells[0] = document.createTextNode('State:');
    e_input_state = document.createElement('input');
    e_input_state.type = 'text';
    e_input_state.name = 'state';
    if(state) {
        e_input_state.value = state;
    }
    a_cells[1] = e_input_state;
    a_rows[4] = a_cells;

    a_cells = new Array(2);
    a_cells[0] = document.createTextNode('Post Code:');
    e_input_postcode = document.createElement('input');
    e_input_postcode.type = 'text';
    e_input_postcode.name = 'postcode';
    if(postcode) {
        e_input_postcode.value = postcode;
    }
    a_cells[1] = e_input_postcode;
    a_rows[5] = a_cells;

    a_cells = new Array(2);
    a_cells[0] = document.createTextNode('Country:');
    e_input_country = document.createElement('input');
    e_input_country.type = 'text';
    e_input_country.name = 'country';
    if(country) {
        e_input_country.value = country;
    }
    a_cells[1] = e_input_country;
    a_rows[6] = a_cells;

    e_table = luiMakeTable(a_rows);

    e_form = document.createElement('form');
    if(title) {
        e_tr = document.createElement('tr');
        e_td = document.createElement('th');
        e_td.setAttribute('colspan', '2');
        e_td.appendChild(document.createTextNode(title));
        e_tr.appendChild(e_td);
        e_table.insertBefore(e_tr, e_table.childNodes[0]);
    }
    e_form.appendChild(e_table);

    return e_form;
}

function luiMakeTableRow(a_e_cells) {
    var i;
    var e_tr;
    var e_td;
    e_tr = document.createElement('tr');
    for(i = 0; i < a_e_cells.length; i++) {
        if(a_e_cells[i].tagName != 'TD') {
            e_td = document.createElement('td');
            e_td.appendChild(a_e_cells[i]);
        } else {
            e_td = a_e_cells[i];
        }
        e_tr.appendChild(e_td);
    }
    return e_tr;
}

function luiMakeTable(a_e_rows) {
    var i;
    var e_table;
    var e_tr;
    e_table = document.createElement('table');
    e_table.appendChild(document.createElement('tbody'))
    for(i = 0; i < a_e_rows.length; i++) {
        if(a_e_rows[i].tagName != 'TR') {
            e_tr = luiMakeTableRow(a_e_rows[i]);
        } else {
            e_tr = a_e_rows[i];
        }
        e_table.tBodies[0].appendChild(e_tr);
    }
    return e_table;
}

function luiRedrawWindow() {
//    var e_body;
//    e_body = luiGetBodyElement();
//    e_body.innerHTML = ' ' + e_body.innerHTML + ' ';
//    moveBy(1, 1);
//    moveBy(-1, -1);
}

function luiXmlToDomTree(xml, type) {
    var xml_parser;
    var xml_doc;
    if(! type) {
        type = 'text/xml';
    }
    if(document.implementation && document.implementation.createDocument) {
        xml_parser = new DOMParser();
        xml_doc = xml_parser.parseFromString(xml, type);
    } else if(ActiveXObject) {
        xml_doc = new ActiveXObject("Microsoft.XMLDOM");
        xml_doc.async = 'false';
        xml_doc.loadXML(xml);
    }
    return xml_doc.documentElement;
}

function luiAddOnloadFn(fn) {
    var oldfn;
    var newfn;
    oldfn = window.onload;
    newfn = function() {
        if(oldfn) {
            oldfn();
        }
        fn();
    };
    window.onload = newfn;
}

function luiRemoveArrayItemByIndex(a, i) {
    a.splice(i, 1);
}

function luiArrayGetIndexByValue(a, v) {
    for(var i = 0; i < a.length; i++) {
        if(a[i] == v) {
            return i;
        }
    }
    return undefined;
}

function luiInArray(v, a) {
    if(luiArrayGetIndexByValue(a, v) == undefined) {
        return false;
    }
    return true;
}

function luiRemoveAllChildNodes(e) {
    for(var i = 0; i < e.childNodes.length; i++) {
        e.removeChild(e.childNodes[i]);
    }
}

function luiInsertAfter(parent, node, referenceNode) {
    parent.insertBefore(node, referenceNode.nextSibling);
}

function luiGetFormControlByName(e_form, name) {
    var i;
    var e;

    for(i = 0; i < e_form.elements.length; i++) {
        e = e_form.elements[i];
        if(e.name && (e.name == name)) {
            return e;
        }
    }
    return undefined;
}

// BEGIN Extended Tooltip Javascript
// copyright 9th August 2002, 3rd July 2005
// by Stephen Chapman, Felgall Pty Ltd
// permission is granted to use this javascript provided that the below code is
// not altered

var DH = 0;var an = 0;var al = 0;var ai = 0;if (document.getElementById) {ai = 1; DH = 1;}else {if (document.all) {al = 1; DH = 1;} else { browserVersion = parseInt(navigator.appVersion); if ((navigator.appName.indexOf('Netscape') != -1) && (browserVersion == 4)) {an = 1; DH = 1;}}} function fd(oi, wS) {if (ai) return wS ? document.getElementById(oi).style:document.getElementById(oi); if (al) return wS ? document.all[oi].style: document.all[oi]; if (an) return document.layers[oi];}

function pw() {return window.innerWidth != null? window.innerWidth: document.body.clientWidth != null? document.body.clientWidth:null;}

function mouseX(evt) {if (evt.pageX) return evt.pageX; else if (evt.clientX)return evt.clientX + (document.documentElement.scrollLeft ?  document.documentElement.scrollLeft : document.body.scrollLeft); else return null;}

function mouseY(evt) {if (evt.pageY) return evt.pageY; else if (evt.clientY)return evt.clientY + (document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop); else return null;}

function popUpTooltip(evt,oi) {if (DH) {var wp = pw(); ds = fd(oi,1); dm = fd(oi,0); st = ds.visibility; if (dm.offsetWidth) ew = dm.offsetWidth; else if (dm.clip.width) ew = dm.clip.width; if (st == "visible" || st == "show") { ds.visibility = "hidden"; } else {tv = mouseY(evt) + 20; lv = mouseX(evt) - (ew/4); if (lv < 2) lv = 2; else if (lv + ew > wp) lv -= ew/2; if (!an) {lv += 'px';tv += 'px';} ds.left = lv; ds.top = tv; ds.visibility = "visible";}}}
// END

