/**
 * accessories javascript
 **/
var acc_timer=false, bak_timer=false, bk_id=false;
function send_accessories_form(form_ele, form_vals){
  var form_destination = jQuery(form_ele).attr('data-postto')+'.ajax',
      list_area = jQuery(form_ele).attr('data-replace'),
      load_area = jQuery(form_ele).attr('data-loading')
      ;
  if(typeof(form_vals) == "undefined") var form_vals = jQuery(form_ele).serialize();
  
 	jQuery(list_area).fadeTo('fast', 0.2);
 	jQuery(load_area).addClass('loading');

  jQuery.ajax({
		type:"post",
		data:form_vals,
		url:form_destination,
		success: function(response){
			jQuery(list_area).replaceWith(response);
			var clearup = function(){jQuery(load_area).removeClass('loading');};
			setTimeout(clearup, 800);
			accessories_init();
		}
	});

}

function accessories_form(){
  jQuery('.accessories_form').unbind("submit").bind("submit", function(){
    clearTimeout(acc_timer);
    send_accessories_form(this);
    return false;
  });
  jQuery(".accessories_form .filters input.checkbox_field").unbind("click").bind("click",function(){
    jQuery('input.page,input.for_list').val("");
    var obj = jQuery(this).parents('form'), send_form_func = function(){send_accessories_form(obj);};
    clearTimeout(acc_timer);
    acc_timer = setTimeout(send_form_func, 1000);
  });
  jQuery(".accessories_form .pagination a").unbind("click").bind("click",function(){
    jQuery('input.page').val(jQuery(this).attr('rel'));
    jQuery('input.for_list').val('');
    jQuery('.accessories_form').trigger("submit");
    return false;
  });
}

function accessories_tabs(){
  jQuery('.vehicle_tabs li, .vehicle_tabs li.first_tab').unbind("click").bind("click", function(){
    jQuery(this).addClass('current').siblings().removeClass('current');    
    if(jQuery(this).hasClass('first_tab')){
      jQuery('input.models,input.for_list,input.page').val("");
      jQuery('.accessories_form').trigger("submit");
      return true;
    }else{
      jQuery('input.for_list').val('');
      jQuery('input.models').val(jQuery(this).children('a').attr('data-model'));
      jQuery('.accessories_form').trigger("submit");
      return false;
    }
  });
}

function accessories_basket(){
  jQuery('.add_to_list').unbind("click").bind("click",function(){
    jQuery('input.for_list').val(jQuery(this).attr('rel'));
    jQuery('.accessories_form').trigger("submit");
    return false;
  });
  jQuery('input.for_list').val('');
  jQuery('.user_messages, .user_errors').fadeOut(9000);
}

function accessories_lightbox(){}


function accessories_totals(){
  jQuery.ajax({
    url:"/accessories/_totals.ajax",
		data:{bk:bk_id},
		type: 'post',
    success:function(res){
      jQuery('#list_totals').replaceWith(res);
    }
  });
}

function accessories_quantity_disable(){
  jQuery('.quantity_field').addClass('disabled').attr('disabled',true);
}

function accessories_quantity_update(){
  jQuery('.plus, .minus').unbind("click").bind("click",function(){
    var ldata = "for_list="+jQuery(this).attr('data-item')+"&quantity="+jQuery(this).attr('data-q')+'&quiet=1', 
        bk_func = function(){send_accessories_form(jQuery('.accessories_basket_form'),ldata);}
        ;
        clearTimeout(bak_timer);
        if(jQuery(this).hasClass('minus')){
          if(jQuery(this).attr('data-c') == "1"){
            if(confirm("Are you sure? This will remove the item from your list")) bak_timer = setTimeout(bk_func, 300);
          }else bak_timer = setTimeout(bk_func, 300);
        }else bak_timer = setTimeout(bk_func, 300);
        
    return false;
  });
}
function accessories_remove_from_basket(){
  jQuery('a.remove').unbind("click").bind("click",function(){
    var ldata = "remove="+jQuery(this).attr('data-item'),
        bk_func = function(){send_accessories_form(jQuery('.accessories_basket_form'),ldata);}
        ;
        clearTimeout(bak_timer);
        if(confirm("Are you sure? This will remove the item from your list")) bak_timer = setTimeout(bk_func, 300);        
    return false;
  });
}

function accessories_init(){
  accessories_form();
  accessories_basket();
  accessories_lightbox();
  if(jQuery('#list_totals').length) accessories_totals();
  accessories_quantity_disable();
  accessories_quantity_update();
  accessories_remove_from_basket();
}

jQuery(document).ready(function(){
  accessories_init();
  accessories_tabs();
});
jQuery(function ($) {
    var wax = {
        update: function (selector, content, position) {
            var element = $('#' + selector);
            if (position) {
                switch (position) {
                    case "before":
                        element.before(content); 
                        break;
                    case "after":
                        element.after(content); 
                        break;
                    case "top":
                        element.prepend(content); 
                        break;
                    case "bottom":
                        element.append(content); 
                        break;
                    default:
                        element.append(content); 
                        break;
                }
            } else {
                element.html(content); 
            }
        },
        remote: function (e) {
            var el          = $(this),
                data        = [],
                condition   = el.attr('data-condition') ? eval(el.attr('data-condition')) : true,
                method      = el.attr('method') || el.attr('data-method') || 'GET',
                url         = el.attr('action') || el.attr('data-url') || '#',
                async       = el.attr('data-remote-type') === 'synchronous' ? false : true;

            if (el.attr('data-submit')) {
                data = $('#' + el.attr('data-submit')).serializeArray();
            } else if (el.attr('data-with')) {

                if (e && e.target.tagName.toUpperCase() == 'SCRIPT' && el.attr('data-observed') !== null) {
                    var observed = $('#' + el.attr('data-observed'));
                    if(observed[0].tagName.toUpperCase() === 'FORM'){
                        data = el.attr('data-with') + '=' + observed.serialize();
                    } else if(observed[0].tagName.toUpperCase() === 'INPUT' && observed.attr('type').toUpperCase() !== "BUTTON" && observed.attr('type').toUpperCase() !== "SUBMIT") {
                        data = el.attr('data-with') + '=' + observed.val();
                    }
                } else {
                    // TODO: remove eval when deprecated
                    data = eval(el.attr('data-with'));
                }
            } else if (e && e.target.tagName.toUpperCase() == 'FORM') {
                data = el.serializeArray();
            } else if (e && e.target.tagName.toUpperCase() == 'INPUT') {
                data = el.closest('form').serializeArray();
            }

            if (condition) {
                el.trigger('wax:before');
                $.ajax({
                    async: async,
                    url: url,
                    data: data,
                    type: method.toUpperCase(),
                    beforeSend: function (xhr) {
                        xhr.setRequestHeader("Accept", "text/javascript");
                        el.trigger('wax:after', xhr);
                        el.trigger('wax:loading', xhr);
                    },
                    success: function (data, status, xhr) {
                        el.trigger('wax:success', [data, status, xhr]);
                        if (el.attr('data-update-success')) {
                           wax.update(el.attr('data-update-success'), data, el.attr('data-update-position')); 
                        }
                    },
                    complete: function (xhr) {
                        // enable disabled_with buttons
                        if (el[0].tagName.toUpperCase() == 'FORM') {
                          el.children('input[type="button"][data-enable-with],input[type="submit"][data-enable-with]').each(function(i, button){
                            button = $(button);
                            button.attr('value', button.attr('data-enable-with'));
                            button.removeAttr('data-enable-with');
                            button.removeAttr('disabled');
                              
                          });
                        } else {
                          el.attr('value', el.attr('data-enable-with'));
                          el.removeAttr('data-enable-with');
                          el.removeAttr('disabled');
                        }

                        el.trigger('wax:complete', xhr);
                        el.trigger('wax:loaded', xhr);
                    },
                    error: function (xhr, status, error) {
                        el.trigger('wax:failure', [xhr, status, error]);
                        if (el.attr('data-update-failure')) {
                           wax.update(el.attr('data-update-failure'), xhr.responseText, el.attr('data-update-position')); 
                        }
                    }
                });
            }
            e.preventDefault();
        }
    };

    /**
     * observe_form, and observe_field
     */
    $('script[data-observe="true"]').each(function (index, e) {
        var el          = $(e);
            observed    = $('#' + $(e).attr('data-observed'));
            frequency   = el.attr('data-frequency') ? el.attr('data-frequency') : 10;
            value       = observed[0].tagName.toUpperCase() === 'FORM' ? observed.serialize() : observed.val();

        var observe = function (observed, frequency, value, e) {
            return function () {
                var event       = new jQuery.Event('periodical'),
                    newValue    = observed[0].tagName.toUpperCase() === 'FORM' ? observed.serialize() : observed.val();
                event.target = e;

                if(value !== newValue) {
                    value = newValue;
                    $(e).trigger('wax:observe');
                    wax.remote.call(el, event);
                }
            };
        }(observed, frequency, value, e);

        setInterval(observe, frequency * 1000);
    });

    /**
     * confirm
     * make sure this event is first!
     */
    $('a[data-confirm],input[type="submit"][data-confirm],input[type="button"][data-confirm]').live('click', function(e){
        var el = $(this);

        if(!confirm(el.attr('data-confirm'))){
          return false;
        }
    });
    
    /**
     * Link to JQuery Event
     */
    $('a[data-event],input[type="submit"][data-event],input[type="button"][data-event]').live('click', function(e){
        var el = $(this);
        el.trigger(el.attr('data-event'), el);
        return false;
    });

    /**
     * periodically_call_remote
     */
    $('script[data-periodical="true"]').each(function (index, e) {
        var el          = $(e),
            frequency   = el.attr('data-frequency') ? el.attr('data-frequency') : 10;
            
        setInterval(function () {
            return function () {
                var event = new jQuery.Event('periodical');
                event.target = e;

                wax.remote.call(el, event);
            };
        }(e, el), frequency * 1000);
    });

    /**
     * disable_with
     */
    $('input[type="button"][data-disable-with],input[type="submit"][data-disable-with]').live('click', function(e){
        var el = $(this);

        el.attr('data-enable-with', el.attr('value'));
        el.attr('disabled', 'disabled');
        el.attr('value', el.attr('data-disable-with'));
    });

    /**
     * remote_form_tag, and remote_form_for
     */
    $('form[data-remote="true"]').live('submit', wax.remote);

    /**
     * link_to_remote, button_to_remote, and submit_to_remote
     */
    $('a[data-remote="true"],input[data-remote="true"],input[data-remote-submit="true"]').live('click', wax.remote);
   
    /*
     * popup
     */
    $('a[data-popup],input[type="button"][data-popup]').live('click', function(e){
        var el  = $(this),
            url = el.attr('data-url') || el.attr('href');

        e.preventDefault();

        if(el.attr('data-popup') === "true"){
          window.open(url);
        } else {
          window.open(url, el.attr('data-popup'));
        }
    });

   
});
/**** Add application wide javascripts below this point  ******/


