/**
 * @projectDescription Claritin Javascript Library. Main File.
 * 
 * @author Ivan Vovnenko ivan.vovnenko@corporatevoice.com
 */


$._trackPageview=function(pageTracker,url){
	try{
		pageTracker._trackPageview(url);
		$.log('pageTracker._trackPageview('+url+')');
	}catch(e){$.log('ERROR _trackPageview:'+e);}	
};
$._trackEvent=function(category, action, label, tracker){
	try{
		tr = tracker || pageTracker;
		tr._trackEvent(category, action, label);
		$.log('pageTracker._trackEvent("'+category+'","'+action+'","'+label+'")');
	}catch(e){$.log('ERROR _trackEvent:'+e);}	
};
$.attachSpotlightTag=function(src,type,cat){
	try{
		var axel = Math.random()+"";
		var a = axel * 10000000000000;
		$('body').append($('<IFRAME SRC="http://fls.doubleclick.net/activityi;src='+src+';type='+type+';cat='+cat+';ord=1;num='+ a + '?" WIDTH=1 HEIGHT=1 FRAMEBORDER=0></IFRAME>'));
		$.log('attachSpotlightTag(src='+src+',type='+type+',cat='+cat+')');
	}catch (e) {
		$.log('ERROR attachSpotlightTag:'+e);
	}
};

$.attachAtlas=function(actionId){
	try{
	    var axel = Math.random()+"";
		var a = axel * 10000000000000;
		$('body').append($('<iframe src="http://view.atdmt.com/iaction/'+ actionId + '?'+a+'" width="1" height="1" frameborder="0" scrolling="No" marginheight="0" marginwidth="0" topmargin="0" leftmargin="0"></iframe>'));
		$.log('attachAtlas("'+actionId+'")');
	}catch (e) {
		$.log('ERROR attachAtlas:'+e);
	}
};

$.fn.ie6 = function(fn) { 
	var isIE6 = $.browser.msie && (parseInt($.browser.version) == 6);
	return this.each(function(){
		if(isIE6){
			fn.call(this);
		}
	});
}; 

jQuery.log=function(message){
	try{
		console.log(message);
	}catch(e){}
};

$.fn.hoverClass=function(className){
	return this.each(function(){
		$(this).hover(function(){$(this).addClass(className);},function(){$(this).removeClass(className);});		
	});
};

$.preloadImages = function()
{
	for(var i = 0; i<arguments.length; i++)
	{
		$.log('jQuery.preloadImages: Preloading '+ arguments[i] );
		$("<img>").attr("src", arguments[i]).load(function(){
			$.log('jQuery.preloadImages: Loaded '+ this.src );
		});
	}
};

$.fn.border1pxSolidRed=function(){
	return this.each(function(){
		$(this).css('border','1px solid red');
	});
};
$.centerWindowHide = function(name, url, w, h, scroll, menu, resizable, all){
	if (window.screen)
	{
		var chasm = screen.availWidth;
		var mount = screen.availHeight;
		var allprops = "";

	      if(all=="1") allprops = ",directories=yes,location=yes,status=yes,toolbar=yes";

		winprops = 'width=' + w + ',height=' + h + ',left=' + ((chasm - w - 10) * .5) + ',top=' + ((mount - h - 30) * .5) + ',scrollbars=' + scroll + ',menubar=' + menu + ',resizable=' + resizable + allprops;
		
		oHTMLWin = window.open(url, name, winprops);
		window.focus();
	}
}
$.centerWindow = function (url, name, w, h, scroll, menu, resizable, location, all)
{
	if (window.screen)
	{
		location = location || 'no';
		resizable = resizable || 'no';
		menu = menu || 'no';
		scroll = scroll || 'no';
		var chasm = screen.availWidth;
		var mount = screen.availHeight;
		var allprops = "";

	      if(all=="1") allprops = ",directories=yes,location=yes,status=yes,toolbar=yes";

		winprops = 'width=' + w + ',height=' + h + ',left=' + ((chasm - w - 10) * .5) + ',top=' + ((mount - h - 30) * .5) + ',scrollbars=' + scroll + ',menubar=' + menu + ',resizable=' + resizable + allprops;
		
		oHTMLWin = window.open(url, name, winprops);
		oHTMLWin.window.focus();
	}
};

