var Car = {};

Car.Menu = Class.create(
{
    hoverTimer: null,
    activeMenu: null,
    
    initialize: function()
    {
        var li = $('menu_root').childElements();
        
        li.each(function(element)
        {
            var link = element.down('a');
            link.observe('mouseover', this.setHoverTimeout.bind(this));
            link.observe('mouseout', this.clearHoverTimer.bind(this));
            
            if ( link.hasClassName('selected') )
            {
                this.activeMenu = link;
            }
            
            var ul = element.down('ul');
            
            if ( ul == undefined )
            {
                return;
            }
            
            link.submenu = ul;
            $('submenu_container').insert(link.submenu.remove(), 'bottom');
            
            if ( link.hasClassName('selected') )
            {
                link.submenu.setStyle(
                {
                    position:'absolute'
                });
            }
            else
            {
                link.submenu.setStyle(
                {
                    display:'none',
                    position:'absolute'
                });
            }
        }.bind(this));
    },
    
    setHoverTimeout: function(event)
    {
        var link = event.findElement('a');
        
        this.hoverTimer = setTimeout(this.showSubmenu.bind(this, link), 250);
    },
    
    clearHoverTimer: function()
    {
        if ( this.hoverTimer != null )
        {
            clearTimeout(this.hoverTimer);
            this.hoverTimer = null;
        }
    },
    
    showSubmenu: function(link)
    {
        if ( this.activeMenu != null && this.activeMenu != link )
        {
            if ( this.activeMenu.submenu )
            {
                Effect.Fade(this.activeMenu.submenu, { duration:0.2 });
            }
            
            this.activeMenu.removeClassName('selected');
            
            this.activeMenu = null;
        }
        
        if ( link.submenu != undefined && this.activeMenu != link )
        {
            Effect.Appear(link.submenu, { duration:0.2 });
            link.addClassName('selected');
            this.activeMenu = link;
        }
    }
});

