/*-----------------------------------------------------------------
    website:    www.subaru.com
    type:       landing page scripts only
    desc:
    Date:
    Dependencies: (list jQuery version, and other plugins)
------------------------------------------------------------------


    1.0 Instantiate - $(function() {}
    2.0 create_
    3.0 delete_
    4.0 format_
    5.0 get_
    6.0 instantiate_
    7.0 is_
    8.0 listen_
    9.0 submit_
    10.0 update_
    11.0 validate_
    12.0 validation_objects
    13.0 flash interaction
------------------------------------------------------------------*/

//-----------------------------------------------------------------------------------
//1.0 Instantiate - $(function() {}
// functions called once DOM is ready.
//-----------------------------------------------------------------------------------

$(document).ready(function() {

    //alphabetical order
    //call the functions here - define the functions below

    // instantiate_
    instantiate_accordions();
    instantiate_defaultText(".defaultText");
    instantiate_featuresTabs();
    instantiate_findDealerMap();
    instantiate_findDealerResult();
    instantiate_getMoreGsTabs();
    instantiate_handrail();
    instantiate_omniture();
    instantiate_omnitureMediaTracking();
    instantiate_rotator();
    instantiate_specialOffersPage();
    instantiate_specialOffersPage_MySubaru();
    instantiate_tagman();
    instantiate_vehicleLandingPages();

    // listen_
    listen_clickPath();
    listen_defaultText(".defaultText");
    listen_findDealer();
    listen_findDealerBody();
    listen_findDealerHeader();
    listen_findDealerModal();
    listen_findDealerSPT();
    listen_findDealerWindowSticker();
    listen_hoverClass();
    listen_modalClose();
    listen_twoColumn();
    listen_searchSite()
    listen_ShareTheLoveShowForCallCenter();
    check_mobileCookie();

}); //end of document.ready

//-----------------------------------------------------------------------------------
//2.0 create_
//
//usually limited params
//returns html string or .append() straight out to the DOM
//-----------------------------------------------------------------------------------

function create_randomString(str_length) {
    var chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
    var rs = "";
    for(x=0;x<str_length;x++) {
        i = Math.floor(Math.random() * 62);
        rs += chars.charAt(i);
    }
    var d = new Date();
    var thisDay = new Number(d.getDate());
        thisDay = (thisDay.toString().length == 1) ? "0"+thisDay.toString() : thisDay.toString();
    var thisMonth = new Number(d.getMonth()+1);
        thisMonth = (thisMonth.toString().length == 1) ? "0"+thisMonth.toString() : thisMonth.toString();
    var thisYear = d.getFullYear();
    rs = thisMonth+thisDay+thisYear+rs;
    return rs;
}

//------ Check Mobile Cookie
function check_mobileCookie(){
	var c = get_cookie("mobile_full_site");
	if(c != null && c != undefined)
	{
		//var u = '<li><a href="'+linkPrefix+'/mobile/index.html">Go to Mobile Site</a></li>';
		$("ul.policy").prepend('<li><a id="linkBackToMobile" href="'+linkPrefix+'mobile/index.html">Go to Mobile Site</a></li>');
		$("#linkBackToMobile").click(function(e){
	        e.preventDefault();
	        create_cookie("mobile_full_site","",-1);
	        window.location.href = linkPrefix+"mobile/index.html";
	    });
	}
}

//-----------------------------------------------------------------------------------
//3.0 delete_
//-----------------------------------------------------------------------------------


//-----------------------------------------------------------------------------------
//4.0 format_
//
//accepts parameter
//returns same variable formatted
//-----------------------------------------------------------------------------------

function format_stripeTable() {
    var first_item = $('#features-tabs-features > a:first').attr("href");
    $('#feature_spec_wrapper').css({display: "block"}); //because its hidden in general.css (stops it from loading anything before its all ready)
    $('#feature_spec_wrapper ' + first_item).show(); //shows the first one.
    $('#features-tabs-features > a:first').addClass('hover'); //add the default background selected state.
    $('#feature_spec_wrapper td:even').addClass('left_td');
    $('#feature_spec_wrapper td:odd').addClass('right_td');
    $('tr').removeClass('odd');     //remove all striping
    $('#feature_spec_wrapper tr:even').addClass('odd');
    $('.tabs a').click(function() { //when the tabs get switched show the default (first) one.
        $('#features-tabs a').removeClass("hover"); //remove all selected backgrounds.
        var the_tab = $(this).attr("href"); //get which tab was clicked
        $('#feature_spec_wrapper > div').hide(); //hides all of the right panes
        $(the_tab + ' a:first').addClass('hover'); //add the default background selected state. to the left pane.
        var new_first_item = $(the_tab + ' > a:first').attr("href"); //get the value of the first link
        $('tr').removeClass('odd');     //remove all striping
        $(new_first_item).show(); //shows the first one.
        $(new_first_item + ' tr:not([th]):even').addClass('odd'); //stripe whats showing
            return false;
    });
    $('#features-tabs .content a').click(function() {
        $('#features-tabs a').removeClass("hover"); //remove all selected backgrounds.
        $('tr').removeClass('odd');     //remove all striping
        var theOne =    $(this).attr("href"); //get which left pane to show.
        //alert(theOne);  //debugging
        $(this).addClass("hover"); //add the background to show which is selected.
        $('#feature_spec_wrapper > div').hide(); //hides all of them
        $(theOne).show(); //show the one you want
        $(theOne + ' tr:not([th]):even').addClass('odd'); //stripe whats showing
        return false; //stop trying to load # (page jumping)
    });
}

//-----------------------------------------------------------------------------------
//5.0 get_
//-----------------------------------------------------------------------------------

