window.addEvent('load', function(){
    
    var searchForm = $$('#mainsearch input');
    //var searchFormVal = searchForm.get('value');
    var searchFormVal = 'Search for reviews of online businesses';
    searchForm.addEvent('focus', function(){
        var tmpVal = this.get('value');
        if (!tmpVal || (tmpVal == searchFormVal) )
            this.set('value', '');
    }).addEvent('blur', function(){
        var tmpVal = this.get('value');
        if (!tmpVal) {
            this.set('value', searchFormVal);
        }
    });
    
    var similarForm = $$('#similar_search input');
    if (similarForm) {
        var similarFormVal = similarForm.get('value');
        similarForm.addEvent('focus', function(){
            var tmpVal = this.get('value');
            if (!tmpVal || (tmpVal == similarFormVal) )
                this.set('value', '');
        }).addEvent('blur', function(){
            var tmpVal = this.get('value');
            if (!tmpVal) {
                this.set('value', similarFormVal);
            }
        });
    }
    
    // rating stars:
    
    var stars_wrap = $('rating_stars');
    if (stars_wrap)
    {
        var stars = [];
        var swrap0 = stars[0] = new Element('div', {
            'id': 's0',
            'styles': {
                'position': 'relative',
                'width': '18px', 
                'height': '17px',
                'float': 'left',
                'cursor': 'pointer',
                'background-image': 'url(images/star_off.png)'
            }
        });
        
        var clicked_indx = $('rating').getProperty('value');
        
        function s_over(e)
        {
            $('rating_text').set('html', rating_texts[e.target.indx]);
            stars.each(function(star){
                if(star.indx <= e.target.indx) {
                    star.setStyle('background-image', 'url(images/star_on.png)');
                } else {
                    star.setStyle('background-image', 'url(images/star_off.png)');
                }
            });
        }
        
        function s_click(e)
        {
            clicked_indx = e.target.indx;
            $('rating').setProperty('value', clicked_indx);
            $('rating_text').set('html', rating_texts[clicked_indx]);
            var stars = $$('#rating_stars');
            var rate_label = stars.getPrevious();
            var label_span = rate_label.getElement('span');
            stars.addClass('review_star_clicked');
            rate_label.setStyles({
                'color': '#6D6D6D'
            });
            label_span.setStyles({
                'color': '#868686'
            });
        }
        
        var swrap1 = stars[1] = swrap0.clone().setProperty('id', 's1');
        var swrap2 = stars[2] = swrap0.clone().setProperty('id', 's2');
        var swrap3 = stars[3] = swrap0.clone().setProperty('id', 's3');
        var swrap4 = stars[4] = swrap0.clone().setProperty('id', 's4');
        var cnt = 0;
        
        stars.each(function(el){
            el.addEvent('mouseover', s_over).addEvent('click', s_click);
            el.indx = cnt++;
            el.inject(stars_wrap, 'bottom');
        });
        
        function stars_out()
        {
            stars.each(function(el){
                el.setStyle('background-image', 'url(images/star_on.png)');
            });
            stars.each(function(el){
                if (el.indx > clicked_indx)
                    el.setStyle('background-image', 'url(images/star_off.png)');
            });
            if (clicked_indx >= 0) {
                $('rating_text').set('html', rating_texts[clicked_indx]);
            } else {
                $('rating_text').set('html', '');
            }
            
        }
        
        var rating_texts = ['I Hate It', "I Don't Like It", "It's OK", 'I Like It', 'I Love It'];
        
        stars_wrap.addEvent('mouseout', stars_out);
        
        stars_out();
    }
    
    // rating stars end

    // add review form inputs start
    
    var input1 = $('addReview_productTitle');
    if (input1)
    {
        var input2 = $('add_review_website');
        var input3 = $('add_review_location');
        var input4 = $('add_review_reviewTitle');
        var reviewText = $('add_review_text');
        var productDesc = $('add_product_desc');
        var userName = $('add_review_name');
        
        input1.defaultVal = defaultsForJs['productTitle'];
        input2.defaultVal = defaultsForJs['website'];
        input3.defaultVal = defaultsForJs['location'];
        input4.defaultVal = defaultsForJs['reviewTitle'];
        reviewText.defaultVal  = defaultsForJs['reviewText'];
        userName.defaultVal = defaultsForJs['name'];
        
        var focusStyles = {
            'color':'black',
            'font-style': 'normal'
        };
        var blurStyles  = {
            'color':'#a8a8a8'
        };
        
        if (input1.get('value') !== input1.defaultVal) input1.setStyles(focusStyles);
        if (input2.get('value') !== input2.defaultVal) input2.setStyles(focusStyles);
        if (input3.get('value') !== input3.defaultVal) input3.setStyles(focusStyles);
        if (input4.get('value') !== input4.defaultVal) input4.setStyles(focusStyles);
        if (reviewText.get('value') !== reviewText.defaultVal) reviewText.setStyles(focusStyles);
        if (userName.get('value') !== userName.defaultVal) userName.setStyles(focusStyles);
        
        input1.addEvents({
            'focus': function(e){
                if (input1.get('value') == input1.defaultVal) input1.setProperty('value', '');
                input1.setStyles(focusStyles);
            },
            'blur':  function(e){
                if (input1.get('value') == '')
                {
                    input1.setProperty('value', input1.defaultVal);
                    input1.setStyles(blurStyles);
                }
            }
        });
        input2.addEvents({
            'focus': function(e){
                if (input2.get('value') == input2.defaultVal) input2.setProperty('value', '');
                input2.setStyles(focusStyles);
            },
            'blur': function(e){
                if (input2.get('value') == '')
                {
                    input2.setProperty('value', input2.defaultVal);
                    input2.setStyles(blurStyles);
                }
            }
        });
        input3.addEvents({
            'focus': function(e){
                if (input3.get('value') == input3.defaultVal) input3.setProperty('value', '');
                input3.setStyles(focusStyles);
            },
            'blur': function(e){
                if (input3.get('value') == '')
                {
                    input3.setProperty('value', input3.defaultVal);
                    input3.setStyles(blurStyles);
                }
            }
        });
        input4.addEvents({
            'focus': function(e){
                if (input4.get('value') == input4.defaultVal) input4.setProperty('value', '');
                input4.setStyles(focusStyles);
            },
            'blur': function(e){
                if (input4.get('value') == '')
                {
                    input4.setProperty('value', input4.defaultVal);
                    input4.setStyles(blurStyles);
                }
            }
        });
        reviewText.addEvents({
            'focus': function(e){
                if (reviewText.get('value') == reviewText.defaultVal) reviewText.setProperty('value', '');
                reviewText.setStyles(focusStyles);
            },
            'blur': function(e){
                if (reviewText.get('value') == '')
                {
                    reviewText.setProperty('value', reviewText.defaultVal);
                    reviewText.setStyles(blurStyles);
                }
            }
        });
        userName.addEvents({
            'focus': function(e){
                if (userName.get('value') == userName.defaultVal) userName.setProperty('value', '');
                userName.setStyles(focusStyles);
            },
            'blur': function(e){
                if (userName.get('value') == '')
                {
                    userName.setProperty('value', userName.defaultVal);
                    userName.setStyles(blurStyles);
                }
            }
        });
        
        if (productDesc)
        {
            productDesc.defaultVal = defaultsForJs['productDesc'];
            
            if (productDesc.get('value') !== productDesc.defaultVal) productDesc.setStyles(focusStyles);
            
            productDesc.addEvents({
                'focus': function(e){
                    if (productDesc.get('value') == productDesc.defaultVal) productDesc.setProperty('value', '');
                    productDesc.setStyles(focusStyles);
                },
                'blur': function(e){
                    if (productDesc.get('value') == '')
                    {
                        productDesc.setProperty('value', productDesc.defaultVal);
                        productDesc.setStyles(blurStyles);
                    }
                }
            });
        }
        
        // start add review form validation
        
        var addReviewForm = $('addReviewForm');
        var addReviewValidator = new Form.Validator(addReviewForm, {
            'evaluateOnSubmit': true,
            'evaluateFieldsOnBlur': false,
            'evaluateFieldsOnChange': false,
            'ignoreHidden': false
        });
        
        if (typeof(validateAddReviewFormOnLoad) !== 'undefined')
        {
            addReviewValidator.validate();
        }
        
        addReviewValidator.add('ignoreDefaultText', {
            'test': function(el){
                if (el.get('value') == el.defaultVal) return false;
                if (el.get('value').trim() == '') return false;
                else return true;
            }
        });
        addReviewValidator.add('validateWebsite', {
            'test': function(el){
                if (el.get('value') == el.defaultVal) return true;
                if (Form.Validator.getValidator('IsEmpty').test(el)) return true;
                //else return (/^(https?|ftp|rmtp|mms):\/\/(([A-Z0-9][A-Z0-9_-]*)(\.[A-Z0-9][A-Z0-9_-]*)+)(:(\d+))?\/?/i).test(el.get('value'));
                else return (/\w\.\w/).test(el.get('value'));
            }
        });
        addReviewValidator.add('rateValidate', {
            'test': function(el){
                var rate = $$('#rating').get('value');
                var stars = $$('#rating_stars');
                var rate_label = stars.getPrevious();
                var label_span = rate_label.getElement('span');
                if (rate < 0)
                {
                    rate_label.setStyles({
                        'color': '#ff0000'
                    });
                    label_span.setStyle('color', '#868686');
                    return false;
                } else {
                    rate_label.setStyles({
                        'color': '#6D6D6D'
                    });
                    label_span.setStyle('color', '#868686');
                    return true;
                }
                
            }
        });
        
    // end add review form validation

    }
    
    // start "review it" button
    
    if ($('itemBySlugSuccess'))  // check template
    {
        var review_button = $('prim_middle_right_review');
        if (review_button)
        {
            review_button.fxScroll = new Fx.Scroll(window, {
                wait: false, 
                duration: 700, 
                transition: Fx.Transitions.Quad.easeInOut
            });
            if (window.location.hash.substring(1) == 'addreview'){
                window.scrollTo(0,0);
                review_button.fxScroll.toElement($('addreview'));
            }
            review_button.addEvent('click', function(e){
                review_button.fxScroll.toElement($('addreview'));
            });
        }
    
        // end "review it" button
        
        // start review comments section
    
        var review_comments = $$('.review_comments_title');
        if (review_comments.length)
        {
            function comments_toggle(el){
                var comments = el.getNext().getFirst();
                el.fxSlide = new Fx.Slide(comments).hide();
                el.expanded = false;
                el.addEvent('click', function(e){
                    if (el.expanded) {
                        el.fxSlide.slideOut();
                        el.expanded = false;
                    } else {
                        el.fxSlide.slideIn();
                        el.expanded = true;
                    }
                });
            }
            review_comments.each(comments_toggle);
        }
        
        var cmt_forms = $$('.add_comment_form');
        if (cmt_forms.length)
        {
            cmt_forms.each(function(el){
                
                var name = el.getElement('.comment_name_input');
                name.defaultVal = defaultsForCommentJs['name'];
                el.nameSlide   = new Fx.Slide(name.getParent(), {
                    'duration': 150
                }).hide();
                name.getParent().setStyle('display', 'block');
                el.buttonSlide = new Fx.Slide(el.getElement('.comment_submit_wrap'), {
                    'duration': 150
                }).hide();
                el.getElement('.comment_submit_wrap').setStyle('display', 'block');
                var comment  = el.getElement('.comment_textarea');
                comment.defaultVal = defaultsForCommentJs['comment'];
                var comment_textarea = el.getElement('.comment_textarea');
                var cmt_focus_style = {
                    'font-style': 'normal', 
                    'color': '#6E6E6E'
                };
                var cmt_blur_style = {
                    'color': '#a8a8a8'
                };
                comment.addEvents({
                    'focus': function(e){
                        if (this.get('value').trim() == defaultsForCommentJs['comment'])
                        {
                            this.set('value', '');
                            this.setStyles(cmt_focus_style);
                        }
                        el.nameSlide.slideIn();
                        el.buttonSlide.slideIn();
                        comment_textarea.tween('height', comment_textarea.getStyle('height'), 120);
                        comment_textarea.setProperty('spellcheck', 'true');
                    },
                    'blur': function(e){
                        if (this.get('value').trim() == '')
                        {
                            this.setProperty('value', defaultsForCommentJs['comment']);
                            this.setStyles(cmt_blur_style);
                            comment_textarea.setProperty('spellcheck', 'false');
                        }
                    }
                });
                name.addEvents({
                    'focus': function(e){
                        if (this.getProperty('value') == defaultsForCommentJs['name'])
                        {
                            this.setProperty('value', '');
                            this.setStyles(cmt_focus_style);
                        }
                    },
                    'blur': function(e){
                        if (this.getProperty('value') == '')
                        {
                            this.setProperty('value', defaultsForCommentJs['name']);
                            this.setStyles(cmt_blur_style);
                        }
                    }
                })
                
                // start add comment form validation
                var addCommentValidator = new Form.Validator(el, {
                    'evaluateOnSubmit': true,
                    'evaluateFieldsOnBlur': false,
                    'evaluateFieldsOnChange': false
                });
                addCommentValidator.add('ignoreDefaultText', {
                    'test': function(el){
                        if (el.get('value') == el.defaultVal) return false;
                        if (el.get('value').trim() == '') return false;
                        else return true;
                    }
                });
                // end add comment form validation
                
                // start ajax comment form

                el.getElement('.add_comment_submit').addEvent('click', function(ev){
                    var cmtForm = el;
                    var review_id = cmtForm.getElement('.comment_review_id').getProperty('value');
                    if (cmtForm.validate()) {
                        var addCommentRequest = new Request.HTML({
                            'url': cmtForm.getProperty('action'),
                            'onSuccess': function(responseTree, responseElements, responseHTML){
                                var visible_cmt = $('review_comments_wrap_'+review_id).getElement('.visible_cmt');
                                var visible_cmt_html = visible_cmt.get('html');
                                
                                var old_visible_cmt = new Element('div')
                                .addClass('review_comment')
                                .set('html', visible_cmt_html);
                                var review_comments = $('review_comments_'+review_id);
                                old_visible_cmt.inject(review_comments, 'bottom');
                                visible_cmt.set('html', responseHTML);
                                var title = $('review_comments_wrap_'+review_id).getElement('.review_comments_title');
                                if (title.expanded) { title.fxSlide.show(); }
                                cmtForm.getElement('#comment_name')
                                    .setProperty('value', defaultsForCommentJs['name'])
                                    .setStyles(cmt_blur_style);
                                cmtForm.getElement('#comment_comment')
                                    .setProperty('value', defaultsForCommentJs['comment'])
                                    .setStyles(cmt_blur_style)
                                    .setProperty('spellcheck', 'false');
                                    
                                var cmt_title = cmtForm.getParent('.comments_wrap').getPrevious();
                                if (cmt_title.hasClass('view_comments')) {
                                    var numCmt = cmt_title.getElement('.comments_num').get('html');
                                    numCmt++;
                                    cmt_title.getElement('.comments_num').set('html', numCmt);
                                } else if (cmt_title.hasClass('one_comment')) {
                                    var numCmt = cmt_title.getElement('.comments_num').get('html');
                                    numCmt++;
                                    cmt_title.set('html', 'View all <span class="comments_num">'+numCmt+'</span> Comments');
                                } else {
                                    cmt_title.set('html', '<span class="comments_num">1</span> Comment');
                                    cmt_title.addClass('one_comment');
                                }
                                //console.log(responseHTML);
                            },
                            'onFailure': function(){
                                alert('failure');
                            //console.log('failure');
                            },
                            'data': {
                                'name':      cmtForm.getElement('#comment_name').getProperty('value'),
                                'comment':   cmtForm.getElement('#comment_comment').getProperty('value'),
                                'review_id': review_id
                            },
                            'method': 'post',
                            'noCache': true
                        });
                        addCommentRequest.send();
                    }
                    return false;
                });

            // end ajax comment form
                
            });
            
            // if error adding comment, scroll to the comment form, review id is in the url hash
            if (typeof(error_comment_review_id) !== 'undefined')
            {
                var comment_wrap = $('comment_form_wrap_'+error_comment_review_id);
                if (window.location.hash.substring(1) == 'review_comment_error')
                {
                    window.scrollTo(0,0);
                    
                    var commentForm = comment_wrap.getElement('form');
                    commentForm.nameSlide.show();
                    commentForm.buttonSlide.show();
                    commentForm.getElement('.comment_textarea').setStyle('height', 120);
                    var commentFormValidator = new Form.Validator(commentForm, {
                        'evaluateOnSubmit': false
                    });
                    commentFormValidator.add('ignoreDefaultText', {
                        'test': function(el){
                            if (el.get('value') == el.defaultVal) return false;
                            if (el.get('value').trim() == '') return false;
                            else return true;
                        }
                    });
                    commentFormValidator.validate();

                    var scroll = new Fx.Scroll(window, {
                        wait: false, 
                        duration: 500, 
                        transition: Fx.Transitions.Quad.easeInOut
                    });
                    scroll.toElement(comment_wrap);
                }
            }
        }
    }
    
    // end  review comments section
    
    var revres = $('review_results');
    if (revres) {
        
        // start ajax review form
        
        //var numOfSubmits = 0;
        var addReviewForm = $('addReviewForm');
        
        $('add_review_submit').addEvent('click', function(){
            if (addReviewForm.validate()) {
                var addReviewRequest = new Request.HTML({
                    'url': addReviewForm.getProperty('action'),
                    'onSuccess': function(responseTree, responseElements, responseHTML){
                        var newReview = new Element('div', {
                            'class': 'review_result'
                        }).set('html', responseHTML);
                        newReview.inject(revres, 'top');
                        
                        $('addReview_productTitle').setProperty('value', defaultsForJs['productTitle']).setStyles(blurStyles);
                        $('add_review_website').setProperty('value', defaultsForJs['website']).setStyles(blurStyles);
                        $('add_review_name').setProperty('value', defaultsForJs['name']).setStyles(blurStyles);
                        $('add_review_location').setProperty('value', defaultsForJs['location']).setStyles(blurStyles);
                        //$('rating').setProperty('value', defaultsForJs['rating']);
                        $('add_review_reviewTitle').setProperty('value', defaultsForJs['reviewTitle']).setStyles(blurStyles);
                        $('add_review_text').setProperty('value', defaultsForJs['reviewText']).setStyles(blurStyles);
                        $('addReview_productId').setProperty('value', defaultsForJs['productId']).setStyles(blurStyles);
                        $('addReview_existing').setProperty('value', defaultsForJs['existing']).setStyles(blurStyles);
                        
                        //addReviewForm.get('validator').reset();
                        var newReviewScroll = new Fx.Scroll(window, {
                            wait: false, 
                            duration: 700, 
                            transition: Fx.Transitions.Quad.easeInOut
                        });
                        newReviewScroll.toElement(revres);
                        Cufon.replace('.review_result:first-child .HelveticaCond');
                    },
                    'onFailure': function(){
                        alert('failure');
                    //console.log('failure');
                    },
                    'data': {
                        'productTitle':$('addReview_productTitle').getProperty('value'),
                        'website':     $('add_review_website').getProperty('value'),
                        'name':        $('add_review_name').getProperty('value'),
                        'location':    $('add_review_location').getProperty('value'),
                        'rating':      $('rating').getProperty('value'),
                        'review_title':$('add_review_reviewTitle').getProperty('value'),
                        'review_text': $('add_review_text').getProperty('value'),
                        'product_id':  $('addReview_productId').getProperty('value'),
                        'existing':    $('addReview_existing').getProperty('value')
                    }
                });
                addReviewRequest.send();
                return false;
            } else {
                return false;
            }
        });
        
    // end ajax review form
    }
});

function submitSearch(form)
{
    if (searchDefault !== form.getElement('#text').getProperty('value'))
    {
        form.submit();
        return true;
    }
    else
    {
        form.getElement('#text').focus();
        return false;
    }
}
