

function ucwords(str) {
    return (str + '').replace(/^([a-z])|\s+([a-z])/g, function($1) {
        return $1.toUpperCase();
    });
}
function isNotEmpty(element, index, array) {
    return (element !== '');
}
var HorseFinder = new Class({

    Implements: [Options],
    options: {
        panel: 'lower-head',
        toggle: 'btn_horsefinder',
        keyword_id: 'inp_keywords',
        submit_id: 'btn_search',
        reset_id: 'btn_reset',
        form_id: 'search-panel',
        filterholder_id: 'filter_holder',
        sectionsselect_id: 'hf_classifiedsection',
        categoryselect_id: 'hf_classifiedcategory'
    },
    form: false,
    keyword_submit: false,
    keyword_input: false,
    panel: false,
    toggle: false,
    toggle_fx: false,
    menuoptions: false,
    filterholder: false,
    initialize: function(options) {
        this.setOptions(options);
        this.menuoptions = window.ops;
        this.panel = $(this.options.panel);
        this.toggle = $(this.options.toggle);
        this.keyword_input = $(this.options.keyword_id);
        this.keyword_submit = $(this.options.submit_id);
        this.reset_options = $(this.options.reset_id);
        this.filterholder = $(this.options.filterholder_id);
        this.sectionmenu = $(this.options.sectionsselect_id);
        this.categorymenu = $(this.options.categoryselect_id);
        var that = this;
        this.form = $(this.options.form_id);
        if (this.form && this.keyword_input && this.keyword_submit) {
            var form = this.form;
            if (this.reset_options) {
                this.boundReset = this.resetSearchOptions.bind(this);
                this.reset_options.addEvent('click', this.boundReset);
            }
            this.keywordValidator = new Form.Validator.Inline(this.form, {
                stopOnFailure: false,
                errorPrefix: "",
                onFormValidate: function(passed, form, event) {
                    event.preventDefault();
                    if (passed) {
                        var uriObj = new URI(window.location.href);
                        var uri = false;
                        var dir = '/';
                        var host = false;
                        var protocol = 'http';
                        uri = uriObj.toString();
                        host = uriObj.get('host');
                        dir = uriObj.get('directory');
                        protocol = uriObj.get('scheme');
                        var parts = dir.split('/').filter(isNotEmpty);
                        var lev = parts.length;
                        var ur = "";
                        var sec = that.sectionmenu.get('value').toLowerCase();
                        var ca = that.categorymenu.get('value').toLowerCase();
                        var val = protocol + "://" + host + "/horse-finder/";
                        var base = val;
                        if (!that.keyword_input.get('value')) {
                            if (sec && sec !== '') {
                                val += sec + "/";
                            }
                            if (ca && ca !== '') {
                                val += ca + "/";
                            }
                        }
                        var myParams = "";
                        var qarr = form.toQueryString().split('&');
                        var c = 0;
                        var cd = 0;
                        Object.each(qarr, function(ar, ari) {
                            var pa = ar.split('=');
                            if (pa.length == 2) {
                                var ti = '';
                                var vi = '';
                                ti = pa[0];
                                if (pa[1] !== false && pa[1] !== '') {
                                    vi = pa[1];
                                    if (ti !== 'section' && ti !== 'category' && ti !== 'parents') {
                                        var amp = '';
                                        if (cd > 0) {
                                            amp = '&';
                                        }
                                        myParams += amp + ti + "=" + vi;
                                        cd++;
                                    }
                                }
                            }
                            c++;
                        });
                        var nuri = new URI(val + "?" + myParams + "");
                        nuri.go();
                    }
                }
            });
        }
        if (this.panel && this.toggle) {
            var murl = new URI(window.location.href);
            var frag = murl.get('fragment');
            if (frag && frag == 'finder') {
                this.panel.show();
            } else { // this.panel.hide();
            
            }
            
            var myCookie = Cookie.read('ht-closed');
            if(myCookie && myCookie == 1) {
                this.panel.hide();
            } else {
                this.panel.show();
            }
            this.initPanelToggle();
            this.getSearchOptions();
        }
    },
    initPanelToggle: function() {
        var that = this;
        this.toggle_fx = new Fx.Reveal(this.panel, {
            duration: 500,
            mode: 'vertical'
        });
        this.toggle.addEvent('click', function(e) {
            e.preventDefault();
            that.toggle_fx.toggle().chain(function() {
                
                OverText.update();
                                
                if(this.hidden === true) {
                    myCookie = Cookie.write('ht-closed',1);  
                } else {
                    myCookie = Cookie.dispose('ht-closed');
                }
                
            });
        });
    },
    initSearchOptions: function() {
        var filters = $$('#' + this.options.form_id + ' select');
        var that = this;
        if (filters) {
            filters.each(function(el) {
                el.removeEvents();
                el.addEvent('change', function(e) {
                    that.getSearchOptions();
                });
            });
        }
    },
    resetSearchOptions: function(e) {
        if (!e) {
            e = new Event();
        }
        e.preventDefault();
        var filters = $$('#' + this.options.form_id + ' select');
        var that = this;
        if (filters) {
            filters.each(function(el) {
                el.removeEvents();
                el.set('value', '');
                that.getSearchOptions();
            });
        }
    },
    getSearchOptions: function() {
        var filters = $$('#' + this.options.form_id + ' select');
        hf_filters = filters;
        var form = this.form;
        var that = this;
        var myParams = [];
        var qarr = form.toQueryString().split('&');
        var c = 0;
        Object.each(qarr, function(ar, ari) {
            var pa = ar.split('=');
            if (pa.length == 2) {
                var ti = '';
                var vi = '';
                ti = pa[0];
                if (pa[1] !== false && pa[1] !== '') {
                    vi = pa[1];
                }
                var obj = {};
                obj[ti] = vi;
                myParams[c] = obj;
            }
            c++;
        });
        var req_obj = {
            params: myParams
        };
        var uriObj = new URI(window.location.href);
        var uri = false;
        var dir = '/';
        var host = false;
        var protocol = 'http';
        uri = uriObj.toString();
        host = uriObj.get('host');
        dir = uriObj.get('directory');
        protocol = uriObj.get('scheme');
        var ur = protocol + "://" + host + "/rpc-json/?action=web/filteroptions&component=classifiedhorsefinder";
        var jsonRequest = new Request.JSON({
            url: ur,
            onSuccess: function(res) {
                if (res) {
                    Object.each(res, function(el, ind) {
                        ind = ind.toLowerCase();
                        var ind_up = ucwords(ind.replace('-', ' '));
                        var matched_el = $('hf_classified' + ind);
                        if (matched_el) {
                            var match = that.saved_filter_vals['hf_classified' + ind];
                            if (matched_el.get('tag') == 'input') {} else if (matched_el.get('tag') == 'select') {
                                matched_el.empty();
                                var newobj = {
                                    value: '',
                                    text: 'Any ' + ind_up
                                };
                                var trk_arr = [];
                                var trc_cnt = 0;
                                el.sort();
                                var op = new Element('option', newobj);
                                matched_el.adopt(op);
                                Object.each(el, function(oel, oind) {
                                    if (oel && oel.clean() !== '') {
                                        oel = decodeURIComponent(escape(oel));
                                        if (!trk_arr.contains(oel)) {
                                            var oelup = ucwords(oel.replace('-', ' '));
                                            var newobj = {
                                                value: oel,
                                                text: oelup
                                            };
                                            
                                            if (match) {
                                                if (match.toLowerCase() == oel.toLowerCase()) {
                                                    newobj.selected = true;
                                                }
                                            }
                                            
                                            var op = new Element('option', newobj);
                                            matched_el.adopt(op);
                                            trk_arr[trc_cnt] = oel;
                                            trc_cnt++;
                                        }
                                    }
                                });
                            }
                        }
                    });
                }
                that.initSearchOptions();
            },
            onRequest: function() {
                that.saved_filter_vals = {};
                if (hf_filters) {
                    filters.each(function(fel) {
                        var felid = fel.get('id');
                        var fval = fel.get('value');
                        that.saved_filter_vals[felid] = fval.toLowerCase();
                        fel.empty();
                        var newobj = {
                            value: '',
                            text: 'Loading...'
                        };
                        
                        var op = new Element('option', newobj);
                        fel.adopt(op);
                    });
                }
            }
        }).get(req_obj);
    }
});