function get_dealers(searchString) {
    var mapMarkersUrl = linkPrefix + "tools/maps/dealer/getmapmarkers/";
    var csRegVal = /^\s*([a-zA-Z]{2,}\s*)+[,|\/]\s*([a-zA-Z]{2,})\s*$/;
    var csRegex = new RegExp(csRegVal);

    if (searchString.match(csRegex)) {
        var searchArray = searchString.split(/,|\//);
        mapMarkersUrl += "city/"+encodeURI(searchArray[0])+"/state/"+searchArray[1];
    }
    else {
        mapMarkersUrl += searchString;
    }
    var dealers = $.ajax({
        url: mapMarkersUrl,
        dataType: 'xml',
        async: false,
        cache: false
    });
    return dealers;
}

function get_flashMovie(movieName) {
	//var isIE = navigator.appName.indexOf("Microsoft") != -1;
	//return (isIE) ? window[movieName] : document[movieName];
	if (window.document[movieName]) {
		return window.document[movieName];
	}
	if (navigator.appName.indexOf("Microsoft Internet")==-1) {
		if (document.embeds && document.embeds[movieName]) {
			return document.embeds[movieName];
		}
	}
	else { // if (navigator.appName.indexOf("Microsoft Internet")!=-1)
		return document.getElementById(movieName);
	}
}

function get_urlKeywords() {
    var k = "";
    var cpc1K = $.getUrlVar('q');
    var cpc2K = $.getUrlVar('p');
    if (cpc1K.length > 0 || cpc2K.length > 0) {
        k = (cpc1K.length > 0) ? cpc1K : cpc2K;
    }
    else { // see if there are keywords in the referrer
        var referrerParts = get_uriParts(document.referrer);
        if ('q' in referrerParts.queryKey) {
            k = referrerParts.queryKey.q;
        }
        else if ('p' in referrerParts.queryKey) {
            k = referrerParts.queryKey.p;
        }
    }

    return k;
}

function get_uriParts (str) {
    var o   = get_uriParts.options,
        m   = o.parser[o.strictMode ? "strict" : "loose"].exec(str),
        uri = {},
        i   = 14;

    while (i--) uri[o.key[i]] = m[i] || "";

    uri[o.q.name] = {};
    uri[o.key[12]].replace(o.q.parser, function ($0, $1, $2) {
        if ($1) uri[o.q.name][$1] = $2;
    });

    return uri;
};


//-----------------------------------------------------------------------------------
//6.0 instantiate_
//
// functions called from above document.ready that RUN when the DOM is ready.
//-----------------------------------------------------------------------------------

function instantiate_accordions() {
    var pod282 = $(".pod282").size();
    //if there are pod282s on the page load the .accordian
    if (pod282 > 0) {

    	if (selected_one){
            var selected_one = selected_one;
        } else {
        	var selected_one = 0;
        }

        $('.pod282').css({visibility: "visible", overflow: "hidden"});
        if($.browser.msie){
            $('.pod282').accordion({
                header: '.heading',
                selectedClass: 'open',
                event: 'click',
                active: selected_one,
                autoHeight: false,
                clearStyles: true,
                animated: false
            });
        }
        else{
            $('.pod282').accordion({
                header: '.heading',
                selectedClass: 'open',
                event: 'click',
                active: selected_one
            });
        }
    }
} // end instantiate_accordions

function instantiate_defaultText(element) {
    $(element).each(function() {
        if ($(this).val() != $(this)[0].defaultValue) {
            if ($(this).val() == "") {
                $(this).val($(this)[0].defaultValue);
            }
            else {
                // The current value (likely what the user entered before a refresh) isn't the default value, so don't format it as such
                $(this).css("text-align", "left");
            }
        }
    });
} // end instantiate_defaultText()

function instantiate_featuresTabs() {
    var features_tabs = $(".features-tabs").size();
    //if the features-tabs id is used on the page load the .tabs
    if (features_tabs!=0) {
        $('.features-tabs').tabs();
        $('#feature_spec_wrapper > div').hide(); //hides all of them
        //detect if any tds are empty or are "no"
        //delete the tr that contains the offensive td
        $(".table-content td").each(function (i) {
            var thisText = $(this).text();
            if (thisText.length == 0 || thisText == "no" || thisText == "N/A") {
                var thisParent = $(this).parent();
                thisParent.remove();
            }
            if (thisText == "yes") {
                $(this).remove();
            }
        });
        format_stripeTable();
    }
}

function instantiate_findDealerMap() {
    var init = $('#findDealerMap').size();
    if (init!=0) {
        begin_findDealerMap();
    }
} // end instantiate_findDealerMap()

function instantiate_findDealerResult() {
    var init = $('#find_dealer_result').size();
    if (init != 0) {
  		if (noPreferredDealer) {
  			// set the variables
        var dealerId;
        var dealerName;
        var dealerAddress;
        var dealerCity;
        var dealerState;
        var dealerZip;
        var dealerPhone;
        var dealerLink;
        var dealerDistance;
        var inventoryUrl = "";
        var dealereStoreFlag;

        // get the dealer info
        // check for the cookie

        var myDealerInfo = $.cookie('myDealerInfo');

        if (myDealerInfo) {
            // build the drop-down from the cookie
            var myDealerInfoArray = myDealerInfo.split("~");

            dealerId 		= myDealerInfoArray[0];
            dealerName 		= myDealerInfoArray[1];
            dealerAddress 	= myDealerInfoArray[2];
            dealerCity 		= myDealerInfoArray[3];
            dealerState 	= myDealerInfoArray[4];
            dealerZip 		= myDealerInfoArray[5];
            dealerPhone 	= myDealerInfoArray[6];
            dealerLink 		= myDealerInfoArray[7];
            dealerDistance 	= myDealerInfoArray[8];
            dealereStoreFlag = myDealerInfoArray[9];
        }
        else {
            var dealerInfo = get_dealers(dealerSearchString);

            $(dealerInfo.responseXML).find("marker").each(function(index, thisElement) {
                //alert("index: "+index+"\ndistance: "+distance+"\nsearchRadius: "+searchRadius);
                if (index == 0) {
                    // set the variables
                    dealerId 		= $(thisElement).attr("id");
                    dealerName 		= $(thisElement).attr("name");
                    dealerAddress 	= $(thisElement).attr("street");
                    dealerCity 		= $(thisElement).attr("city");
                    dealerState 	= $(thisElement).attr("state");
                    dealerZip 		= $(thisElement).attr("zipcode");
                    dealerPhone 	= $(thisElement).attr("phone");
                    dealerLink 		= $(thisElement).attr("link");
                    dealerDistance 	= $(thisElement).attr("distance");
                    dealerStoreFlag = $(thisElement).attr("eStoreFlag");

                    // create a cookie and save the dealer's info to it
                    var saveDealerInfo = dealerId+"~"+dealerName+"~"+dealerAddress+"~"+dealerCity+"~"+dealerState+"~"+dealerZip+"~"+dealerPhone+"~"+dealerLink+"~"+dealerDistance+"~"+dealereStoreFlag;
                    $.cookie("myDealerInfo", saveDealerInfo, { path: linkPrefix });
                }
            });
        }

  	    // build the drop-down
  	    if (dealerName === undefined) {
  	      $('#find_dealer_result').removeClass("n_find_hover");
  	      $('a.d_name, a.d_change').hide();
  	      $('#form_find_dealer_header').show();
  	    }
  	    else {
  	      $('#find_dealer_result').addClass("n_find_hover");
  	      $('a.d_name').empty().append(dealerName).attr('href', dealerLink).show();
  	      $('a.d_change').show();
    			$('p.d_street').empty().append(dealerAddress);
    			$('p.d_csz').empty().append(dealerCity+", "+dealerState+" "+dealerZip);
    			$('p.d_phone').empty().append(dealerPhone);
    			$('a.d_website').attr('href', dealerLink);

    			// create the deeplinks
    			inventoryUrl 	  = "/link?program=soa&page=NEW_INVENTORY";
    	    quickQuoteUrl 	= "/link?program=soa&page=FINANCE_CENTER";
    	    applyNowUrl 	  = "/link?program=soa&page=FINANCE_FORM";
    	    specialOffersUrl = "/link?program=soa&page=SPECIAL_OFFERS";
    	    trademotionUrl 	= "http://parts.subaru.com?dealercode="+dealerId;

    			$('a.d_hours').attr('href', dealerLink+'/contact-form.htm');
    			$('a.d_offers').attr('href', dealerLink+specialOffersUrl);
    			$('a.d_inventory').attr('href', dealerLink+inventoryUrl);
    			//$('a.d_quote').attr('href', dealerLink+quickQuoteUrl);
    			$('a.d_parts').attr("href", trademotionUrl);
  	    }


  			/*
  			if (dealerStoreFlag =="true") {
  				$('a.d_parts').attr("href", trademotionUrl);
  			}
  			else {
  				$('a.d_parts').attr("style", "display:none");
  			}
  			*/
  		}
      else {
        $('#find_dealer_result').addClass("n_find_hover");
        $('a.d_change').show();
      }
    }else{
    	$('a.d_name, a.d_change').hide();
    }
} // end instantiate_findDealerResult

function instantiate_getMoreGsTabs(){
    var init = $(".get_more_gs-tabs").size();
    if (init!=0) {
        $('.get_more_gs-tabs').tabs();
    }
}

function instantiate_handrail() {
   $.fn.superfish = function(op){

        var sf = $.fn.superfish,
            c = sf.c,
            $arrow = $(['<span class="',c.arrowClass,'"</span>'].join('')),
            over = function(){
                var $$ = $(this), menu = getMenu($$);
                clearTimeout(menu.sfTimer);
                $$.showSuperfishUl().siblings().hideSuperfishUl();
            },
            out = function(){
                var $$ = $(this), menu = getMenu($$), o = sf.op;
                clearTimeout(menu.sfTimer);
                menu.sfTimer=setTimeout(function(){
                    o.retainPath=($.inArray($$[0],o.$path)>-1);
                    $$.hideSuperfishUl();
                    if (o.$path.length && $$.parents(['li.',o.hoverClass].join('')).length<1){over.call(o.$path);}
                },o.delay);
            },
            getMenu = function($menu){
                var menu = $menu.parents(['ul.',c.menuClass,':first'].join(''))[0];
                sf.op = sf.o[menu.serial];
                return menu;
            },
            addArrow = function($a){ $a.addClass(c.anchorClass).append($arrow.clone()); };

        return this.each(function() {
            var s = this.serial = sf.o.length;
            var o = $.extend({},sf.defaults,op);
            o.$path = $('li.'+o.pathClass,this).slice(0,o.pathLevels).each(function(){
                $(this).addClass([o.hoverClass,c.bcClass].join(' '))
                    .filter('li:has(ul)').removeClass(o.pathClass);
            });
            sf.o[s] = sf.op = o;

            $('li:has(ul)',this)[($.fn.hoverIntent && !o.disableHI) ? 'hoverIntent' : 'hover'](over,out).each(function() {
                if (o.autoArrows) addArrow( $('>a:first-child',this) );
            })
            .not('.'+c.bcClass)
                .hideSuperfishUl();

            var $a = $('a',this);
            $a.each(function(i){
                var $li = $a.eq(i).parents('li');
                $a.eq(i).focus(function(){over.call($li);}).blur(function(){out.call($li);});
            });
            o.onInit.call(this);

        }).each(function() {
            var menuClasses = [c.menuClass];
            if (sf.op.dropShadows  && !($.browser.msie && $.browser.version < 7)) menuClasses.push(c.shadowClass);
            $(this).addClass(menuClasses.join(' '));
        });
    };

    var sf = $.fn.superfish;
    sf.o = [];
    sf.op = {};
    sf.IE7fix = function(){
        var o = sf.op;
        if ($.browser.msie && $.browser.version > 6 && o.dropShadows && o.animation.opacity!=undefined)
            this.toggleClass(sf.c.shadowClass+'-off');
        };
    sf.c = {
        bcClass     : 'sf-breadcrumb',
        menuClass   : 'sf-js-enabled',
        anchorClass : 'sf-with-ul',
        arrowClass  : 'sf-sub-indicator',
        shadowClass : 'sf-shadow'
    };
    sf.defaults = {
        hoverClass  : 'sfHover',
        pathClass   : 'overideThisToUse',
        pathLevels  : 1,
        delay       : 0,
        animation   : {opacity:'show'},
        speed       : 800,
        autoArrows  : false,
        dropShadows : false,
        disableHI   : false,        // true disables hoverIntent detection
        onInit      : function(){}, // callback functions
        onBeforeShow: function(){},
        onShow      : function(){},
        onHide      : function(){}
    };
    $.fn.extend({
        hideSuperfishUl : function(){
            var o = sf.op,
                not = (o.retainPath===true) ? o.$path : '';
            o.retainPath = false;
            var $ul = $(['li.',o.hoverClass].join(''),this).add(this).not(not).removeClass(o.hoverClass)
                    .find('>ul').hide().css('visibility','hidden');
            o.onHide.call($ul);
            return this;
        },
        showSuperfishUl : function(){
            var o = sf.op,
                sh = sf.c.shadowClass+'-off',
                $ul = this.addClass(o.hoverClass)
                    .find('>ul:hidden').css('visibility','visible');
            sf.IE7fix.call($ul);
            o.onBeforeShow.call($ul);
            $ul.animate(o.animation,o.speed,function(){ sf.IE7fix.call($ul); o.onShow.call($ul); });
            return this;
        }
    });
    $('ul.sf-menu').superfish();


    $('.sf-menu > li > a').hover(
		function() {
			var v_rel = $(this).attr('rel').split("~");
			var v_model = v_rel[0];
			var modeYear = v_rel[1].substring(2, 4);
			var handrail = $(this).siblings('.handrail_hover');
			var v_img_loaded = $(handrail).find('li > .vehicle_card > a img').hasClass('v_img_loaded');
			if (!v_img_loaded) {
				var image_path = pathPrefix;
				image_path += "images/my"+modeYear+"/" + v_model +"/handrailpopup.jpg";
				var v_img = '<img class="v_img_loaded" src="'+image_path+'" alt="'+v_model+' image" />';
				var handrail = $(this).siblings('.handrail_hover');
				$(handrail).find('li > .vehicle_card > a').append(v_img);
			}
		},
		function() {
		}
	);
} // end instantiate_handrail

function instantiate_omniture() {
  // links - Global Nav - "gn"
  $('#nav_primary .n_drop a.drop_down, #nav_primary .n_vehicles a.drop_down, #nav_primary .n_home a, #nav_primary .n_build a').click(function(e) {
    //e.preventDefault();
    var linkName = $(this).attr('href');
    var s = s_gi(s_account);
    s.linkTrackVars='None';
    s.linkTrackEvents='None';
    var thisPage = s.pageName.replace("subaru:", "");
    s.tl(this, 'o', thisPage+"|gn|"+linkName);
    //console.log(this, 'o', thisPage+"|gn|"+linkName);
    //return false;
  });

  // links - Global Nav - "gn_dd"
  $('#nav_primary .n_vehicles a.v_model, #nav_primary .n_vehicles .v_links a, #nav_primary .n_drop ul a').click(function(e) {
    //e.preventDefault();
    var linkName = $(this).attr('href');
    var s = s_gi(s_account);
    s.linkTrackVars='None';
    s.linkTrackEvents='None';
    var thisPage = s.pageName.replace("subaru:", "");
    s.tl(this, 'o', thisPage+"|gn_dd|"+linkName);
    //console.log(this, 'o', thisPage+"|gn_dd|"+linkName);
    //return false;
  });

  // links - Global Nav - "gn_fo"
  $('#nav_primary .n_vehicles .flyout .v_drop ul a').live('click', function(e) {
    //e.preventDefault();
    var linkName = $(this).attr('href');
    var s = s_gi(s_account);
    s.linkTrackVars='None';
    s.linkTrackEvents='None';
    var thisPage = s.pageName.replace("subaru:", "");
    s.tl(this, 'o', thisPage+"|gn_fo|"+linkName);
    //console.log(this, 'o', thisPage+"|gn_fo|"+linkName);
    //return false;
  });

  // links - Global Nav - "hero"
  $('.home .rotator li a').live('click', function(e) {
      //e.preventDefault();
      var linkName = $(this).attr('href');
      var s = s_gi(s_account);
      s.linkTrackVars='None';
      s.linkTrackEvents='None';
      var thisPage = s.pageName.replace("subaru:", "");
      s.tl(this, 'o', thisPage+"|hero|"+linkName);
      //console.log(this, 'o', thisPage+"|hr|"+linkName);
      //return false;
  });

  // links - Global Nav - "hr"
  $('.home a.oct_link_handrail').live('click', function(e) {
      //e.preventDefault();
      var linkName = $(this).attr('href');
      var s = s_gi(s_account);
      s.linkTrackVars='None';
      s.linkTrackEvents='None';
      var thisPage = s.pageName.replace("subaru:", "");
      s.tl(this, 'o', thisPage+"|hr|"+linkName);
      //console.log(this, 'o', thisPage+"|hr|"+linkName);
      //return false;
  });

  // links - Global Nav - "hr_fo"
  $('.home .handrail .handrail_hover li a').live('click', function(e) {
      //e.preventDefault();
      var linkName = $(this).attr('href');
      var s = s_gi(s_account);
      s.linkTrackVars='None';
      s.linkTrackEvents='None';
      var thisPage = s.pageName.replace("subaru:", "");
      s.tl(this, 'o', thisPage+"|hr_fo|"+linkName);
      //console.log(this, 'o', thisPage+"|hr_fo|"+linkName);
      //return false;
  });

  // links - Global Nav - "pod"
  $('.home .pod282 a.read_more').live('click', function() { // link - podz - readmore - homepage
      //e.preventDefault();	  
      var linkName = $(this).attr('href');
      var s = s_gi(s_account);
      s.linkTrackVars='None';
      s.linkTrackEvents='None';
      var thisPage = s.pageName.replace("subaru:", "");
      s.tl(this, 'o', thisPage+"|pod|"+linkName);
      //console.log(this, 'o', thisPage+"|pod|"+linkName);
      //return false;
  });

  // links - Global Nav - Form - Search


    $('.rally .left a').live('click', function(e) {
        var linkName = $(this).attr('href');
        var s = s_gi(s_account);
        s.tl(this, 'o', s.pageName+'~rally_link_left~'+linkName);
    });

    $('.rally .right a').live('click', function(e) {
        var linkName = $(this).attr('href');
        var s = s_gi(s_account);
        s.tl(this, 'o', s.pageName+'~rally_link_right~'+linkName);
    });

    // link - brochure
    $('a.brochure').attr("target","_blank");
    $('a.brochure').live('click', function(event) {
        /*
        var s = s_gi('s_account');
        s.tl(this, 'd', $(this).text() );
        */
        var brochureInfo = $(this).attr("title");
        BroDL(brochureInfo);
        return true;
    });
    $('a.oct_link_brochure').live('click', function() {
        var brochureInfo = $(this).attr("title");
        BroDL(brochureInfo);
    });

    // link - dealer - directions
    $('a.oct_link_dealerDirections').live('click', function() {
        var dealerInfo = $(this).attr("title");
        DD(dealerInfo);
    });

    // link - dealer - external website
    $('a.oct_link_dealer, a.oct_link_dealerWebsite, #find_dealer_result a.d_name, #fdr_detail a.d_website').live('click', function() {
        var dealerInfo = $(this).attr("title");
        DL(dealerInfo);
    });

    // link - dealer - hours of operation
    $('.oct_link_dealerHours, #fdr_detail a.d_hours').live('click', function() {
        var dealerInfo = $(this).attr("title");
        DOH(dealerInfo);
    });

    // link - dealer - inventory
    $('.oct_link_inventory, #fdr_detail a.d_inventory').live('click', function() {
        var dealerInfo = $(this).attr("title");
        VI(dealerInfo);
    });

    // link - dealer - service
    $('.oct_link_dealerScheduleService').click(function () {
        var s = s_gi(s_account);
        s.linkTrackEvents = "event29";
        s.events = "event29";
        s.tl(this, 'o', 'my-subaru:schedule_service_appointment');
    });

    // link - dealer - special offers
    $('.oct_link_dealerOffers, #fdr_detail a.d_offers').live('click', function() {
        var dealerInfo = $(this).attr("title");
        DSO(dealerInfo);
    });

    // link - partner
    $('.oct_link_partner').click(function() {
        var linkname = $(this).text();
        var s = s_gi(s_account);
        s.tl(this,'o','my-subaru:partner_link:'+linkname);
    });

    // link - OE - forgot email
    $('#login-wrapper #login-forgot-email').click(function() {
      var s = s_gi(s_account);
      s.linkTrackVars = "s.prop37";
      s.linkTrackEvents = "None";
      s.prop37 = "my-subaru:forgot_email";
      s.tl(this, 'o', 'my-subaru:forgot_email');
    });
    
    // link - OE - forgot password
    $('#login-wrapper #login-forgot-password').click(function() {
      var s = s_gi(s_account);
      s.linkTrackVars = "s.prop37";
      s.linkTrackEvents = "None";
      s.prop37 = "my-subaru:forgot_password";
      s.tl(this, 'o', 'my-subaru:forgot_password');
    });
    
    // link - OE - General - Content area
    $('#owners_content_container a').click(function() {
      var linkName = $(this).text();
      var s = s_gi(s_account);
      s.linkTrackVars = "s.prop37";
      s.linkTrackEvents = "None";
      s.tl(this, 'o', s.pageName+'|Content|'+linkName);
    });
      
    // link - OE - General - Left Side
    $('#owners-vehicleNavigation a').click(function() {
      var linkName = $(this).attr('href');
      var s = s_gi(s_account);
      s.linkTrackVars = "s.prop37";
      s.linkTrackEvents = "None";
      s.prop37 = s.pageName+'|Lft_nav|'+linkName;
      s.tl(this, 'o', s.pageName+'|Lft_nav|'+linkName);
    });
    
    // link - OE - General - Secondary Nav
    $('#owners-vehicleHeader a').click(function() {
      var linkName = $(this).attr('href');
      var s = s_gi(s_account);
      s.linkTrackVars = "s.prop37";
      s.linkTrackEvents = "None";
      s.prop37 = s.pageName+'|Second|'+linkName;
      s.tl(this, 'o', s.pageName+'|Second|'+linkName);
    });
    
    // link - OE - Profile - Edit
    $('#owners-my-profile-wrapper #open-edit-profile').click(function() {
      s = s_gi(s_account);
      s.linkTrackVars = "prop37"; 
      s.linkTrackEvents = "None";
      s.prop37 = "my-subaru_profile|left|edit_my_profile";
      s.tl(this,'o','my-subaru_profile|left|edit_my_profile');
    });
    
    // link - OE - Profile - Interest Update
    $('#owners-myInterests #updateInterestsLink').click(function() {
      s = s_gi(s_account);
      s.linkTrackVars = "prop37"; 
      s.linkTrackEvents = "None";
      s.prop37 = "my-subaru_profile|left|add_a_vehicle";
      s.tl(this,'o','my-subaru_profile|left|add_a_vehicle');
    });
    
    // link - OE - Profile - Vehicle Add
    $('#owners-my-vehicles-wrapper #my-vehicle-add').click(function() {
      s = s_gi(s_account);
      s.linkTrackVars = "prop37"; 
      s.linkTrackEvents = "None";
      s.prop37 = "my-subaru_profile|left|add_a_vehicle";
      s.tl(this,'o','my-subaru_profile|left|add_a_vehicle');
    });
    
    // link - OE - Profile - Vehicle Overview
    $('#owners-my-vehicles-wrapper .owners-vehicle a').click(function() {
      s = s_gi(s_account);
      s.linkTrackVars = "prop37";
      s.linkTrackEvents = "None";
      s.prop37 = "my-subaru_profile|left|vehicle_overview";
      s.tl(this,'o','my-subaru_profile|left|vehicle_overview');
    });
    
    // link - OE - Profile - Vehicle Delete Build
    $('#built-vehicle-container .deleteBuiltVehicle').click(function() {
      s = s_gi(s_account);
      s.linkTrackVars = "prop37";
      s.linkTrackEvents = "None";
      s.prop37 = "my-subaru_profile|left|delete_built_vehicle";
      s.tl(this,'o','my-subaru_profile|left|delete_built_vehicle');
    });
    
    // link - OE - Profile - Vehicle View
    $('#built-vehicle-container .builtVehicleDetail').click(function() {
      s = s_gi(s_account);
      s.linkTrackVars = "prop37";
      s.linkTrackEvents = "None";
      s.prop37 = "my-subaru|left|vehicle_overview";
      s.tl(this,'o','my-subaru|left|vehicle_overview');
    });
    
    // link - OE - Window - Recall - Schedule
    $('#recall_schedule').click(function() {
      s = s_gi(s_account);
      s.linkTrackVars = "prop37";
      s.linkTrackEvents = "None";
      s.prop37 = "my-subaru|left|record_this_service";
      s.tl(this,'o','my-subaru|left|schedule_this_recall_service');
    });
    
    // link - OE - Service Coupons - Print 
    $('.print-button a').live('click', function() {
      var coupon_name = $(this).parent().parent().next('h4').text();
      s = s_gi(s_account);
      s.linkTrackVars = "prop37,events";
      s.linkTrackEvents = "event30";
      s.prop37 = "my-subaru|print_coupon|"+coupon_name;
      s.events = "event30";
      s.tl(this,'o','my-subaru|print_coupon|'+coupon_name);
    });
    
    // link - OE - Window - Service - Record
    $('.openRecordService').click(function() {
      s = s_gi(s_account);
      s.linkTrackVars = "prop37";
      s.linkTrackEvents = "None";
      s.prop37 = "my-subaru|left|record_this_service";
      s.tl(this,'o','my-subaru|left|record_this_service');
    });
    
    // link - OE - Window - Service - Schedule
    $('a#shedule').click(function() {
      s = s_gi(s_account);
      s.linkTrackVars = "prop37";
      s.linkTrackEvents = "None";
      s.prop37 = "my-subaru|left|schedule_this_service";
      s.tl(this,'o','my-subaru|left|schedule_this_service');
    });
    
    // linke - OE - Window - Service Record - Delete
    $('a.deleteServiceRecordLink').click(function() {
      s = s_gi(s_account);
      s.linkTrackVars = "prop37";
      s.linkTrackEvents = "None";
      s.prop37 = "my-subaru|left|delete_this_service_entry";
      s.tl(this,'o','my-subaru|left|delete_this_service_entry');
    });
    
    // link - OE - Window - Service Record - Edit
    $('a.openUpdateServiceRecordLink').click(function() {
      s = s_gi(s_account);
      s.linkTrackVars = "prop37";
      s.linkTrackEvents = "None";
      s.prop37 = "my-subaru|left|edit_this_service_entry";
      s.tl(this,'o','my-subaru|left|edit_this_service_entry');
    });
    
    // link - subaruGear
    $('.oct_link_subaruGear, #fdr_detail a.d_parts').live('click', function() {
        var linkName = $(this).attr('href');
        SG(linkName);
    });

    // link - VME Overview Primary Nav
    $('.vehicles #header a').click(function(){
            var linkName = $(this).attr('href');
            var s = s_gi(s_account);
            s.linkTrackVars = "None";
            s.linkTrackEvents = "None";
            s.tl(this, 'o', s.pageName+'|vm|primary_nav|'+linkName);

    });

    // link - VME Overview Secondary Nav
    $('.vehicles .omniture_secondary_nav a').click(function(){
        var linkName = $(this).attr('href');
        var s = s_gi(s_account);
        s.linkTrackVars = "None";
        s.linkTrackEvents = "None";
        s.tl(this, 'o', s.pageName+'|vm|secondary_nav|'+linkName);

    });

    // link - VME Overview Hero
    $('.vehicles .image_hero_overview #vehicle_info a').click(function() {
        var linkName = $(this).attr('href');
        var s = s_gi(s_account);
        s.linkTrackVars = "None";
        s.linkTrackEvents = "None";
        s.tl(this, 'o', s.pageName+'|vm|hero_image|'+linkName);
    });

    // link - VME Overview Tabs Overview
    $('.vehicles .vehicle_overview_tabs .omniture_trim_nav a').click(function(){
        var linkName = $(this).attr('href');
        var trimLevel = $(this).attr('rel');
        var s = s_gi(s_account);
        s.linkTrackVars = "None";
        s.linkTrackEvents = "None";
        if (trimLevel == " "){
            var trackVars = s.pageName+'|vm|trim_nav|'+linkName;
        } else {
            var trackVars = s.pageName+'|vm|trim_nav|'+trimLevel+'|'+linkName;
        }

        s.tl(this, 'o', trackVars);
    });

    // link - VME Overview Tabs Trims
    $('.vehicles .vehicle_overview_tabs .overview_tab_wrapper a').click(function() {
      var linkName = $(this).attr('title');
      var s = s_gi(s_account);
      s.linkTrackVars = "None";
      s.linkTrackEvents = "None";
      s.tl(this, 'o', s.pageName+'|vm|trim_nav|'+linkName);
      return true;
    });

    // link - VME Overview News Pods
    $('.vehicles .omniture_vme_pod a').click(function(){
        var linkName = $(this).attr('href');
        var s = s_gi(s_account);
        s.linkTrackVars = "None";
        s.linkTrackEvents = "None";
        s.tl(this, 'o', s.pageName+'|vm|pod|'+linkName);
    });

    // link VME - Features Page - Compare Component
    $('.vehicles .omniture_next_nav a').click(function(){
        var linkName = $(this).attr('href');
        var s = s_gi(s_account);
        s.linkTrackVars = "None";
        s.linkTrackEvents = "None";
        s.tl(this, 'o', s.pageName+'|vm|next_nav|'+linkName);
    });

    // link VME - Compare page - Build Nav
    $('.vehicles .omniture_build_nav a').click(function(){
            var linkName = $(this).attr('href');
            var trimLevel = $(this).attr('rel');
            var s = s_gi(s_account);
            s.linkTrackVars = "None";
            s.linkTrackEvents = "None";
            if (trimLevel == " "){
                var trackVars = s.pageName+'|vm|build_nav|'+linkName;
            } else {
                var trackVars = s.pageName+'|vm|build_nav|'+trimLevel+'|'+linkName;
            }

            s.tl(this, 'o', trackVars);
    });

    // checkboxes VME - Compare Page - Filter_Nav
    $('.vehicles .omniture_filter_nav .checkbox').click(function(){
        var filterName = $(this).next().attr('class');
        var s = s_gi(s_account);
        s.linkTrackVars = "None";
        s.linkTrackEvents = "None";
        s.tl(this, 'o', s.pageName+'|vm|filter_nav|'+filterName);
    });

    // link VME - Compare Page - Tools Nav
    $('.vehicles .omniture_print_nav a').click(function(){
        var linkName = $(this).attr('title');
        var s = s_gi(s_account);
        s.linkTrackVars = "None";
        s.linkTrackEvents = "None";
        s.tl(this, 'o', s.pageName+'|vm|tools_nav|'+linkName);
    });

    // link VME - Build Page - Build Button
    $('.vehicles .vehicle_build').on('click', "a", function() {
        var trimLevel = $(this).attr('rel');
        var s = s_gi(s_account);
        s.linkTrackVars = "None";
        s.linkTrackEvents = "None";        
        s.tl(this, 'o', s.pageName+'|vm|build|'+trimLevel);
    });

    // VME - Expand / Contract GroupNames
    $('.vehicles .group_name').click(function(){
        var title = $(this).attr('title');
        var s = s_gi(s_account);
        s.linkTrackVars = "None";
        s.linkTrackEvents = "None";
        s.tl(this, 'o', s.pageName+'|vm|feature_group_expand-collapse|'+title);
    });

    // VME - Expand / Contract Features
    $('.vehicles .first_title_td').click(function(){
        var title = $(this).attr('title');
        var s = s_gi(s_account);
        s.linkTrackVars = "None";
        s.linkTrackEvents = "None";
        s.tl(this, 'o', s.pageName+'|vm|feature_expand-collapse|'+title);
    });

    // VME - Compare Page Download Brochure
    $('.vehicles .feat_tools_download a').click(function(){
        var brochureInfo = $(this).attr("title");
        BroDL(brochureInfo);
        return true;
    });

    // VME - thank you page brochure download
    $('.vmc_thankyou .thankyou .carLink a').click(function(){
        var brochureInfo = $(this).attr("title");
        BroDL(brochureInfo);
        return true;
    });

    // VME - features page - expand / contract features
    $('.vehicles .key_features_rollable').click(function(){
        var title = $(this).attr('title');
        var s = s_gi(s_account);
        s.linkTrackVars = "None";
        s.linkTrackEvents = "None";
        s.tl(this, 'o', s.pageName+'|vm|feature_expand-collapse|'+title);
    });
	
	// Dog Tested Landing Page Links
    $('.dogs_tested .content a.appLink, .oct_link_dogSearchNow, .oct_link_learnMoreASPCA').click(function(){      
		var description = $(this).attr('rel');			
		var s=s_gi(s_account); 
		s.linkTrackVars='None';
		s.linkTrackEvents='None';
		s.tl(this,'e',s.pageName + ':dog_tested:' + description);
    });
	
    // Dog Tested Download Link
    $('.dogs_tested .download a.downloadLink').click(function(){      
		var fileTitle = $(this).attr('href');		
		fileTitle = fileTitle.substring(fileTitle.lastIndexOf('/')+1);		
		var s=s_gi(s_account); 
		s.linkTrackVars='None';
		s.linkTrackEvents='None';
		s.tl(this,'d',s.pageName + ':dog_tested:' + fileTitle);
    });
	
	
}

function instantiate_omniture_ie6(){
    // link - VME Overview Primary Nav
    $('.vehicles #header a').click(function(){
            var linkName = $(this).attr('href');
            var s = s_gi(s_account);
            s.linkTrackVars = "None";
            s.linkTrackEvents = "None";
            s.tl(this, 'o', s.pageName+'|vm|primary_nav|'+linkName);

    });

    // link - VME Overview Secondary Nav
    $('.vehicles .omniture_secondary_nav a').click(function(){
            var linkName = $(this).attr('href');
            var s = s_gi(s_account);
            s.linkTrackVars = "None";
            s.linkTrackEvents = "None";
            s.tl(this, 'o', s.pageName+'|vm|secondary_nav|'+linkName);

    });

    // link - VME Overview Tabs
    $('.vehicles .vehicle_overview_tabs .omniture_trim_nav a').click(function(){
        var linkName = $(this).attr('href');
        var trimLevel = $(this).attr('rel');
        var s = s_gi(s_account);
        s.linkTrackVars = "None";
        s.linkTrackEvents = "None";
        if (trimLevel == " "){
            var trackVars = s.pageName+'|vm|trim_nav|'+linkName;
        } else {
            var trackVars = s.pageName+'|vm|trim_nav|'+trimLevel+'|'+linkName;
        }

        s.tl(this, 'o', trackVars);
    });

    // link - VME Overview News Pods
    $('.vehicles .omniture_vme_pod a').click(function(){
        var linkName = $(this).attr('href');
        var s = s_gi(s_account);
        s.linkTrackVars = "None";
        s.linkTrackEvents = "None";
        s.tl(this, 'o', s.pageName+'|vm|pod|'+linkName);
    });

    // link VME - Features Page - Compare Component
    $('.vehicles .omniture_next_nav a').click(function(){
        var linkName = $(this).attr('href');
        var s = s_gi(s_account);
        s.linkTrackVars = "None";
        s.linkTrackEvents = "None";
        s.tl(this, 'o', s.pageName+'|vm|next_nav|'+linkName);
    });

    // link VME - Compare page - Build Nav
    $('.vehicles .omniture_build_nav a').click(function(){
            var linkName = $(this).attr('href');
            var trimLevel = $(this).attr('rel');
            var s = s_gi(s_account);
            s.linkTrackVars = "None";
            s.linkTrackEvents = "None";
            if (trimLevel == " "){
                var trackVars = s.pageName+'|vm|build_nav|'+linkName;
            } else {
                var trackVars = s.pageName+'|vm|build_nav|'+trimLevel+'|'+linkName;
            }

            s.tl(this, 'o', trackVars);
    });

    // checkboxes VME - Compare Page - Filter_Nav
    $('.vehicles .omniture_filter_nav .checkbox').click(function(){
        var filterName = $(this).next().attr('class');
        var s = s_gi(s_account);
        s.linkTrackVars = "None";
        s.linkTrackEvents = "None";
        s.tl(this, 'o', s.pageName+'|vm|filter_nav|'+filterName);
    });

    // link VME - Compare Page - Tools Nav
    $('.vehicles .omniture_print_nav a').click(function(){
        var linkName = $(this).attr('title');
        var s = s_gi(s_account);
        s.linkTrackVars = "None";
        s.linkTrackEvents = "None";
        s.tl(this, 'o', s.pageName+'|vm|tools_nav|'+linkName);
    });

    // link VME - Build Page - Build Button
    $('.vehicles .vehicle_build').on('click', "a", function(){
        var trimLevel = $(this).attr('rel');
        var s = s_gi(s_account);
        s.linkTrackVars = "None";
        s.linkTrackEvents = "None";
        s.tl(this, 'o', s.pageName+'|vm|build|'+trimLevel);
    });

    // VME - Expand / Contract GroupNames
    $('.vehicles .group_name').click(function(){
        var title = $(this).attr('title');
        var s = s_gi(s_account);
        s.linkTrackVars = "None";
        s.linkTrackEvents = "None";
        s.tl(this, 'o', s.pageName+'|vm|feature_group_expand-collapse|'+title);
    });

    // VME - Expand / Contract Features
    $('.vehicles .first_title_td').click(function(){
        var title = $(this).attr('title');
        var s = s_gi(s_account);
        s.linkTrackVars = "None";
        s.linkTrackEvents = "None";
        s.tl(this, 'o', s.pageName+'|vm|feature_expand-collapse|'+title);
    });

    // VME - Compare Page Download Brochure
    $('.vehicles .feat_tools_download a').click(function(){
        var brochureInfo = $(this).attr("title");
        BroDL(brochureInfo);
        return true;
    });

    // VME - features page - expand / contract features
    $('.vehicles .key_features_rollable').click(function(){
        var title = $(this).attr('title');
        var s = s_gi(s_account);
        s.linkTrackVars = "None";
        s.linkTrackEvents = "None";
        s.tl(this, 'o', s.pageName+'|vm|feature_expand-collapse|'+title);
    });
}

function instantiate_omnitureMediaTracking() {
    var init = $(".oct_media_tracking").size();
    if (init!=0) {
        var host = (document.referrer.length > 0) ? get_uriParts(document.referrer).host : document.referrer;
        if (host.length == 0 || host == "subaru.com") {
            var trackType = $.getUrlVar('trackType');
            var trackData = $.getUrlVar('trackData');
            var mediaName = $.getUrlVar('mediaName');
            var mediaTimeStamp = $.getUrlVar('mediaTimeStamp');
            switch(trackType) {
                case "track_link":
                    s.tl(host, 'o', trackData);
                    break;
                case "track_page":
                    s.pageName = trackData;
                    s.track();
                    break;
                case "track_media_open":
                    s.Media.open(trackData, mediaTimeStamp, mediaName);
                    break;
                case "track_media_play":
                    s.Media.play(trackData, mediaTimeStamp);
                    break;
                case "track_media_stop":
                    s.Media.stop(trackData, mediaTimeStamp);
                    break;
                case "track_media_close":
                    s.Media.close(trackData);
                    break;
                case "track_media_seconds":
                    s.Media.track(trackData);
                    break;
            }
        }
        else { // third party site

        }
    }
}

function instantiate_rotator() {
    //the variables
    var sinceLast = 0;
    var heroTimer = 4000;
    var heroHover = false;
    var timingArray = new Array();
    var curAdj = 1;

    //this is called from the rotator

    function makeHandrailHover(){
        var pod282_open = $("#detergent950 .rotator" + " .pod282_open").size();
            if (pod282_open !=0) {
                $("#detergent950 .rotator" + ' .pod282_open').css({'visibility':'visible'});
                $("#detergent950 .rotator" + ' .pod282_open').accordion({
                    header: '.heading',
                    selectedClass: 'open',
                    event: 'click',
                    active: 0,
                    collapsible: false
                });
            }

        var pod282_closed = $("#detergent950 .rotator" + " .pod282_closed").size();
            if (pod282_closed !=0) {
                $("#detergent950 .rotator" + ' .pod282_closed').css({'visibility':'visible'});
                $("#detergent950 .rotator" + ' .pod282_closed').accordion({
                    header: '.heading',
                    selectedClass: 'open',
                    event: 'click',
                    active: false,
                    collapsible: true
                });
            }

        $('#detergent950 .handrail').hover(function() {
            $('#detergent950 .heroMenuHover').fadeOut(100);
        },
        function () {
            $('#detergent950 .heroMenuHover').fadeIn(300);
        });
    }
} // end instantiate_rotator

function instantiate_specialOffersPage() {
    var init = $(".specialOffer_checkboxes").size();
    if(init) {
		$('.specialOffer_checkboxes input').each(function() {
			if (defaultCheckbox == "all") {
				$(this).attr('checked', false);
			}
			else {
				if ($(this).attr("value") == defaultCheckbox){
					$(this).attr('checked', true);
				}
			}
		});

		var checked_total = $('.specialOffer_checkboxes input:checked').size();
        var checked_programs = $('.specialOffer_checkboxes input.program:checked').size();
        var checked_vehicles = $('.specialOffer_checkboxes input.vehicle:checked').size();

		update_specialOffers(checked_total, checked_programs, checked_vehicles);
		listen_specialOffersChangeCheckboxes();
        listen_specialOffersCountShown();
		listen_specialOffersHideShowDetailsLinks();
    }
}

function instantiate_specialOffersPage_MySubaru(){
    var init = $(".mysub-specialOffers").size();
    if (init){
            $(".specialOffers .specialOfferItem").each(function(){
                var superSpecialOffer = $(this).find("h2 a").text();
        if (superSpecialOffer == "College Graduate Program" || superSpecialOffer == "Free Vehicle Inspection" || superSpecialOffer == "Genuine Subaru Cabin Air Filter" ){
               $(this).find("h2").remove();
               $(this).find(".specialOffersLinkWrapper").remove();
               $(this).find(".msrp").remove();
               $(this).find("p.toggle_close").remove();
               $(this).find("p.full_title").css("padding-top", "0px");

            }

            }); //end - each .specialOffers .specialOffersItem
        listen_specialOffersHideShowDetailsLinks();
    }
}

function instantiate_tagman() {
    var init = $("#tagman_container").size();
    if (init) {
        var js = '<script type="text/javascript" src="https://sec.levexis.com/clientfiles/tmap/subaru.js"></script><br />';
            js += '<script type="text/javascript" src="https://sec.levexis.com/js/tman.js"></script><br />';
            js += '<noscript><iframe src="https://sec.levexis.com/clientfiles/default/1/subaru.htm" style="border:0px none ; width: 0px; height: 0px;"></iframe></noscript>';
        //$('#tagman_container').empty().append(js);
    }
}

function instantiate_vehicleLandingPages() {
    var window_sticker = $(".window_sticker").size();
    if (window_sticker != 0) {
        //remove trim name if it matches the model name.
        //vehicle pages in the right hand window sticker
        var el = $('.model_intro_a');
        el.html(el.html().replace(/WRX WRX/ig, "WRX"));
        el.html(el.html().replace(/TRIBECA TRIBECA/ig, "Tribeca"));
    }

    var pop_builds = $(".pop_builds").size();
    if (pop_builds != 0) {
        //remove trim name if it matches the model name.
        //vehicle pages in the right hand window sticker
        var el = $('.pop_builds');
        el.html(el.html().replace(/WRX WRX/ig, "WRX"));
        el.html(el.html().replace(/TRIBECA TRIBECA/ig, "Tribeca"));
    }

    var init = $(".close").size();
    if (init != 0) {
        $(".model_intro_a .popup_window  ").css({display: "none"});
        $(".model_intro_a .close").hover(function() {
            //hide the big window
            $(".model_intro_a .popup_window  ").fadeOut(300);
            //undue the hover class on the li tag
            $(".model_intro_a .trims li").removeClass("hover");
            $('.model_intro_a div').remove('#arrow_pointer');
        },function() {});

        $(".model_intro_a .trims li").hover(function() {

            if ($(this).hasClass('hover')) {
                return false;
            } else {
                var layer = $(this).attr('class');
                $(".model_intro_a .trims li").removeClass("hover");
                $('.model_intro_a div').remove('#arrow_pointer');
                $("." + layer).addClass("hover");
                $(".model_intro_a .popup_window  ").css({
                    display: "none"
                });
                $("#" + layer).show();

                if (layer != "lineCompare") {
                    $('<div id="arrow_pointer" class="arrow"></div>').appendTo("." + layer)
                }
            }
        },function() {});

        //makes the entire thing clickable
        $(".trims li").click(function() {
            var link_to = $(this).children().attr('href');
            window.location = link_to;
            return false;
        });
    }

    var component_3e = $(".component_3e").size();
    if (component_3e != 0) {
        // preload images
        var img = ['button_brochure.gif', 'button_review.gif', 'button_video.gif', 'button_brochure_over.gif', 'button_review_over.gif', 'button_video_over.gif'];
        $(img).each(function () {
            var i = new Image();
            i.src = pathPrefix+'images/site/' + this;
        });
    }

} // end instantiate_vehicleLandingPages

//-----------------------------------------------------------------------------------
//7.0 is_
//
// accepts paramater(s) to test
// returns bool
//-----------------------------------------------------------------------------------

//-----------------------------------------------------------------------------------
//8.0 listen_
//
// functions called from above document.ready that wait.
// These are for .click() and .hover() functions (excluding form submit buttons)
//-----------------------------------------------------------------------------------

function listen_clickPath() {
    // Check for "soa-clickstream"
    var clickStream = $.cookie('soa-clickstream');
    if (clickStream) { // If it exists, add the current path to it
         var clickPath = clickStream+"~"+window.location.pathname;
    }
    else { // If it does not exist, Create "soa-clickstream" cookie
        var clickPath = window.location.pathname;
    }
    $.cookie("soa-clickstream", clickPath, { path: linkPrefix });
}

function listen_defaultText(element) {
    $(element).focus(function() {
        if ($(this).val() == $(this)[0].defaultValue) {
            $(this).val("");
            //$(this).removeClass("defaultText");
            $(this).css("text-align", "left");
        }
    }).blur(function() {
        if ($(this).val() == "") {
            //$(this).addClass("defaultText");
            $(this).css("text-align", "center");
            $(this).val($(this)[0].defaultValue);
        }
    });
} // end listen_defaultText


function listen_findDealer() {
	$('#form_findDealer2 input#dealerZip2').keypress(function(e){
        if (e.which == 13) {
            e.preventDefault();
            var inputValue = $(this).val();
            validate_findDealer("form_findDealer2", inputValue, "City/State or ZIP");
        }
    });
    $('#form_findDealer2 input.submit_findDealer').click(function(e){
        e.preventDefault();
        var inputValue = $('#form_findDealer2 input#dealerZip2').val();
        validate_findDealer("form_findDealer2", inputValue, "City/State or ZIP");
    });
}

function listen_findDealerBody() {
    $('#form_find_dealer_body input#dealerZip_body').keypress(function(e){
        if (e.which == 13) {
            e.preventDefault();
            var inputValue = $(this).val();
			update_form_margin_ie7('0px');
            validate_findDealer("form_find_dealer_body", inputValue, "City/State or Zip");
        }
    });
    $('#form_find_dealer_body input.submit_findDealer_body').click(function(e){
        e.preventDefault();
        var inputValue = $('#form_find_dealer_body input#dealerZip_body').val();
		update_form_margin_ie7('0px');
        validate_findDealer("form_find_dealer_body", inputValue,"City/State or ZIP");
    });
}

function listen_findDealerHeader() {
    $('#form_find_dealer_header input#dealerZip_header').keypress(function(e){
        if (e.which == 13) {
            e.preventDefault();
            var inputValue = $(this).val();

            // call omniture
            //listen_omnitureFindDealerHeader()
            validate_findDealer("form_find_dealer_header", inputValue, "City/State or ZIP");
        }
    });
    $('#form_find_dealer_header input.submit_findDealer_header').click(function(e){
        e.preventDefault();
        var inputValue = $('#form_find_dealer_header input#dealerZip_header').val();

        // call omniture
        //listen_omnitureFindDealerHeader()
        validate_findDealer("form_find_dealer_header", inputValue, "City/State or ZIP");
    });
} // end listen_findDealerHeader

function listen_findDealerModal() {
    $('#form_modalFindDealer input#modalZip').keypress(function(e){
        if (e.which == 13) {
            e.preventDefault();
            var inputValue = $(this).val();
            validate_findDealer("form_modalFindDealer", inputValue, "City/State or ZIP", true);
        }
    });
    $('#form_modalFindDealer input.submit_modalFindDealer').click(function(e){
        e.preventDefault();
        var inputValue = $('#form_modalFindDealer input#modalZip').val();
        validate_findDealer("form_modalFindDealer", inputValue, "City/State or ZIP", true);
    });
} // end listen_findDealerModal()

function listen_findDealerSPT() {
    $('#form_findDealer3 input#dealerZip3').keypress(function(e){
        if (e.which == 13) {
            e.preventDefault();
            var inputValue = $(this).val();
            validate_findDealer("form_findDealer3", inputValue, "Enter Zip",false);
        }
    });
    $('#form_findDealer3 input.submit_findDealer').click(function(e){
        e.preventDefault();
        var inputValue = $('#form_findDealer3 input#dealerZip3').val();
        validate_findDealer("form_findDealer3", inputValue, "Enter Zip",false);
    });
} // end listen_findDealerSPT()

function listen_findDealerWindowSticker() {
    $('#form_find_dealer_window_sticker input#dealerZip_ws').keypress(function(e){
        if (e.which == 13) {
            e.preventDefault();
            var inputValue = $(this).val();
            validate_findDealer("form_find_dealer_window_sticker", inputValue, "Enter Zip",false);
        }
    });
    $('#form_find_dealer_window_sticker input.submit_findDealer_window_sticker').click(function(e){
        e.preventDefault();
        var inputValue = $('#form_find_dealer_window_sticker input#dealerZip_ws').val();
        validate_findDealer("form_find_dealer_window_sticker", inputValue, "Enter Zip",false);
    });
}

function listen_hoverClass() {
    $(".global_button").hover(function () {
        $(this).addClass("global_hover")
    }, function () {
        $(this).removeClass("global_hover")
    });
} // end listen_hoverClass

function listen_omnitureFindDealerHeader() {
  var s = s_gi(s_account);
  s.linkTrackVars='None';
  s.linkTrackEvents='None';
  var thisPage = s.pageName.replace("subaru:", "");
  s.tl(this, 'o', thisPage+'|gn|/tools/find-dealer.html');
  //console.log(this, 'o', thisPage+'|gn|/tools/find-dealer.html');
}

function listen_searchSite() {	
	$('#search_nav input#search_box').keypress(function(e){
		if(e.which == 13){
			try{
				// call omniture
				/*var s = s_gi(s_account);
				s.linkTrackVars='None';
				s.linkTrackEvents='None';
				var thisPage = s.pageName.replace("subaru:", "");
				s.tl(this, 'o', thisPage+'|gn|/tools/search.html');	*/
				var a = "";				
			}catch(err){
				//
			}
		}
	});
	$('#search_nav input.search_button').click(function(){
		try{
			// call omniture
			/*var s = s_gi(s_account);
			s.linkTrackVars='None';
			s.linkTrackEvents='None';
			var thisPage = s.pageName.replace("subaru:", "");
			s.tl(this, 'o', thisPage+'|gn|/tools/search.html');*/
			var a = "";
		}catch(err){
			//
		}
	});
}

function listen_ShareTheLoveShowForCallCenter() {
	if ($('#vme_modalShareTheLove').length > 0)
	{
		var callCenterId = $.getUrlVar('source');

		if (callCenterId.length > 0){
			listen_formShareTheLove();
			$('#callCenterId').val(callCenterId);
		}
	}
}

function listen_specialOffersChangeCheckboxes() {
    $('.specialOffer_checkboxes .checkbox').click(function() {
        var checked_total = $('.specialOffer_checkboxes input:checked').size();
        var checked_programs = $('.specialOffer_checkboxes input.program:checked').size();
        var checked_vehicles = $('.specialOffer_checkboxes input.vehicle:checked').size();

		if (checked_total === undefined) { checked_total = 0; }
		if (checked_programs === undefined) { checked_programs = 0; }
		if (checked_vehicles === undefined) { checked_vehicles = 0; }

		update_specialOffers(checked_total, checked_programs, checked_vehicles);
		listen_specialOffersCountShown();
    });
}

function listen_specialOffersCountShown() {
    var count_total = $('.specialOfferItem').size();
    var count_visible = 0;

    $('.specialOfferItem').each(function(total) {
        if (!$(this).hasClass("hide")){
            count_visible++;
        }
    });

    $(".shownoftotal .total").text(count_total);
    $(".shownoftotal .shown").text(count_visible);

    var specialOffersErrorMessage = $(".specialOffers_head p").hasClass("specialOffersErrorMessage");
    if (count_visible == 0 && specialOffersErrorMessage) {
        var errorHTML = '<p class="specialOffersErrorMessage">Sorry, there are no offers for this search criteria.</p>';
        $(".specialOffers_head .shownoftotal").append(errorHTML);
    }
    else {
        $(".specialOffersErrorMessage").remove();
    }
}

function listen_specialOffersHideShowDetailsLinks() {
	$('.specialOfferItem .hideDetails').click(function(e) {
		e.preventDefault();
		var offer_id = $(this).attr("rel");
		$(this).hide();
		$('#so_'+offer_id+' .toggle_close .showDetails').show();
		$('#so_'+offer_id+' .OfferDetails_openClose').hide();
		return false;
	});


	$('.specialOfferItem .showDetails').click(function(e) {
		e.preventDefault();
		var offer_id = $(this).attr("rel");
		$(this).hide();
		$('#so_'+offer_id+' .toggle_close .hideDetails').show();
		$('#so_'+offer_id+' .OfferDetails_openClose').show();
		return false;
	});
	//This function is for my-subaru/my-account/special-offers.html, since it does not have #so_ ID.
	$('.toggle_close span').click(function() {
		var a = $(this).attr("class");
		if (a == "hideDetails") {
			$(this).hide();
			$(this).next().show();
			$(this).parent().parent().next().hide();
		}
		else {
			$(this).prev().show();
			$(this).hide();
			$(this).parent().parent().next().show();
		}
		return false;
	});

}

function listen_specialOffersOverride(){
	var offer_overrides = new Array();

	$('.specialOffers .specialOfferItem.overrider').each(function(i, thisElement) {
		var thisOverride = $(this).attr("offerType").replace("overrider_", "").replace("overrider", "");
		offer_overrides[i] = thisOverride;
	});

	$(offer_overrides).each(function(i, thisElement) {
		if (offer_overrides[i] == "overrider") {
			$('.specialOfferItem.overridden').addClass("hide").hide();
		}
		else {
			$('.specialOfferItem.overridden_'+offer_overrides[i]).addClass("hide").hide();
		}
	});

	//console.log(offer_overrides);
}

function listen_modalClose(){
    $('body').on('click', "a.closeModal", function() {
        $.modal.close();
        return false
    });
    $('#modalOverlay').css({height:($(document).height().toString() + "px"), overflow:"hidden"});
}

function listen_twoColumn(){
    //article component 2b. Allows CMS to put <br class="column_two" /> into the article
    //this will then take content content after that and place it into a second column.
    var two_column = $(".column_two").size();
    if (two_column != 0) {
        var par = $('.column_two').parent();
        $('<div class="tcArticle_col2"></div>').insertAfter(par);

        $('.column_two').siblings().each( function() {
            var nextsib = $('.column_two').next().appendTo('.tcArticle_col2');
        });
    }
}

//These can be called from Flash (technically any of these functions can be I suppose... I just meant that I wrote these 2 specifically for Flash to call)
function listen_pauseRotator(){
	$(document).trigger('pauseRotator');
}

function listen_resumeRotator(){
	$(document).trigger("resumeRotator");
}

//-----------------------------------------------------------------------------------
//9.0 submit_
//
// functions that submit forms based on a button .click()
//-----------------------------------------------------------------------------------


//-----------------------------------------------------------------------------------
//10.0 update_
//-----------------------------------------------------------------------------------

function update_form_margin_ie7(pixels){
	if ($('.margin_findDealer').length > 0) {
		if ($.browser.msie && $.browser.version == 7) {
			$('.margin_findDealer').css('margin-bottom', pixels);
		}
	}
}

function update_myDealer(dealertype,dealerid,targeturl,vehicle) {
    var targetForm = '#set_dealer_' + dealertype;
    var formAction = "";
    if (dealertype == "preferred") {
        formAction = linkPrefix+'tools/maps/user/setpreferreddealer';
    }
    else if (dealertype == "service") {
        formAction = linkPrefix+'tools/maps/vehicle/setservicedealer';
    }
    //var currentAction = $(targetForm).attr("action");
    //var formAction = secureUrl+currentAction;
    $(targetForm + ' input[name=targetUrl]').val(targeturl);
    $(targetForm + ' input[name='+dealertype+'DealerId]').val(dealerid);
    $(targetForm).attr('action', formAction);
    if (!vehicle) {}
    else {$(targetForm + ' input[name=vehicleId]').val(vehicle);}

    //$(targetForm).serialize();
    //$(targetForm).submit();
    var formData = $(targetForm).serialize();    
    
    $.ajax({
        type: "post",
        url: formAction,
        data: formData,
        error: function (XMLHttpRequest, textStatus, errorThrown) {
            window.location = targeturl;
        },
        success: function(data, textStatus) {
            window.location = targeturl;
        }
    });
}

function update_specialOffers(checked_total, checked_programs, checked_vehicles) {
	$('.specialOfferItem.overrider, .specialOfferItem.overridden').removeClass("hide").show();

	var items_total = $(".specialOffer_checkboxes input").length;

	if (checked_total > 0 && checked_total < items_total) {
		$('.specialOfferItem').addClass("hide").hide();

	} else {
        $('.specialOfferItem').removeClass("hide").show();
    }

	if (checked_programs > 0 && checked_vehicles == 0) {
		$('.specialOffer_checkboxes input.program:checked').each(function() {
			var inputValue = $(this).val();
			$('.specialOfferItem.'+inputValue).removeClass("hide").show();
        });
	}
	else if (checked_programs == 0 && checked_vehicles > 0) {
		$('.specialOffer_checkboxes input.vehicle:checked').each(function() {
			var inputValue = $(this).val();
			$('.specialOfferItem.'+inputValue).removeClass("hide").show();
        });
	}
	else if (checked_programs > 0 && checked_vehicles > 0) {
		var show_vehicles = new Array();
		var show_programs = new Array();
		$('.specialOffer_checkboxes input.vehicle:checked').each(function(i, thisElement) {
			show_vehicles[i] = $(this).val();
        });
		$('.specialOffer_checkboxes input.program:checked').each(function(i, thisElement) {
			show_programs[i] = $(this).val();
        });

		$(show_vehicles).each(function(i, thisElement) {
			var show_vehicle = show_vehicles[i];
			// loop through each of the programs to be shown
			$(show_programs).each(function(i, thisElement) {
				var show_program = show_programs[i];
				$('.specialOfferItem.'+show_vehicle+'.'+show_program).removeClass("hide").show();
			});
		});
	}

	if (isSet_visitorRegionCode) {
		listen_specialOffersOverride();
	}
}

//-----------------------------------------------------------------------------------
//11.0 validate_
//-----------------------------------------------------------------------------------

function validate_findDealer(formId, inputValue, helpText, showErrorBox) {
    if (helpText === undefined) {
        helpText = "City/State or ZIP";
    }
    if (showErrorBox === undefined) {
        showErrorBox = true;
    }
    if (showErrorBox) {
        $('#error_'+$('#'+formId + ' input[name=zipcode]').attr("id")).remove();
        $('#'+formId + ' input[name=zipcode]').removeClass("errorFocus");
    }

    var trimArray = inputValue.split(/,|\//);

    trimArray[0] = jQuery.trim(trimArray[0]).replace(/\s{2,}/g, " ");
    trimArray[1] = jQuery.trim(trimArray[1]).replace(/\s{2,}/g, " ");

    if(trimArray[0].search(/saint/i) === 0){
    	trimArray[0] = trimArray[0].replace(/saint/i, "St.");
    }else if (trimArray[0].search(/st\s/i) === 0 && trimArray[0].search(/st\./i) !== 0){
    	trimArray[0] = trimArray[0].replace(/st/i, "St.");
    }

    if (trimArray[1].length == 3){
        trimArray[1] = jQuery.trim(trimArray[1]).replace(/\s/, "");
    }

    $('#'+formId + ' input[name=zipcode]').val(trimArray[0] +", " + trimArray[1]);
    inputValue = trimArray[0] +", " + trimArray[1];

    // city/state regular expression
    var csRegVal = /^\s*([a-zA-Z\.]{2,}\s*)+[,|\/]\s*([a-zA-Z]{2,}\s*)+$/;
    var csRegex = new RegExp(csRegVal);

    var opt = "";
    // check for all possible optional parameters
    var params      = window.location.search; // parameters in the url
    var mo          = $('#'+formId + ' input[name=modalOptions]').val(); // modal options appended to the redirectURL
    var ov          = $('#'+formId + ' input[name=optionalParameter]').val(); // optionalParameter={ov}
    var mOptions    = (mo === undefined) ? "" : mo;
    var optValue    = (ov === undefined) ? "" : ov;

    if (params.length > 0) {
        opt += params; // includes "?" at start of string
        if (mOptions.length > 0) {
            opt += "&"+mOptions;
        }
        if (optValue.length != 0) {
            opt += "&optionalParameter="+optValue;
        }
    }
    else if (params.length == 0) {
        if (mOptions.length > 0) {
            opt += "?"+mOptions;
            if (optValue.length != 0) {
                opt += "&optionalParameter="+optValue;
            }
        }
        else if (mOptions.length == 0) {
            if (optValue.length != 0) {
                opt += "?optionalParameter="+optValue;
            }
        }
    }

    var redirectURL = "";
    if (secureServer.length > 0) {
        redirectURL = linkPrefix+'tools/maps/dealer/find/';
    }

    if (inputValue.match(csRegex)) {
        // validate to ensure the state is valid
        var stateInfo = usStates;
        var inputMatchesState = 'empty';

        // parse inputValue to obtain alleged state
        var inputArray = inputValue.split(/,|\//);
        inputArray[0] = jQuery.trim(inputArray[0]);
        var allegedState = jQuery.trim(inputArray[1]);

        // compare to valid state names and abbreviations
        $(stateInfo).each(function() {
            var sAbbrev = this.stateAbbrev;
            var sName = this.stateName;

            // create lowercase versions of all variables
            var lowerInput = allegedState.toLowerCase();
            var lowerAbbrev = sAbbrev.toLowerCase();
            var lowerName = sName.toLowerCase();

            if (lowerInput == lowerName || lowerInput == lowerAbbrev) {
                inputMatchesState = sAbbrev;
            }
        });

        if (inputMatchesState.length == 2) {
            // replace the value
            var newInputValue = inputArray[0] +", " + inputMatchesState;
            $('#'+formId + ' input[name=zipcode]').val(newInputValue);

            // submit the form
            $.cookie("myDealerInfo", null, { path: linkPrefix });
            if (redirectURL.length > 0){
                redirectURL += newInputValue + opt;
                window.location.assign(redirectURL);
            }
            else {
                $('#'+formId).submit();
            }
        }
        else {
            $('#'+formId + ' input[name=zipcode]').val(helpText);
        }
    }
    else {
        // determine if a 5-digit zipcode was submitted
        var isZip = inputValue.replace(/[^\d]/g, "").substr(0,5);
        $('#'+formId + ' input[name=zipcode]').val(isZip);

        if (isZip.length == 5 && validate.isValidZipCode(isZip)) {
            // submit the form
            $.cookie("myDealerInfo", null, { path: linkPrefix });
            if (redirectURL.length > 0){
                redirectURL += isZip + opt;
                window.location.assign(redirectURL);
            }
            else {
                $('#'+formId).submit();
            }
        }
        else if (isZip.length == 0 && inputValue.length > 1) {
        	$('#'+formId + ' input[name=zipcode]').val(helpText).css("text-align", "center");
            if (showErrorBox) {
                if($('.noDealersFound').length != 0){
                    $('.noDealersFound').hide();
                }
                var message = "The info entered is not a valid City/State or Zip";
                $('#'+formId + ' input[name=zipcode]').errorMessage({
                    messageTop: "City/State or ZIP",
                    messageMain: message
                });
				update_form_margin_ie7('43px');
            }
        }else{
        	$('#'+formId + ' input[name=zipcode]').val(helpText).css("text-align", "center");
            if (showErrorBox) {
                if($('.noDealersFound').length != 0){
                    $('.noDealersFound').hide();
                }
                var message = "The info entered is not a valid City/State or Zip";
                $('#'+formId + ' input[name=zipcode]').errorMessage({
                    messageTop: "City/State or ZIP",
                    messageMain: message
                });
				update_form_margin_ie7('43px');
            }
        }
    }
} // end validate_findDealer

function validate_findDealerChinese(formId, inputId, inputValue, helpText) {
	inputValue = jQuery.trim(inputValue);

	if (inputValue == undefined || inputValue == '') {
		$("#"+inputId).removeClass("errorFocus");
        $("#error_"+inputId+", div.errorClear").remove();
        $(inputId).errorMessage(
        {
            containerId: inputId,
            messageTop: "郵編",
            messageMain: "您輸入的是無效郵編"
        });
    }else{
        $("#error_"+inputId+", div.errorClear").remove();
        $("#"+inputId).removeClass("errorFocus");
        // city/state regular expression
        var csRegVal = /^\s*([a-zA-Z]{2,}\s*)+[,|\/]\s*([a-zA-Z]{2,})\s*$/;
        var csRegex = new RegExp(csRegVal);

        var opt = "";
        // check for all possible optional parameters
        var params      = window.location.search; // parameters in the url
        var mo          = $('#'+formId + ' input[name=modalOptions]').val(); // modal options appended to the redirectURL
        var ov          = $('#'+formId + ' input[name=optionalParameter]').val(); // optionalParameter={ov}
        var mOptions    = (mo === undefined) ? "" : mo;
        var optValue    = (ov === undefined) ? "" : ov;

        if (params.length > 0) {
            opt += params; // includes "?" at start of string
            if (mOptions.length > 0) {
                opt += "&"+mOptions;
            }
            if (optValue.length != 0) {
                opt += "&optionalParameter="+optValue;
            }
        }
        else if (params.length == 0) {
            if (mOptions.length > 0) {
                opt += "?"+mOptions;
                if (optValue.length != 0) {
                    opt += "&optionalParameter="+optValue;
                }
            }
            else if (mOptions.length == 0) {
                if (optValue.length != 0) {
                    opt += "?optionalParameter="+optValue;
                }
            }
        }

        if (inputValue.match(csRegex)) {
            // validate to ensure the state is valid
            var stateInfo = usStates;
            var inputMatchesState = 'empty';

            // parse inputValue to obtain alleged state
            var inputArray = inputValue.split(/,|\//);
            var allegedState = jQuery.trim(inputArray[1]);

            // compare to valid state names and abbreviations
            $(stateInfo).each(function() {
                var sAbbrev = this.stateAbbrev;
                var sName = this.stateName;

                // create lowercase versions of all variables
                var lowerInput = allegedState.toLowerCase();
                var lowerAbbrev = sAbbrev.toLowerCase();
                var lowerName = sName.toLowerCase();

                if (lowerInput == lowerName || lowerInput == lowerAbbrev) {
                    inputMatchesState = sAbbrev;
                }
            });

            if (inputMatchesState.length == 2) {
                // replace the value
                var newInputValue = inputArray[0] +", " + inputMatchesState;
                $('#'+formId + ' input[name=zipcode]').val(newInputValue);
            }
            else {
                $('#'+formId + ' input[name=zipcode]').val(helpText);
            }
        }
        else {
            // determine if a 5-digit zipcode was submitted
            var isZip = inputValue.replace(/[^\d]/g, "").substr(0,5);
            $('#'+formId + ' input[name=zipcode]').val(isZip);

			if(isZip.length != 5){
				$("#"+inputId).removeClass("errorFocus");
				$("#error_"+inputId+", div.errorClear").remove();
				$(inputId).errorMessage(
				{
					containerId: inputId,
					messageTop: "郵編",
					messageMain: "您輸入的是無效郵編"
				});
			}

            if (isZip.length == 0 && inputValue.length > 1) {
                // check for a state or state abbreviation
                var stateInfo = usStates;
                var inputMatchesState = 'empty';
                var stateCaptial = "";

                $(stateInfo).each(function() {
                    var sAbbrev = this.stateAbbrev;
                    var sName = this.stateName;

                    // create lowercase versions of all variables
                    var lowerInput = inputValue.toLowerCase();
                    var lowerAbbrev = sAbbrev.toLowerCase();
                    var lowerName = sName.toLowerCase();

                    if (lowerInput == lowerName || lowerInput == lowerAbbrev) {
                        inputMatchesState = sAbbrev;
                    }
                });

                if (inputMatchesState.length == 2) {
                    // replace the value
                    $('#'+formId + ' input[name=zipcode]').val(inputMatchesState);
					}
                else {
					$("#"+inputId).removeClass("errorFocus");
					$("#error_"+inputId+", div.errorClear").remove();
					$(inputId).errorMessage(
					{
						containerId: inputId,
						messageTop: "郵編",
						messageMain: "您輸入的是無效郵編"
					});
                    //$('#'+formId + ' input[name=zipcode]').val(helpText);
                }
            }
        }
    }
} // end validate_findDealer

function validate_presenceOf(inputId, inputValue, message) {
	var isValid = false;
	// Define regular expression
	if (inputId == "dear_subaru_homeAddress" || inputId == "dear_subaru_homeCity" || inputId == "homeAddress" || inputId == "homeCity" ){
		var regVal = /^[a-zA-Z0-9-#,'-','.',\s'-]*$/;
		var regEx = new RegExp(regVal);
	}else{
		var regVal = /^[a-zA-Z0-9\s'-]*$/;
		var regEx = new RegExp(regVal);
	}

	if (inputValue.match(regEx)) {
		if (inputValue.length < 2) {
			$("#error_"+inputId+", div.errorClear").remove();
			$(this).errorMessage({
			containerId: inputId,
			messageMain: message
		});
		isValid = false;
		}
		else {
			$("#error_"+inputId+", div.errorClear").remove();
			$("#"+inputId).removeClass("errorFocus");
			isValid = true;
		}
	}else{
		$("#error_"+inputId+", div.errorClear").remove();
		$(this).errorMessage({
				containerId: inputId,
				messageTop:	 "Invalid format!",
				messageMain: ""
		});
		isValid = false;
	}
	return isValid;
}


//-----------------------------------------------------------------------------------
//12.0 validation_objects
//-----------------------------------------------------------------------------------

get_uriParts.options = {
    strictMode: false,
    key: ["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],
    q:   {
        name:   "queryKey",
        parser: /(?:^|&)([^&=]*)=?([^&]*)/g
    },
    parser: {
        strict: /^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/,
        loose:  /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/
    }
};

var usStates = [
    {stateAbbrev: "AL", stateName: "Alabama", stateCapital: "Montgomery"},
    {stateAbbrev: "AK", stateName: "Alaska", stateCapital: "Juneau"},
    {stateAbbrev: "AZ", stateName: "Arizona", stateCapital: "Phoenix"},
    {stateAbbrev: "AR", stateName: "Arkansas", stateCapital: "Little Rock"},
    {stateAbbrev: "CA", stateName: "California", stateCapital: "Sacramento"},
    {stateAbbrev: "CO", stateName: "Colorado", stateCapital: "Denver"},
    {stateAbbrev: "CT", stateName: "Connecticut", stateCapital: "Hartford"},
    {stateAbbrev: "DE", stateName: "Delaware", stateCapital: "Dover"},
    {stateAbbrev: "DC", stateName: "District of Columbia"},
    {stateAbbrev: "FL", stateName: "Florida", stateCapital: "Tallahassee"},
    {stateAbbrev: "GA", stateName: "Georgia", stateCapital: "Atlanta"},
    {stateAbbrev: "HI", stateName: "Hawaii", stateCapital: "Honolulu"},
    {stateAbbrev: "ID", stateName: "Idaho", stateCapital: "Boise"},
    {stateAbbrev: "IL", stateName: "Illinois", stateCapital: "Springfield"},
    {stateAbbrev: "IN", stateName: "Indiana", stateCapital: "Indianapolis"},
    {stateAbbrev: "IA", stateName: "Iowa", stateCapital: "Des Moines"},
    {stateAbbrev: "KS", stateName: "Kansas", stateCapital: "Topeka"},
    {stateAbbrev: "KY", stateName: "Kentucky", stateCapital: "Frankfort"},
    {stateAbbrev: "LA", stateName: "Louisiana", stateCapital: "Baton Rouge"},
    {stateAbbrev: "ME", stateName: "Maine", stateCapital: "Augusta"},
    {stateAbbrev: "MD", stateName: "Maryland", stateCapital: "Annapolis"},
    {stateAbbrev: "MA", stateName: "Massachusetts", stateCapital: "Boston"},
    {stateAbbrev: "MI", stateName: "Michigan", stateCapital: "Lansing"},
    {stateAbbrev: "MN", stateName: "Minnesota", stateCapital: "Minneapolis"},
    {stateAbbrev: "MS", stateName: "Mississippi", stateCapital: "Jackson"},
    {stateAbbrev: "MO", stateName: "Missouri", stateCapital: "Jefferson City"},
    {stateAbbrev: "MT", stateName: "Montana", stateCapital: "Helena"},
    {stateAbbrev: "NE", stateName: "Nebraska", stateCapital: "Lincoln"},
    {stateAbbrev: "NV", stateName: "Nevada", stateCapital: "Carson City"},
    {stateAbbrev: "NH", stateName: "New Hampshire", stateCapital: "Concord"},
    {stateAbbrev: "NJ", stateName: "New Jersey", stateCapital: "Trenton"},
    {stateAbbrev: "NM", stateName: "New Mexico", stateCapital: "Sante Fe"},
    {stateAbbrev: "NY", stateName: "New York", stateCapital: "Albany"},
    {stateAbbrev: "NC", stateName: "North Carolina", stateCapital: "Raleigh"},
    {stateAbbrev: "ND", stateName: "North Dakota", stateCapital: "Bismarck"},
    {stateAbbrev: "OH", stateName: "Ohio", stateCapital: "Columbus"},
    {stateAbbrev: "OK", stateName: "Oklahoma", stateCapital: "Oklahoma City"},
    {stateAbbrev: "OR", stateName: "Oregon", stateCapital: "Salem"},
    {stateAbbrev: "PA", stateName: "Pennsylvania", stateCapital: "Harrisburg"},
    {stateAbbrev: "RI", stateName: "Rhode Island", stateCapital: "Providence"},
    {stateAbbrev: "SC", stateName: "South Carolina", stateCapital: "Columbia"},
    {stateAbbrev: "SD", stateName: "South Dakota", stateCapital: "Pierre"},
    {stateAbbrev: "TN", stateName: "Tennessee", stateCapital: "Nashville"},
    {stateAbbrev: "TX", stateName: "Texas", stateCapital: "Austin"},
    {stateAbbrev: "UT", stateName: "Utah", stateCapital: "Salt Lake City"},
    {stateAbbrev: "VT", stateName: "Vermont", stateCapital: "Montpelier"},
    {stateAbbrev: "VA", stateName: "Virginia", stateCapital: "Richmond"},
    {stateAbbrev: "WA", stateName: "Washington", stateCapital: "Olympia"},
    {stateAbbrev: "WV", stateName: "West Virginia", stateCapital: "Charleston"},
    {stateAbbrev: "WI", stateName: "Wisconsin", stateCapital: "Madison"},
    {stateAbbrev: "WY", stateName: "Wyoming", stateCapital: "Cheyenne"}
];

//-----------------------------------------------------------------------------------
//13.0 flash interaction
// Do Not change these function names. They are called from ActionScript
//-----------------------------------------------------------------------------------

//
// Opens a modal print summary dialog and populates the dialog
// with data in the specified properties map.
//
function openPrintSummaryModal(properties) {
	var trimName = properties.trim;
	var modelCode = get_modelCode(properties.model);


    if(modelCode == "IMP" && trimName.indexOf("Sport") == -1){
    	if(properties.packages.length == 0){
    		trimName = trimName + " 4-door";
    	}else{
    		jQuery.each(properties.packages, function(i,val) {
    	       if(val.name.indexOf("5-door") != -1 ){
    	    	   trimName = trimName + " 5-door";
    	       }else{
				   trimName = trimName + " 4-door";
			   }
			   return false;
    	    });
    	}
    }
    if(modelCode == "WRX"){
    	if(trimName.indexOf("WRX") == -1){
    		trimName = "WRX " + trimName;
    	}

    	if(properties.packages.length == 0 && trimName.indexOf("STI Limited") == -1){
    		trimName = trimName + " 4-door";
    	}else{
    		jQuery.each(properties.packages, function(i,val) {
    			if(val.name.indexOf("5-door") != 1){
    	    	   trimName = trimName + " 5-door";
    	       }
    	    });
    	}
    }

	var raqLink = linkPrefix+"shopping-tools/get-quote.html?model="+properties.model+"&trim="+trimName+"&year="+properties.year;
    var satdLink = linkPrefix+"shopping-tools/schedule-test-drive.html?model="+properties.model+"&trimName="+trimName+"&year="+properties.year;

    // open the model dialog
    $('.print_summary').modal();
    $('#modalOverlay').css({height:($(document).height().toString() + "px"), overflow:"hidden"});

    // populate the dialog data
    $('.ps_year').html(properties.year);
    $('.ps_model').html(properties.model);
    $('.ps_approx_price').html(properties.retailprice);
    $('.ps_engine').html(properties.engine);
    $('.ps_transmission').html(properties.transmission);
    $('.ps_exterior_color').html(properties.exteriorcolor);
    $('.ps_interior_color').html(properties.interiorcolor);
    $('.ps_mpg_city').html(properties.mpgcity);
    $('.ps_mpg_hwy').html(properties.mpghighway);
    $('.ps_trim').html(properties.trim);
    $('.ps_total_retail_price').html(properties.msrpprice+".00");
    //$('.ps_package').html(properties.packagename);
    //$('.ps_package_price').html(properties.packageprice);
    $('.ps_dest_del').html(properties.deliverycharge+".00");
    $('.ps_vehicle_image').attr({src : properties.image});

    $('.getAQuote_link').attr("href", raqLink);
    $('.getAQuote_link').click(function(){
        window.location = raqLink;
    });
    $('.scheduleTestDrive_link').attr("href", satdLink);
    $('.scheduleTestDrive_link').click(function(){
        window.location = satdLink;
    });

    // initialize print summary globals
    g_model = properties.model;
    g_trim  = properties.trim;
    g_exteriorcolorcode = properties.exteriorcolorcode;
    g_accessorycodes = "";

    // iterate over the Packages and add them to the print summary
    jQuery.each(properties.packages, function(i,val) {
        var listItem = "<li><span class=\"name\"><span class=\"ps_package\">"+val.name+"</span></span><span class=\"price\"><span class=\"ps_package_price\">"+format_currency(val.price,false)+"</span></span></li>";
        $('.package_list').append(listItem);
    });

    // iterate over the accessories and add them to the print summary
    jQuery.each(properties.accessories, function(i,val) {
        $('.accessory_list').append("<li><span class=\"name\">"+val.name+"</span><span class=\"price\">"+format_currency(val.price,false)+"</span></li>");
        g_accessorycodes += (val.code + " ");
    });
}