/****** Generic Initialisation Commands ***********/
$(document).ready(function() {
  $(".model_summary .tabs, .vehicle_tabs:not(.accessories_vehicles_navigation) .tabs").tabs(".panes > div",{tabs:"li a",onClick:function(){$(document).trigger("tabshow");}});
  $(".car_comparison_tabs").tabs(".car_comparison_tab_content");
  
  
  $(".hintform input[type='text'], .hintform input[type='password']").hint({populate_from:"label", remove_labels:true});
  $(".hintform textarea").hint({populate_from:"label", remove_labels:true});
  $('form.validate').validate();
  
  $(document).bind("open_contact", function(el){
    _gaq.push(['_trackPageview', "/leads/"+$(el.target).attr("data-name")]);
    $("body").removeClass("brochure testdrive");
    $(".contact_options input").removeAttr("checked");
    $('html, body').animate({scrollTop:0}, 'slow');
    if($("#contact_request").is(":visible")) {$("#contact_request").slideUp("slow","easeInOutQuad"); return false;}
    $("#contact_request").slideDown({duration:"slow",easing:"easeInOutQuad",complete:function(){
      //focus search then form to force IE to redraw absolutes
      $("#site_search").focus();
      $("#contact_request_title").focus();
    }});
    $("body").addClass($(el.target).attr("data-name"));
    $(".contact_options #contact_type_"+$(el.target).attr("data-name")).attr("checked", true);
    if(auto_open_test_drive) $("#contact_type_testdrive").attr("checked", true);
    if(auto_open_brochure) $("#contact_type_brochure").attr("checked", true);
    $.get("/track_contact_request",function(msg){$("body").append(msg);});
    return false;
  });
  if(auto_open_test_drive || auto_open_brochure){$(document).trigger("open_contact");}
  
  $(".contact_close").click(function(){
    $.cookie('auto_ab_cancel', "on", { expires: 0, path: '/'});
    $(document).trigger("open_contact");
  });
  
});

/****** Homepage Setup ***********/
$(document).ready(function() {
  
  $(".virgin_tabs a").click(function(){
    $(document).trigger("tabshow");
    $(".virgin_tabs a").removeClass("current");
    $(this).addClass("current");
  });
  
  $(".awd_trigger").click(function(){
    if($('#awd').is(':hidden')){
      $(".virgin .virgin_feature:visible").hide();
      $("body").removeClass("virgin_boxer virgin_safety virgin_awd");
      $("body").addClass("virgin_awd");
      $("#awd").show();
    }
    return false;
  });
  $(".about_trigger").click(function(){
    if($('#about').is(':hidden')){
      $(".virgin .virgin_feature:visible").hide();
      $("body").removeClass("virgin_boxer virgin_safety virgin_awd");
      $("#about").show();
    }
    return false;
  });
  $(".boxer_trigger").click(function(){
    if($('#boxer').is(':hidden')){
      $(".virgin .virgin_feature:visible").hide();
      $("body").removeClass("virgin_boxer virgin_safety virgin_awd");
      $("body").addClass("virgin_boxer");
      $("#boxer").show();
    }
    return false;
  });
  $(".safety_trigger").click(function(){
    if($('#safety').is(':hidden')){
      $(".virgin .virgin_feature:visible").hide();
      $("body").removeClass("virgin_boxer virgin_safety virgin_awd");
      $("body").addClass("virgin_safety");
      $("#safety").show();
    }
    return false;
  });
  
  $(document).bind("about_cue", function(){
    $(".about_trigger").click();
  });
  $(document).bind("awd_cue", function(){
    $(".awd_trigger").click();
  });
  $(document).bind("boxer_cue", function(){
    $(".boxer_trigger").click();
  });
  $(document).bind("safety_cue", function(){
    $(".safety_trigger").click();
  });
  
  $(".about_trigger").click(function(){
    $('#mainflash').videocontrol('setPosition', 0);
  });
  $(".awd_trigger").click(function(){
    $('#mainflash').videocontrol('setPosition', 32827);
  });
  $(".boxer_trigger").click(function(){
    $('#mainflash').videocontrol('setPosition', 65000);
  });
  $(".safety_trigger").click(function(){
    $('#mainflash').videocontrol('setPosition', 102800);
  });
  $(".close_trigger").click(function(){
     $("#virgin_close").click();
  });

  $(document).bind("finish_cue", function(){
    $("#virgin_close").click();
  });
  
  
  $("#virgin_close").live("click",function(){$(".virgin_tab_block").fadeOut(function(){
    $("body").removeClass("virgin");
    $("body").removeClass("takeover");
    $("body").removeClass("launch_splash");
    $("#offer_holder").contentscroller.start();
    $("#mainflash").videocontrol("setPosition",0);
    $("#mainflash").videocontrol("stop");
    $("#range_block").show();
  });});
  
  $("#open_about, #open_about_link").click(function(){$("#range_block").fadeOut(function(){
    $("body").addClass("virgin");
    $("body").removeClass("launch_splash");
    $("#offer_holder").contentscroller.stop();
    $(".virgin_tab_block").fadeIn();
  });});
  


  $(".news_feature .tabs").tabs(".news_feature .panes > div",{tabs:"li", effect:"fade", fadeInSpeed:2000, rotate:true, api:true});
	$("#offer_holder").contentscroller({pages:'.scroll_page', controller:'#scrolling_features_navigation', 'timed':10000, 'trans_speed':1100});
	
  var news_tabs = $(".news_feature .tabs").eq(0).tabs();
  //setInterval(function(){news_tabs.next();}, 11000);
  //setInterval(function(){scrollingnews.next();}, 1000);
  
});


/**** Site Search Dropdown ********/
$(document).ready(function() {
  $("#site_search_form input[type='text']").hint({populate_from:"default"});
  
  $('script[data-observed="site_search_f"]').bind("wax:complete", function(){
    if($("#site_search").val().length > 2) $(document).trigger("site:searched");
  });
  $(document).bind("site:searched", function(){
    $(document).trigger("dropdown");
    $("#site_search_form").addClass("search_active");
    $("#site_search_results").slideDown("slow");
    $("#site_search_form").mouseleave(function(){
      setTimeout(function(){
        $("#site_search_results").slideUp("fast");
        $("#site_search_form").removeClass("search_active");
      },500);
    });
  });
  
  
});





/******** Address Lookup Functions *********/
$(document).ready(function() {
  $(".lookup_address_button").live("click",function(){
    var parent = $(this).parents("form");
    $(this).addClass("active");
    $.get("/get_address",{postcode:parent.find("[name=contact_request[postcode]]").val(),filter:parent.find("[name=house]").val()}, function(response){
      var result = eval(response);
      if(typeof result != "undefined" && typeof result[0] != "undefined") {
        parent.find(".full_address_container input[type=text]").val("");
        var result = result[0];
        if(typeof result.line1=="string") parent.find(".full_address_container #contact_request_address_line_1").val(result.line1);
        if(typeof result.line2=="string") parent.find(".full_address_container #contact_request_address_line_2").val(result.line2);
        if(typeof result.city=="string") parent.find(".full_address_container #contact_request_town").val(result.city);
        if(typeof result.postcode=="string") parent.find(".full_address_container #contact_request_postcode").val(result.postcode);
      } else $("#man_entry").show();
      parent.find(".full_address_container").show();
      parent.find(".short_address_container").hide();
    });
    return false;
  });
  $(".reset_address_button").live("click", function(){
    var parent = $(this).parents("form");
    parent.find(".full_address_container").hide();
    parent.find(".short_address_container").show();
    $("#man_entry").hide();
    $(".lookup_address_button").removeClass("active");
    return false;
  });
  $(".contact_request form").submit(function(){
    if($(".contact_options input:checked").length < 1) {
      alert("You Must Select at least one of The Brochure or Test Drive Options");
      return false;
    }
    if($(".vehicle_choice input:checked").length < 1) {
      alert("You Must Select at least one Vehicle");
      return false;
    }
  });
});



/****** Video Stuff ***********/

$(document).ready( function() {
  $("#mainflash").video({
    "flv": "http://media.oneblackbear.com/subaru_intro.flv",
    "volume": 100,
    cuepoints: [
      {name:"awd_cue",position:32827},
      {name:"boxer_cue",position:65000},
      {name:"safety_cue",position:102800}
    ]
  });
  
});

/***** Social Network Loaders *******/
$(document).ready(function() {
	if($(".twitter_content_wrapper").length) {
  		$.get("twitter2", function(response){
			$(".twitter_content_wrapper").html(response);
			$(".twitter_content_wrapper").removeClass("loading");
			$(document).trigger("social_load");
		});  
	}
  
});

$(document).ready(function() {
	if($(".flickr_content_wrapper").length) {
  		$.get("flickr", function(response){
			$(".flickr_content_wrapper").html(response);
			$(".flickr_content_wrapper").removeClass("loading");
			$(document).trigger("social_load");
		});  
	}
  
});

$(document).ready(function() {
	if($(".youtube_content_wrapper").length) {
  		$.get("youtube", function(response){
			$(".youtube_content_wrapper").html(response);
			$(".youtube_content_wrapper").removeClass("loading");
			$(document).trigger("social_load");
		});  
	}
  
});


/****** Vehicle Subnav *********/
var timeouts= new Array;
$(document).ready(function() {
  $("#vehicle_nav li:not(.dropdown li)").hover(
    function(){
      $("#vehicle_nav li:not(.originally_active)").not($(this)).removeClass("active");
      clearTimeout(timeouts[$(this).attr("id")]);
      $(".dropdown").not($(this).find(".dropdown")).hide();
      $(this).addClass("active");
      $(this).find("ul.dropdown").show();
      el = $(this);
      el.find("li").hover(function(){
      $(this).siblings().removeClass("active");
      $(this).parent().find(".sub_nav_image img").attr("src",$(this).attr("data-image"));});
    },
    function(){
      var el = $(this);
      timeouts[el.attr("id")] = setTimeout(function(){
        if(!el.hasClass("originally_active")) el.removeClass("active");
        el.find("ul.dropdown").slideUp(50);
      },400);
    }
  );
});

/**** Keyboard navigation for dropdowns **********/
$(document).ready(function() {
  $(document).keydown(function(e) {
  	switch(e.keyCode) { 
  		case 38: navigate('up'); break;
  		case 40: navigate('down'); break;
  		case 13:
  			if(currentUrl != '' && $(".dropdown:visible").length > 0) {window.location = currentUrl;return false;}
  		break;
  	}
  });
});



