$(document).ready(function() {
    if (!Number.toFixed) {
        Number.prototype.toFixed=function(x) {
            var temp=this;
            temp=Math.round(temp*Math.pow(10,x))/Math.pow(10,x);
            return temp;
        };
    }

    $('#veiksmas').change(function() {
        hide_broker();
        if(map != undefined && map != null) {
            mapGetObjects();
        }
        if((map === null || map === undefined) && $('#cntrl').val() != '1') {
            mapGetObjects();
        }
        if(this.value == '2') {
            kaina_slider(5000, 200);
        } else {
            kaina_slider(1000000, 20000);
        }
        if (infowindow) infowindow.close();
    });

    $('#salys').change(function() {
        hide_broker();
        if((map === null || map === undefined) && $('#cntrl').val() != '1') {
            initialize();
        }
        if(map !== null && map !== undefined) {
            goToSelected(this.value,'s');
        }
        $('#savivaldybes option:first').attr('selected', 'selected');
        clearSavSelect();
        if(this.value != '125') {
            $('#savivaldybes, #seniunijos').attr("disabled", true);
        } else {
            $('#savivaldybes, #seniunijos').removeAttr('disabled');
        }
    });

    $('#savivaldybes').change(function() {
        hide_broker();
        clearSavSelect();
        var value = parseInt(this.value);
        if(this.value != '') {
            if((map === null || map === undefined) && $('#cntrl').val() != '1') {
                initialize();
                mapGetObjects();
            }
            setTimeout(function() {
            var m = [461, 43, 112, 259, 205, 2, 114];
            if(not_in_array(m, value)) {
                getLocations(value,'seniunijos');
            } else {
                var mp = new Array();
                mp[461] = 'Vilnius', mp[43] = 'Kaunas', mp[112] = 'Klaipėda', mp[259] = 'Šiauliai';
                mp[205] = 'Panevėžys', mp[2] = 'Alytus', mp[114] = 'Palanga';
                var mb = new Array();
                mb[461] = 2001, mb[43] = 2006, mb[112] = 2007, mb[259] = 2011,mb[2] = 2002;
                var mt = '<option value="">Miestas</option><option value="'+mb[value]+'">'+mp[value]+'</option>';
                $('#seniunijos').html(mt).removeAttr('disabled');
                $('#seniunijos option:last').attr('selected', 'selected');
                getLocations(value, 'gyvenvietes');
            }
            goToSelected(value, 'sav');
            }, 800);

        }
    });

    $('#seniunijos').change(function() {
       hide_broker();
       removeGGSelects();
       if(this.value != '') {
            getLocations(this, 'gyvenvietes');
       } else if(map !== null && map !== undefined) {
            goToSelected($('#savivaldybes').val(), 'sav');
       }
    });


    $('#gyvenvietes, #gatves').live('change', function(event) {
        hide_broker();
        if($('#savivaldybe :selected').val() != '') {
            var s = (this.id == 'gyvenvietes') ? 0 : 1;
            var st = ['gatves', 'gyvenvietes'];
            var g, gid, c, l;
            l = $(this).find(':selected').length;
            if($(this).val() != null) {
                var n = $(this).val();
                c = n.length;
                for(var i = 0; i < c; i++) {
                    if(oldgyvgat[s].indexOf(n[i]) == -1) {
                        g = $(this).find('option[value="' + n[i] + '"]').text();
                        gid = $(this).find('option[value="' + n[i] + '"]').val();
                        if(not_in_array(gyvgat[s], gid)) {
                            gyvgat[s].push(gid);
                        }
                    }
                }
                oldgyvgat[s] = arrayToString(n);
            }
            if(g != 'Visi' && g != 'Visos' ) {
                if(l > 0) {
                    var v, d;
                    if(l < gyvgat[s].length) {
                        if($(this).val() != '') {
                            clearArray(gyvgat[s]);
                            v = $(this).val();
                            c = v.length;
                            v = arrayToString(v);
                            if($('#'+st[s]+':selected').length > 1) {
                                d = $('#'+st[s]).val();
                                d = arrayToString(d);
                            } else {
                                d = ($('#'+st[s]+':selected').length == 1) ? $('#'+st[s]).val() : 0;
                            }
                            g = v.split('|');
                            for(i = 0; i < c; i++) {
                                gyvgat[s][i] = g[i];
                            }
                        }
                    } else {
                        if(map !== null && map !== undefined) {
                            if(g == undefined) {
                                var sel = $('#'+st[s]+':selected');
                                g = sel.last().text();
                                gid = sel.last().val();
                            } else {
                                g = g.replace('g.', 'gatvė');
                            }
                            var sa = '';
                            var m = [461, 43, 112, 259, 205, 2, 114];
                            if(!not_in_array(m, parseInt($('#savivaldybes :selected').val()))) {
                                sa = $('#seniunijos :selected').text();
                            }
                            v = g+','+sa+', Lietuva';
                            set_map(v, 14);
                        }
                    }
                } else {
                    clearArray(gyvgat[s]);
                    if($('#'+st[s]+':selected').length == 0) {
                        goToSav();
                    } else {
                        d = $('#'+st[s]).val();
                        d = arrayToString(d);
                    }
                }
            } else {
                goToSav();
            }
        }
    });

    $('#kaina_nuo, #kamb_nuo, #plotas_nuo').change(function() {
        hide_broker();
        var n = $(this).attr('id').replace('_nuo','');
        var iki = parseInt($('#'+n+'_iki').val().replace('+',''));
        var sl = $('#'+n+'_sk_slider');
        var v = parseInt(this.value);
        if(v >= iki) {
            sl.slider('values', 0, iki);
            this.value = iki;
        } else {
            sl.slider('values', 0, v)
        }
        if(map !== null && map !== undefined && (parseInt($('#cntrl').val()) != 1)) {
            mapGetObjects();
        }
    });


    $('#kaina_iki, #kamb_iki, #plotas_iki').change(function() {
        hide_broker();
        var n = $(this).attr('id').replace('_iki','');
        var v = parseInt(this.value);
        var nuo = parseInt($('#'+n+'_nuo').val());
        var sk = $('#'+n+'_sk_slider');
        var iki = 0;
        switch(n) {
            case('kaina'):
                iki = '100000';
                break;
            case('kamb'):
                iki = '10';
                break;
            case('plotas'):
                var ve = parseInt($('#objekto_tipas :selected').val());
                if(ve == 3) {
                    if($("input:radio:checked").val() == 'a') {
                        iki = '50';
                    } else {
                        iki = '20';
                    }
                } else if(v == 1) {
                    iki = '100';
                } else {
                    iki = '200';
                }
                break;
            default:
                iki = '10';
                break;
        }
        if(v <= nuo) {
            sk.slider('values', 1, nuo);
            this.value = nuo;
        } else if(v >= parseInt(iki)) {
            sk.slider('values', 1, parseInt(iki));
            this.value = iki+'+';
        } else {
            sk.slider('values', 1, v);
        }
        if(map !== null && map !== undefined && (parseInt($('#cntrl').val()) != 1)) {
            mapGetObjects();
        }
    })


    $('.radio_pl').live("change", function() {
        if($("input:radio:checked").val() !== 'a') {
            plotas_slider(20, 1);
        } else {
            plotas_slider(50, 5);
        }
        if(map !== null && map !== undefined && (parseInt($('#cntrl').val()) != 1 )) {
            mapGetObjects();
        }
    });

    $('#snt, #spab, #sptb, #sa, #sp').change(function() {
        hide_broker();
        if(map !== null && map !== undefined && (parseInt($('#cntrl').val()) != 1 )) {
            mapGetObjects();
        }
    });

    $('#r_map_b').click(function() {
        hide_broker();
        if(map === null || map === undefined) {
            initialize();
			$('#cntrl').val(0);
        }
        var a, g, v;
        if($('#gatves_loaded :selected').length != 0) {
            a = $('#savivaldybes :selected').text();
            g = $('#gatves_loaded :selected').last().text();
            a = a.replace('r.', 'rajono');
            a = a.replace('m.', 'miesto');
            a = a.replace('sav.', 'savivaldybė');
            g = g.replace('g.', 'gatvė');
            v = g+','+a+', Lietuva';
            set_map(v, 15);
            } else if(($('#gyvenvietes_loaded :selected').length != 0)) {
                g = $('#gyvenvietes_loaded :selected').last().text();
                v = g+', Lietuva';
                set_map(v, 14);
                // gyvenviete + savivaldybe ( - rajono/miesto ) + Lietuva;
                } else {
                    goToSelected($('#salys :selected').val(), 's');
        }
    });

});