$.popWindowNoScroll= function (url,title,width,height){
		$.centerWindow(url, title, width, height, "no", "no", "no", "0");
};

$.popWindowScroll= function (url,title,width,height){
	$.centerWindow(url, title, width, height, "yes", "no", "no", "0");
};

String.prototype.endsWith = function(str)
{
    var lastIndex = this.lastIndexOf(str);
    return (lastIndex != -1) && (lastIndex + str.length == this.length);
}

jQuery.fn.extend({
	  scrollTo : function(speed, easing) {
	    return this.each(function() {
	      var targetOffset = $(this).offset().top;
	      $('html,body').animate({scrollTop: targetOffset}, speed, easing);
	    });
	  }
	});

$.fn.disclosurePanel = function(options){
	var settings = jQuery.extend({
		 contentSelector:':first',
	     currentClass: "current",
		 useHash : true,
		 select : 0
	}, options);
	var hashWasUsed = false;
	var elements = this.each(function(){
		if($(this).siblings(settings.contentSelector).length == 0 
				|| $(this).siblings(settings.contentSelector).is(":empty")){
			$(this).addClass("noContent").click(function(){return false;});
			return;
		}
		$(this).click(function(){
			if($(this).siblings(settings.contentSelector).is(":hidden")){
				$(this).siblings(settings.contentSelector).slideDown();//"slide",{ direction: "down" },1000);
			}else{
				$(this).siblings(settings.contentSelector).slideUp();//"slide",{ direction: "up" },1000);
			}
			$(this).toggleClass(settings.currentClass);		
			return false;
		});
		//$.log(this.href.length);
		if(settings.useHash && location.hash && this.href.endsWith(location.hash)){
			$(this).click().scrollTo();
			hashWasUsed = true;			
		}
	});
	if(!hashWasUsed){
		elements.eq(settings.select).click();
	}
	return elements;
};

/**
 * @credits http://groups.google.com/group/jquery-en/browse_thread/thread/446fdd243f039527
 */
$.fn.replaceHtml = function( html ) { 
    var stack = []; 
    return this.each( function(i, el) { 
        var oldEl = el; 
        /*@cc_on // Pure innerHTML is slightly faster in IE 
        oldEl.innerHTML = html;
		return oldEl; 
        @*/ 
        var newEl = oldEl.cloneNode(false); 
        newEl.innerHTML = html; 
        oldEl.parentNode.replaceChild(newEl, oldEl); 
        /* Since we just removed the old element from the DOM, 
         * return a reference to the new element, which can be 
         * used to restore variable references. 
         */ 
        stack.push( newEl ); 
    }).pushStack( stack ); 
};

/**
 * glossaryTooltip Plugin
 * jQuery Plugin, that that adds glossary tooltips to the element, that has innerHTML
 * 
 * @param glossaryTermsUnsorted array of glossary terms: 
 * {
 * 	id: '',
 *  name: '', 
 *  description: '',
 *  highlight: ['optional term','optional term'],//<optional>
 *  skip: true//<optional>
 * }
 * 
 * @see http://blog.stevenlevithan.com/archives/mimic-lookbehind-javascript
 * @see http://stackoverflow.com/questions/958095/use-regex-to-find-specific-string-not-in-html-tag
 */