function navigate(direction) {
	// Check if any of the menu items is selected
	if($(".dropdown:visible li.active").size() == 0) currentSelection = -1;
	
	if(direction == 'up' && currentSelection != -1) {
		if(currentSelection != 0) currentSelection--;
	} else if (direction == 'down') {
		if(currentSelection != $(".dropdown:visible li").size() -1) currentSelection++;
	}
	setSelected(currentSelection);
}

function setSelected(menuitem) {
	$(".dropdown:visible li").removeClass("active");
	$(".dropdown:visible li").eq(menuitem).addClass("active");
	currentUrl = $(".dropdown:visible li a").eq(menuitem).attr("href");
}

/**** car lineup flash **********/
jQuery(document).ready(function(){
  if(jQuery("#car-lineup").length){
  	var flashvars = {};
  	var params = {
  	  swliveconnect:"true",
  	  allowscriptaccess:"always",
  	  wmode:"transparent"
  	};
  	var attributes = {
  	  id:"car-lineup-flash"
  	};
  	swfobject.embedSWF("/flash/carlineup.swf", "car-lineup-alternate", "100%", "100%", "8.0.0", false, flashvars, params, attributes);
  
    // var flash_obj;
    //     var f_slow = setInterval(function(){
    //       flash_obj = jQuery("#car-lineup-flash object")[0];
    //       if(!flash_obj) flash_obj = jQuery("#car-lineup-flash")[0];
    //       if(flash_obj) clearInterval(f_slow);
    //     }, 50);

    jQuery("#car-lineup object").height(jQuery(window).height());
    jQuery(window).resize(function(){
      jQuery("#car-lineup object").height(jQuery(window).height());
    });
  }
});



/********** Print page *************/
$(document).ready(function(){
  $('#print_current_config').click(function(){
    window.print();
    return false;
  });
});

/********** Your Subaru *************/
$(document).bind("yoursubaru", function(){
  $.get("/your_subaru",function(response){
    $("#your_subaru").html(response);
    if($("#your_subaru").not(":visible")) $("#your_subaru").slideDown("slow","easeInOutQuad");
  });
  
});



/********** ROTATION for IMAGES **********************/

function theRotator() {
  $("p.rotator").each(function(){
    $(this).find("img").css({opacity: 0.0});
    $(this).find('img:first').css({opacity: 1.0});
  });
		
	//Call the rotator function to run the slideshow, 6000 = change to next image after 6 seconds
	setInterval('rotate()',5000);
	
}

function rotate() {	
  $("p.rotator").each(function(){
    //Get the first image
    var current = $(this).find("img.show")?  $(this).find("img.show") : $(this).find("img:first");

  	//Get next image, when it reaches the end, rotate it back to the first image
  	var next = ((current.next().length) ? ((current.next().hasClass('show')) ? $(this).find('img:first') :current.next()) : $(this).find('img:first'));
    
  	//Set the fade in effect for the next image, the show class has higher z-index
  	next.css({opacity: 0.0}).addClass('show').animate({opacity: 1.0}, 800);

  	//Hide the current image
  	current.animate({opacity: 0.0}, 800).removeClass('show');
    
  });
	
	
};

$(document).ready(function() {
  theRotator();
});

$(window).load(function(){
  if($("p.rotator").length >0) $(document).trigger("tabshow");
});

$(document).bind("tabshow",function(){
  $("p.rotator img").each(function(){
    if($(this).height()> $(this).parent().height()) $(this).parent().height($(this).height());
  });
});

/************ small offer flash *******/
jQuery(document).ready(function(){    
  if(jQuery("#small-offer-flash-alternate").length){
    var flashvars = {};
    var params = {
     swliveconnect:"true",
     allowscriptaccess:"always"
    };
    var attributes = {
     id:"small-offer-flash"
    };
    swfobject.embedSWF("/flash/water_homeflash.swf", "small-offer-flash-alternate", "637", "180", "8.0.0", false, flashvars, params, attributes);
  }
});

/************* logo ***********/
jQuery(document).ready(function(){
  if(jQuery("#logo").length) {
    jQuery("#logo a").append('<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="124" height="90" id="logo-shiny"><param name="movie" value="/flash/logo-shiny.swf" /><param name="wmode" value="transparent" /><!--[if !IE]>--><object type="application/x-shockwave-flash" data="/flash/logo-shiny.swf" width="124" height="90"><param name="wmode" value="transparent" /></object><!--<![endif]--></object>');
  }
});

/********* Nutshell overlays ********/
$(document).ready(function() {
  $(".nutshell_button").overlay({ 
    expose: '#333'
     
  });

  var jquery_tools_is_too_lame = $(".feedback_button").overlay({
		expose: '#333',
		api: true
	});
	if(open && jquery_tools_is_too_lame) jquery_tools_is_too_lame.load();
});

/********* Contact request integer check ********/
$(document).ready(function(){
  $('#callback_request_number').keypress(function(){
    if($(this).isNumber()){
      alert('Numbers only please');
    }
  });
  
  
  /***** HIDES THE SECURITY TEST FIELD********/
  $(".security_test").hide();
  
	jQuery('table.specs').addClass('clearfix');

  $.fn.isNumber = function() {
    return isNaN($(this).text());
  };
});

/** Send to yourself overlay **/
$(document).ready(function(){
  $('#send_car_self').overlay({
    expose: '#333'
  });
});

$(document).ready(function(){
  $('form.send_to_self_form').validate();
});