function initialize() {
    if(map === null || map === undefined) {
        var latlng = new google.maps.LatLng(55.1904096,24.0457512);
        var myOptions = {
            zoom: 7,
            center: latlng,
            streetViewControl: true,
            mapTypeId: google.maps.MapTypeId.ROADMAP
        };
        map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
        geocoder = new google.maps.Geocoder();
        if($('#zemelapis').is(':hidden')) {
            $('#zemelapis').toggle('slow');
            $('#b4, #b5').show('slow');
        }
        divFull = document.createElement('div');
        divSmall = document.createElement('div');
        var fsc = new ScreenControl(divFull, map,'Per visą langą');
        var ssc = new ScreenControl(divSmall, map, 'Sumažinti langą');
        divFull.index = 1;
        divSmall.index = 1;
        map.controls[google.maps.ControlPosition.TOP_RIGHT].push(divFull);
//        $(function() {
//			mapGetObjects();
//	    });
    }
}

var map, infowindow, divFull, divSmall, mc;
var markers = [];
var gyvgat = [];
gyvgat[0] = [];
gyvgat[1] = [];
var oldgyvgat = [];
oldgyvgat[0] = [];
oldgyvgat[1] = [];
var styleOption = [{
        height: 14,
        width: 16,
        url: '/img/houses/house2.gif',
        opt_textColor: 'red',
        opt_nachor: [0,0]
    },{
        height:16,
        width: 18,
        url: '/img/houses/house3.gif',
        opt_textColor: 'red',
        opt_nachor: [0,0]
    },{
        height: 18,
        width: 20,
        url: '/img/houses/house4.gif',
        opt_textColor: 'red',
        opt_nachor: [0,0]
    },{
        heigt: 19,
        width: 22,
        url: '/img/houses/house5.gif',
        opt_textColor: 'red',
        opt_nachor: [0,0]
}]


