isFirefox = false;
isIE = false;
isOpera = false;
isElse = false;

function change_options(frm, obj, action) {
    str = "";
    var obj1, obj2;
    var opt1 = new Array();
    var opt2 = new Array();
    for(i=0; i < frm.elements.length; i++) {
        if(frm.elements[i].name == obj) obj1 = frm.elements[i];
        if(frm.elements[i].name == "all_"+obj) obj2 = frm.elements[i];
    }

    if(action=='remove') for(var i=obj1.options.length-1; i >= 0; i--) {
        if(obj1.options[i].selected) {
            index = hasOptions(obj2)?obj2.options.length:0;
            obj2.options[index] = new Option(obj1.options[i].text, obj1.options[i].value, obj1.options[i].defaultSelected, obj1.options[i].selected);
            obj2.options[obj2.options.length-1].selected = false;
            obj1.options[i] = null;
        }
        sort_select(obj2);
    }
    if(action=='add') for(var i=obj2.options.length-1; i >= 0 ; i--) {
        if(obj2.options[i].selected) {
            obj1.options[obj1.options.length] = new Option(obj2.options[i].text, obj2.options[i].value, obj2.options[i].defaultSelected, obj2.options[i].selected);
            obj1.options[obj1.options.length-1].selected = false;
            obj2.options[i] = null;
        }
        sort_select(obj1);
    }

    for(i=0; i < obj1.options.length; i++) {
        opt1[opt1.length] = obj1.options[i].value;
    }
    for(i=0; i < obj2.options.length; i++) {
        opt2[opt2.length] = obj2.options[i].value;
    }

    hd = frm.elements["hidden_"+obj];
    hd.value = opt1.join(",");
}

function sort_select(obj) {
    var o = new Array();
    for(var i=0; i < obj.options.length; i++) {
        o[o.length] = new Option(obj.options[i].text, obj.options[i].value, obj.options[i].defaultSelected, obj.options[i].selected);
    }
    o = o.sort(
    function(a,b) {
        if ((a.text+"") < (b.text+"")) { return -1; }
        if ((a.text+"") > (b.text+"")) { return 1; }
        return 0;
    }
    );

    for (var i=0; i<o.length; i++) {
        obj.options[i] = new Option(o[i].text, o[i].value, o[i].defaultSelected, o[i].selected);
    }
}

function hasOptions(obj) {
    if (obj!=null && obj.options!=null) { return true; }
    return false;
}

function option_move(action, obj) {
    frm = obj.form;
    var selected_idx = -1;
    for(var i=0; i < obj.options.length; i++) {
        if(obj.options[i].selected) {
            selected_idx = i;
            break;
        }
    }
    if(selected_idx != -1) {
        if(action=='up') {
            if(selected_idx == 0) alert('It is already on the top');
            else {
                o1 = obj.options[selected_idx];
                temp1 = new Option(o1.text, o1.value, o1.defaultSelected, o1.selected);
                o2 = obj.options[selected_idx - 1];
                temp2 = new Option(o2.text, o2.value, o2.defaultSelected, o2.selected);
                obj.options[selected_idx] = temp2;
                obj.options[selected_idx - 1] = temp1;
            }
        }
        else if(action=='down') {
            if(selected_idx == obj.options.length-1) alert('It is already on the bottom');
            else {
                o1 = obj.options[selected_idx];
                temp1 = new Option(o1.text, o1.value, o1.defaultSelected, o1.selected);
                o2 = obj.options[selected_idx + 1];
                temp2 = new Option(o2.text, o2.value, o2.defaultSelected, o2.selected);
                obj.options[selected_idx] = temp2;
                obj.options[selected_idx + 1] = temp1;
            }
        }
        var arr = new Array();
        for(var i=0; i < obj.options.length; i++) arr[arr.length] = obj.options[i].value;
        frm.elements['hd_'+obj.name].value = arr;
    }
    else {
        alert('Please select to re-order');
        this.focus();
    }

}

