function Poliservice()
{
    this.headerDisplay = null;
    this.enlargeChatElement = null;
    this.faqAccordion = null;
    this.downloadsAccordion = null;

    this.onDomReady = function(){
        this.headerDisplay = $("headerdisplay");
        if( this.headerDisplay != null )
        {
            this.headerDisplay.instance = new HeaderDisplay(this.headerDisplay);
            this.headerDisplay.instance.initialize();
        }

        this.fixMenuItemFont();
        this.fixHeaderFont();
        this.fixFormFont();
        this.fixListingFont();
        this.fixActieFont();
        this.fixEnlargeChat();
        this.fixFaqAccordion();
        this.fixDownloadsAccordion();
        this.fixInputHints();
        this.fixChatWidget();
        this.fixCompensatieRegelingCloser();
    }

    this.fixMenuItemFont = function(){

        var item = $(document.body).getElements("dl.menu dd a");
        for( var i = 0; i < item.length; i++ )
        {
            var caption = item[i].innerHTML;
            item[i].innerHTML = "";

            var img = new Element("img");
            img.src = "fonts/menuitem.php?text=" + escape(caption);
            img.inject(item[i]);
        }
    }

    this.fixHeaderFont = function(){

        var item = $(document.body).getElements("div.columns div.left div.header h1");
        for( var i = 0; i < item.length; i++ )
        {
            var caption = item[i].innerHTML;
            item[i].innerHTML = "";

            var img = new Element("img");
            img.src = "fonts/header.php?text=" + escape(caption);
            img.inject(item[i]);
        }
    }

    this.fixFormFont = function(){

        var item = $(document.body).getElements("div.columns div.left form h2");
        for( var i = 0; i < item.length; i++ )
        {
            var caption = item[i].innerHTML;
            item[i].innerHTML = "";

            var img = new Element("img");
            img.src = "fonts/form.php?text=" + escape(caption);
            img.inject(item[i]);
        }

        item = $(document.body).getElements("div.columns div.left form fieldset label");
        for( i = 0; i < item.length; i++ )
        {
            var caption = item[i].innerHTML;
            item[i].innerHTML = "";

            var img = new Element("img");
            img.src = "fonts/form.php?text=" + escape(caption);
            img.inject(item[i]);
        }
    }

    this.fixListingFont = function(){
        var item = $(document.body).getElements("dl.listing h2");
        for( var i = 0; i < item.length; i++ )
        {
            var caption = item[i].innerHTML;
            item[i].innerHTML = "";

            var img = new Element("img");
            img.src = "fonts/form.php?text=" + escape(caption);
            img.inject(item[i]);
        }
        item = $(document.body).getElements("dl.listing dd.category h3");
        for( i = 0; i < item.length; i++ )
        {
            var caption = item[i].innerHTML;
            item[i].innerHTML = "";

            var img = new Element("img");
            img.src = "fonts/menuitem.php?text=" + escape(caption);
            img.inject(item[i]);
        }
    }

    this.fixActieFont = function(){

        var item = $(document.body).getElements("div.actie h2 div");
        for( var i = 0; i < item.length; i++ )
        {
            var caption = item[i].innerHTML;
            item[i].innerHTML = "";

            var img = new Element("img");
            img.src = "fonts/actie.php?text=" + escape(caption);
            img.inject(item[i]);
        }
    }

    this.fixEnlargeChat = function(){
        if( this.enlargeChatElement == null )
        {
            this.enlargeChatElement = new Element("div");
            this.enlargeChatElement.addClass("enlargechat");
            this.enlargeChatElement.fx = new Fx.Tween(this.enlargeChatElement,{wait:false});
            this.enlargeChatElement.fx.set("opacity",0);
            this.enlargeChatElement.inject(document.body);

            var widget = $(document.body).getElements("form.chatwidget h2");
            for( var i = 0; i < widget.length; i++ )
            {
                widget[i].instance = this;
                widget[i].addEvent("mouseover",function(){
                    var left = this.getParent().getLeft()+this.offsetWidth-142;
                    var top = this.getParent().getTop()-68;
                    this.instance.enlargeChatElement.setStyle("left",left);
                    this.instance.enlargeChatElement.setStyle("top",top);
                    this.instance.enlargeChatElement.fx.start("opacity",1);
                });

                widget[i].addEvent("mouseout",function(){
                    this.instance.enlargeChatElement.fx.start("opacity",0);
                });
            }
        }
    }

    this.fixFaqAccordion = function(){
        if( $(document.body).getElement("div.faqlisting") != null )
        {
            this.faqAccordion = new Fx.Accordion($$("div.faqlisting div.faq h2"),$$("div.faqlisting div.faq div.answer"),{
                onActive: function(toggler,element){
                    toggler.addClass("opened");
                },
                onBackground: function(toggler,element){
                    toggler.removeClass("opened");
                }
            });
        }
    }
    
    this.fixDownloadsAccordion = function(){
        if( $(document.body).getElement("dl.listing") != null )
        {
            this.downloadsAccordion = new Fx.Accordion($$("dl.listing dd.category"),$$("dl.listing dd.categorybody"),{
                onActive: function(toggler,element){
                    toggler.addClass("opened");
                },
                onBackground: function(toggler,element){
                    toggler.removeClass("opened");
                }
            });
        }
    }

    this.fixInputHints = function(){
        var inputInfo = $$(".inputinfo");
        for( var i = 0; i < inputInfo.length; i++ )
        {
            inputInfo[i].setAttribute("inputinfovalue",inputInfo[i].value);
            inputInfo[i].addEvent("focus",function(){
                if( this.value == this.getAttribute("inputinfovalue") )
                {
                    this.value = "";
                }
                if( this.hasClass("inputinfo") )
                {
                    this.removeClass("inputinfo");
                }
            });
            inputInfo[i].addEvent("blur",function(){
                if( this.value == "" )
                {
                    this.value = this.getAttribute("inputinfovalue");
                    if( !this.hasClass("inputinfo") )
                    {
                        this.addClass("inputinfo");
                    }
                }
            });
        }
    }

    this.fixChatWidget = function(){
        var widget = $$("form.chatwidget");
        for( var i = 0; i < widget.length; i++ )
        {
            widget[i].chatLogElement = widget[i].getElement("div.chatlog");
            widget[i].messageElement = widget[i].getElement("input[type=text]");
            widget[i].submitElement = widget[i].getElement("button[type=button]");

            widget[i].chat = new WebChatClient(null,null,"./chat/chatentry.php");

            widget[i].chat.poliserviceHasFirstMessagePosted = false;
            widget[i].chat.poliserviceChatLogElement = widget[i].chatLogElement;
            widget[i].chat.poliserviceMessageElement = widget[i].messageElement;
            widget[i].chat.poliserviceSubmitElement = widget[i].submitElement;

            widget[i].submitElement.messageElement = widget[i].messageElement;
            widget[i].submitElement.webChatInstance = widget[i].chat;
            widget[i].messageElement.submitElement = widget[i].submitElement;

            widget[i].chat.onChatMessagesReceived = this.chatOnChatMessagesReceived;
            widget[i].chat.onSendMessageCompleted = this.chatOnSendMessageCompleted;
            widget[i].chat.onResultNoSession = this.chatOnResultNoSession;
            widget[i].chat.onAfterUpdate = this.chatOnAfterUpdate;

            widget[i].chatLogElement.fx = new Fx.Scroll(widget[i].chatLogElement);

            widget[i].submitElement.addEvent("click",function(){

                if( (this.messageElement.value = this.messageElement.value.trim()).length == 0 )
                {
                    return;
                }

                this.disabled = true;
                this.messageElement.disabled = true;
                this.webChatInstance.sendMessage(this.messageElement.value);
            });

            widget[i].messageElement.addEvent("keypress",function(e){
                e = new Event(e);
                if( e.key == "enter" )
                {
                    this.submitElement.fireEvent("click");
                }
            });

            widget[i].chat.poliservicePeriodical_id = widget[i].chat.update.delay(2000,widget[i].chat);
        }
    }

    this.fixCompensatieRegelingCloser = function(){

        var element = $(document.body).getElement("div.compensatieregeling");
        if( element != null )
        {
            var close = element.getElement("div.center div.close");
            close.el = element;
            close.addEvent("click",function(){
                this.el.fx = new Fx.Tween(this.el);
                this.el.fx.start("height",0);

                $(document.body).fx = new Fx.Tween(document.body);
                $(document.body).fx.start("padding-top",0);
            });
        }

    }

    this.chatOnChatMessagesReceived = function(messages,webChatInstance){
        var html = "";

        for( var i = 0; i < messages.length; i++ )
        {
            var user = webChatInstance.getParticipantById(messages[i][1]);
            if( user == null )
            {
                user = Array(0,"UNKOWN USER","");
            }

            var fullUser = user[1];
            user = user[1].split("_");
            if( user[0] == "PoliService" )
            {
                html += "<div class=\"green\">Poliservice&gt; " + messages[i][3] + "</div>";
            }
            else if( fullUser == "!AUTORESPONDER" )
            {
                html += "<div class=\"green\">Geautomatiseerd bericht&gt; " + messages[i][3] + "</div>";
            }
            else
            {
                html += "<div>&gt; "+ messages[i][3] + "</div>";
            }  
        }
        webChatInstance.poliserviceChatLogElement.innerHTML += html;
        webChatInstance.poliserviceChatLogElement.fx.toBottom();
    }

    this.chatOnSendMessageCompleted = function(webChatInstance){
        webChatInstance.poliserviceSubmitElement.disabled = false;
        webChatInstance.poliserviceMessageElement.disabled = false;
        webChatInstance.poliserviceMessageElement.value = "";
        webChatInstance.poliserviceMessageElement.focus();

        if( webChatInstance.poliservicePeriodical_id == null )
        {
            webChatInstance.update();
        }
    }

    this.chatOnResultNoSession = function(webChatInstance){
        if( webChatInstance.poliservicePeriodical_id != null )
        {
            $clear(webChatInstance.poliservicePeriodical_id);
            webChatInstance.poliservicePeriodical_id = null;
        }
    }

    this.chatOnAfterUpdate = function(webChatInstance,responseJSON){
        if(( responseJSON.resultCode == null ) || ( responseJSON.resultCode != webChatInstance.RESULT_NO_SESSION ))
        {
            webChatInstance.poliservicePeriodical_id = webChatInstance.update.delay(2000,webChatInstance);
        }
    }

    this.onContactSubmit = function(){

        var firstName = $(document.body).getElement("form.contact input[name=firstName]");
        var lastName = $(document.body).getElement("form.contact input[name=lastName]");
        var emailAddress = $(document.body).getElement("form.contact input[name=emailAddress]");
        var postalCode = $(document.body).getElement("form.contact input[name=postalCode]");
        var streetNumber = $(document.body).getElement("form.contact input[name=streetNumber]");
        var request = $(document.body).getElement("form.contact textarea[name=request]");
        var submitButton = $(document.body).getElement("form.contact button[type=submit]");
        var busyImage = $(document.body).getElement("form.contact div.submitbusy");
        var parseSubmit = $(document.body).getElement("form.contact input[name=parseSubmit]");

        if( (firstName.value = firstName.value.trim()).length < 2 )
        {
            alert("Vul aub uw voornaam in.");
            firstName.focus();
            return false;
        }

        if( (lastName.value = lastName.value.trim()).length < 2 )
        {
            alert("Vul aub uw achternaam in.");
            lastName.focus();
            return false;
        }

        if(
            ( (emailAddress.value = emailAddress.value.trim()).length < 5 ) ||
            ( emailAddress.value.indexOf("@") == -1 ) ||
            ( emailAddress.value.indexOf(".") == -1 )
        )
        {
            alert("Vul aub uw e-mailadres in.");
            emailAddress.focus();
            return false;
        }

        if( (request.value = request.value.trim()).length < 10 )
        {
            alert("Vul aub uw aanvraag in. Deze dient minimaal uit tien tekens te bestaan.");
            request.focus();
            return false;
        }

        postalCode.value = postalCode.value.trim();
        streetNumber.value = streetNumber.value.trim();

        submitButton.setStyle("display","none");
        busyImage.setStyle("display","block");

        parseSubmit.value = "True";

        return true;
    }

    this.onBelTerugSubmit = function(){

        var firstName = $(document.body).getElement("form.contact input[name=firstName]");
        var lastName = $(document.body).getElement("form.contact input[name=lastName]");
        var telephone = $(document.body).getElement("form.contact input[name=telephone]");
        var notice = $(document.body).getElement("form.contact textarea[name=notice]");
        var submitButton = $(document.body).getElement("form.contact button[type=submit]");
        var busyImage = $(document.body).getElement("form.contact div.submitbusy");
        var parseSubmit = $(document.body).getElement("form.contact input[name=parseSubmit]");

        if( (firstName.value = firstName.value.trim()).length < 2 )
        {
            alert("Vul aub uw voornaam in.");
            firstName.focus();
            return false;
        }

        if( (lastName.value = lastName.value.trim()).length < 2 )
        {
            alert("Vul aub uw achternaam in.");
            lastName.focus();
            return false;
        }

        if( (telephone.value = telephone.value.trim()).length < 10 )
        {
            alert("Vul aub uw telefoonnummer in.");
            telephone.focus();
            return false;
        }

        notice.value = notice.value.trim();

        submitButton.setStyle("display","none");
        busyImage.setStyle("display","block");

        parseSubmit.value = "True";

        return true;
    }
}

var poliservice = new Poliservice();

window.addEvent("domready",function(){
    poliservice.onDomReady();
});