function ucfirst(string) {
    return string.charAt(0).toUpperCase() + string.slice(1);
}

function getLocations(x, c) {
    if(x != '') {
        if(c == 'gyvenvietes') {
            getLocationsA($('seniunijos'), 'gyvenvietes');
            $('#gatves_blokas').append("<img id='gyvload' src='/img/loading.gif' alt='' />");
            getLocationsA($('seniunijos'),'gatves');
        } else {
            getLocationsA(x,c);
            $('#'+c).removeAttr('disabled');
        }
    }
}

function getLocationsA(x,c) {
        var u;
        switch(c) {
            case('seniunijos'):
                u = '/address/seniunijos/id/'+x;
                break;
            case('gyvenvietes'):
                u = '/address/'+c+'/id/'+$('#seniunijos :selected').val()+'/sav/'+$('#savivaldybes :selected').val();
                break;
            case('gatves'):
                u = '/address/m'+c+'/id/'+$('#seniunijos :selected').val()+'/sav/'+$('#savivaldybes :selected').val();
        }
        $.ajax({
            url: u,
            success: function(data) {
                if(data != '') {
                    var r = eval('('+data+')');
                    var k = r.length;
                    if(k !== 0) {
                        var s = $('#'+c);
                        var o = '';
                        if(c == 'seniunijos') {
                            o += "<option value=''>Seniūnija</option>";
                        }
                        for(var i = 0; i < k; i++) {
                            o += "<option value='"+r[i].id+"'>"+r[i].p+"</option>";
                        }
                        s.html(o);
                        if(c == 'gyvenvietes' || c == 'gatves') {
                            var m = [461, 43, 112, 259, 205, 2, 114];
                            var mg = (not_in_array(m, parseInt($('#savivaldybes').val()))) ? 'Gyvenvietės' : 'Mikrorajonai';
                            (c == 'gyvenvietes') ? s.attr('title', mg) : s.attr('title', 'Gatvės');
                            s.asmSelect({
                                addItemTarget: 'bottom',
                                animate: true,
                                highlight: true
                            });
                            $('#gyvload').remove();
                        }
                    } else {
                        $('#gyvload').remove();
                    }
                }
            }
        });
}

