function fireEvent(element,event){
    var evt;
    if (document.createEventObject){
        // dispatch for IE
        evt = document.createEventObject();
        return element.fireEvent('on'+event,evt)
    }
    else{
        // dispatch for firefox + others
        evt = document.createEvent("HTMLEvents");
        evt.initEvent(event, true, true ); // event type,bubbling,cancelable
        return !element.dispatchEvent(evt);
    }
}
var usePoint = false;
var LSI_construction_edit = Class.create();
LSI_construction_edit.prototype = {
    initialize: function () {
        if ($('hint_map')) {
            mapa = new LSI_hint_map('hint_map', $$('a.searchTrigger')[0], $$('a.searchTrigger')[0].previous('input'), $('hint_map').next('div.prompts'));
        }        
        $$('a.toggle').each(function(item) {
            item.replace(item.innerHTML)
        })
        this.setupPropertyAddForm();
        this.setupWorkflowActions();
    },

    setupPropertyAddForm: function () {

        function handle_toggle(event) {
            event.stop(event);
            Effect.toggle(this.next('div.'+this.id+'_wrapper'), 'appear', {
                duration:2.0
            });
        }

        $$('a.toggle').each(function(item) {
            var inputs_wrapper = item.next('div.'+item.id+'_wrapper');
            var inputs = inputs_wrapper.select('input');
            var hide = true;
            for (var i = 0; i < inputs.length; i++) {
                if ($F(inputs[i]) && inputs[i].type != 'submit') {
                    hide = false;
                }
                if (inputs[i].next('span')) {
                    hide = false;
                }
            }
            if (inputs_wrapper.hasClassName('no_toggle')) {
                hide = false;
            }
            if (hide) inputs_wrapper.hide();
            item.observe('click', handle_toggle);
        });
    },
    
    setupWorkflowActions: function () {
        //clean up empty table cells generated by the dynamic panel grid component
        $$('#available_actions td').each(function(item){
            if (!item.innerHTML) item.remove()
        });

        var button = new Template('<input class="action" type="submit" name="#{name}" value="#{value}"  />');
        var link = new Template('<a class="#{styleClass} action" href="#{link}">#{value}</a>');

        var items = $$('.workflow_action');
        if ($$('div.MessageContainer').length > 0) {
            var message_containter = $$('div.MessageContainer')[0];
            message_containter.down('a.cancelAction').observe('click', function (ev){
                Event.stop(ev);
                Effect.BlindUp(message_containter, {
                    duration: 0.2,
                    afterFinish: function () {
                        $$('.workflow_action').invoke("removeClassName", "clicked");
                        message_containter.select('.action').invoke("remove");
                    }
                });
            });
        }
        for (var i = 0; i < items.length; i++) {
            var item = items[i];
            if (!item.hasClassName('exclude')) {
             
                item.onclick_backup = item.onclick
                item.confirmMessage = 'Czy na pewno chcesz wywołać akcję - ' + item.innerHTML + '?';
                item.action = function () {
                    if (confirm(this.confirmMessage)) {
                        this.onclick_backup();
                    }
                }

                //both are needed!!
                item.removeAttribute('onclick');
                item.onclick = null;


                item.observe('click', function(event) {
                    Event.stop(event);

                    if (!this.hasClassName('clicked')) {
                        $$('.workflow_action').invoke('removeClassName', 'clicked');
                        message_containter.select('.action').invoke('remove');
               
                        this.addClassName('clicked');
                        if (message_containter) {
                            var action_link = message_containter.down('div').insert({
                                top: link.evaluate({
                                    value: this.innerHTML,
                                    styleClass: this.getAttribute('class'),
                                    link: this.getAttribute('href')
                                })
                            });
                            
                            action_link.onclick_backup = this.onclick_backup;
                            action_link.confirmMessage = this.confirmMessage;
                            action_link.action = this.action;

                            action_link.stopObserving();

                            action_link.observe('click', function(ev) {
                                Event.stop(ev);
                                this.action();
                            });
                            Effect.BlindDown(message_containter, {
                                queue: {
                                    scope: 'messsage_containter'
                                },
                                duration: 0.2
                            });
                        }
                    }
                    else {
                        //add closing to a message
                        this.action();
                    }
                });
            }
        }
    }
}

function get_url_param( name, url )
{
    name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
    var regexS = "[\\?&]"+name+"=([^&#]*)";
    var regex = new RegExp( regexS );
    var results = regex.exec(url);
    if( results == null )
        return "";
    else
        return results[1];
}

function popup(mylink, windowname)
{
    var href;
    if (typeof(mylink) == 'string')
        href=mylink;
    else
        href=mylink.href;

    window.open(href, windowname, 'width=900,height=700,toolbar=no,status=no,directories=no,menubar=no,scrollbars=yes,dependent=yes');
    return false;
}

/*workflow actions with popups*/
function handle_workflow_actions(event) {
    event.stop(event);
    popup(this.href, this.getAttribute('class'));
}

function init_workflow_actions() {    
    $$('a.workflow_action').invoke('observe', 'click',handle_workflow_actions)
}
/*workflow actions with popups*/

