
function filter_ajax(param, value) {
	var pageWidth, pageHeight, msgLeft, msgTop, is_ok

	pageWidth = document.documentElement.scrollWidth + 'px'
	pageHeight = document.documentElement.scrollHeight + 'px'
	msgLeft = document.documentElement.scrollWidth / 2 - 100 + 'px';
	if (!!window.opera) {
		msgTop = document.body.clientHeight / 2
	} else {
		msgTop = document.documentElement.clientHeight / 2
	}
	msgTop = msgTop + document.documentElement.scrollTop - 50 + 'px';

    $('waitimage').next(0).update('<br />Please wait...')
    $('waitimage').next(0).innerHTML
	$('overlay').setStyle({height: pageHeight, width: pageWidth, opacity: 0.8, display: 'block'});
	$('waitmsg').setStyle({left: msgLeft, top: msgTop, display: 'block'});
    is_ok = true

    new Ajax.Request('filter.php', {
        method: 'get',
        parameters: { 'param': param, 'value': value },
        onSuccess: function (transport) {
            var container = $('FindCrimesForm');
            if (transport.responseText == 'Time out') {
                is_ok = false
                filter_restore(param, value)
            } else {
                container.update(transport.responseText);
                container.innerHTML();
            }
        },
        onComplete: function () {
            if (is_ok) {
                if (param != 'list_by' && param != 'page') {
                    var zoom = map.getZoom()
                    if (zoom > 7) {
                        downloadCrimes(zoom, mapcenter.lat(), mapcenter.lng(), mapradius/1609.3, 0)
                     } else {
                        downloadCity(zoom, mapcenter.lat(), mapcenter.lng())
                     }
                } else {
                    $('overlay').setStyle({display: 'none'});
                    $('waitmsg').setStyle({display: 'none'});
                }
            }
        }
    })
}

function filter_restore(param, value) {
//alert('session restore...')
$('waitimage').next(0).update('<br />Restore session...')
$('waitimage').next(0).innerHTML

    var crimetypes = new Array()
    $('filter_type').getElementsByClassName('filter_by_selected').each( function (i) {
        crimetypes.push(i.readAttribute('id').slice(8))
    })

    var options = $('filter_options').selectedIndex
    
    var t = $('filter_period').getElementsByClassName('filter_by_selected')
    var period = t[0].readAttribute('id').slice(8)
    if (period == 5) {
        period = YAHOO.filter.calendar.cal1selected + ',' + YAHOO.filter.calendar.cal2selected;
    }

    t = $('list_by').getElementsByClassName('list_by_selected')
    var list_by = t[0].readAttribute('id').slice(7)
    
    var last_find = $('last_find').serialize();

    new Ajax.Request('restoresession.php?'+last_find, {
        method: 'get',
        parameters: { 'period': period,
                      'crimetype_id': crimetypes.join(),
                      'options': options,
                      'list_by': list_by},
        onSuccess: function (transport) {
            var container = $('FindCrimesForm');
            container.update(transport.responseText);
            container.innerHTML();
        },
        onComplete: function () {
            if (param != 'list_by' && param != 'page') {
                var zoom = map.getZoom()
                if (zoom > 7) {
                    downloadCrimes(zoom, mapcenter.lat(), mapcenter.lng(), mapradius/1609.3, 0)
                 } else {
                    downloadCity(zoom, mapcenter.lat(), mapcenter.lng())
                 }
            } else {
                $('overlay').setStyle({display: 'none'});
                $('waitmsg').setStyle({display: 'none'});
            }
        }        
    })
}

function filter_period(id) {
    var filter, node, i, elm, next=0

    if ($('calContainer').style.display!="none") {
        $('calContainer').style.display="none"
    }

    filter = $('filter_period')
    while ((node = filter.childNodes[next++])) {
        if (node.id) {
            i = node.id.substring(8)
            if (i == id) {
                $('filter_p'+i).addClassName('filter_by_selected')
            } else {
                $('filter_p'+i).removeClassName('filter_by_selected')
            }
        }
    }
    if (id != 5) {
        $('filter_p5').removeClassName('filter_by_selected')
        filter_ajax('posteddate', id)
    } else {
        $('filter_p5').addClassName('filter_by_selected')
    }
}