function clearSavSelect() {
    $('#seniunijos').find('option').remove().end();
    if($('#seniunijos option').length === 0) {
        $('#seniunijos').append('<option value="">Seniūnija</option>').val('');
        removeGGSelects();
    }
}

function removeGGSelects() {
    if($('#asmContainer0').length) {
        addGGSelects('asmContainer0', 'gyvenvietes', 'rajonas[]');
    }
    if($('#asmContainer1').length) {
        addGGSelects('asmContainer1', 'gatves', 'gatves[]');
    }
}

function addGGSelects(os,ns, n) {
    $('#'+os).remove();
    $('#'+ns+'_blokas').append("<select id='"+ns+"' name='"+n+"' multiple='multiple'></select>");
}

function goToSelected(x, y) {
    var loc_lat, loc_lng, z;
    switch(y) {
        case 's':
            loc_lat = getData(x, 'lat', salys);
            loc_lng = getData(x, 'lng', salys);
            z = parseInt(getData(x, 'z', salys));
            break;
        case 'sav':
            loc_lat = getData(x, 'lat', sav);
            loc_lng = getData(x, 'lng', sav);
            z = 13;
            break;
        default:
            break;
    }
    var loc = new google.maps.LatLng(loc_lat,loc_lng);
    map.setCenter(loc);
    map.setZoom(z);
}

function getData(id, name, obj) {
    var reg_c = 0;
    var k = 0;
    for(r_obj in obj) {
        reg_c++;
    }
    for(var i = 0; i<reg_c ;i++) {
        if(obj[i].id == parseInt(id)) {
            switch(name) {
                case('lat'):
                    k = obj[i].lat;
                    break;
                case('lng'):
                    k = obj[i].lng;
                    break;
                case('z'):
                    k = obj[i].z;
                    break;
                default:
                    break;
            }
        }
    }
    return k;
}

function set_map(v,z) {
    if(geocoder) {
        geocoder.geocode({'address' : v},
        function(results, status) {
            if(status == google.maps.GeocoderStatus.OK) {
                map.setCenter(results[0].geometry.location);
                map.setZoom(z);
            }
        });
    }
}

function goToSav() {
    clearMarkers();
    goToSelected($('#savivaldybes :selected').val(), 'sav');
}