function drag(handle_id, container_id, form_input_id) {
    if(isElse) return false;
    var debugMode = false;
    var dragStatus = false;
    var init_mouse_x, init_mouse_y;
    var currentElement = document.getElementById(handle_id);
    var mapContainer = document.getElementById(container_id);
    var formValue = document.getElementById(form_input_id);

    var debugBox = document.getElementById('debug_box')
    if(debugMode) debugBox.style.display = 'block';

    document.onmousedown = _mousedown;
    document.onmousemove = _mousemove;
    document.onmouseup = _mouseup;

    currentElement = _element(currentElement);
    mapContainer = _element(mapContainer);
    _debug(formValue.value);

    function _element(element) {
        element.l = _getPosition(element).x;
        element.t = _getPosition(element).y;
        element.r = element.l + _getSize(element).w;
        element.b = element.t + _getSize(element).h;
        return element;
    }

    function _debug(str) {
        if(debugMode) debugBox.innerHTML = str;
    }

    function _getMouseCoordinate(event) {
        e = _fix(event);
        function ret() {var x, y};
        ret.x = (isFirefox || isOpera)?e.pageX:e.x;
        ret.y = (isFirefox || isOpera)?e.pageY:e.y;
        //ret.x = e.offsetX;
        //ret.y = e.offsetY;
        return ret;
    }

    function _fix(event) {
        if (!event) event = window.event;
        if (event.target) {
            if (event.target.nodeType == 3) event.target = event.target.parentNode;
        }
        else if (event.srcElement) {
            event.target = event.srcElement;
        }
        return event;
    }

    function _setPosition(x, y) {
        new_x = currentElement.x + x;
        new_y = currentElement.y + y;
        if(new_x <= mapContainer.l) new_x = mapContainer.l;
        if(new_y <= mapContainer.t) new_y = mapContainer.t;
        if(new_x >= mapContainer.r - _getSize(currentElement).w) new_x = mapContainer.r - _getSize(currentElement).w;
        if(new_y >= mapContainer.b - _getSize(currentElement).h) new_y = mapContainer.b - _getSize(currentElement).h;
        currentElement.style['left'] = (new_x) + "px";
        currentElement.style['top'] = (new_y) + "px";
    }


    function _mousedown(e) {
        this.dragStatus = true && (_fix(e).target == currentElement);
        init_mouse_x = _getMouseCoordinate(e).x;
        init_mouse_y = _getMouseCoordinate(e).y;
        _debug("Init Mouse: (" + init_mouse_x + "," + init_mouse_y + ")");
        currentElement.x = _getPosition(currentElement).x;
        currentElement.y = _getPosition(currentElement).y;
    }

    function _mousemove(e) {
        //_debug(_fix(e).target.getAttribute('id'));
        if(this.dragStatus && (_fix(e).target == currentElement || _fix(e).target == mapContainer)) {
            x = _getMouseCoordinate(e).x - init_mouse_x;
            y = _getMouseCoordinate(e).y - init_mouse_y;
            _setPosition(x, y);
            _setFormValue();
            //_debug("Current Mouse: (" + _getMouseCoordinate(e).x + "," + _getMouseCoordinate(e).y + ")");
        }
        return false;
    }

    function _mouseup(e) {
        if(this.dragStatus && (_fix(e).target == currentElement || _fix(e).target == mapContainer)) {
            x = _getMouseCoordinate(e).x - init_mouse_x;
            y = _getMouseCoordinate(e).y - init_mouse_y;
            _setPosition(x, y);
            _setFormValue();
            //_debug("Last Mouse Position: " + arr.join(","));
        }
        this.dragStatus = false;
    }

    function _setFormValue() {
        ce = new _element(currentElement);
        arr = new Array(ce.l, ce.t, ce.r, ce.b);
        formValue.value = arr.join(',');
    }

    function _getPosition(obj) {
        x = parseInt(obj.style.left);
        y = parseInt(obj.style.top);
        function ret() {var x, y}
        ret.x = isNaN(x)?0:x;
        ret.y = isNaN(y)?0:y;
        return (ret);
    }

    function _getSize(obj) {
        w = parseInt(obj.style.width);
        h = parseInt(obj.style.height);
        function ret() {var w, h}
        ret.w = isNaN(w)?0:w;
        ret.h = isNaN(h)?0:h;
        return (ret);
    }

    return this;

}

window.onload = function() {
    if(document.getElementById('point_locator')) erwin = new drag('point_locator', 'map_admin', 'map_coordinate');
    detect_browser();
    if(document.forms['add_finance']!=undefined) {
        set_disability_finance(document.forms['add_finance']);
    }
    if(document.forms['edit_finance']!=undefined) {
        set_disability_finance(document.forms['edit_finance']);
    }

    if(document.forms['add_trip_finance']!=undefined) {
        set_disability_trip_finance(document.forms['add_trip_finance']);
    }
    if(document.forms['edit_trip_finance']!=undefined) {
        set_disability_trip_finance(document.forms['edit_trip_finance']);
    }

    //alert(assign_map_to_input);
    //if(assign_map_to_input) assign_map_to_input();
}