Car.Search = Class.create(
{
    clearSearchContainer: function(element)
    {
        if ( element.innerHTML == 'Enter search query...' || $F(element) == 'Enter search query...' )
        {
            element.innerHTML = '';
            element.value = '';
        }
    },
    
    fillSearchContainer: function(element)
    {
        if ( $F(element) == '' )
        {
            element.innerHTML = 'Enter search query...';
            element.value = 'Enter search query...';
        }
    },
    
    keyCheck: function(e)
    {
        var keynum;
        
        if ( window.event )
        {
            keynum = e.keyCode;
        }
        else if ( e.which )
        {
            keynum = e.which;
        }
        
        if ( keynum != 13 )
        {
            return true;
        }
        else
        {
            this
			this.submitSearch();
            return false;
        }
    },
    
    submitSearch: function()
    {
        if ( $F('searchString') == '' || $F('searchString') == 'Enter search query...' )
        {
            preBox.showMessage(document.body, Alert.messageAlert("Required field Error", "Please enter a search phrase."));
            return;
        }
        
        /*
        //Force an exact search
        var search_phrase = $F('searchString');
        
        var stripped_search_phrase1 = search_phrase.replace(/"/g, '');
        var stripped_search_phrase2 = stripped_search_phrase1.replace(/'/g, '');
        
        var exact_search_phrase = '"' + stripped_search_phrase2 + '"';
        
        $('searchString').value = exact_search_phrase;
        */
		var searchString = $F('searchString');
		searchString.replace(/^\s+|\s+$/g,"");
		
		if ( searchString.toLowerCase().include('merc') && searchString.toLowerCase().include('mercedes') == false )
		{
			searchString = searchString.replace(/merc/,"mercedes");
			$('searchString').value = searchString; 
		}
		
		if ( searchString.toLowerCase().include('jag') && searchString.toLowerCase().include('jaguar') == false )
		{
			searchString = searchString.replace(/jag/,"jaguar");
			$('searchString').value = searchString; 
		}
		
		if ( searchString.toLowerCase().include('vw') )
		{
			searchString = searchString.replace(/vw/,"volkswagen");
			$('searchString').value = searchString; 
		}
		
		if ( searchString.toLowerCase().include('ferari') )
		{
			searchString = searchString.replace(/ferari/,"ferarri");
			$('searchString').value = searchString; 
		}
		
		if ( searchString.toLowerCase().include('porche') )
		{
			searchString = searchString.replace(/porche/,"porsche");
			$('searchString').value = searchString; 
		}
		
		if ( searchString.toLowerCase().include('bm') && searchString.toLowerCase().include('bmw') == false )
		{
			searchString = searchString.replace(/bm/,"bmw");
			$('searchString').value = searchString; 
		}
		
		var string = searchString;
		string = string.split(" ");
		
		for ( var i=0; i<string.length; i++ )
		{
		     if ( string[i].length == 1 )
			 {
				 $('searchString').value = '"' + searchString + '"';	
			 }
		}
		
		if ( searchString.search("-") != -1 && searchString.search('"') == -1)
		{
		    $('searchString').value = '"' + searchString + '"';	
		}
        
        $('quick_search_form').submit();
    },
    
    showHideAdvancedSearch: function()
    {
        if ( $('advanced_search_container').style.display == 'none' )
        {
            Effect.SlideDown($('advanced_search_container'), { duration: 0.3 });
            $('advanced_search_link').removeClassName('advanced-search-link-down');
            $('advanced_search_link').addClassName('advanced-search-link-up');
        }
        else
        {
            Effect.SlideUp($('advanced_search_container'), { duration: 0.3 });
            $('advanced_search_link').removeClassName('advanced-search-link-up');
            $('advanced_search_link').addClassName('advanced-search-link-down');
        }
    },
    
    addRemoveCategories: function()
    {
        var values = '';
        
        if ( $('news_filter').checked == 1 )
        {
            values += $('news_filter').value;
        }
        
        if ( $('roadtest_filter').checked == 1 )
        {
            if ( values != '' )
            {
                values += ',';
            }
            
            values += $('roadtest_filter').value;
        }
        
        if ( $('galleries_filter').checked == 1 )
        {
            if ( values != '' )
            {
                values += ',';
            }
            
            values += $('galleries_filter').value;
        }
        
        if ( $('blogs_filter').checked == 1 )
        {
            if ( values != '' )
            {
                values += ',';
            }
            
            values += $('blogs_filter').value;
        }
		
		if ( $('news_filter').checked != 1 && $('blogs_filter').checked != 1 && $('galleries_filter').checked != 1 && $('roadtest_filter').checked != 1 )
		{
	        values += '137,138,139,140,141,142,146,183,184,147,129,358,151,189,190,357,156,518,519,520,521';
		}
        
        $('categories').value = values;
    },
	
	popUpSearchTips: function()
	{
		var viewport = document.viewport.getDimensions();
		var height = viewport.height + 20;
		var leftPos = (viewport.width-624)/2;
		var topPos = (viewport.height-320)/2;

		window.open('/search_tips.html', '_blank', 'toolbar=0,scrollbars=0,' 
		+ 'location=0,statusbar=0,menubar=0,resizable=0,width=630,height=320,top=' + topPos + ',left=' + leftPos + '');
	},
    
    validateAdvancedSearch: function()
    {
        if ( $F('searchStringAdvanced') == '' )
        {
            preBox.showMessage(document.body, Alert.messageAlert("Required field Error", "Please enter a search phrase."));
            return false;
        }
        
        if ( $('advanced_search_container').style.display == 'none' )
        {
            $('searchStartDate').value = '';
            $('searchEndDate').value = '';
            $('searchAuthor').selectedIndex = -1;
        }
        
		var searchStringAdvanced = $F('searchStringAdvanced');
		searchStringAdvanced.replace(/^\s+|\s+$/g,"");
		
		if ( searchStringAdvanced.toLowerCase().include('merc') && searchStringAdvanced.toLowerCase().include('mercedes') == false )
		{
			searchStringAdvanced = searchStringAdvanced.replace(/merc/,"mercedes");
			$('searchStringAdvanced').value = searchStringAdvanced; 
		}
		
		if ( searchStringAdvanced.toLowerCase().include('jag') && searchStringAdvanced.toLowerCase().include('jaguar') == false )
		{
			searchStringAdvanced = searchStringAdvanced.replace(/jag/,"jaguar");
			$('searchStringAdvanced').value = searchStringAdvanced; 
		}
		
		if ( searchStringAdvanced.toLowerCase().include('vw') && searchStringAdvanced.toLowerCase().include('volkswagen') == false )
		{
			searchStringAdvanced = searchStringAdvanced.replace(/vw/,"volkswagen");
			$('searchStringAdvanced').value = searchStringAdvanced; 
		}
		
		if ( searchStringAdvanced.toLowerCase().include('ferari') )
		{
			searchStringAdvanced = searchStringAdvanced.replace(/ferari/,"ferarri");
			$('searchStringAdvanced').value = searchStringAdvanced; 
		}
		
		if ( searchStringAdvanced.toLowerCase().include('porche') )
		{
			searchStringAdvanced = searchStringAdvanced.replace(/porche/,"porsche");
			$('searchStringAdvanced').value = searchStringAdvanced; 
		}
		
		if ( searchStringAdvanced.toLowerCase().include('bm') )
		{
			searchStringAdvanced = searchStringAdvanced.replace(/bm/,"bmw");
			$('searchStringAdvanced').value = searchStringAdvanced; 
		}
		
		var string = searchStringAdvanced;
		string = string.split(" ");
		
		for ( var i=0; i<string.length; i++ )
		{
		     if ( string[i].length == 1 )
			 {
				 $('searchStringAdvanced').value = '"' + searchStringAdvanced + '"';	
			 }
		}
		
		if ( searchStringAdvanced.search("-") != -1 && searchStringAdvanced.search('"') == -1)
		{
		    $('searchStringAdvanced').value = '"' + searchStringAdvanced + '"';	
		}
        /*
        //Force an exact search
        var search_phrase = $F('searchStringAdvanced');
        
        var stripped_search_phrase1 = search_phrase.replace(/"/g, '');
        var stripped_search_phrase2 = stripped_search_phrase1.replace(/'/g, '');
        
        var exact_search_phrase = '"' + stripped_search_phrase2 + '"';
        
        $('searchStringAdvanced').value = exact_search_phrase;
        */
        
        $('search_results_filter_form').submit();
        return false;
    }
});

Car.Comments = Class.create(
{
    clearCommentContainer: function(element, type)
    {
        if ( element.innerHTML == 'Enter ' + type + '...' || $F(element) == 'Enter ' + type + '...' )
        {
            if ( type == 'your comment' )
            {
                element.innerHTML = '';
            }
            
            element.value = '';
        }
    },
    
    fillCommentContainer: function(element, type)
    {
        if ( $F(element) == '' )
        {
            if ( type == 'your comment' )
            {
                element.innerHTML = 'Enter ' + type + '...';
            }
            
            element.value = 'Enter ' + type + '...';
        }
    },
    
    validateForm: function()
    {
        var filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;

        if( $('co_comment_su_name').getValue() == '' || $('co_comment_su_name').getValue() == 'Enter your name...' )
        {
            preBox.showMessage(document.body, Alert.messageAlert("Required field Error", "Please enter a name to go with this comment."));
            return false;
        }
        if( $('co_comment_su_email').getValue() == '' || $('co_comment_su_email').getValue() == 'Enter your email (will not be published)...')
        {
            preBox.showMessage(document.body, Alert.messageAlert("Required field Error", "Please enter an email address to go with this comment."));
            return false;
        }
        if( !filter.test($('co_comment_su_email').getValue()) )
        {
            preBox.showMessage(document.body, Alert.messageAlert("Invalid Email Address", "Please enter a valid email address to go with this comment."));
            return false;
        }
        if( $('co_comment').getValue() == '' || $('co_comment').getValue() == 'Enter your comment...' )
        {
            preBox.showMessage(document.body, Alert.messageAlert("Invalid Comment", "Please enter a comment."));
            return false;
        }
        if( $('captcha').getValue() == '' || $('captcha').getValue() == 'Enter validation code...' )
        {
            preBox.showMessage(document.body, Alert.messageAlert("Invalid Verification", "Please enter the verification code which is displayed inside the picture."));
            return false;
        }
        
        $('comment-form').submit();
    },
    
    cancelComment: function(form_element, comment_container)
    {
        $(form_element).reset();
        $(comment_container).innerHTML = 'Enter your comment...';
        $(comment_container).value = 'Enter your comment...';
    }
});