function getObjects() {
    var ot = parseInt($('#objekto_tipas').val());
    var t = ($('#objekto_tipas').val() !== null && $('#objekto_tipas').val() !== '') ? $('#objekto_tipas').val() : '';
    var v = ($('#veiksmas').val() !== null && $('#veiksmas').val() !== '') ? $('#veiksmas').val() : '';
    var kn = $('#kaina_nuo').val();
    var ki;
    if(parseInt(v) == 1 && $('#kaina_iki').val().length == 8) {
        ki = 'max';
    } else if(parseInt(v) == 2 && ($('#kaina_iki').val().length == 5)) {
        ki = 'max';
    } else {
        ki = $('#kaina_iki').val();
    }
    var par = (ot != 1 && ot != 2 && $('#sp').val() != '') ? $('#sp').val() : '';
    var spab = (ot != 3) ? $('#spab').val() : '';
    var sptb = (ot != 3) ? $('#sptb').val() : '';
    var sa = (ot != 2 && ot != 3) ? $('#sa').val() : '';
    var snt, i, pln, pli;
    var kan = '';
    var kai = ''
    switch(ot) {
        case(1):
            snt = $('#snt').val();
            pln = $('#plotas_nuo').val();
            pli = ($('#plotas_iki').val().length == 4) ? 'max' : $('#plotas_iki').val();
            kan = (ot == 1) ? $('#kamb_nuo').val() : '';
            kai = ($('#kamb_iki').val().length == 3) ? 'max' : $('#kamb_iki').val();
            break;
        case(2):
            i = parseInt($('#snt :selected').val());
            snt = (i == 6 || i == 8) ? 0 : i;
            pln = $('#plotas_nuo').val();
            pli = ($('#plotas_iki').val().length == 4) ? 'max' : $('#plotas_iki').val();
            break;
        case(3):
            snt = 0;
            if($('#radio_plotas1').is(':checked')) {
                pln = $('#plotas_nuo').val();
                pli = ($('#plotas_iki').val().length == 3) ? 'max' : $('#plotas_iki').val();
            } else {
                pln = $('#plotas_nuo').val() * 100;
                pli = ($('#plotas_iki').val().length == 3) ? 'max' : $('#plotas_iki').val()*100;
            }
            break;
        case(4):
            pln = $('#plotas_nuo').val();
            pli = ($('#plotas_iki').val().length == 4) ? 'max' : $('#plotas_iki').val();
            i = parseInt($('#snt :selected').val());
            snt = (i == 8) ? 0 : i;
            break;
    }
    var u = '/search/objects/';
    $.ajax({
        url: u+'tip/'+t+'/vei/'+v+'/kn/'+kn+'/ki/'+ki+'/kan/'+kan+'/kai/'+kai+'/snt/'+snt+'/spab/'+spab+'/sptb/'+sptb+'/sa/'+sa+'/pln/'+pln+'/pli/'+pli+'/par/'+par,
        success: function(data) {
            clearMarkers();
            if(mc !== undefined && mc !== null) {
                mc.clearMarkers();
            }
            if(data.length !== 1) {
                var r = eval('('+data+')');
                var c = r.length;
                for(var i = 0; i < c; i++) {
                    var lat = parseFloat(r[i].lat);
                    var lng = parseFloat(r[i].lng);
                    var latlng = new google.maps.LatLng(lat,lng);
                    createMarker(latlng);
                }
            }
            var options = get_options();
            mc = new MarkerClusterer(map, markers, options);
        }
    });
}

function createMarker(latlng) {
    var image = '/img/house_icon.gif';
    var marker = new google.maps.Marker({
        map: map,
        position: latlng,
        icon: image
    });
    google.maps.event.addListener(marker, 'click', function() {
        var lat = this.getPosition().lat().toFixed(7);
        var lng = this.getPosition().lng().toFixed(7);
        $.ajax({
            url: '/search/markerinfo/v/'+$('#veiksmas').val()+'/t/'+$('#objekto_tipas').val()+'/lat/'+lat+'/lng/'+lng,
            success: function(data) {
                if(data.length > 0) {
                    if (infowindow) infowindow.close();
                    infowindow = new google.maps.InfoWindow({
                        content: data
                    });
                    infowindow.open(map, marker);
                }
            }
        })
    });
    markers.push(marker);
}

function clearMarkers() {
    var c = markers.length;
    for (var i = 0; i < c; i++) {
        markers[i].setMap(null);
    }
    markers.length = 0;
}