function detect_browser() {
    ua = navigator.userAgent;
    isFirefox = /Firefox/.test(ua);
    isIE = /MSIE/.test(ua);
    isOpera = /Opera/.test(ua);
    isElse = !isFirefox && !isIE && !isOpera;
}

function add_box(w, h, obj) {
    var mc = document.getElementById('map_admin');
    mc.innerHTML = "<div id=\"point_locator\" style=\"top: " + (h/2) + "px; left: "+(w/2)+"px; width: 15px; height: 15px;\">&nbsp;</div>"
    erwin = new drag('point_locator', 'map_admin', 'map_coordinate');
    obj.style['display'] = 'none';
}

function goto(dd) {
    selected_idx = -1;
    for(i=0; i < dd.options.length; i++) {
        if(dd.options[i].selected) {
            selected_idx = i;
            break;
        }
    }
    if(selected_idx != -1) {
        val = dd.options[selected_idx].value;
        location.href='/admin_trip_reports.php?action=edit&id='+val;
        return true;
    }
    else {
        alert('Please select report above');
        return false;
    }
}


rel = new Hashtable();
rel.put('54', 'D');
rel.put('23', '');
rel.put('44', 'D');
rel.put('57', 'D');
rel.put('18', '');
rel.put('53', 'D');
rel.put('1', 'D');
rel.put('4', 'D');
rel.put('26', 'D');
rel.put('38', 'D');
rel.put('59', 'D');
rel.put('3', 'D');
rel.put('27', 'T');
rel.put('13', 'D,T');
rel.put('16', 'T');
rel.put('42', 'T');
rel.put('41', 'D,T');
rel.put('71', 'D');
rel.put('72', 'T');
rel.put('73', 'T');
rel.put('80', 'T');
rel.put('81', 'D');
rel.put('82', 'T');
rel.put('83', 'D');
rel.put('84', '');
rel.put('86', 'D');
rel.put('87', '');
rel.put('88', 'D');
rel.put('89', 'D');
rel.put('90', '');
rel.put('91', '');
rel.put('92', 'D');
rel.put('93', '');
rel.put('94', 'D');
rel.put('95', '');
rel.put('96', '');
rel.put('97', '');
rel.put('98', '');
rel.put('99', '');
rel.put('100', '');
rel.put('101', '');
rel.put('102', '');
rel.put('103', 'D');
rel.put('104', 'D');
rel.put('105', 'D');
rel.put('106', '');
rel.put('107', '');
rel.put('108', '');
rel.put('109', 'D');

rel_trip = new Hashtable();
rel_trip.put('95', '');
rel_trip.put('13', 'D');
rel_trip.put('41', 'D');
rel_trip.put('96', '');
rel_trip.put('94', '');
rel_trip.put('80', '');
rel_trip.put('85', '');
rel_trip.put('90', '');
rel_trip.put('91', '');
rel_trip.put('92', '');
rel_trip.put('93', '');
rel_trip.put('97', '');
rel_trip.put('98', '');
rel_trip.put('99', '');