window.addEvent('domready', function() {    
    var SiteHorseFinder = new HorseFinder();  
 
     function isNotEmpty(element, index, array) {
        return (element !== '');
    }
    
    var coform = $('paymentpage');
    if(coform) {
    
        /*
        var btn_voucher = $('btn_voucher_upgrade');        
        var inp_voucher = $('inp_voucher');
        if(inp_voucher && btn_voucher) {
            btn_voucher.addEvent('click', function(e) {
                e.preventDefault();
                var vval = inp_voucher.get('value');
                if(!vval || vval=='') {
                    return false;
                }
                coform.set('action', '');
                coform.submit();
            });
        } 
        */

        this.checkoutValidator = new Form.Validator.Inline(coform, {
            stopOnFailure: false,
            errorPrefix: "",
            onFormValidate: function(passed, form, event) {
                event.preventDefault();
                if (passed) {
                    coform.submit();
                }
            }
        });
    }
    
    var lform = $('frm_login');
    if (lform) {
        var login_validator = new Form.Validator.Inline(lform, {
            stopOnFailure: false,
            errorPrefix: "",
            onFormValidate: function(passed, form, event) {
                event.preventDefault();
                if (passed) {
                    lform.submit();
                }
            }
        });
    }
    var rform = $('frm_register');
    if (rform) {
        var registration_validator = new Form.Validator.Inline(rform, {
            stopOnFailure: false,
            errorPrefix: "",
            onFormValidate: function(passed, form, event) {
                event.preventDefault();
                if (passed) {
                    rform.submit();
                }
            }
        });
    }
    
    
    var nform = $('frm_nsignup');
    if (nform) {

        var myElement = document.id('nsform');
        var myElementStatus = $('nsstatus'); 
    
        function addNsSignupFormEvents() {
        
             $('nsstatus').fade('out');
                
            var nform = $('frm_nsignup'); 
            var nsignup_validator = new Form.Validator.Inline(nform, {
                stopOnFailure: false,
                errorPrefix: "",
                onFormValidate: function(passed, form, event) {
                    event.preventDefault();
                    if (passed) {
                        var fdata = nform.toQueryString() + "&nsignup=1";
                        myRequest.send(fdata);
                    }
                }
            });
        }
                                              
        var myRequest = new Request({
            url: '/newsletter-signup.html',
            method: 'post',
            onRequest: function(){
                 $('nsstatus').fade('in');
            },
            onSuccess: function(responseText){
                myElement.set('html', responseText);
                 $('nsstatus').fade('out');
                addNsSignupFormEvents();
                
            },
            onFailure: function() {
                myElement.set('html', 'An error occurred - please try again');
                 $('nsstatus').fade('out');
                addNsSignupFormEvents();
            }
        });
        addNsSignupFormEvents();
    }   
    
                 
});