Car.ArticleCarousel = Class.create(
{
    num_items: 0,
    shift_amount: 104,
    carousel_slider: null,
    max_items_visible: 4,
    animating: false,
    item_width: 104,
    slider_left: 0,
    left_arrow: null,
    right_arrow: null,
    current_item: null,
    popup_info_visible: false,
    popup_timer: null,
    popup_animating: false,
    popup_effect:null,
    
    initialize: function(num_items, item_width, max_items_visible, num_items_to_shift, carousel_container)
    {
        this.num_items = num_items;
        this.shift_amount = item_width * num_items_to_shift;
        this.carousel_slider = $(carousel_container).down('div.article-tab-carousel-thumbs-slider');
        this.max_items_visible = max_items_visible;
        this.item_width = item_width;
        
        var carousel_thumbs = $(carousel_container).down('div.article-tab-carousel-thumbs-slider').childElements();
        
        if ( carousel_thumbs != undefined)
        {
            carousel_thumbs.each(function(element)
            {
                element.observe('click', this.loadItem.bind(this));
                element.observe('mouseout', this.hideThumbDescriptionTimeout.bind(this));
                element.observe('mouseover', this.showThumbDescription.bind(this));
            }.bind(this));

            this.loadFirstItem($(carousel_thumbs[0]));
        }
        
        this.left_arrow = $(carousel_container).down('div.article-tab-carousel-arrow-left');
        this.right_arrow = $(carousel_container).down('div.article-tab-carousel-arrow-right');
        
        if ( this.num_items > 1 )
        {
            if ( this.num_items > this.max_items_visible )
            {
                this.left_arrow.observe('click', this.shiftItemsRight.bind(this));
                this.right_arrow.observe('click', this.shiftItemsLeft.bind(this));
            }
            else
            {
                this.right_arrow.style.visibility = 'hidden';
            }
            
            this.left_arrow.style.visibility = 'hidden';
        }
        else
        {
            $(carousel_container).style.display = 'none';
            
            $(carousel_container).up('div.tab-content').setStyle(
            {
                minHeight:'0px'
            });
            
            $(carousel_container).up('div.tab-content').down('div.media_container').setStyle(
            {
                minHeight:'0px'
            });
        }
    },
    
    showThumbDescription: function(event)
    {
        if ( this.popup_timer != null )
        {
            clearTimeout(this.popup_timer);
            this.popup_timer = null;
        }
        
        if ( this.popup_effect != null )
        {
            this.popup_effect.cancel();
            this.popup_effect = null;
        }
        
        if ( this.popup_animating == true )
        {
            this.popup_timer = setTimeout(this.showThumbDescription.bind(this, event), 200);
            return;
        }
        
        var hover_thumb;
        
        if ( !(hover_thumb = event.findElement('img')) )
        {
            return;
        }
        
        hover_thumb = hover_thumb.up('div');
        
        var thumb_description = hover_thumb.readAttribute('name');
        
        if ( thumb_description == '' )
        {
            this.hideThumbDescriptionTimeout();
            return;
        }
        
        var anchor_index = thumb_description.indexOf('<br/>');
        
        if ( anchor_index == -1 )
        {
            anchor_index = thumb_description.indexOf('<a');
        }
        
        var last_pos = 0;
        
        if ( anchor_index >= 30 || anchor_index == undefined || anchor_index == -1 || anchor_index == null )
        {
            last_pos = 30;
        }
        else
        {
            last_pos = anchor_index;
        }
        
        if ( thumb_description.length > 30 )
        {
            var hover_thumb_description = thumb_description.substr(0, last_pos) + "...";
        }
        else
        {
            var hover_thumb_description = thumb_description.substr(0, last_pos);
        }
        
        if ( hover_thumb_description == '...' )
        {
            this.hideThumbDescriptionTimeout();
            return;
        }
        
        var media_description_popup = $('media_description_popup');
        var popup_text = media_description_popup.down('div.media-description-text');
        
        popup_text.update(hover_thumb_description);
        
        if ( this.popup_info_visible == false )
        {
            var offset_top = -30;
            
            media_description_popup.show();
            
            media_description_popup.setStyle(
            {
                opacity:1.0
            });
            
            Element.clonePosition(media_description_popup, hover_thumb,
            {
                setWidth:false,
                setHeight:false,
                offsetTop:offset_top,
                offsetLeft:38
            });
            
            this.popup_effect = new Effect.Move(media_description_popup, { y:-10, mode:'relative', duration:0.1 });
        }
        else
        {
            var offset_top = -40;
            
            media_description_popup.show();
            
            Element.clonePosition(media_description_popup, hover_thumb,
            {
                setWidth:false,
                setHeight:false,
                offsetTop:offset_top,
                offsetLeft:38
            });
        }
        
        this.popup_info_visible = true;
    },
    
    doneFadingPopup: function()
    {
        this.popup_info_visible = false;
        this.popup_animating = false;
    },
    
    hideThumbDescription: function()
    {
        this.popup_animating = true;
        Effect.Fade($('media_description_popup'), { duration:0.1, afterFinish:this.doneFadingPopup.bind(this) });
    },
    
    hideThumbDescriptionTimeout: function(event)
    {
        if ( this.popup_info_visible == true )
        {
            this.popup_timer = setTimeout(this.hideThumbDescription.bind(this), 200);
        }
    },
    
    shiftItemsLeft: function(event)
    {
        if ( (this.carousel_slider != null || this.carousel_slider != undefined) && !this.animating)
        {
            this.animating = true;
            new Effect.Move(this.carousel_slider, { x:-this.shift_amount, duration:0.2, mode:'relative', afterFinish:this.doneAnimating.bind(this) });
            this.slider_left -= this.shift_amount;
        }
    },
    
    shiftItemsRight: function(event)
    {
        if ( (this.carousel_slider != null || this.carousel_slider != undefined) && !this.animating)
        {
            this.animating = true;
            new Effect.Move(this.carousel_slider, { x:this.shift_amount, duration:0.2, mode:'relative', afterFinish:this.doneAnimating.bind(this) });
            this.slider_left += this.shift_amount;
        }
    },
    
    doneAnimating: function()
    {
        this.animating = false;
        var max_left = 0 - ((this.num_items - this.max_items_visible) * this.item_width);
        
        if ( this.slider_left <= max_left )
        {
            this.right_arrow.style.visibility = 'hidden';
            this.left_arrow.style.visibility = 'visible';
            this.left_arrow.next('div.article-tab-carousel-thumbs-container').removeClassName('repositioned');
        }
        else
        if ( this.slider_left == 0 )
        {
            this.left_arrow.style.visibility = 'hidden';
            this.right_arrow.style.visibility = 'visible';
            this.left_arrow.next('div.article-tab-carousel-thumbs-container').addClassName('repositioned');
        }
        else
        {
            this.right_arrow.style.visibility = 'visible';
            this.left_arrow.style.visibility = 'visible';
            this.left_arrow.next('div.article-tab-carousel-thumbs-container').removeClassName('repositioned');
        }
    },
    
    loadItem: function(event)
    {
        var thumb = event.findElement('div');
        
        if ( this.current_item != null && this.current_item != thumb )
        {
            this.current_item.removeClassName('selected');
            this.current_item = thumb;
            thumb.addClassName('selected');
            
            var filename = thumb.readAttribute('src');
            var new_height = thumb.readAttribute('rel');
            var file_extension = thumb.readAttribute('type');
            var description = thumb.readAttribute('name');
            var download_links = thumb.readAttribute('value').escapeHTML();
            
            var media_container = thumb.up('div.tab-content').down('div.media_container');
            var info_container = thumb.up('div.tab-content').down('div.article-tab-media-info');
            var links_container = thumb.up('div.tab-content').down('div.article-tab-download-container');
            
            if ( file_extension == 'mpeg' ||
                 file_extension == 'mp4' ||
                 file_extension == 'flv' )
            {
                var image = thumb.down('img').readAttribute('value');
            
                if ( image == null )
                {
                    image = '/images/rsp/car/default_video.jpg';
                }
                
                media_container.setStyle(
                {
                    height: '293px'
                });
                
                flowplayer(media_container, { src: '/includes/js/car/flowplayer/flowplayer.commercial-3.1.1.swf', wmode: 'opaque'}, 
                {
                    key:'#@e1209d8bcd2857741ab',
                    
                    plugins:
                    {
                        controls: conf.skins.standard
                    },
            
                    screen:
                    {
                        height:270,
                        width:480
                    },
                    
                    playlist:
                    [
                        {
                            url:image,
                            duration:0
                        },
                        
                        {
                            url:filename,
                            autoPlay:false,
                            autoBuffering:false,
                            scaling:'orig'
                        }
                    ]
                });
            }
            else
            if ( file_extension == 'mp3' )
            {
                var image = thumb.down('img').readAttribute('value');
            
                if ( image == null )
                {
                    image = '/images/rsp/car/default_audio.jpg';
                }
                
                media_container.setStyle(
                {
                    height: '293px'
                });
                
                flowplayer(media_container, { src: '/includes/js/car/flowplayer/flowplayer.commercial-3.1.1.swf', wmode: 'opaque'}, 
                {
                    key:'#@e1209d8bcd2857741ab',
                    
                    plugins:
                    {
                        controls: conf.skins.standard
                    },
            
                    screen:
                    {
                        height:270,
                        width:480
                    },
                    
                    playlist:
                    [
                        {
                            url:image,
                            duration:0
                        },
                        
                        {
                            url:filename,
                            autoPlay:false,
                            autoBuffering:false
                        }
                    ]
                });
            }
            else
            if ( file_extension == 'jpg' ||
                 file_extension == 'gif' ||
                 file_extension == 'png' )
            {
                var new_content = '<img src="' + filename + '" width="480px" alt="' + description + '" />';
                
                if ( new_height != undefined && new_height != '' )
                {
                    if ( media_container.getHeight() != new_height )
                    {
                        if ( media_container.getHeight() < new_height )
                        {
                            new Effect.Morph(media_container,
                            {
                                style: 'height:' + new_height + 'px',
                                duration:0.25,
                                
                                afterFinish: function()
                                {
                                    media_container.update(new_content);
                                }
                            });
                        }
                        else
                        {
                            media_container.update(new_content);
                            
                            new Effect.Morph(media_container,
                            {
                                style: 'height:' + new_height + 'px',
                                duration:0.25
                            });
                        }
                        
                        media_container.setStyle(
                        {
                            minHeight: '0px'
                        });
                    }
                    else
                    {
                        media_container.update(new_content);
                    }
                }
                else
                {
                    media_container.setStyle(
                    {
                        minHeight: '100px',
                        height: 'auto'
                    });
                    
                    media_container.update(new_content);
                }
            }
            
            if ( description != null )
            {
                info_container.update(description);
            }
            
            if ( download_links != null )
            {
                links_container.update(download_links.unescapeHTML());
            }
        }
    },
    
    loadFirstItem: function(element)
    {
        var thumb = element;
        this.current_item = thumb;
        thumb.addClassName('selected');
        
        var filename = thumb.readAttribute('src');
        var new_height = thumb.readAttribute('rel');
        var file_extension = thumb.readAttribute('type');
        var description = thumb.readAttribute('name');
        var download_links = thumb.readAttribute('value').escapeHTML();
        
        var media_container = thumb.up('div.tab-content').down('div.media_container');
        var info_container = thumb.up('div.tab-content').down('div.article-tab-media-info');
        var links_container = thumb.up('div.tab-content').down('div.article-tab-download-container');
        
        if ( file_extension == 'mpeg' ||
             file_extension == 'mp4' ||
             file_extension == 'flv' )
        {
            var image = thumb.down('img').readAttribute('value');
            
            if ( image == null )
            {
                image = '/images/rsp/car/default_video.jpg';
            }
            
            media_container.setStyle(
            {
                height: '293px'
            });
            
            flowplayer(media_container, { src: '/includes/js/car/flowplayer/flowplayer.commercial-3.1.1.swf', wmode: 'opaque'}, 
            {
                key:'#@e1209d8bcd2857741ab',
                
                plugins:
                {
                    controls: conf.skins.standard
                },
        
                screen:
                {
                    height:270,
                    width:480
                },
                
                playlist:
                [
                    {
                        url:image,
                        duration:0
                    },
                    
                    {
                        url:filename,
                        autoPlay:false,
                        autoBuffering:false,
                        scaling:'orig'
                    }
                ]
            });
        }
        else
        if ( file_extension == 'mp3' )
        {
            var image = thumb.down('img').readAttribute('value');
            
            if ( image == null )
            {
                image = '/images/rsp/car/default_audio.jpg';
            }
            
            media_container.setStyle(
            {
                height: '293px'
            });
            
            flowplayer(media_container, { src: '/includes/js/car/flowplayer/flowplayer.commercial-3.1.1.swf', wmode: 'opaque'}, 
            {
                key:'#@e1209d8bcd2857741ab',
                
                plugins:
                {
                    controls: conf.skins.standard
                },
        
                screen:
                {
                    height:270,
                    width:480
                },
                
                playlist:
                [
                    {
                        url:image,
                        duration:0
                    },
                    
                    {
                        url:filename,
                        autoPlay:false,
                        autoBuffering:false
                    }
                ]
            });
        }
        else
        if ( file_extension == 'jpg' ||
             file_extension == 'gif' ||
             file_extension == 'png' )
        {
            var new_content = '<img src="' + filename + '" width="480px" alt="' + description + '" />';
            
            if ( new_height != undefined && new_height != '' )
            {
                media_container.setStyle(
                {
                    height: new_height + 'px',
                    minHeight: '0px'
                });
            }
            else
            {
                media_container.setStyle(
                {
                    minHeight: '100px',
                    height: 'auto'
                });
            }
            
            media_container.update(new_content);
        }
        
        if ( description != null )
        {
            info_container.update(description);
        }
        
        if ( download_links != null )
        {
            links_container.update(download_links.unescapeHTML());
        }
    }
});