$.fn.glossaryTooltip = function(glossaryTermsUnsorted) { 
	var DELIMITER = "*****";
	
	if(!$.fn.bt){
		return this;
	}
	
	// eager-behavior, longest terms first 
	var glossaryTerms = glossaryTermsUnsorted.sort(function(a,b) {
		return b.name.length-a.name.length;
	});	
	var regexps={};
	for(var i in glossaryTerms){
		if(glossaryTerms[i].skip)
			continue;
		var stringToFind = glossaryTerms[i].name;
		if (glossaryTerms[i].highlight && glossaryTerms[i].highlight.length){
			stringToFind = glossaryTerms[i].highlight.join('\\w*|');
		}
		regexps["("+ stringToFind +"\\w*)"] = i;
	}
	var translator = null;
	if(Translator){		
		translator = new Translator(function( originalText ){
			var text = originalText;
			for(var regexpStr in regexps){
				var regexp = RegExp(regexpStr, "ig");
				text = text.replace(regexp, '*****$1*****');
    		}
			var data = text.split('*****');
			if(data.length == 1)
				return data[0];
			for( var i = 1; i < data.length; i += 2 ){
				for(var regexpStr in regexps){
					var regexp = RegExp(regexpStr, "ig");
					if(regexp.test(data[i])){
						var word = data[i];
						data[i] = document.createElement('ACRONYM');
						//data[i].href="#";
						data[i].appendChild( document.createTextNode(word) );
						var term = glossaryTerms[regexps[regexpStr]];
						data[i].className = 'term';
						var tooltipText = "<div class='textWrapper'><p class='tipTitle'>define: <span class='termName'>"+term.name+"</span></p><br/>"+term.description+"</div>";
						data[i].title = escape(tooltipText);
						$(data[i]).bt($.fn.glossaryTooltip.btOptions);
						break;
					}
				}
			}
			return data;
		}, function (node){
			return node.nodeName != 'A' 
				&& node.nodeName != 'H1' 
				&& node.nodeName != 'H2' 
				&& node.nodeName != 'H3'
				&& node.nodeName != 'H4'
				&& node.nodeName != 'H5' 
				&& !($(node).is("SPAN.hidden"));
		});
	}
	
    return this.each(function() {
    	if(translator)
    		translator.traverse(this);
    	else{    		
    	if(this.innerHTML){
    		var text = this.innerHTML;
    		for(var i in glossaryTerms){
    			if(glossaryTerms[i].skip)
    				continue;
    			var stringToFind = glossaryTerms[i].name;
    			if (glossaryTerms[i].highlight && glossaryTerms[i].highlight.length){
    				stringToFind = glossaryTerms[i].highlight.join('\\w*|');
    			}
    			
    			/* Using workaround for JS negative lookahead, - the term is 
    			 *  - not inside the tag: [^>]*
    			 *  - not in the tag with "hidden" class: <[^>]*class=['\"]hidden['\"][^>]*>[^<]*
    			 *  - not inside <a ...></a> tag: <a.*?>[^<]*
    			 */ 
    			var pattern = new RegExp("(<[^>]*|<[^>]*class=['\"]hidden['\"][^>]*>[^<]*|<a.*?>[^<]*)?("+ stringToFind +"\\w*)", "ig");
    			text = text.replace(pattern, function($0,$1,$2){
    				return $1 ? $0 : '<a class="highlightedTerm" gtIndex="'+i+'" href="#">'+$2+'</a>';
    			});
    			
    		}
    		$(this).replaceHtml(text);
    	}
    	}
		/*$(this).find('A.highlightedTerm').each(function(){						  
			var term = glossaryTerms[$(this).attr("gtIndex")];
			$.log(term);
			$(this).bt("<div class='textWrapper'><p class='tipTitle'>define: <span class='termName'>"+term.name+"</span></p><br/>"+term.description+"</div>",btOptions);
			$(this).click(function(){return false;});
		});*/
    });
};
$.fn.glossaryTooltip.btOptions = {
		positions: 'top',
		strokeStyle: 'rgb(226, 28, 55)',
		spikeLength: 10,
		spikeGirth: 20,
		fill: {
			gradientStartX:0,
			gradientStartY:0,
			gradientEndX:1,
			gradientEndY:1,
			colorStops: [{offset:0, color:'rgba(252,253,254,0.9)'},{offset:1,color:'rgba(215,228,239,0.9)'}]
		},
		strokeWidth: 1,
		cornerRadius: 10,
		shadow:false,
		width: '200px',
		shrinkToFit: true,
		contentSelector: "unescape($(this).attr('title'))"
};