/************* Dealer Cookie ***********/
function save_cookie(dealer_data) {
  $.cookie('selected_dealer', dealer_data, {expires: 1});
  alert('Saved as Your Dealer');
  return false;
}
(function($) {
	$.fn.contentscroller = function(params){
    var jQ = jQuery;
		var params = $.extend({}, $.fn.contentscroller.defaults, params);

    return this.each(function(){
			var container=this;			
			var controller_length = jQ(params['controller']).length;
			var controller_string="";
			var page_width = jQ(this).width();
			var max_height=0;
			$.fn.contentscroller.controller = params['controller'];
			jQ(this).css('overflow', 'hidden');
			controller_string = '<ul id="'+params['controller'].replace('#','')+'"><li class="previous"><a href="#" class="previous_button" rel="previous" name="scroll_item_1">&laquo;</a></li>';
			var previous_h = 0;
				
			jQ(this).find(params['pages']).each(function(){
				jQ(this).css('position', 'relative');
				jQ(this).css('left', (($.fn.contentscroller.page_count)*page_width) +'px');
				if(previous_h > 0){
					jQ(this).css('top', '-'+previous_h +'px');
				}
				jQ(this).addClass('scroll_item_'+($.fn.contentscroller.page_count+1));
				controller_string += '<li class="page"><a href="#" name="scroll_item_'+($.fn.contentscroller.page_count+1)+'" class="page" rel="page">'+($.fn.contentscroller.page_count+1)+'</a></li>';
				$.fn.contentscroller.page_count ++;
				previous_h += jQ(this).outerHeight();
				if(jQ(this).outerHeight() > max_height) {max_height = jQ(this).outerHeight();}
			});
			jQ(this).css('height', (max_height)+'px');
			controller_string += '<li class="next"><a href="#" class="next_button" rel="next" name="scroll_item_2">&raquo;</a></li></ul>';
			if(!jQ(params['controller']).length){ 
				jQ(this).before(controller_string);
			}
			if($.fn.contentscroller.page_count == 0){
				jQ(params['controller']).css('display', 'none');
				jQ(params['controller']+' .next').addClass('disabled');
			}else{
				jQ(params['controller']+' .previous').addClass('disabled');
			}		
			
			jQ(params['controller'] + ' a').click(function(e){
			  if($.fn.contentscroller.timed_interval){
  				$.fn.contentscroller.stop();
  				$.fn.contentscroller.start(params['timed']);
			  }
				if(params && typeof(params['before']) != "undefined"){ eval(params['before']);}
												
				var new_page = parseInt(jQ(this).attr('name').replace('scroll_item_',''));
				if(new_page > 0){
					for(i=1; i<=$.fn.contentscroller.page_count; i++){
						if(i<new_page){
							jQ(container).find('.scroll_item_'+i).animate({'left':"-"+((new_page - i)*page_width) +'px'},params['trans_speed']);
						}else if(i == new_page && params['after']){
							jQ(container).find('.scroll_item_'+new_page).animate({'left':'0'},params['trans_speed'],function(e){eval(params['after']);});
						}else if(i == new_page){
							jQ(container).find('.scroll_item_'+new_page).animate({'left':'0'},params['trans_speed']);
						}else{
							jQ(container).find('.scroll_item_'+i).animate({'left':((new_page + i)*page_width) +'px'},params['trans_speed']);
						}
					}		
				}
				jQ(params['controller'] + ' li').removeClass('disabled current');
				if(new_page+1 <= $.fn.contentscroller.page_count){var next_a = new_page+1;}
				else{
					var next_a = $.fn.contentscroller.page_count;
					jQ(params['controller'] + ' li.next').addClass('disabled');
				}
				if(new_page>1){var prev_a = new_page-1;}
				else{
					var prev_a = 1;
					jQ(params['controller'] + ' li.previous').addClass('disabled');
				}
				jQ(params['controller'] + ' li.previous a').attr('name', prev_a);
				jQ(params['controller'] + ' li.next a').attr('name', next_a);
				jQ(params['controller'] + ' a[name=scroll_item_'+new_page+']').closest('li').addClass('current');
				$.fn.contentscroller.current_page = new_page;
				return false;				
			});			
    	
			if(params['timed']){
				$.fn.contentscroller.start(params['timed']);
			}
		});
  }
  $.fn.contentscroller.stop = function(){
    clearInterval($.fn.contentscroller.timed_interval);
    $.fn.contentscroller.timed_interval = false;
  };
  $.fn.contentscroller.start = function(time){
		$.fn.contentscroller.timed_interval = setInterval($.fn.contentscroller.timerfunc, time);
  };
	$.fn.contentscroller.timerfunc = function(){
		var nxt = ($.fn.contentscroller.current_page < $.fn.contentscroller.page_count)? $.fn.contentscroller.current_page +1 : 1;
		$($.fn.contentscroller.controller + ' a[name=scroll_item_'+nxt+']').trigger('click');
	};	
	$.fn.contentscroller.current_page = 1;
	$.fn.contentscroller.page_count = 0;
	$.fn.contentscroller.timed_interval = false;
	$.fn.contentscroller.controller = false;
	$.fn.contentscroller.defaults = {pages: '.page', controller: '#controls', trans_speed: 'slow', before:false, after:false, timed:false};		
})(jQuery);
$(document).ready(function() {

  var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");  
  $.getScript(gaJsHost + "google-analytics.com/ga.js", function(){  
    try {  
      var pageTracker = _gat._getTracker("UA-4806291-3");  
      pageTracker._trackPageview();  
      } catch(err) {}  

      var filetypes = /\.(zip|exe|pdf|doc*|xls*|ppt*|mp3)$/i;


      $('a').each(function(){  
        var href = $(this).attr('href');  

        if ((href.match(/^https?\:/i)) && (!href.match(document.domain))){  
          $(this).click(function() {  
            var extLink = href.replace(/^https?\:\/\//i, '');  
            pageTracker._trackEvent('External', 'Click', extLink);  
          });  
        } else if(href.match(/^mailto\:/i)){  
          $(this).click(function() {  
            var mailLink = href.replace(/^mailto\:/i, '');  
            pageTracker._trackEvent('Email', 'Click', mailLink);  
          });  
        } else if (href.match(filetypes)){  
          $(this).click(function() {  
            var extension = (/[.]/.exec(href)) ? /[^.]+$/.exec(href) : undefined;  
            var filePath = href.replace(/^https?\:\/\/(www.)mydomain\.com\//i, '');  
            pageTracker._trackEvent('Download', 'Click - ' + extension, filePath);  
          });  
        }  
      });

  });


});

jQuery.cookie=function(name,value,options){if(typeof value!='undefined'){options=options||{};if(value===null){value='';options.expires=-1;}
var expires='';if(options.expires&&(typeof options.expires=='number'||options.expires.toUTCString)){var date;if(typeof options.expires=='number'){date=new Date();date.setTime(date.getTime()+(options.expires*24*60*60*1000));}else{date=options.expires;}
expires='; expires='+date.toUTCString();}
var path=options.path?'; path='+(options.path):'';var domain=options.domain?'; domain='+(options.domain):'';var secure=options.secure?'; secure':'';document.cookie=[name,'=',encodeURIComponent(value),expires,path,domain,secure].join('');}else{var cookieValue=null;if(document.cookie&&document.cookie!=''){var cookies=document.cookie.split(';');for(var i=0;i<cookies.length;i++){var cookie=jQuery.trim(cookies[i]);if(cookie.substring(0,name.length+1)==(name+'=')){cookieValue=decodeURIComponent(cookie.substring(name.length+1));break;}}}
return cookieValue;}};

jQuery.easing['jswing']=jQuery.easing['swing'];jQuery.extend(jQuery.easing,{def:'easeOutQuad',swing:function(x,t,b,c,d){return jQuery.easing[jQuery.easing.def](x,t,b,c,d);},easeInQuad:function(x,t,b,c,d){return c*(t/=d)*t+b;},easeOutQuad:function(x,t,b,c,d){return-c*(t/=d)*(t-2)+b;},easeInOutQuad:function(x,t,b,c,d){if((t/=d/2)<1)return c/2*t*t+b;return-c/2*((--t)*(t-2)-1)+b;},easeInCubic:function(x,t,b,c,d){return c*(t/=d)*t*t+b;},easeOutCubic:function(x,t,b,c,d){return c*((t=t/d-1)*t*t+1)+b;},easeInOutCubic:function(x,t,b,c,d){if((t/=d/2)<1)return c/2*t*t*t+b;return c/2*((t-=2)*t*t+2)+b;},easeInQuart:function(x,t,b,c,d){return c*(t/=d)*t*t*t+b;},easeOutQuart:function(x,t,b,c,d){return-c*((t=t/d-1)*t*t*t-1)+b;},easeInOutQuart:function(x,t,b,c,d){if((t/=d/2)<1)return c/2*t*t*t*t+b;return-c/2*((t-=2)*t*t*t-2)+b;},easeInQuint:function(x,t,b,c,d){return c*(t/=d)*t*t*t*t+b;},easeOutQuint:function(x,t,b,c,d){return c*((t=t/d-1)*t*t*t*t+1)+b;},easeInOutQuint:function(x,t,b,c,d){if((t/=d/2)<1)return c/2*t*t*t*t*t+b;return c/2*((t-=2)*t*t*t*t+2)+b;},easeInSine:function(x,t,b,c,d){return-c*Math.cos(t/d*(Math.PI/2))+c+b;},easeOutSine:function(x,t,b,c,d){return c*Math.sin(t/d*(Math.PI/2))+b;},easeInOutSine:function(x,t,b,c,d){return-c/2*(Math.cos(Math.PI*t/d)-1)+b;},easeInExpo:function(x,t,b,c,d){return(t==0)?b:c*Math.pow(2,10*(t/d-1))+b;},easeOutExpo:function(x,t,b,c,d){return(t==d)?b+c:c*(-Math.pow(2,-10*t/d)+1)+b;},easeInOutExpo:function(x,t,b,c,d){if(t==0)return b;if(t==d)return b+c;if((t/=d/2)<1)return c/2*Math.pow(2,10*(t-1))+b;return c/2*(-Math.pow(2,-10*--t)+2)+b;},easeInCirc:function(x,t,b,c,d){return-c*(Math.sqrt(1-(t/=d)*t)-1)+b;},easeOutCirc:function(x,t,b,c,d){return c*Math.sqrt(1-(t=t/d-1)*t)+b;},easeInOutCirc:function(x,t,b,c,d){if((t/=d/2)<1)return-c/2*(Math.sqrt(1-t*t)-1)+b;return c/2*(Math.sqrt(1-(t-=2)*t)+1)+b;},easeInElastic:function(x,t,b,c,d){var s=1.70158;var p=0;var a=c;if(t==0)return b;if((t/=d)==1)return b+c;if(!p)p=d*.3;if(a<Math.abs(c)){a=c;var s=p/4;}
else var s=p/(2*Math.PI)*Math.asin(c/a);return-(a*Math.pow(2,10*(t-=1))*Math.sin((t*d-s)*(2*Math.PI)/p))+b;},easeOutElastic:function(x,t,b,c,d){var s=1.70158;var p=0;var a=c;if(t==0)return b;if((t/=d)==1)return b+c;if(!p)p=d*.3;if(a<Math.abs(c)){a=c;var s=p/4;}
else var s=p/(2*Math.PI)*Math.asin(c/a);return a*Math.pow(2,-10*t)*Math.sin((t*d-s)*(2*Math.PI)/p)+c+b;},easeInOutElastic:function(x,t,b,c,d){var s=1.70158;var p=0;var a=c;if(t==0)return b;if((t/=d/2)==2)return b+c;if(!p)p=d*(.3*1.5);if(a<Math.abs(c)){a=c;var s=p/4;}
else var s=p/(2*Math.PI)*Math.asin(c/a);if(t<1)return-.5*(a*Math.pow(2,10*(t-=1))*Math.sin((t*d-s)*(2*Math.PI)/p))+b;return a*Math.pow(2,-10*(t-=1))*Math.sin((t*d-s)*(2*Math.PI)/p)*.5+c+b;},easeInBack:function(x,t,b,c,d,s){if(s==undefined)s=1.70158;return c*(t/=d)*t*((s+1)*t-s)+b;},easeOutBack:function(x,t,b,c,d,s){if(s==undefined)s=1.70158;return c*((t=t/d-1)*t*((s+1)*t+s)+1)+b;},easeInOutBack:function(x,t,b,c,d,s){if(s==undefined)s=1.70158;if((t/=d/2)<1)return c/2*(t*t*(((s*=(1.525))+1)*t-s))+b;return c/2*((t-=2)*t*(((s*=(1.525))+1)*t+s)+2)+b;},easeInBounce:function(x,t,b,c,d){return c-jQuery.easing.easeOutBounce(x,d-t,0,c,d)+b;},easeOutBounce:function(x,t,b,c,d){if((t/=d)<(1/2.75)){return c*(7.5625*t*t)+b;}else if(t<(2/2.75)){return c*(7.5625*(t-=(1.5/2.75))*t+.75)+b;}else if(t<(2.5/2.75)){return c*(7.5625*(t-=(2.25/2.75))*t+.9375)+b;}else{return c*(7.5625*(t-=(2.625/2.75))*t+.984375)+b;}},easeInOutBounce:function(x,t,b,c,d){if(t<d/2)return jQuery.easing.easeInBounce(x,t*2,0,c,d)*.5+b;return jQuery.easing.easeOutBounce(x,t*2-d,0,c,d)*.5+c*.5+b;}});
/* -------------------------------------------------- *
 * JQuery Hints
 * -------------------------------------------------- *
 * Author: Ross Riley
 * License: MIT License
** -------------------------------------------------- */

(function($) {
	$.fn.hint = function(defaults) {
		// check whether we want real options, or to destroy functionality
		if(!defaults || typeof(defaults) == "object") {
			defaults = $.extend({
				focus_class: "hint_focus", // class during focus
				changed_class: "hint_changed", // class after focus
				populate_from: "default", // choose from: default, label, custom, or alt
				text: null, // text to use in conjunction with populate_from: custom
				remove_labels: false // remove labels associated with the fields
			}, defaults);
		}
		else if(typeof(defaults) == "string" && defaults.toLowerCase() == "destroy") {
			var destroy = true;
		}
		return this.each(function() {
			// unbind everything if we're destroying, and stop executing the script
			if(destroy) {
			  $(this).unbind("focus.hint").unbind("blur.hint").removeData("defText");
				return false;
			}
		  hint_setup($(this));
		});
	  function hint_setup(ele){ 
	    // define our variables
			var defText = "";

			// let's populate the text, if not default
			switch(defaults.populate_from) {
				case "alt":
					defText = ele.attr("alt");
					ele.val(defText);
					break;
				case "label":
					defText = ele.closest("form").find("label[for='" + ele.attr("id") + "']").text();
					ele.val(defText);
					break;
				case "custom":
					defText = defaults.text;
					ele.val(defText);
					break;
				default:
					defText = ele.val();
			}

			// let's give this field a special class, so we can identify it later
			// also, we'll give it a data attribute, which will help jQuery remember what the default value is
			ele.addClass("hint").data("defText", defText);

			// now that fields are populated, let's remove the labels if applicable
			if(defaults.remove_labels == true) { ele.closest("form").find("label[for='" + ele.attr("id") + "']").remove(); }
			// Now lets trigger a reset when a form is submitted
			ele.parents("form").submit(function(){if(ele.val() == ele.data("defText")) { ele.val(""); }});
			
			// Handles password fields by creating a clone that's a text field.
			if(ele.attr("type")=="password") {
			  var eledef = ele.data("defText");
        var el = $('<input type="text"/>');
        el.attr( 'name', ele.attr('name') );
        el.attr( 'size', ele.attr('size') );
        el.attr( 'class', ele.attr('class') );
        el.val( ele.val() );
        el.data("defType", "password").data("defText", eledef);
        ele.replaceWith(el);
        var ele = el;
		  }
			hint_focus(ele);
			hint_blur(ele);
	  };
	  function hint_focus(ele){ 
	    ele.bind("focus.hint",function(ele){
        var ele = $(this);
	      if(ele.val() == ele.data("defText")) { ele.val(""); }
				// add the focus class, remove changed_class
				ele.addClass(defaults.focus_class).removeClass(defaults.changed_class);
	      if(ele.data("defType")=="password") {
  			  var eledef = ele.data("defText");
          var el = $('<input type="password"/>');
          el.attr( 'name', ele.attr('name') );
          el.attr( 'size', ele.attr('size') );
          el.attr( 'class', ele.attr('class') );
          el.val( ele.val() );
          el.data("defType", "password").data("defText", eledef);
          ele.replaceWith(el);
          var ele = el;
          ele.focus();
          hint_blur(ele);
  			}
			});
	  };
	  function hint_blur(ele){ 
	    ele.bind("blur.hint",function(){
        var ele = $(this);
	      if(ele.val() == "") { ele.val(ele.data("defText")); }
				// remove focus_class, add changed_class.
				ele.removeClass(defaults.focus_class);
				if(ele.val() != ele.data("defText")) { ele.addClass(defaults.changed_class); }
					else { ele.removeClass(defaults.changed_class); }
				if(ele.data("defType")=="password" && ele.val()==ele.data("defText")) {
				  var eledef = ele.data("defText");
          var el = $('<input type="text"/>');
          el.attr( 'name', ele.attr('name') );
          el.attr( 'size', ele.attr('size') );
          el.attr( 'class', ele.attr('class') );
          el.val( ele.val() );
          el.data("defType", "password").data("defText", eledef);
          ele.replaceWith(el);
          var ele = el;
          hint_focus(el);
				}
	    });
	  };
	};
})(jQuery);

(function(jQuery) {
  
  jQuery.fn.tablehighlight = function(options){
    var config = {};
		config.container = this;
		config = jQuery.extend(true, config, jQuery.fn.tablehighlight.config, options);		
    return this.each(function(){
      if(this.__thl) return;
      else this.__thl = true; 			
			jQuery.fn.tablehighlight.hover(config);			
    });
  };
  
	jQuery.fn.tablehighlight.find = function(config, firstlvl, secondlvl){
		var firstselector = config.selectors[firstlvl],
				secondselector = (typeof secondlvl != "undefined" && typeof config.selectors[secondlvl] != "undefined") ? config.selectors[secondlvl] : false,				
				jq_elements = (secondselector != false) ? jQuery(config.container).find(firstselector).find(secondselector) : jQuery(config.container).find(firstselector),
				obj_found = []
		jq_elements.each(function(){obj_found.push(this);});
		return obj_found;
	};
	
	jQuery.fn.tablehighlight.hover = function(config){
		var rows = jQuery(config.container).find(config.selectors.rows),
				colheaders = jQuery(config.container).find(config.selectors.column_header);
		//hover on the cell - hightlight column, highlight row
		jQuery(config.container).find(config.selectors.row_data).unbind("mouseover mouseout").bind("mouseover", function(){
			jQuery(this).addClass(config.active_classes.current_hover);
			jQuery.fn.tablehighlight.column(config, this, rows, colheaders);
			jQuery.fn.tablehighlight.row(config, this, rows, colheaders);
		}).bind("mouseout", function(){
			jQuery(this).removeClass(config.active_classes.current_hover);
			jQuery.fn.tablehighlight.column(config, this, rows, colheaders, true);
			jQuery.fn.tablehighlight.row(config, this, rows, colheaders, true);
		});
		//hover on row heading
		jQuery(config.container).find(config.selectors.row_header).unbind("mouseover mouseout").bind("mouseover", function(){
			jQuery(this).addClass(config.active_classes.current_hover);			
			jQuery.fn.tablehighlight.row(config, this, rows, colheaders);
		}).bind("mouseout", function(){
			jQuery(this).removeClass(config.active_classes.current_hover);			
			jQuery.fn.tablehighlight.row(config, this, rows, colheaders, true);
		});
		//hover on the col heading
		jQuery(config.container).find(config.selectors.column_header).unbind("mouseover mouseout").bind("mouseover", function(){
			var ind = jQuery(this).closest(config.selectors.headings).find(config.selectors.column_header).index(this),
					obj = jQuery(rows[0]).find(config.selectors.row_data).eq(ind);
			jQuery.fn.tablehighlight.column(config, obj, rows, colheaders);
			jQuery(this).addClass(config.active_classes.current_hover);
		}).bind("mouseout", function(){
			var ind = jQuery(this).closest(config.selectors.headings).find(config.selectors.column_header).index(this),
					obj = jQuery(rows[0]).find(config.selectors.row_data).eq(ind);
			jQuery.fn.tablehighlight.column(config, obj, rows, colheaders, true);
			jQuery(this).removeClass(config.active_classes.current_hover);
		});
		
	};
	jQuery.fn.tablehighlight.column = function(config, obj, rows, colheaders, removeclass){
		var activerow = jQuery(obj).closest(config.selectors.rows),				
				rownumber = jQuery(rows).index(activerow),
				colnumber = activerow.find(config.selectors.row_data).index(obj),
	 			colheader = colheaders[colnumber]
				;
		if(removeclass == true) jQuery(colheader).removeClass(config.active_classes.all).removeClass(config.active_classes.column_header);
		else jQuery(colheader).addClass(config.active_classes.all).addClass(config.active_classes.column_header);
		jQuery(rows).each(function(){
			var tdcell = jQuery(this).find(config.selectors.row_data).eq(colnumber);
			if(removeclass == true) tdcell.removeClass(config.active_classes.all).removeClass(config.active_classes.row_data);
			else tdcell.addClass(config.active_classes.all).addClass(config.active_classes.row_data);
		});
	};
	jQuery.fn.tablehighlight.row = function(config, obj, rows, colheaders, removeclass){
		var activerow = jQuery(obj).closest(config.selectors.rows),
				rowheader = jQuery(obj).closest(config.selectors.rows).find(config.selectors.row_header);
				
		if(removeclass == true){
			jQuery(rowheader).removeClass(config.active_classes.all).removeClass(config.active_classes.row_header);
			jQuery(activerow).find(config.selectors.row_data).removeClass(config.active_classes.all).removeClass(config.active_classes.row_data);
		}else{
			jQuery(rowheader).addClass(config.active_classes.all).addClass(config.active_classes.row_header);
			jQuery(activerow).find(config.selectors.row_data).addClass(config.active_classes.all).addClass(config.active_classes.row_data);
		}
	
	};
	

  jQuery.fn.tablehighlight.config = {
																			"selectors":{
																				"headings":'.heading',
																				'column_header': '.column_header',
																				'rows': '.row',
																				'row_header': '.row_header',
																				'row_data': '.row_data'
																				},
																			"active_classes":{
																				"all": "active",
																				"column_header":"active_column_header",
																				"rows":"active_row",
																				"row_header": "active_row_header",
																				"row_data": "active_row_data",
																				"current_hover": "active_position"
																				}
																			};
 
    
})(jQuery);

/*
 * jquery.tools 1.1.2 - The missing UI library for the Web
 * 
 * [tools.tabs-1.0.4, tools.tooltip-1.1.2, tools.scrollable-1.1.2, tools.overlay-1.1.2, tools.expose-1.0.5]
 * 
 * Copyright (c) 2009 Tero Piirainen
 * http://flowplayer.org/tools/
 *
 * Dual licensed under MIT and GPL 2+ licenses
 * http://www.opensource.org/licenses
 * 
 * -----
 * 
 * File generated: Wed Oct 07 09:46:43 GMT 2009
 */
(function(d){d.tools=d.tools||{};d.tools.tabs={version:"1.0.4",conf:{tabs:"a",current:"current",onBeforeClick:null,onClick:null,effect:"default",initialIndex:0,event:"click",api:false,rotate:false},addEffect:function(e,f){c[e]=f}};var c={"default":function(f,e){this.getPanes().hide().eq(f).show();e.call()},fade:function(g,e){var f=this.getConf(),j=f.fadeOutSpeed,h=this.getPanes();if(j){h.fadeOut(j)}else{h.hide()}h.eq(g).fadeIn(f.fadeInSpeed,e)},slide:function(f,e){this.getPanes().slideUp(200);this.getPanes().eq(f).slideDown(400,e)},ajax:function(f,e){this.getPanes().eq(0).load(this.getTabs().eq(f).attr("href"),e)}};var b;d.tools.tabs.addEffect("horizontal",function(f,e){if(!b){b=this.getPanes().eq(0).width()}this.getCurrentPane().animate({width:0},function(){d(this).hide()});this.getPanes().eq(f).animate({width:b},function(){d(this).show();e.call()})});function a(g,h,f){var e=this,j=d(this),i;d.each(f,function(k,l){if(d.isFunction(l)){j.bind(k,l)}});d.extend(this,{click:function(k,n){var o=e.getCurrentPane();var l=g.eq(k);if(typeof k=="string"&&k.replace("#","")){l=g.filter("[href*="+k.replace("#","")+"]");k=Math.max(g.index(l),0)}if(f.rotate){var m=g.length-1;if(k<0){return e.click(m,n)}if(k>m){return e.click(0,n)}}if(!l.length){if(i>=0){return e}k=f.initialIndex;l=g.eq(k)}if(k===i){return e}n=n||d.Event();n.type="onBeforeClick";j.trigger(n,[k]);if(n.isDefaultPrevented()){return}c[f.effect].call(e,k,function(){n.type="onClick";j.trigger(n,[k])});n.type="onStart";j.trigger(n,[k]);if(n.isDefaultPrevented()){return}i=k;g.removeClass(f.current);l.addClass(f.current);return e},getConf:function(){return f},getTabs:function(){return g},getPanes:function(){return h},getCurrentPane:function(){return h.eq(i)},getCurrentTab:function(){return g.eq(i)},getIndex:function(){return i},next:function(){return e.click(i+1)},prev:function(){return e.click(i-1)},bind:function(k,l){j.bind(k,l);return e},onBeforeClick:function(k){return this.bind("onBeforeClick",k)},onClick:function(k){return this.bind("onClick",k)},unbind:function(k){j.unbind(k);return e}});g.each(function(k){d(this).bind(f.event,function(l){e.click(k,l);return false})});if(location.hash){e.click(location.hash)}else{if(f.initialIndex===0||f.initialIndex>0){e.click(f.initialIndex)}}h.find("a[href^=#]").click(function(k){e.click(d(this).attr("href"),k)})}d.fn.tabs=function(i,f){var g=this.eq(typeof f=="number"?f:0).data("tabs");if(g){return g}if(d.isFunction(f)){f={onBeforeClick:f}}var h=d.extend({},d.tools.tabs.conf),e=this.length;f=d.extend(h,f);this.each(function(l){var j=d(this);var k=j.find(f.tabs);if(!k.length){k=j.children()}var m=i.jquery?i:j.children(i);if(!m.length){m=e==1?d(i):j.parent().find(i)}g=new a(k,m,f);j.data("tabs",g)});return f.api?g:this}})(jQuery);
(function(c){var d=[];c.tools=c.tools||{};c.tools.tooltip={version:"1.1.2",conf:{effect:"toggle",fadeOutSpeed:"fast",tip:null,predelay:0,delay:30,opacity:1,lazy:undefined,position:["top","center"],offset:[0,0],cancelDefault:true,relative:false,oneInstance:true,events:{def:"mouseover,mouseout",input:"focus,blur",widget:"focus mouseover,blur mouseout",tooltip:"mouseover,mouseout"},api:false},addEffect:function(e,g,f){b[e]=[g,f]}};var b={toggle:[function(e){var f=this.getConf(),g=this.getTip(),h=f.opacity;if(h<1){g.css({opacity:h})}g.show();e.call()},function(e){this.getTip().hide();e.call()}],fade:[function(e){this.getTip().fadeIn(this.getConf().fadeInSpeed,e)},function(e){this.getTip().fadeOut(this.getConf().fadeOutSpeed,e)}]};function a(f,g){var p=this,k=c(this);f.data("tooltip",p);var l=f.next();if(g.tip){l=c(g.tip);if(l.length>1){l=f.nextAll(g.tip).eq(0);if(!l.length){l=f.parent().nextAll(g.tip).eq(0)}}}function o(u){var t=g.relative?f.position().top:f.offset().top,s=g.relative?f.position().left:f.offset().left,v=g.position[0];t-=l.outerHeight()-g.offset[0];s+=f.outerWidth()+g.offset[1];var q=l.outerHeight()+f.outerHeight();if(v=="center"){t+=q/2}if(v=="bottom"){t+=q}v=g.position[1];var r=l.outerWidth()+f.outerWidth();if(v=="center"){s-=r/2}if(v=="left"){s-=r}return{top:t,left:s}}var i=f.is(":input"),e=i&&f.is(":checkbox, :radio, select, :button"),h=f.attr("type"),n=g.events[h]||g.events[i?(e?"widget":"input"):"def"];n=n.split(/,\s*/);if(n.length!=2){throw"Tooltip: bad events configuration for "+h}f.bind(n[0],function(r){if(g.oneInstance){c.each(d,function(){this.hide()})}var q=l.data("trigger");if(q&&q[0]!=this){l.hide().stop(true,true)}r.target=this;p.show(r);n=g.events.tooltip.split(/,\s*/);l.bind(n[0],function(){p.show(r)});if(n[1]){l.bind(n[1],function(){p.hide(r)})}});f.bind(n[1],function(q){p.hide(q)});if(!c.browser.msie&&!i&&!g.predelay){f.mousemove(function(){if(!p.isShown()){f.triggerHandler("mouseover")}})}if(g.opacity<1){l.css("opacity",g.opacity)}var m=0,j=f.attr("title");if(j&&g.cancelDefault){f.removeAttr("title");f.data("title",j)}c.extend(p,{show:function(r){if(r){f=c(r.target)}clearTimeout(l.data("timer"));if(l.is(":animated")||l.is(":visible")){return p}function q(){l.data("trigger",f);var t=o(r);if(g.tip&&j){l.html(f.data("title"))}r=r||c.Event();r.type="onBeforeShow";k.trigger(r,[t]);if(r.isDefaultPrevented()){return p}t=o(r);l.css({position:"absolute",top:t.top,left:t.left});var s=b[g.effect];if(!s){throw'Nonexistent effect "'+g.effect+'"'}s[0].call(p,function(){r.type="onShow";k.trigger(r)})}if(g.predelay){clearTimeout(m);m=setTimeout(q,g.predelay)}else{q()}return p},hide:function(r){clearTimeout(l.data("timer"));clearTimeout(m);if(!l.is(":visible")){return}function q(){r=r||c.Event();r.type="onBeforeHide";k.trigger(r);if(r.isDefaultPrevented()){return}b[g.effect][1].call(p,function(){r.type="onHide";k.trigger(r)})}if(g.delay&&r){l.data("timer",setTimeout(q,g.delay))}else{q()}return p},isShown:function(){return l.is(":visible, :animated")},getConf:function(){return g},getTip:function(){return l},getTrigger:function(){return f},bind:function(q,r){k.bind(q,r);return p},onHide:function(q){return this.bind("onHide",q)},onBeforeShow:function(q){return this.bind("onBeforeShow",q)},onShow:function(q){return this.bind("onShow",q)},onBeforeHide:function(q){return this.bind("onBeforeHide",q)},unbind:function(q){k.unbind(q);return p}});c.each(g,function(q,r){if(c.isFunction(r)){p.bind(q,r)}})}c.prototype.tooltip=function(e){var f=this.eq(typeof e=="number"?e:0).data("tooltip");if(f){return f}var g=c.extend(true,{},c.tools.tooltip.conf);if(c.isFunction(e)){e={onBeforeShow:e}}else{if(typeof e=="string"){e={tip:e}}}e=c.extend(true,g,e);if(typeof e.position=="string"){e.position=e.position.split(/,?\s/)}if(e.lazy!==false&&(e.lazy===true||this.length>20)){this.one("mouseover",function(h){f=new a(c(this),e);f.show(h);d.push(f)})}else{this.each(function(){f=new a(c(this),e);d.push(f)})}return e.api?f:this}})(jQuery);
(function(b){b.tools=b.tools||{};b.tools.scrollable={version:"1.1.2",conf:{size:5,vertical:false,speed:400,keyboard:true,keyboardSteps:null,disabledClass:"disabled",hoverClass:null,clickable:true,activeClass:"active",easing:"swing",loop:false,items:".items",item:null,prev:".prev",next:".next",prevPage:".prevPage",nextPage:".nextPage",api:false}};var c;function a(o,m){var r=this,p=b(this),d=!m.vertical,e=o.children(),k=0,i;if(!c){c=r}b.each(m,function(s,t){if(b.isFunction(t)){p.bind(s,t)}});if(e.length>1){e=b(m.items,o)}function l(t){var s=b(t);return m.globalNav?s:o.parent().find(t)}o.data("finder",l);var f=l(m.prev),h=l(m.next),g=l(m.prevPage),n=l(m.nextPage);b.extend(r,{getIndex:function(){return k},getClickIndex:function(){var s=r.getItems();return s.index(s.filter("."+m.activeClass))},getConf:function(){return m},getSize:function(){return r.getItems().size()},getPageAmount:function(){return Math.ceil(this.getSize()/m.size)},getPageIndex:function(){return Math.ceil(k/m.size)},getNaviButtons:function(){return f.add(h).add(g).add(n)},getRoot:function(){return o},getItemWrap:function(){return e},getItems:function(){return e.children(m.item)},getVisibleItems:function(){return r.getItems().slice(k,k+m.size)},seekTo:function(s,w,t){if(s<0){s=0}if(k===s){return r}if(b.isFunction(w)){t=w}if(s>r.getSize()-m.size){return m.loop?r.begin():this.end()}var u=r.getItems().eq(s);if(!u.length){return r}var v=b.Event("onBeforeSeek");p.trigger(v,[s]);if(v.isDefaultPrevented()){return r}if(w===undefined||b.isFunction(w)){w=m.speed}function x(){if(t){t.call(r,s)}p.trigger("onSeek",[s])}if(d){e.animate({left:-u.position().left},w,m.easing,x)}else{e.animate({top:-u.position().top},w,m.easing,x)}c=r;k=s;v=b.Event("onStart");p.trigger(v,[s]);if(v.isDefaultPrevented()){return r}f.add(g).toggleClass(m.disabledClass,s===0);h.add(n).toggleClass(m.disabledClass,s>=r.getSize()-m.size);return r},move:function(u,t,s){i=u>0;return this.seekTo(k+u,t,s)},next:function(t,s){return this.move(1,t,s)},prev:function(t,s){return this.move(-1,t,s)},movePage:function(w,v,u){i=w>0;var s=m.size*w;var t=k%m.size;if(t>0){s+=(w>0?-t:m.size-t)}return this.move(s,v,u)},prevPage:function(t,s){return this.movePage(-1,t,s)},nextPage:function(t,s){return this.movePage(1,t,s)},setPage:function(t,u,s){return this.seekTo(t*m.size,u,s)},begin:function(t,s){i=false;return this.seekTo(0,t,s)},end:function(t,s){i=true;var u=this.getSize()-m.size;return u>0?this.seekTo(u,t,s):r},reload:function(){p.trigger("onReload");return r},focus:function(){c=r;return r},click:function(u){var v=r.getItems().eq(u),s=m.activeClass,t=m.size;if(u<0||u>=r.getSize()){return r}if(t==1){if(m.loop){return r.next()}if(u===0||u==r.getSize()-1){i=(i===undefined)?true:!i}return i===false?r.prev():r.next()}if(t==2){if(u==k){u--}r.getItems().removeClass(s);v.addClass(s);return r.seekTo(u,time,fn)}if(!v.hasClass(s)){r.getItems().removeClass(s);v.addClass(s);var x=Math.floor(t/2);var w=u-x;if(w>r.getSize()-t){w=r.getSize()-t}if(w!==u){return r.seekTo(w)}}return r},bind:function(s,t){p.bind(s,t);return r},unbind:function(s){p.unbind(s);return r}});b.each("onBeforeSeek,onStart,onSeek,onReload".split(","),function(s,t){r[t]=function(u){return r.bind(t,u)}});f.addClass(m.disabledClass).click(function(){r.prev()});h.click(function(){r.next()});n.click(function(){r.nextPage()});if(r.getSize()<m.size){h.add(n).addClass(m.disabledClass)}g.addClass(m.disabledClass).click(function(){r.prevPage()});var j=m.hoverClass,q="keydown."+Math.random().toString().substring(10);r.onReload(function(){if(j){r.getItems().hover(function(){b(this).addClass(j)},function(){b(this).removeClass(j)})}if(m.clickable){r.getItems().each(function(s){b(this).unbind("click.scrollable").bind("click.scrollable",function(t){if(b(t.target).is("a")){return}return r.click(s)})})}if(m.keyboard){b(document).unbind(q).bind(q,function(t){if(t.altKey||t.ctrlKey){return}if(m.keyboard!="static"&&c!=r){return}var u=m.keyboardSteps;if(d&&(t.keyCode==37||t.keyCode==39)){r.move(t.keyCode==37?-u:u);return t.preventDefault()}if(!d&&(t.keyCode==38||t.keyCode==40)){r.move(t.keyCode==38?-u:u);return t.preventDefault()}return true})}else{b(document).unbind(q)}});r.reload()}b.fn.scrollable=function(d){var e=this.eq(typeof d=="number"?d:0).data("scrollable");if(e){return e}var f=b.extend({},b.tools.scrollable.conf);d=b.extend(f,d);d.keyboardSteps=d.keyboardSteps||d.size;this.each(function(){e=new a(b(this),d);b(this).data("scrollable",e)});return d.api?e:this}})(jQuery);
(function(c){c.tools=c.tools||{};c.tools.overlay={version:"1.1.2",addEffect:function(e,f,g){b[e]=[f,g]},conf:{top:"10%",left:"center",absolute:false,speed:"normal",closeSpeed:"fast",effect:"default",close:null,oneInstance:true,closeOnClick:true,closeOnEsc:true,api:false,expose:null,target:null}};var b={};c.tools.overlay.addEffect("default",function(e){this.getOverlay().fadeIn(this.getConf().speed,e)},function(e){this.getOverlay().fadeOut(this.getConf().closeSpeed,e)});var d=[];function a(g,k){var o=this,m=c(this),n=c(window),j,i,h,e=k.expose&&c.tools.expose.version;var f=k.target||g.attr("rel");i=f?c(f):null||g;if(!i.length){throw"Could not find Overlay: "+f}if(g&&g.index(i)==-1){g.click(function(p){o.load(p);return p.preventDefault()})}c.each(k,function(p,q){if(c.isFunction(q)){m.bind(p,q)}});c.extend(o,{load:function(u){if(o.isOpened()){return o}var r=b[k.effect];if(!r){throw'Overlay: cannot find effect : "'+k.effect+'"'}if(k.oneInstance){c.each(d,function(){this.close(u)})}u=u||c.Event();u.type="onBeforeLoad";m.trigger(u);if(u.isDefaultPrevented()){return o}h=true;if(e){i.expose().load(u)}var t=k.top;var s=k.left;var p=i.outerWidth({margin:true});var q=i.outerHeight({margin:true});if(typeof t=="string"){t=t=="center"?Math.max((n.height()-q)/2,0):parseInt(t,10)/100*n.height()}if(s=="center"){s=Math.max((n.width()-p)/2,0)}if(!k.absolute){t+=n.scrollTop();s+=n.scrollLeft()}i.css({top:t,left:s,position:"absolute"});u.type="onStart";m.trigger(u);r[0].call(o,function(){if(h){u.type="onLoad";m.trigger(u)}});if(k.closeOnClick){c(document).bind("click.overlay",function(w){if(!o.isOpened()){return}var v=c(w.target);if(v.parents(i).length>1){return}c.each(d,function(){this.close(w)})})}if(k.closeOnEsc){c(document).unbind("keydown.overlay").bind("keydown.overlay",function(v){if(v.keyCode==27){c.each(d,function(){this.close(v)})}})}return o},close:function(q){if(!o.isOpened()){return o}q=q||c.Event();q.type="onBeforeClose";m.trigger(q);if(q.isDefaultPrevented()){return}h=false;b[k.effect][1].call(o,function(){q.type="onClose";m.trigger(q)});var p=true;c.each(d,function(){if(this.isOpened()){p=false}});if(p){c(document).unbind("click.overlay").unbind("keydown.overlay")}return o},getContent:function(){return i},getOverlay:function(){return i},getTrigger:function(){return g},getClosers:function(){return j},isOpened:function(){return h},getConf:function(){return k},bind:function(p,q){m.bind(p,q);return o},unbind:function(p){m.unbind(p);return o}});c.each("onBeforeLoad,onStart,onLoad,onBeforeClose,onClose".split(","),function(p,q){o[q]=function(r){return o.bind(q,r)}});if(e){if(typeof k.expose=="string"){k.expose={color:k.expose}}c.extend(k.expose,{api:true,closeOnClick:k.closeOnClick,closeOnEsc:false});var l=i.expose(k.expose);l.onBeforeClose(function(p){o.close(p)});o.onClose(function(p){l.close(p)})}j=i.find(k.close||".close");if(!j.length&&!k.close){j=c('<div class="close"></div>');i.prepend(j)}j.click(function(p){o.close(p)})}c.fn.overlay=function(e){var f=this.eq(typeof e=="number"?e:0).data("overlay");if(f){return f}if(c.isFunction(e)){e={onBeforeLoad:e}}var g=c.extend({},c.tools.overlay.conf);e=c.extend(true,g,e);this.each(function(){f=new a(c(this),e);d.push(f);c(this).data("overlay",f)});return e.api?f:this}})(jQuery);
(function(b){b.tools=b.tools||{};b.tools.expose={version:"1.0.5",conf:{maskId:null,loadSpeed:"slow",closeSpeed:"fast",closeOnClick:true,closeOnEsc:true,zIndex:9998,opacity:0.8,color:"#456",api:false}};function a(){if(b.browser.msie){var f=b(document).height(),e=b(window).height();return[window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth,f-e<20?e:f]}return[b(window).width(),b(document).height()]}function c(h,g){var e=this,j=b(this),d=null,f=false,i=0;b.each(g,function(k,l){if(b.isFunction(l)){j.bind(k,l)}});b(window).resize(function(){e.fit()});b.extend(this,{getMask:function(){return d},getExposed:function(){return h},getConf:function(){return g},isLoaded:function(){return f},load:function(n){if(f){return e}i=h.eq(0).css("zIndex");if(g.maskId){d=b("#"+g.maskId)}if(!d||!d.length){var l=a();d=b("<div/>").css({position:"absolute",top:0,left:0,width:l[0],height:l[1],display:"none",opacity:0,zIndex:g.zIndex});if(g.maskId){d.attr("id",g.maskId)}b("body").append(d);var k=d.css("backgroundColor");if(!k||k=="transparent"||k=="rgba(0, 0, 0, 0)"){d.css("backgroundColor",g.color)}if(g.closeOnEsc){b(document).bind("keydown.unexpose",function(o){if(o.keyCode==27){e.close()}})}if(g.closeOnClick){d.bind("click.unexpose",function(o){e.close(o)})}}n=n||b.Event();n.type="onBeforeLoad";j.trigger(n);if(n.isDefaultPrevented()){return e}b.each(h,function(){var o=b(this);if(!/relative|absolute|fixed/i.test(o.css("position"))){o.css("position","relative")}});h.css({zIndex:Math.max(g.zIndex+1,i=="auto"?0:i)});var m=d.height();if(!this.isLoaded()){d.css({opacity:0,display:"block"}).fadeTo(g.loadSpeed,g.opacity,function(){if(d.height()!=m){d.css("height",m)}n.type="onLoad";j.trigger(n)})}f=true;return e},close:function(k){if(!f){return e}k=k||b.Event();k.type="onBeforeClose";j.trigger(k);if(k.isDefaultPrevented()){return e}d.fadeOut(g.closeSpeed,function(){k.type="onClose";j.trigger(k);h.css({zIndex:b.browser.msie?i:null})});f=false;return e},fit:function(){if(d){var k=a();d.css({width:k[0],height:k[1]})}},bind:function(k,l){j.bind(k,l);return e},unbind:function(k){j.unbind(k);return e}});b.each("onBeforeLoad,onLoad,onBeforeClose,onClose".split(","),function(k,l){e[l]=function(m){return e.bind(l,m)}})}b.fn.expose=function(d){var e=this.eq(typeof d=="number"?d:0).data("expose");if(e){return e}if(typeof d=="string"){d={color:d}}var f=b.extend({},b.tools.expose.conf);d=b.extend(f,d);this.each(function(){e=new c(b(this),d);b(this).data("expose",e)});return d.api?e:this}})(jQuery);

/**
 * Cookie plugin
 *
 * Copyright (c) 2006 Klaus Hartl (stilbuero.de)
 * Dual licensed under the MIT and GPL licenses:
 * http://www.opensource.org/licenses/mit-license.php
 * http://www.gnu.org/licenses/gpl.html
 *
 */

/**
 * Create a cookie with the given name and value and other optional parameters.
 *
 * @example $.cookie('the_cookie', 'the_value');
 * @desc Set the value of a cookie.
 * @example $.cookie('the_cookie', 'the_value', { expires: 7, path: '/', domain: 'jquery.com', secure: true });
 * @desc Create a cookie with all available options.
 * @example $.cookie('the_cookie', 'the_value');
 * @desc Create a session cookie.
 * @example $.cookie('the_cookie', null);
 * @desc Delete a cookie by passing null as value. Keep in mind that you have to use the same path and domain
 *       used when the cookie was set.
 *
 * @param String name The name of the cookie.
 * @param String value The value of the cookie.
 * @param Object options An object literal containing key/value pairs to provide optional cookie attributes.
 * @option Number|Date expires Either an integer specifying the expiration date from now on in days or a Date object.
 *                             If a negative value is specified (e.g. a date in the past), the cookie will be deleted.
 *                             If set to null or omitted, the cookie will be a session cookie and will not be retained
 *                             when the the browser exits.
 * @option String path The value of the path atribute of the cookie (default: path of page that created the cookie).
 * @option String domain The value of the domain attribute of the cookie (default: domain of page that created the cookie).
 * @option Boolean secure If true, the secure attribute of the cookie will be set and the cookie transmission will
 *                        require a secure protocol (like HTTPS).
 * @type undefined
 *
 * @name $.cookie
 * @cat Plugins/Cookie
 * @author Klaus Hartl/klaus.hartl@stilbuero.de
 */

/**
 * Get the value of a cookie with the given name.
 *
 * @example $.cookie('the_cookie');
 * @desc Get the value of a cookie.
 *
 * @param String name The name of the cookie.
 * @return The value of the cookie.
 * @type String
 *
 * @name $.cookie
 * @cat Plugins/Cookie
 * @author Klaus Hartl/klaus.hartl@stilbuero.de
 */
jQuery.cookie = function(name, value, options) {
    if (typeof value != 'undefined') { // name and value given, set cookie
        options = options || {};
        if (value === null) {
            value = '';
            options.expires = -1;
        }
        var expires = '';
        if (options.expires && (typeof options.expires == 'number' || options.expires.toUTCString)) {
            var date;
            if (typeof options.expires == 'number') {
                date = new Date();
                date.setTime(date.getTime() + (options.expires * 24 * 60 * 60 * 1000));
            } else {
                date = options.expires;
            }
            expires = '; expires=' + date.toUTCString(); // use expires attribute, max-age is not supported by IE
        }
        // CAUTION: Needed to parenthesize options.path and options.domain
        // in the following expressions, otherwise they evaluate to undefined
        // in the packed version for some reason...
        var path = options.path ? '; path=' + (options.path) : '';
        var domain = options.domain ? '; domain=' + (options.domain) : '';
        var secure = options.secure ? '; secure' : '';
        document.cookie = [name, '=', encodeURIComponent(value), expires, path, domain, secure].join('');
    } else { // only name given, get cookie
        var cookieValue = null;
        if (document.cookie && document.cookie != '') {
            var cookies = document.cookie.split(';');
            for (var i = 0; i < cookies.length; i++) {
                var cookie = jQuery.trim(cookies[i]);
                // Does this cookie string begin with the name we want?
                if (cookie.substring(0, name.length + 1) == (name + '=')) {
                    cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
                    break;
                }
            }
        }
        return cookieValue;
    }
};
(function($) {
  
  $.fn.validate = function(args) {

  	/* Load the default options. */
  	var options = $.extend({}, $.fn.validate.defaults, args);
    var jQ = jQuery;
    return this.each(function() {
      /***** Plugin Goes Here *********/
      jQ(this).submit(function(){
        jQ(this).find(".error_message").remove();
        var valid=true;
        
        jQ(this).find(".validate").each(function(){
          el = jQ(this);
          if(el.hasClass("valid-email")) {
            if(!valid_email(el.val())) {
              add_error(el, options.email_error_message);
              valid=false;
            }
          }
          if(el.hasClass("valid-date")) {
            if(!valid_date(el.val(), options.date_format)) {
              add_error(el, options.date_error_message);
              valid=false;
            }
          }
          if(el.hasClass("valid-required")) {
            if(!valid_required(el.val())) {
              add_error(el, options.required_error_message);
              valid=false;
            }
          }
          if(el.hasClass("valid-number")) {
            if(!valid_number(el.val())) {
              add_error(el, options.number_error_message);
              valid=false;
            }
          }
        });
        return valid;
      });
       
    });
  
  };
  
  function add_error(el, message) {
    el.after("<span class='error_message'>"+message+"</span>");
  }
  
  function valid_email(email) {
    var email_pattern  = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
    if(email.match(email_pattern)) return true;
    return false;
  };
  
  function valid_number(number) {
    var number_pattern = /^([0-9\s])+$/;
    if(number.match(number_pattern)) return true;
    return false;
  };
  
  function valid_required(val) {
    if(val.length>0) return true;
    return false;
  }
  
  function valid_date(date_passed, date_format) {
    if(date_format == "mm/dd/yyyy") var date_pattern  = /(0[1-9]|1[012])+\/(0[1-9]|[12][0-9]|3[01])+\/(19|20)\d\d/;
    if(date_format == "dd/mm/yyyy") var date_pattern  = /(0[1-9]|[12][0-9]|3[01])+\/(0[1-9]|1[012])+\/(19|20)\d\d/;
    if(date_passed.match(date_pattern)) return true;
    return false;
  };
  
  $.fn.validate.defaults = {
  	email_error_message: 'not a valid email address',
  	text_error_message: 'must be text only',
  	number_error_message: 'not a valid number',
  	date_error_message: 'not a valid date',
  	required_error_message: 'is a required field',
  	date_format: "dd/mm/yyyy"
  };
  
})(jQuery);


function flashvideo(flash, options){
  this.flashobject = flash;
  this.options = options;
  this.cont = $("#"+this.options["controller"]);
  this.drawn_cuepoints = false;
  
  this.init = function() {};
  
  this.onInit = function(){ 
    var $this = this;   
    if(this.options["flv"]) this.flashobject.videocontrol("load", this.options["flv"]);
    $(this.cont).width(this.flashobject.width());
    if(this.options["autoplay"]) this.flashobject.videocontrol("play");
    this.flashobject.videocontrol("setVolume", this.options["volume"]);
    this.range_width = $(this.cont).find(".current").width();
    var fl = this.flashobject;
    $(this.cont).find(".play_button").live("click",fl,function(){
      if($this.isPlaying=="true") {
        fl.videocontrol("pause");
        $(this).toggleClass("paused playing");
      } else {
        fl.videocontrol("play");
        $(this).toggleClass("paused playing");
      }
    });
    
    $(this.cont).find(".volume_button a").live("click", function() {
      $(this).toggleClass("on");
      if($this.volume == 0) $this.flashobject.videocontrol("setVolume", 100);
      else $this.flashobject.videocontrol("setVolume", 0);
    });
    
    
  };
  /**
   * onClick event on the video
   */
  this.onClick = function() {
    
    if(this.isPlaying=="true") this.flashobject.videocontrol("pause");
    else this.flashobject.videocontrol("play"); 
  };
  /**
   * onKeyUp event on the video
   */
  this.onKeyUp = function(pKey) {

  };
  /**
   * onComplete event
   */
  this.onFinished = function() {
    $(this.cont).trigger("finish_cue");
    this.flashobject.videocontrol("setPosition", 0);
  };
  /**
   * Update
   */
  this.cuepoints = function(position) {
    for(var i=0;i<this.options.cuepoints.length;i++) {
      cue = this.options.cuepoints[i];
      if(position >= cue["position"] && !cue.triggered) {
        $(document).trigger(cue.name);
        cue.triggered = true;
      }
    }
  };
  
  this.draw_cuepoints = function() {
    var $this = this;
    if(isNaN(this.duration)) return true;
    for(var i=0;i<this.options.cuepoints.length;i++) {
      var cue = this.options.cuepoints[i];
      pc =  (cue["position"] / this.duration * 100);
      var container_width = $(this.cont).width();
      pc = ((container_width - this.range_width) /100 * pc) +50;
      $(this.cont).append("<a href='#' class='cuepoint' id='"+cue["name"]+"' data-position='"+cue["position"]+"'></a>");
      $(this.cont).find("#"+cue["name"]).css("left",Math.floor(pc)+"px").click(function(){
        $(document).trigger($(this).attr("id"));
        $this.flashobject.videocontrol("setPosition", $(this).attr("data-position" ));
        return false;
      });
    }
    this.drawn_cuepoints = true;
  };
   
  this.onUpdate = function() {
    var $this = this;
    if(!this.drawn_cuepoints) $this.draw_cuepoints();
    $this.cuepoints(this.position);
    pc =  (this.position / this.duration * 100);
    var container_width = $(this.cont).width();
    pc = (container_width - this.range_width) /100 * pc ;
    
    $(this.cont).find(".current").width(pc + this.range_width - 50 + "px");
    if(this.isPlaying=="true") {$(this.cont).find(".play_button").removeClass("paused").addClass("playing");}
    else $(this.cont).find(".play_button").removeClass("playing").addClass("paused");
    
    secVar0 = Math.floor(this.position / 1000);
    minVar = Math.floor(secVar0/60);  // The minutes
    secVar = secVar0 % 60;              // The balance of seconds
    secVar = secVar.toString();
    if(secVar.length <2) secVar = "0"+secVar;
    $(this.cont).find(".played_counter").html(minVar+":"+secVar);
    secVar0 = Math.floor((this.duration - this.position) / 1000);
    minVar = Math.floor(secVar0/60);  // The minutes
    secVar = secVar0 % 60;              // The balance of seconds
    secVar = secVar.toString();
    if(secVar.length <2) secVar = "0"+secVar;
    $(this.cont).find(".remaining_counter").html(minVar+":"+secVar);
  	/* Options Available On Update 
  	 *  this.isPlaying;
     *  this.url;
     *	this.volume;
     *  this.position;
     *  this.duration;
     *	this.bufferLength + "/" + this.bufferTime;
     *  this.bytesLoaded + "/" + this.bytesTotal + " (" + this.bytesPercent + "%)";
     */	
  };
}

(function($) {
  
  var Controls = function(elem){
    this.init(elem);
  };
  Controls.prototype.init = function(elem) {
    this.fl =elem[0];
    if(typeof this.fl.SetVariable == "undefined") this.fl.SetVariable = function(){};
    this.play = function() {return this.fl.SetVariable("method:play", "");};
    this.pause = function() {return this.fl.SetVariable("method:pause", "");};
    this.stop = function() {return this.fl.SetVariable("method:stop", "");};
    this.load = function(url) {return this.fl.SetVariable("method:setUrl", url);};
    this.setWidth = function(wid) {return this.fl.width = wid+"px";};
    this.setHeight = function(hei){return this.fl.height = hei+"px";};
    this.setPosition = function(pos) {return this.fl.SetVariable("method:setPosition", pos);};
    this.setVolume = function (vol) {return this.fl.SetVariable("method:setVolume", vol);};
    this.loadImage = function (url, depth, valign, halign) {
      return this.fl.SetVariable("method:loadMovieOnTop", url+"|"+depth+"|"+valign+"|"+halign);
    };
    this.unloadImage = function(depth) {return this.fl.SetVariable("method:unloadMovieOnTop", depth);};
  };
   
  $.fn.videocontrol = function(func, args) {
    var c = new Controls($(this));
    return c[func](args);
  };

})(jQuery);
 


var vid_listeners = [];
 
(function($) {
  $.fn.video = function(settings) {
  var defaults = {
    'player'     : "/images/player_flv_js.swf",
    'autoplay'   : true,
    'flv'        : false,
    'controller' : false,
    'volume'     : 100 
  };

  var ex_params = {
    wmode: 'transparent'
  }

  if(settings) $.extend(defaults, settings);
  this.each(function() {
    if(!defaults["controller"]) defaults["controller"]=$(this).attr("id")+"_controller";
    $(this).attr("data-width") ? width = $(this).attr("data-width"):width=300;
    $(this).attr("data-height") ? height = $(this).attr("data-height"):height=240;
    vid_listeners[$(this).attr("id")] = new flashvideo($(this), defaults);
    swfobject.embedSWF(
        defaults.player, $(this).attr("id"), 
        width, height, 
        "9,0,0", "expressInstall.swf",
        {listener:"vid_listeners['"+$(this).attr("id")+"']"},
        ex_params,null,
        function(e) {vid_listeners[$(e).attr("id")].flashobject = $(e.ref);}
    );
    
  });
  return this;
};
})(jQuery);