Car.Util = Class.create(
{
    setTabContainerHeightsToMax: function(tab_container)
    {
        var tab_containers = $(tab_container).childElements();
        var max_height = this.getMaxHeight(tab_container);
        
        tab_containers.each(function(element)
        {
            element.setStyle(
            {
                height:max_height + 'px'
            });
        });
    },
    
    getMaxHeight: function(container)
    {
        var max_height = -100;
        
        var children = $(container).childElements();
        
        children.each(function(element)
        {
            var element_height = element.getHeight();
            
            if ( element_height > max_height )
            {
                max_height = element_height;
            }
        });
        
        return max_height;
    }
});

var Alert = {
    messageAlert: function(heading, message)
    {
        var html = '' +
        '<div class="shadow-top">&nbsp;</div>' +
        '<div class="message-container">' +
        '    <div class="inner-container">' +
        '        <a href="javascript:preBox.hideMessage(document.body);"></a>' +
        '        <div id="message-title">' + heading + '</div>' +
        '        <div id="message-content">' + message + '</div>' +
        '    </div>' +
        '</div>' +
        '<div class="shadow-bottom">&nbsp;</div>';
        
        return html;
    }
}

var Bin = {
    compare_cars_arr:null,
    loading:false,
    car_type:'',
    
    initialize: function()
    {
        Bin.compare_cars_arr = new Array();
        
        $('compare_link').observe('click', Bin.compareCars);
        $('compare_remove_link').observe('click', Bin.removeSelected);
        $('compare_clear_link').observe('click', Bin.clearBin);
    },
    
    removeSelected: function()
    {
        var selected_values = $F('compare_bin');
        
        if ( selected_values == null )
        {
            return;
        }

        if ( selected_values == '' )
        {
            preBox.showMessage(document.body, Alert.messageAlert("Compare Bin Error", "Please select one or more cars to remove."));
            return;
        }
            
        selected_values.each(function(option)
        {
            var car_option = $('compare_bin').down('option#' + option);
            car_option.remove();
            
            for ( var i = 0; i < Bin.compare_cars_arr.length; i++ )
            {
                if ( Bin.compare_cars_arr[i] == option )
                {
                    Bin.compare_cars_arr.splice(i, 1);
                    break;
                }
            }
        });
        
        if ( Bin.compare_cars_arr.length == 0 )
        {
            $('compare_remove_link').addClassName('disabled');
            $('compare_clear_link').addClassName('disabled');
        }
        
        if ( Bin.compare_cars_arr.length < 2 )
        {
            $('compare_link').addClassName('disabled');
        }
    },
    
    clearBin: function()
    {
        $('compare_bin').select('option').each(function(option)
        {
            option.remove();
            Bin.compare_cars_arr.pop();
        });
        
        $('compare_remove_link').addClassName('disabled');
        $('compare_clear_link').addClassName('disabled');
        $('compare_link').addClassName('disabled');
    },
    
    compareCars: function()
    {
        if ( $('compare_link').hasClassName('disabled') )
        {
            return;
        }
        
        if ( Bin.car_type == 0 )
        {
            Bin.car_type = 'new';
        }
        else
        if ( Bin.car_type == -1 )
        {
            Bin.car_type = 'used';
        }
        
        var url = '/plugins/rsp.compare.cars.php?op=compare&car_type=' + Bin.car_type + '&rep_id=204';
        var count = 1;
        
        $('compare_bin').select('option').each(function(option)
        {
            url += '&car_' + count++ + '=' + option.readAttribute('value');
        });
        
        setTimeout(function()
        {
            window.location = url;
        }, 0);
    }
}