/**
 * jQuery dropdown plugin
 * Copyright(c) 2009 Ivan Vovnenko
 * Corporate Voice
 * options:
 * {
 * 		click: click function
 * }
 */
$.fn.styledDropDown = function(options) {
	  var settings = jQuery.extend( {
		click : function(element) {
			if (this.debug) {
				try {
					console.log(element);
				} catch (e) {
				}
			}
		},
		height : 28,
		debug : false
	}, options);
	/*$.extend($.fn.styledDropDown, {
		vAlign : function() {
			if($(this).parent().hasClass("dropDownMenuContainer")){
				$(this).next().find("A.dropDownLink DIV").vAlign({parentHeight:settings.height});
			}
		}
	});*/
    return this.filter("SELECT").each(function() {
    	if(!$(this).parent().is('DIV.dropDownMenuContainer')){
    		var click = settings.click;
    		$menu = $("<div class='dropDownMenu' ></div>");
    		$a= $("<a href='#' ><div>&nbsp;</div></a>").addClass('dropDownLink').click(function(){return false;});
    		var $ul = $("<ul />");
    		for (var i=0;i<this.options.length;i++) {
    			var option = this.options[i];
    			var $li = $("<li><a href='#"+option.value+"'>" + option.text + "</a></li>");
    			
    			$li.find('A:first').data("optionIndex",i).data("option",option).click(function () {
    				$dropDownMenu = $(this).parents('.dropDownMenu');
    				$dropDownMenu.removeClass('dropDownMenuOpened');
    				$dropDownMenu.find("A:first DIV").html($(this).html()).vAlign({parentHeight:settings.height});
					
					var newSelectedIndex = $(this).data("optionIndex");					
					var select = $dropDownMenu.parent().find('SELECT')[0];
					select.selectedIndex = newSelectedIndex;
					/*for (var j = 0; j < select.options.length; j++) {
						if (select.options[j].selected) {
							if (j != newSelectedIndex) 
								select.options[j].setAttribute("selected", false);
						}
						if(newSelectedIndex==j)
							select.options[j].setAttribute("selected", true);
					}

					alert(select.selectedIndex);*/
					select.options[newSelectedIndex].setAttribute("selected",true);
					
    				//$(select.options[newSelectedIndex]).click();
					//alert(select.selectedIndex);
					
    				click.call(this, $(this).data("option"));   
					   	
								
    				return false;
				}); 
    			$li.click(function(){$(this).find('A:first').click();});
    				
    			$li.appendTo($ul);
    		}
			$('li:last-child',$ul).addClass('last');
    		/*$menu.hover(function() {
    			$(this).addClass('opened');
			},function(){
				$(this).removeClass('opened');
			}); */
			$menu.hoverClass('dropDownMenuOpened');
    		$(this).wrap("<div class='dropDownMenuContainer'></div>");
    		$(this).parent().append($menu.append($a).append($ul));   
    		
    		$ul.find("LI:eq("+this.options.selectedIndex+")").click();
    		
			//$a.find('DIV').vAlign({parentHeight:settings.height});
    	}
		if(settings.select){
			$(this).parent().find('.dropDownMenu UL LI A[href$="'+settings.select+'"]').click();
		}
    }).end();
};

$.fn.vAlign = function(options) {
	var settings = jQuery.extend({
     parentHeight: 34  	/*"Magic" height of the parent element, A.dropDownLink */
	}, options);
	return this.each(function(i){
		var ah = settings.height || $(this).height();
		var ph = settings.parentHeight || $(this).parent().height();
		var mh = (ph - ah) / 2;
		$(this).css('margin-top', mh);		
	});
};


/**
 * This jQuery plugin scans the elements and extracts the footnotes
 * Footnotes are:
 * @code <sup class="footnote" title="FOOTNOTE TEXT">ANY_TEXT</sup>
 * After the substitution the correct number is being written instead of ANY_TEXT
 * And the callback is being called, the only param of the callback is the array of (e.g.)
 * @code { index: 3, title: "FOOTNOTE TEXT" }
 * @example $("#productContainer1 SUP.footnote").footnotes(function(fnotes){ dealWithFootnotes(fnotes); });
 */