function edit_substitute()
{

    $$('table.scrollerTable tr').each(function(item) {
        
        if (item.down('a.edit')) {
            var edit_link  = item.down('a.edit').hide();

            
            item.observe('mouseover', function(event) {
                if (!item.hasClassName('active')) {
                    item.addClassName('active');
                    //document.body.style.cursor = 'pointer';
                    //item.org_bg = item.style.background;
                    //item.style.background = 'yellow';

                }
            });
            item.observe('mouseout', function(event) {
                if (item.hasClassName('active')) {
                    item.removeClassName('active');
                //document.body.style.cursor = 'default';
                //item.style.background = item.org_bg;
                }
            });
            item.observe('click', function(event) {
                var clicked = Event.findElement(event,'a');
                if (!clicked) {
                    Event.stop(event);
                    fireEvent(item.select('a.edit')[0], 'click');
                //edit_link.onclick();
                }
            });
        }
    }) 
}

function date_picker_init() {
    Control.DatePicker.Locale['pl_PL'] = {
        dateTimeFormat: 'yyyy-MM-dd HH:mm',
        dateFormat: 'yyyy-MM-dd',
        firstWeekDay: 1,
        weekend: [0,6],
        language: 'pl'
    };
    Control.DatePicker.Language['pl'] = {
        months: ['Styczeń', 'Luty', 'Marzec', 'Kwiecień', 'Maj', 'Czerwiec', 'Lipiec', 'Sierpień', 'Wrzesień', 'Październik', 'Listopad', 'Grudzień'],
        days: ['Nd', 'Pn', 'Wt', 'Śr', 'Cz', 'Pi', 'So'],
        strings: {
            'Now': 'Teraz',
            'Today': 'Dziś',
            'Time': 'Godzina',
            'Exact minutes': 'Minuty',
            'Select Date and Time': 'Wybierz datę i godzinę',
            'Open calendar': 'Otwórz kalendzarz'
        }
    };
    $$('input.datepicker').each (function(item) {
        new Control.DatePicker(item, {
            locale: 'pl_PL',
            icon: 'images/calendar.png'
        } );
    })
}

function handle_toggler(event) {
    event.stop(event)
    Effect.toggle(this.up('div').next('div'), 'blind', {
        duration:2.0
    });
    this.toggleClassName('expand')
}

function street_input_init() {
    $$('input.streetInput').each(function(item) {
        var options = {
            script:'streetSearch.jsf?operationType=searchStreets&',
            varname:'searchParam',
            minchars:'3'
        };
        var tmp = new AutoComplete(item,options);
    });
}
function collisions_input_init() {
    
    $$('input.collisionInput').each(function(item) {
        var options = {
            script:'leafletSearch.jsf?operationType=searchCollisions&',
            varname:'searchParam',
            minchars:'3'
        };
        
        var tmp = new AutoCompleteCollision(item,options);
    });
}

function initCentralPoint(){

    if ($$('fieldset.centralPoint').length > 0) {

        var message_containter = $$('fieldset.centralPoint')[0];
           
        var usePoint = $$('#usePoint')[0];
        if(!usePoint.checked){
            Effect.SlideUp(message_containter, {
                duration: 0.01,
                afterFinish: function () {
                    usePoint= false;
                }
            });


        }
        usePoint.observe('click', function (ev){
            if(!usePoint){
                Effect.SlideDown(message_containter, {
                    duration: 0.3,
                    afterFinish: function () {
                        usePoint= true;
                    }
                });
            }else{

                Effect.SlideUp(message_containter, {
                    duration: 0.3,
                    afterFinish: function () {
                        usePoint= false;
                        mapa.removeSearchMarker();
                    }
                });

            }

        })
    }


}
function initInvestors(){

    if ($$('fieldset.investors').length > 0) {

        var message_containter = $$('fieldset.investors')[0];

        var useInv = $$('#useInvestors')[0];
        if(!useInv.checked){
            Effect.SlideUp(message_containter, {
                duration: 0.001,
                afterFinish: function () {
                    useInv= false;
                     $$('#investorsInner')[0].setStyle({
            visibility:'visible'

        });
                }
            });


        }else{

        $$('#investorsInner')[0].setStyle({
            visibility:'visible'

        });
        }


        useInv.observe('click', function (ev){
            if(!useInv){
                Effect.SlideDown(message_containter, {
                    duration: 0.3,
                    afterFinish: function () {
                        useInv= true;
                    }
                });
            }else{

                Effect.SlideUp(message_containter, {
                    duration: 0.3,
                    afterFinish: function () {
                        clearInvestors();

                        useInv= false;
                    }
                });

            }

        })
    }


}

function clearInvestors(){
    var inputs = document.getElementById("invFieldset").getElementsByTagName("INPUT");

    for(var i = 0;i<inputs.length;i++){

        inputs[i].checked = false;
    }
}

Event.observe(window, 'load', function() {
    edit_substitute();
    date_picker_init();
    street_input_init();
    collisions_input_init();
    initInvestors();

    initCentralPoint();
    $$('ul.pagination').each(function(item){
        LSI_SearchPagination = new LSI_SearchPagination_Class(item);
    })

    //load map handling
    if ($('map')) {
        mapa = new LSI_main('map');
    }

    $$('a.toggler').invoke('observe', 'click', handle_toggler)
    LSI_MapHelper.rebuild_search_links();
    
});