var Util = {
	resize: function()
	{
		var min_width = Element.getStyle(document.body, 'min-width');
		var set_width = ( min_width ) ? false : true;
	
		min_width = min_width || '1045';
		min_width = min_width.gsub('px', '');
		
		var width = document.viewport.getWidth();
		
		var right_pos = (( width < min_width ) ? (width - min_width) : 0) + 'px';
		//$('indices-container').setStyle({right: right_pos});
		
		if ( set_width )
		{
			var body_width = ( width < min_width ) ? '1045px' : '';
			Element.setStyle(document.body, {width: body_width});
		}
	},
	
	getScrollOffset: function()
	{
		var x = 0, y = 0;
		if ( typeof( window.pageYOffset ) == 'number' )
		{
			//Netscape
			y = window.pageYOffset;
			x = window.pageXOffset;
		}
		else if ( document.body && ( document.body.scrollLeft || document.body.scrollTop ) )
		{
			//DOM
			y = document.body.scrollTop;
			x = document.body.scrollLeft;
		}
		else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) )
		{
			//IE6 standards compliant mode
			y = document.documentElement.scrollTop;
			x = document.documentElement.scrollLeft;
		}
		return {left: x, top: y};
	},
	
	getMaxHeight: function(elements, inclusive)
	{
		// Check if height must include padding
		if ( inclusive == undefined )
		{
			inclusive = false;
		} 
		
		var max = 0
		var height;
		
		elements.each( function(element) {
			
			if ( !inclusive )
			{
				var padding = parseInt(element.getStyle('paddingTop').gsub('px', '')) + parseInt(element.getStyle('paddingBottom').gsub('px', ''));
			}
			else
			{
				var padding = 0;
			}
			
			var height = element.getHeight() - padding;
			if ( height > max )
			{
				max = height;
			}
		});
		
		return max;
	}
}