$.fn.footnotes = function(callback) {
	if(!callback)
		return this;
	var fnotes = [];
	var hashes = {};
	var ret = this.each(function(i){
		var title = $(this).attr("title");
		if(title){
			if(!hashes[title]){
				fnotes.push({"index":fnotes.length+1,"title":title});
				hashes[title]=fnotes.length;
			}
		    $(this).html(hashes[title]);
		}
	});
	callback(fnotes);
	return ret;
};

/**
 * This jquery plugin has to be applied to div, with image in background.
 * @after applying, is shifts the backgroung to the appropriate position
 */
$.fn.spritify = function(column,row,options) {
	var settings = $.extend( {
		width : 90,
		height: 80
	}, options);
	return this.each(function(i) {
		$(this).css({backgroundPosition: (-settings.width*column)+"px "+(-settings.height*row)+"px"});
	});
};


/**
 * areaCenter jQuery plugin
 * 
 * jQuery extension calculating the center of the map's area.  
 */
$.fn.extend({
	areaCenter:function(){
		var result={top:'0px',left:'0px'};
		var shape = this.attr('shape');
		var coords = this.attr('coords');
		if(shape&&coords){
			shape = shape.toLowerCase();			
			var arr = coords.split(",");
			for(i=0;i<arr.length;i++)
				arr[i]=parseInt(arr[i]);
			if(shape=='circle'){
				result.left=arr[0];
				result.top=arr[1];				
			}else if (shape=='rect'){
				result.left=Math.min(arr[0],arr[2])+Math.abs(arr[0]-arr[2])/2;
				result.top=Math.min(arr[1],arr[3])+Math.abs(arr[1]-arr[3])/2;				
			}else if (shape=='poly'){				
				var minLeft=1000000;
				var maxLeft=0;
				var minTop=1000000;
				var maxTop=0;
				for(i=0;i<arr.length;i++){
					if(i%2==0){
						if(arr[i]<minLeft)
							minLeft=arr[i];
						if(arr[i]>maxLeft)
							maxLeft=arr[i];
					}else{
						if(arr[i]<minTop)
							minTop=arr[i];
						if(arr[i]>maxTop)
							maxTop=arr[i];					
					}
				}
				result.left=minLeft+(maxLeft-minLeft)/2;
				result.top=minTop+(maxTop-minTop)/2;				
			}
			return result;
		}else{
			return this.position();
		}
				
	}
});


function couponLinks(){
	function couponLinkOnClick(){
		//$.log('hey, i\'m inside the couponLink');
		try{
			$.popWindowScroll(this.href,'couponWindow','650','400');
			var rel = $(this).attr('rel');
			if(window.couponsSpotlightTags && rel && window.couponsSpotlightTags[rel]){
				var tag = window.couponsSpotlightTags[rel];
				$.attachSpotlightTag(tag.src,tag.type,tag.cat);
			}
			if(window.couponsAtlasTags && rel && window.couponsAtlasTags[rel]){
				var tag = window.couponsAtlasTags[rel];
				$.attachAtlas(tag);
			}
			$._trackPageview(window.pageTracker,this.href);
		}catch(err){$.log(err);}
		return false;
	};
	$('A.couponLink').click(couponLinkOnClick);
}
/**
 * Sets Adult Callout set 
 */
function setAdultCallouts(){
	$('#callout1 a').attr('href','./../products/Claritin12HourRediTabs.jspa');
	$('#callout1 a img').attr('src','/img/callouts/fpo.298x140.1.jpg');

	$('#callout2 a').attr('href','./../products/ClaritinEye.jspa');
	$('#callout2 a img').attr('src','/img/callouts/fpo.298x140.2.jpg');

	$('#callout3 a').attr('href','./../offers/index.jspa');
	$('#callout3 a img').attr('src','/img/callouts/fpo.298x140.3.jpg');	
}

/**
 * Sets Child Callout set
 */