function filter_crimes(id) {
    var filter, node, elm, i, param, next=0
    param = new Array()
    filter = $('filter_type')
    while ((node = filter.childNodes[next++])) {
        if (node.id) {
            i = node.id.substring(8)
            elm = $('filter_t'+i)
            if (id == 0) {
                elm.addClassName('filter_by_selected')
                param.push(i)
            } else if (id == -1) {
                elm.removeClassName('filter_by_selected')
            } else if (elm.hasClassName('filter_by_selected')) {
                if (i == id) {
                    elm.removeClassName('filter_by_selected')
                } else {
                    param.push(i)
                }
            } else {
                if (i == id) {
                    elm.addClassName('filter_by_selected')
                    param.push(i)
                }
            }
        }
    }
    if (param.length == 0) {
        param[0] = -1
    }
    filter_ajax('crimetype_id', param.join())
}

function filter_options(selected) {
    filter_ajax('options', selected.value)
}

function filter_page(p) {
    $('page').value = p
    filter_ajax('page', p)
    return false
}

function cal_select(type, args, obj) {
    var dates = args[0]; 
    
    if (obj.id == 'cal1') {
        YAHOO.filter.calendar.cal1selected = dates[0].join('.')
    } else {
        YAHOO.filter.calendar.cal2selected = dates[0].join('.')
    }

    if (YAHOO.filter.calendar.cal1selected != undefined && YAHOO.filter.calendar.cal2selected != undefined) {
        filter_period(5)
        filter_ajax('posteddate', YAHOO.filter.calendar.cal1selected + ',' + YAHOO.filter.calendar.cal2selected)
        $('calContainer').style.display="none"
    } else {
        if (obj.id == 'cal1') {
            YAHOO.filter.calendar.cal2.clear()
        } else {
            YAHOO.filter.calendar.cal1.clear()
        }
    }
}

function init_calendar() {
    if (YAHOO.filter == undefined) {
        YAHOO.namespace("filter.calendar"); 
        YAHOO.filter.calendar.init = function() { 
            YAHOO.filter.calendar.cal1 = new YAHOO.widget.Calendar("cal1","cal1Container",{ title: 'From:'});
            YAHOO.filter.calendar.cal2 = new YAHOO.widget.Calendar("cal2","cal2Container",{ title: 'To:'});
            if (selected_date != 0) {
                var aDate = selected_date.split(',')
                var aDate1 = aDate[0].split('.')
                var aDate2 = aDate[1].split('.')
                YAHOO.filter.calendar.cal1.select(aDate1[1]+'/'+aDate1[2]+'/'+aDate1[0])
                YAHOO.filter.calendar.cal2.select(aDate2[1]+'/'+aDate2[2]+'/'+aDate2[0]);
            }
            YAHOO.filter.calendar.cal1.selectEvent.subscribe(cal_select, YAHOO.filter.calendar.cal1, true); 
            YAHOO.filter.calendar.cal2.selectEvent.subscribe(cal_select, YAHOO.filter.calendar.cal2, true);
            YAHOO.filter.calendar.cal1.render(); 
            YAHOO.filter.calendar.cal2.render();
        }
        YAHOO.util.Event.onDOMReady(YAHOO.filter.calendar.init);
    } else {
        delete YAHOO.filter.calendar.cal1selected
        delete YAHOO.filter.calendar.cal2selected
    }
}

function show_calendar() {
    if ($('calContainer').style.display=="none") {
        init_calendar();
        $('calContainer').style.display="block";
    } else {
        $('calContainer').style.display="none";
    }
}

function list_by(id) {
    var i
    for(i=1; i<4; i++) {
        if (i == id) {
            $('list_by'+i).addClassName('list_by_selected')
        } else {
            $('list_by'+i).removeClassName('list_by_selected')
        }
    }
}

function listsubmit(id) {
    list_by(id)
    filter_ajax('list_by', id)
}

function show_filter() {
    $('filter_block_full').style.display = ($('filter_block_full').style.display=='none') ? 'block' : 'none';
}