Car.CompareCars = Class.create(
{
    clicked_item: null,
    
    initialize: function(car_listing_id)
    {
        $(car_listing_id).observe('click', this.addCar.bind(this));        
    },
    
    addCar: function(event)
    {
        if ( !(this.clicked_item = event.findElement('a')) || this.clicked_item.innerHTML.toLowerCase() != '+add' || Bin.loading == true)
        {
            return;
        }

        if ( Bin.compare_cars_arr.length == 3 )
        {
            preBox.showMessage(document.body, Alert.messageAlert("Compare Bin Error", "You can only compare up to 3 cars."));
            return;
        }
        
        var exists_in_array = false;
        var car_id = this.clicked_item.readAttribute('id');
        
        for ( var i = 0; i < Bin.compare_cars_arr.length; i++ )
        {
            if ( Bin.compare_cars_arr[i] == car_id )
            {
                var exists_in_array = true;
                break;
            }
        }
        
        if ( exists_in_array )
        {
            preBox.showMessage(document.body, Alert.messageAlert("Compare Bin Error", "This car has already been added to the compare bin."));
            return;
        }
        
        if ( $('compare_remove_link').hasClassName('disabled') || $('compare_clear_link').hasClassName('disabled') )
        {
            $('compare_remove_link').removeClassName('disabled');
            $('compare_clear_link').removeClassName('disabled');
        }
        
        var car_row = this.clicked_item.up('tr');
        var car_make = car_row.down('td').innerHTML;
        var car_model = car_row.down('td').next().innerHTML;
        
        var car_option = new Element('option', { 'id':car_id, 'value':car_id });
        car_option.insert(car_make + " " + car_model);
        
        $('compare_bin').insert(car_option, { position:'bottom' });
        
        new Effect.Highlight(car_row, { startcolor:'#FFFFFF', endcolor:'#EBEBEB', restorecolor:'transparent' });
        
        Bin.compare_cars_arr.push(car_id);
        
        if ( Bin.compare_cars_arr.length >= 2 )
        {
            $('compare_link').removeClassName('disabled');
        }
    }
});