function setChildCallouts(){
	$('#callout1 a').attr('href','./../products/Claritin12HourRediTabsForKids.jspa');
	$('#callout1 a img').attr('src','/img/callouts/callout-kids-298x140.1.jpg');

	$('#callout2 a').attr('href','./../products/index.jspa#Child');
	$('#callout2 a img').attr('src','/img/callouts/callout-kids-298x140.2.jpg');

	$('#callout3 a').attr('href','./../offers/index.jspa');
	$('#callout3 a img').attr('src','/img/callouts/callout-kids-298x140.3.jpg');	
}

function addBalloons() {
	$(document.createElement("div")).attr("id", "kids-balloons").appendTo(
			"#HeaderWrapper");
}

function clearField() {
	function makeClearable(sel,defaultValue){
		$(sel).click( function() {
			if($(this).val().toLowerCase()==defaultValue.toLowerCase())
				$(this).attr('value', '');
		});
		$(sel).blur( function() {
			if(!$(this).attr('value'))
				$(this).attr('value', defaultValue);
		});
	}
	makeClearable('#HeaderWrapper INPUT','ENTER ZIP CODE');
	makeClearable('#forecastFormZip','ENTER ZIP CODE');
	makeClearable('#forecastFormCity','CITY');
}

function blurTabs() {
	$('.tabs LI A, .sub-tabs LI A').click( function() {
		 //alert(this.href);
			$(this).blur();
		});
}

function showSubMenu() {

	var to; // timeout

	$('#PrimaryNavWrapper LI A.parent').mouseover( function() {
		$('#PrimaryNavWrapper LI.Hover').removeClass("Hover");
		$('#PrimaryNavWrapper LI.Selected .subnav').hide();
		$('#PrimaryNavWrapper LI.Hover .subnav').hide();
		$(this).parent().addClass("Hover");
		$(this).parent().find('.subnav').show();
		clearTimeout(to);
	});

	$('#PrimaryNavWrapper LI .subnav').mouseover( function() {
		clearTimeout(to);
	});

	$('#PrimaryNavWrapper LI .subnav').mouseout( function() {
		ele = this;
		to = setTimeout( function() {
			$(ele).parent().removeClass("Hover");
			$('#PrimaryNavWrapper LI.Selected .subnav').show();
		}, 300);
	});

	$('#PrimaryNavWrapper LI A.parent').mouseout( function() {
		ele = this;
		to = setTimeout( function() {
			$(ele).parent().removeClass("Hover");
			$('#PrimaryNavWrapper LI.Selected .subnav').show();
		}, 300);
	});
	// For Demonstration only!
	$('#PrimaryNavWrapper LI A.parent').click( function() {

		if ($('#PrimaryNavWrapper LI A.Selected')) {
			$('#PrimaryNavWrapper li.Selected').removeClass("Selected");
			$('#PrimaryNavWrapper li A.Selected').removeClass("Selected");
		}
		$(this).addClass("Selected").blur();
		$(this).parent().addClass("Selected");
	}, function() {
		$(this).removeClass("Selected").blur();
		$(this).parent().removeClass("Selected");
	});
}

var couponsSpotlightTags = {
	'Claritin12HourRediTabsCoupon':{src:'1608566',type:'curre551',cat:'71sav104'},
//	'ClaritinEyeCoupon':{src:'1608566',type:'curre551',cat:'71sav305'},
	'ClaritinLiquiGelsCoupon':{src:'1608566',type:'curre551',cat:'71sav677'},
	'ClaritinD24HourCoupon':{src:'1608566',type:'curre551',cat:'71sav550'},
	'ClaritinRediTabs24HourCoupon':{src:'1608566',type:'curre551',cat:'71sav104'},
	'ClaritinTabletsCoupon':{src:'1608566',type:'curre551',cat:'71sav852'},
	'Claritin12HourRediTabsForKidsCoupon':{src:'1608566',type:'curre551',cat:'71sav218'},
	'ChildrensClaritinGrapeChewablesCoupon':{src:'1608566',type:'curre551',cat:'71sav218'},
	'ChildrensClaritinGrapeFlavoredSyrupCoupon':{src:'1608566',type:'curre551',cat:'71sav218'},
	'ClaritinRediTabsForKids24HourCoupon':{src:'1608566',type:'curre551',cat:'71sav218'}
};