/**
Created by: Michael Synovic
on: 01/12/2003

This is a Javascript implementation of the Java Hashtable object.

Contructor(s):
Hashtable()
Creates a new, empty hashtable

Method(s):
void clear() Clears this hashtable so that it contains no keys.
boolean containsKey(String key) Tests if the specified object is a key in this hashtable.
boolean containsValue(Object value) Returns true if this Hashtable maps one or more keys to this value.
Object get(String key) Returns the value to which the specified key is mapped in this hashtable.
boolean isEmpty() Tests if this hashtable maps no keys to values.
Array keys() Returns an array of the keys in this hashtable.
void put(String key, Object value) Maps the specified key to the specified value in this hashtable. A NullPointerException is thrown is the key or value is null.
Object remove(String key) Removes the key (and its corresponding value) from this hashtable. Returns the value of the key that was removed
int size() Returns the number of keys in this hashtable.
String toString() Returns a string representation of this Hashtable object in the form of a set of entries, enclosed in braces and separated by the ASCII characters ", " (comma and space).
Array values() Returns a array view of the values contained in this Hashtable.

*/
function Hashtable(){
    this.clear = hashtable_clear;
    this.containsKey = hashtable_containsKey;
    this.containsValue = hashtable_containsValue;
    this.get = hashtable_get;
    this.isEmpty = hashtable_isEmpty;
    this.keys = hashtable_keys;
    this.put = hashtable_put;
    this.remove = hashtable_remove;
    this.size = hashtable_size;
    this.toString = hashtable_toString;
    this.values = hashtable_values;
    this.hashtable = new Array();

    /*=======Private methods for internal use only========*/

    function hashtable_clear(){
        this.hashtable = new Array();
    }

    function hashtable_containsKey(key){
        var exists = false;
        for (var i in this.hashtable) {
            if (i == key && this.hashtable[i] != null) {
                exists = true;
                break;
            }
        }
        return exists;
    }

    function hashtable_containsValue(value){
        var contains = false;
        if (value != null) {
            for (var i in this.hashtable) {
                if (this.hashtable[i] == value) {
                    contains = true;
                    break;
                }
            }
        }
        return contains;
    }

    function hashtable_get(key){
        return this.hashtable[key];
    }

    function hashtable_isEmpty(){
        return (parseInt(this.size()) == 0) ? true : false;
    }

    function hashtable_keys(){
        var keys = new Array();
        for (var i in this.hashtable) {
            if (this.hashtable[i] != null)
            keys.push(i);
        }
        return keys;
    }

    function hashtable_put(key, value){
        if (key == null || value == null) {
            throw "NullPointerException {" + key + "},{" + value + "}";
        }
        else {
            this.hashtable[key] = value;
        }
    }

    function hashtable_remove(key){
        var rtn = this.hashtable[key];
        this.hashtable[key] = null;
        return rtn;
    }

    function hashtable_size(){
        var size = 0;
        for (var i in this.hashtable) {
            if (this.hashtable[i] != null)
            size ++;
        }
        return size;
    }

    function hashtable_toString(){
        var result = "";
        for (var i in this.hashtable)
        {
            if (this.hashtable[i] != null)
            result += "{" + i + "},{" + this.hashtable[i] + "}\n";
        }
        return result;
    }

    function hashtable_values(){
        var values = new Array();
        for (var i in this.hashtable) {
            if (this.hashtable[i] != null)
            values.push(this.hashtable[i]);
        }
        return values;
    }
}




function check_field_add_transaction(frm) {
    //alert(check_field_add_transaction.toString());
    //set_disability_finance(frm);
    if(isNaN(parseFloat(frm.elements['amount'].value)) || parseFloat(frm.elements['amount'].value)==0) {
        alert("Amount can not be zero or empty");
        frm.elements['amount'].focus();
        return false;
    }

    return true;
}

function set_disability_finance(frm) {
    tt = frm.elements['transaction_type_id'];
    dv = frm.elements['diver_id'];
    tr = frm.elements['trip_id'];
    ttv = tt.options[tt.selectedIndex].value;
    //alert(rel.get(ttv)!=undefined?rel.get(ttv):false);
    hs = new Hashtable();
    if(rel.get(ttv) != undefined) {
        rr = rel.get(ttv).split(',');
        for(i=0; i < rr.length; i++) {
            hs.put(rr[i], '1');
        }
    }
    if(hs.containsKey('D') && dv.options[0].selected) dv.options[1].selected=true;
    else if(!hs.containsKey('D')) dv.options[0].selected = true;
    if(hs.containsKey('T') && tr.options[0].selected) tr.options[1].selected=true;
    else if(!hs.containsKey('T')) tr.options[0].selected = true;

    dv.disabled = !hs.containsKey('D');
    tr.disabled = !hs.containsKey('T');
}

function set_disability_trip_finance(frm) {
    tt = frm.elements['trip_transaction_type_id'];
    dv = frm.elements['diver_id'];
    ttv = tt.options[tt.selectedIndex].value;
    //alert(rel.get(ttv)!=undefined?rel.get(ttv):false);
    hs = new Hashtable();
    if(rel_trip.get(ttv) != undefined) {
        rr = rel_trip.get(ttv).split(',');
        for(i=0; i < rr.length; i++) {
            hs.put(rr[i], '1');
        }
    }
    //if(hs.containsKey('D') && dv.options[0].selected) dv.options[1].selected=true;
    //else if(!hs.containsKey('D')) dv.options[0].selected = true;
    if(!hs.containsKey('D')) dv.options[0].selected = true;

    dv.disabled = !hs.containsKey('D');
}

function setHiddenByCheckbox(frm) {
    return true;
}

function reloadDiv(txtarea) {
    str = txtarea.value.split('\n');
    str = str.join('<br />\n');
    document.getElementById('news_preview').innerHTML = str;
}

function check_max_length(obj, max_length) {
    if(obj.value.length > max_length) {
        alert("Can not exceed " + max_length + " characters");
        obj.value = obj.value.substr(0,max_length);
        obj.focus();
    }

}