Car.CarGuideListing = Class.create(
{
    current_page: 0,
    car_type: '',
    
    initialize: function(car_type, options)
    {
        this.car_type = car_type.toLowerCase();
        Bin.car_type = car_type.toLowerCase();
        
        if ( options == 'no_list' )
        {
            return;
        }
        
        if ( options == 'perform_filter' )
        {
            this.applyFilter('no_scroll');
            return;
        }
        else
        {
            $('car_guide_listing').update('<img src="/images/rsp/car/loading.gif" class="loading" />');
        }
        
        Bin.loading = true;
        
        this.disableFindReset();
        
        new Ajax.Request('/plugins/rsp.car.guide.listing.php?car_type=' + this.car_type,
        {
            onSuccess: function(transport)
            {
                $('car_guide_listing').update(transport.responseText);
                Bin.loading = false;
                
                $('filter_reset').writeAttribute(
                {
                    style:''
                });
                
                $('filter_find').writeAttribute(
                {
                    style:''
                });
            }
        });
    },
    
    gotoPage: function(page_num)
    {
        if ( Bin.loading == true )
        {
            return;
        }
        
        Bin.loading = true;
        
        this.disableFindReset();
        
        $('car_guide_listing').addClassName('loading');
        
        $('car_guide_listing').setStyle(
        {
            cursor:'wait'
        });
        
        var loading_height = $('car_guide_listing').getHeight();
        
        $('loading_div').setStyle(
        {
            height:loading_height + 'px'
        });
        
        Effect.Appear($('loading_div'), { duration: 0.5 });
        
        var url = '/plugins/rsp.car.guide.listing.php?car_type=' + this.car_type + '&page_num=' + page_num + '&car_make_filter=' + $F('car_guide_makes') + '&price_from=' + $F('car_guide_price_min') + '&price_to=' + $F('car_guide_price_max') + '&year_from=' + $F('car_guide_year_from') + '&year_to=' + $F('car_guide_year_to') + '&order_by=' + $F('order_by');
        
        new Ajax.Request(url,
        {
            onSuccess: function(transport)
            {
                $('car_guide_listing').update(transport.responseText);
                $('car_guide_listing').removeClassName('loading');
                
                $('car_guide_listing').setStyle(
                {
                    cursor:'default'
                });
                
                Bin.loading = false;
                
                $('filter_reset').writeAttribute(
                {
                    style:''
                });
                
                $('filter_find').writeAttribute(
                {
                    style:''
                });
                
                Effect.Fade($('loading_div'), { duration: 0.5 });
            }
        });
    },
    
    applyFilter: function(param)
    {
        if ( Bin.loading == true )
        {
            return;
        }
        
        Bin.loading = true;
        
        this.disableFindReset();
        
        if ( param != 'no_scroll' )
        {
            new Effect.ScrollTo('compare_bin_main_container', { duration:0.5 });
        }
        
        $('car_guide_listing').addClassName('loading');
        
        if ( param == 'make' )
        {
            if ( $F('order_by') != 'cg_make%20DESC' )
            {
                $('order_by').writeAttribute(
                {
                    value:'cg_make%20DESC'
                });
            }
            else
            {
                $('order_by').writeAttribute(
                {
                    value:'cg_make%20ASC'
                });
            }
        }
        else
        if ( param == 'model' )
        {
            if ( $F('order_by') != 'cg_model%20DESC,cg_derivative%20DESC' )
            {
                $('order_by').writeAttribute(
                {
                    value:'cg_model%20DESC,cg_derivative%20DESC'
                });
            }
            else
            {
                $('order_by').writeAttribute(
                {
                    value:'cg_model%20ASC,cg_derivative%20ASC'
                });
            }
        }
        else
        if ( param == 'year' )
        {
            if ( $F('order_by') != 'cg_year%20DESC' )
            {
                $('order_by').writeAttribute(
                {
                    value:'cg_year%20DESC'
                });
            }
            else
            {
                $('order_by').writeAttribute(
                {
                    value:'cg_year%20ASC'
                });
            }
        }
        else
        if ( param == 'price' )
        {
            if ( $F('order_by') != 'cg_price%20DESC' )
            {
                $('order_by').writeAttribute(
                {
                    value:'cg_price%20DESC'
                });
            }
            else
            {
                $('order_by').writeAttribute(
                {
                    value:'cg_price%20ASC'
                });
            }
        }
        else
        {
            $('order_by').writeAttribute(
            {
                value:''
            });
        }
        
        var loading_height = $('car_guide_listing').getHeight();
        
        $('loading_div').setStyle(
        {
            height:loading_height + 'px'
        });
        
        Effect.Appear($('loading_div'), { duration: 0.5 });
        
        var url = '/plugins/rsp.car.guide.listing.php?car_type=' + this.car_type + '&page_num=' + 0 + '&car_make_filter=' + $F('car_guide_makes') + '&price_from=' + $F('car_guide_price_min') + '&price_to=' + $F('car_guide_price_max') + '&year_from=' + $F('car_guide_year_from') + '&year_to=' + $F('car_guide_year_to') + '&order_by=' + $F('order_by');
        
        new Ajax.Request(url,
        {
            onSuccess: function(transport)
            {
                $('car_guide_listing').update(transport.responseText);        
                $('car_guide_listing').removeClassName('loading');
                
                Bin.loading = false;
                
                $('filter_reset').writeAttribute(
                {
                    style:''
                });
                
                $('filter_find').writeAttribute(
                {
                    style:''
                });
                
                Effect.Fade($('loading_div'), { duration: 0.5 });
            }
        });
    },
    
    submitFilterForm: function()
    {
        $('car_guide_search_form').submit();
    },
    
    clearFilter: function()
    {
        if ( Bin.loading == true )
        {
            return;
        }
        
        this.resetForm();
        
        this.applyFilter('no_scroll');
    },
    
    resetForm: function()
    {
        $('car_guide_makes').selectedIndex = -1;
        $('car_guide_price_min').selectedIndex = 0;
        $('car_guide_price_max').selectedIndex = 0;
        $('car_guide_year_from').selectedIndex = 0;
        $('car_guide_year_to').selectedIndex = 0;
    },
    
    disableFindReset: function()
    {
        $('filter_reset').setStyle(
        {
            cursor:'wait',
            textDecoration:'none'
        });
        
        $('filter_find').setStyle(
        {
            cursor:'wait',
            textDecoration:'none'
        });
    }
});