var couponsAtlasTags = {
	'Claritin12HourRediTabsCoupon':'cbnctn_SaveClaritin12HourRediTabs_1',
//	'ClaritinEyeCoupon':{src:'1608566',type:'curre551',cat:'71sav305'},
	'ClaritinLiquiGelsCoupon':'cbnctn_SaveClaritinLiquiGels_1',
	'ClaritinD24HourCoupon':'cbnctn_SaveClaritinD24Hour_1',
	'ClaritinRediTabs24HourCoupon':'cbnctn_SaveClaritinTablets_1',
	'ClaritinTabletsCoupon':'cbnctn_SaveClaritinTablets_1',
	'Claritin12HourRediTabsForKidsCoupon':'cbnctn_SaveChildrensClaritin_1',
	'ChildrensClaritinGrapeChewablesCoupon':'cbnctn_SaveChildrensClaritin_1',
	'ChildrensClaritinGrapeFlavoredSyrupCoupon':'cbnctn_SaveChildrensClaritin_1',
	'ClaritinRediTabsForKids24HourCoupon':'cbnctn_SaveChildrensClaritin_1'
};

function addOddEven(){
	$('.addOddEven > :odd').addClass('even');
	$('.addOddEven > :even').addClass('odd');
	$('.addOddEven > :first').addClass('first');
	$('.addOddEven > :last').addClass('last');
}

function targetBlank(){
	$("A[rel='external']").attr("target","_blank");
}

function addGlossaryHighlights(jq){
	var el = jq || document.body;
	
	if(window.glossaryTerms && window.glossaryTerms.result)
		$(el).glossaryTooltip(window.glossaryTerms.objects);
}


/** Callout init - basically store callout values if we don't have them **/
function initCallouts(){
	
	function saveCallouts(callouts){
		callouts["CALLOUT1"] = $("#callout1").html();
		callouts["CALLOUT2"] = $("#callout2").html();
		callouts["CALLOUT3"] = $("#callout3").html();
		return callouts;
	}
	
	if(!window.contentMatrix || !window.contentMatrix.result){
		$.log('(!)initCallouts: contentMatrix failure');
		return;
	}
	var cMatrix = window.contentMatrix.objects;
	var match = location.href.match(/((\/[^\/]+\/[^\/]+.jspa).*)/);
	if(match.length<3){
		// Something's wrong!
		$.log('(!)initCallouts: '+match);
		return;
	}
	var pageKeyNaked = match[2];
	var pageKey = match[1];
	
	if(!cMatrix[pageKeyNaked]){
		cMatrix[pageKeyNaked]=saveCallouts({});
		$.log("initCallouts: Storing callout for "+pageKeyNaked);
	}
	if(pageKeyNaked!=pageKey && !cMatrix[pageKey]){
		cMatrix[pageKey] = cMatrix[pageKeyNaked];
		$.log("initCallouts: Storing callout for "+pageKey);
	}
	
}

/** This function updates callout according to the parameter.
 * @param url - key in the contentMatrix, like '/home/index.jspa', (optional), 
 * if called w/o parameter location.href is used insted; 
 */
function updateCallouts(url){
	
	var currentUrl = url || location.href;
	
	/**
	 * This function sets new callouts
	 * @param callouts {'CALLOUT1':'html','CALLOUT2':'html','CALLOUT3':'html'}
	 */
	function setNewCallouts(callouts){
		if(callouts["CALLOUT1"]){
			$("#callout1").html(callouts["CALLOUT1"]);
		}
		if(callouts["CALLOUT2"]){
			$("#callout2").html(callouts["CALLOUT2"]);
		}
		if(callouts["CALLOUT3"]){
			$("#callout3").html(callouts["CALLOUT3"]);
		}
	}

	if(!window.contentMatrix || !window.contentMatrix.result){
		$.log('(!)updateCallouts: contentMatrix failure');
		return;
	}
	var cMatrix = window.contentMatrix.objects;
	var match = currentUrl.match(/((\/[^\/]+\/[^\/]+.jspa).*)/);
	if(match.length<3){
		// Something's wrong!
		$.log('(!)updateCallouts: '+match);
		return;
	}
	var pageKeyNaked = match[2];
	var pageKey = match[1];

	if(cMatrix[pageKey]){
		$.log("updateCallouts: Setting calluts for "+pageKey);
		setNewCallouts(cMatrix[pageKey]);
	}else if(cMatrix[pageKeyNaked]){
		$.log("updateCallouts: Didn't find calluts for "+pageKey+", updating for "+pageKeyNaked);
		setNewCallouts(cMatrix[pageKeyNaked]);
	}else{
		$.log("updateCallouts: could not update callouts");
	}
}