function clearArray(a) {
    var c = a.length;
    for(i = 0; i < c; i++) {
        a[i] = null;
    }
    a.length = 0;
}

function not_in_array(arr, v) {
    var c =  arr.length;
    c = (c == 0) ? 1: c;
    var a;
    for(var i = 0; i < c; i++) {
        if(arr[i] == v) {
            a = false;
            break;
        } else {
            a = true;
        }
    }
    return a;
}

function arrayToString(g) {
    var s = '';
    var c = g.length;
    for(var i = 0; i < c; i++) {
        s += g[i]+'|';
    }
    return s;
}

function ScreenControl(controlDiv, map, text) {
    controlDiv.style.padding = '5px';
    var controlUI = document.createElement('DIV');
    controlUI.style.backgroundColor = 'white';
    controlUI.style.borderStyle = 'solid';
    controlUI.style.borderWidth = '2px';
    controlUI.style.borderColor = '#A80000';
    controlUI.style.cursor = 'pointer';
    controlUI.style.textAlign = 'center';
    controlUI.title = 'Fullscreen';
    controlDiv.appendChild(controlUI);
    var controlText = document.createElement('DIV');
    controlText.style.fontFamily = 'Arial,sans-serif';
    controlText.style.fontSize = '12px';
    controlText.style.paddingLeft = '4px';
    controlText.style.paddingRight = '4px';
    controlText.innerHTML = text;
    controlUI.appendChild(controlText);

    google.maps.event.addDomListener(controlUI, 'click', function() {
        if($('#zemelapis_middle').hasClass('fullscreen')) {
            $('#zemelapis_middle').attr('style', 'padding: 0px 6px 0px 6px; width: 888px; height: 400px;');
            $('#zemelapis_middle').removeClass('fullscreen');
            map.controls[google.maps.ControlPosition.TOP_RIGHT].pop(divSmall);
            map.controls[google.maps.ControlPosition.TOP_RIGHT].push(divFull);
        } else {
            $('#zemelapis_middle').attr('style', 'margin: 0px; position: fixed; width: 100%; height: 100%; left: 0px; top: 0px; overflow: hidden; z-index: 100');
            $('#zemelapis_middle').addClass('fullscreen');
            map.controls[google.maps.ControlPosition.TOP_RIGHT].pop(divFull);
            map.controls[google.maps.ControlPosition.TOP_RIGHT].push(divSmall);
        }
        google.maps.event.trigger(map, 'resize')
    });
}

function mapGetObjects(s) {
    if(map === null || map === undefined) {
            initialize();
    }
    if(s === null || s === undefined) {
        setTimeout(function() {
            getObjects();
        }, 100);
    }
}

function show_on_map(s, c, z) {
    mapGetObjects()
	istring = "";
	selector = 0;
    if(parseInt(s) == 1) {
        set_map(c, 13);
     } else {
        var cs = c.split(',');
        var l = new google.maps.LatLng(parseFloat(cs[1].replace("'",'')),parseFloat(cs[0].replace("'",'')));
        map.setCenter(l);
        map.setZoom(13);
    }
}

function hide_broker() {
    if($('#rebank_reklama').length) {
        $('#rebank_reklama').hide();
    }
    if($('#brokerio_pasiulymai').length) {
        $('#brokerio_pasiulymai').hide();
    }
}

function get_options() {
    var options;
    if($.browser.msie) {
        options = {maxZoom: 14, gridSize:30, styles: styleOption};
    }
    if($.browser.webkit) {
        options = {maxZoom: 12, gridSize:10, styles: styleOption};
    }
    if($.browser.mozilla) {
        options = {maxZoom: 12, gridSize:10, styles: styleOption};
    }
    if($.browser.opera) {
        options = {maxZoom: 12, gridSize:10, styles: styleOption};
    }
    return options;
}