var GallerySearch = {

    fetching_models: false,
    
    search: function(page_num)
    {
        if ( GallerySearch.fetching_models )
        {
            return;
        }
        
        GallerySearch.fetching_models = true;
        
        $('operation_input').writeAttribute(
        {
            value:'search'
        });
        
        if ( page_num != undefined || page_num >= 0 )
        {
            $('page_num_input').writeAttribute(
            {
                value:page_num
            });
        }
        else
        {
            $('page_num_input').writeAttribute(
            {
                value:0
            });
        }
        
        new Effect.ScrollTo('to_scroll_to', { duration:0.5 });
        
        $('gallery_search_form').request(
        {
            onCreate: function()
            {
                $('gallery_listing_container').update('');
                
                $('gallery_listing_container').setStyle(
                {
                    display:'block',
                    height:'400px',
                    background:'url(/images/rsp/car/loading.gif) no-repeat center center'
                });
                
                $('gallery_listing_container_default').setStyle(
                {
                    display:'none'
                });
            },
            
            onComplete: function(transport)
            {
                $('gallery_listing_container').update(transport.responseText);
                
                GallerySearch.fetching_models = false;
                
                $('gallery_listing_container').writeAttribute(
                {
                    style:''
                });
            }
        });
    },
    
    resetForm: function()
    {
        $('gallery_search_form').reset();
        //GallerySearch.updateModels();
        
        $('gallery_listing_container').update('');
        
        $('gallery_listing_container').setStyle(
        {
            display:'none'
        });
        
        $('gallery_listing_container_default').setStyle(
        {
            display:'block'
        });
    },
    
    updateModels: function()
    {
        if ( GallerySearch.fetching_models )
        {
            return;
        }
        
        GallerySearch.fetching_models = true;
        
        $('operation_input').writeAttribute(
        {
            value:'update_models'
        });
        
        $('gallery_search_container').setStyle(
        {
            cursor:'wait'
        });
        
        $('gallery_car_models').setStyle(
        {
            color:'#CCCCCC',
            cursor:'wait'
        });
        
        $('gallery_car_makes').setStyle(
        {
            color:'#CCCCCC',
            cursor:'wait'
        });
        
        $('gallery_car_makes').readOnly = true;
        $('gallery_car_models').readOnly = true;
        
        $('gallery_search_form').request(
        {
            onCreate: function()
            {
                $('gallery_car_makes').disabled = true;
                $('gallery_car_models').disabled = true;
            },
            
            onComplete: function(transport)
            {
                $('gallery_car_models').update(transport.responseText);
                
                $('gallery_search_container').writeAttribute(
                {
                    style:''
                });
                
                $('gallery_car_models').writeAttribute(
                {
                    style:''
                });
                
                $('gallery_car_makes').writeAttribute(
                {
                    style:''
                });
                
                $('gallery_car_makes').readOnly = false;
                $('gallery_car_makes').disabled = false;
                
                $('gallery_car_models').readOnly = false;
                $('gallery_car_models').disabled = false;
                
                $('gallery_car_models').selectedIndex = -1;
                
                GallerySearch.fetching_models = false;
            }
        });
    }
}

BookTestDrive = {
    showForm: function(car_name)
    {
        var leftPos = (window.screen.width / 2) - 350;
        var topPos = (window.screen.height / 2) - 350;
        var uri = "http://forms.carmag.co.za/view.php?id=1&car_name=" + escape(car_name);
        
        window.open(uri, '', 'width=700,resizable=1,scrollbars=1,height=700,left=' + leftPos + ',top=' + topPos);
    }
}

PopupForm = {
    showForm: function(form_id)
    {
        var leftPos = (window.screen.width / 2) - 350;
        var topPos = (window.screen.height / 2) - 350;
        var uri = "http://forms.carmag.co.za/view.php?id=" + form_id;
        
        window.open(uri, '', 'width=700,resizable=1,scrollbars=1,height=700,left=' + leftPos + ',top=' + topPos);
    }
}

Car.RoadTestFilter = Class.create(
{
    filtering: false,
    
    filterRoadTests: function()
    {
        if ( this.filtering || $F('car_guide_makes') == null || $F('car_guide_makes') == undefined || $F('car_guide_makes') == '' )
        {
            return;
        }
        
        $('page_num').writeAttribute(
        {
            value: 0
        });
        
        new Effect.ScrollTo('filter_scroll_to', { duration:0.5 });
        
        $('road_test_filter_form').request(
        {
            onCreate: function()
            {
                this.filtering = true;
                
                if ( $('road_test_listing_container').style.display != 'none' )
                {
                    var loading_height = $('road_test_listing_container').getHeight();
                }
                else
                {
                    var loading_height = $('road_test_filter_container').getHeight();
                }
        
                $('loading_div').setStyle(
                {
                    height:loading_height + 'px'
                });
                
                Effect.Appear($('loading_div'), { duration: 0.5 });
                
                $('road_test_filter_container').addClassName('loading');
                $('road_test_listing_container').addClassName('loading');
            },
            
            onComplete: function(transport)
            {
                this.filtering = false;
                
                $('road_test_filter_container').update(transport.responseText);
                Effect.Fade($('loading_div'), { duration: 0.5 });
                
                $('road_test_listing_container').setStyle(
                {
                    display:'none'
                });
                
                $('road_test_filter_container').setStyle(
                {
                    display:'block'
                });
                
                $('road_test_filter_container').removeClassName('loading');
                $('road_test_listing_container').removeClassName('loading');
            }
        });
    },
    
    resetFilter: function()
    {
        if ( this.filtering )
        {
            return;
        }
        
        $('road_test_filter_form').reset();
        
        $('car_guide_makes').selectedIndex = -1;
        
        $('road_test_filter_container').setStyle(
        {
            display:'none'
        });
        
        $('road_test_listing_container').setStyle(
        {
            display:'block'
        });
    },
    
    gotoPage: function(page_num)
    {
        if ( this.filtering )
        {
            return;
        }
        
        $('page_num').writeAttribute(
        {
            value: page_num
        });
        
        $('road_test_filter_form').request(
        {
            onCreate: function()
            {
                this.filtering = true;
                
                if ( $('road_test_listing_container').style.display != 'none' )
                {
                    var loading_height = $('road_test_listing_container').getHeight();
                }
                else
                {
                    var loading_height = $('road_test_filter_container').getHeight();
                }
        
                $('loading_div').setStyle(
                {
                    height:loading_height + 'px'
                });
                
                Effect.Appear($('loading_div'), { duration: 0.5 });
                
                $('road_test_filter_container').addClassName('loading');
                $('road_test_listing_container').addClassName('loading');
            },
            
            onComplete: function(transport)
            {
                this.filtering = false;
                
                $('road_test_filter_container').update(transport.responseText);
                Effect.Fade($('loading_div'), { duration: 0.5 });
                
                $('road_test_listing_container').setStyle(
                {
                    display:'none'
                });
                
                $('road_test_filter_container').setStyle(
                {
                    display:'block'
                });
                
                $('road_test_filter_container').removeClassName('loading');
                $('road_test_listing_container').removeClassName('loading');
            }
        });
    }
});