function initPollCallouts(){
	$("DIV.pollCallout").each(function(){
		var pollCallout = this;
		$("DIV.pollQuestions A.seeResults",pollCallout).click(function(){
			$("DIV.pollQuestions",pollCallout).hide();
			$("DIV.pollResults",pollCallout).show();
			return false;
		});
		$("INPUT:radio", pollCallout).click(function(){
			var groups = $(this).attr('id').match(/optid_(\d+)_(\d+)/);
			if(groups.length>=3){
				var dataToSubmit = {'calloutId':groups[1],'answer':groups[2]};
				$.getJSON("./../services/pollcallout.json?",dataToSubmit, function(data){
					$.log("GOT:" + data);
				});
				$("DIV.pollQuestions A.seeResults",pollCallout).click();
			}
		}).filter(":checked").click();
	});
}

function checkboxes(){
	$('INPUT:checkbox').not(".simple").checkbox( {
		cls : 'jquery-checkbox',
		empty : '/img/empty.gif'
	});
	$('INPUT:radio').not(".simple").checkbox( {
		cls : 'jquery-radio',
		empty : '/img/empty.gif'
	});
}
function initForecastForm(){
	$("FORM#laf_form").submit(function(){
	    $.attachAtlas('cbnctn_LocalAllergyForecast_1');
		if($('INPUT#laf-txt').val().toLowerCase()=='enter zip code'){
			location.href = "./../manage/allergy-forecast.jspa";
			return false;
		}
		$("INPUT#laf-submit").attr('disabled',true);
	});
}

function initGAHashPageviews(){
	window.gaHashFirstTime = true;
	$(window).bind("hash", function(){
		if(!window.gaHashFirstTime && (location.hash.indexOf(':')==-1) ){
			$._trackPageview(window.pageTracker, location.pathname + location.search + location.hash);
		}else{
			window.gaHashFirstTime = false;
		}
	});
}


/**
 * 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
 *
 */
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}};

function survey(){
	SURVEY_COOKIE = 'exit_survey';
	var fancyboxOptions = {
			hideOnContentClick:false,
			hideOnOverlayClick:false,
			callbackOnStart:function(){$('#fancy_outer').addClass('survey');},
			callbackOnClose:function(){$('#fancy_outer').removeClass('survey');},
			frameWidth: 270,
			frameHeight: 130,
			overlayOpacity: 0.4
	};
	var cookie = $.cookie(SURVEY_COOKIE);
	if(!cookie){
		var date = new Date();
        date.setTime(date.getTime()+(364 * 24*60*60*1000));
        $.cookie(SURVEY_COOKIE, 'true', { path: '/', expires: date });
		$('<a href="#exitSurvey" class="hidden">exitSurvey</a>').appendTo('body').fancybox(fancyboxOptions).trigger('click');
	}
}


if (window['DO_NOT_RUN_INIT']==undefined || !window['DO_NOT_RUN_INIT']) $(document).ready( function() {    
	try{
		targetBlank();
		checkboxes();
		addBalloons();
		blurTabs();
		clearField();
		showSubMenu();
		addOddEven();
		addGlossaryHighlights($(".pageTitle").siblings());
		couponLinks();
		initCallouts();
		initPollCallouts();
		initForecastForm();
		initGAHashPageviews();
		survey();
	}catch(err){
		$.log(err);
	}
});
