/*  ------------------------------------------------------------------
    Background Image Fix --------------------------------------------- */
    try { document.execCommand("BackgroundImageCache", false, true)} catch(e) {};


/*  ------------------------------------------------------------------
    Functions -------------------------------------------------------- */

    /*  ------------------------------------------------------------------
        TD Tracking ------------------------------------------------------ */
        function tracking(category, action, label){

            //Google Analytics
            ga(category, action, label);

            return;
        };


    /*  ------------------------------------------------------------------
        Google Tracking -------------------------------------------------- */
        function ga(category, action, label){
            
            if(undefined!==window.pageTracker){ 
                pageTracker._trackEvent(category, action , label);
            }
            return;
        };


    /*  ------------------------------------------------------------------
        switchTextSize --------------------------------------------------- */
        function switchTextSize(size, settings) {
            if(size !== ''){
                $('body').removeClass().addClass(size);
                if (settings.saveCookie === true) {
                    $.cookie('textsize', size, { expires: 365, path: '/'  });
                }
            }
        }


    /*  ------------------------------------------------------------------
        Subscribe -------------------------------------------------------- */
        function subscribeHome(){
        	if (!(document.getElementById("email_consent")) /*|| document.getElementById("email_consent").checked*/) {
        		$('#frm_subscribe_home').load('/home/newsletter/from/home/email/'+escape($('#frm_subscribe_home_email').val()));
        	}
        };

        function subscribeHeader(){
        	if (!(document.getElementById("email_consent_header")) || document.getElementById("email_consent_header").checked) {
        		$('#frm_subscribe_header').load('/home/newsletter/from/header/email/'+escape($('#frm_subscribe_header_email').val()));
        	}
        };

/*  ------------------------------------------------------------------
    Extend jQuery Functions ------------------------------------------ */
    (function ($) {

    /*  ------------------------------------------------------------------
        switchSize ------------------------------------------------------- */
        $.fn.switchSize = function(settings) {
            // defaults settings
            settings = $.extend({
                saveCookie: true
            },settings);

            return this.each(function(){
                var container = this;
                var curtextsize = $.cookie('textsize');
                if (curtextsize) { $('body').removeClass().addClass(curtextsize); }

                $(this)
                    .find("a")
                    .bind('click', function(){
                        switchTextSize( $(this).attr("rel"), settings);                        
                        return false;
                    });
            });
        };


    /*  ------------------------------------------------------------------
        Plugin/Cookie ---------------------------------------------------- */
        $.cookie = function(name, value, options) {
            if (typeof value != 'undefined') { // name and value given, set cookie
                options = options || {};
                if (value === null) {
                    value = '';
                    options.expires = -1;
                }
                var expires = '';
                if (options.expires && (typeof options.expires == 'number' || options.expires.toUTCString)) {
                    var date;
                    if (typeof options.expires == 'number') {
                        date = new Date();
                        date.setTime(date.getTime() + (options.expires * 24 * 60 * 60 * 1000));
                    } else {
                        date = options.expires;
                    }
                    expires = '; expires=' + date.toUTCString(); // use expires attribute, max-age is not supported by IE
                }
                // CAUTION: Needed to parenthesize options.path and options.domain
                // in the following expressions, otherwise they evaluate to undefined
                // in the packed version for some reason...
                var path = options.path ? '; path=' + (options.path) : '';
                var domain = options.domain ? '; domain=' + (options.domain) : '';
                var secure = options.secure ? '; secure' : '';
                document.cookie = [name, '=', encodeURIComponent(value), expires, path, domain, secure].join('');
            } else { // only name given, get cookie
                var cookieValue = null;
                if (document.cookie && document.cookie !== '') {
                    var cookies = document.cookie.split(';');
                    for (var i = 0; i < cookies.length; i++) {
                        var cookie = jQuery.trim(cookies[i]);
                        // Does this cookie string begin with the name we want?
                        if (cookie.substring(0, name.length + 1) == (name + '=')) {
                            cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
                            break;
                        }
                    }
                }
                return cookieValue;
            }
        };


    /*  ------------------------------------------------------------------
        Vertical Align --------------------------------------------------- */
        $.fn.verticalAlign = function() {
            return this.each(function(i){
	            var ah = $(this).height();
	            var ph = $(this).parent().height();
	            var mh = (ph - ah) / 2;
	            $(this).css('margin-top', mh);
            });
        };


    })(jQuery);


/*  ------------------------------------------------------------------
    Language detector ------------------------------------------------ */
    var lang = window.location.href;
    if(lang.match("tdextra")) {
        lang = "en";
    }else {
        lang = "fr";
    }


/*  ------------------------------------------------------------------
    On Load ---------------------------------------------------------- */
    $(function(){

	/*  ------------------------------------------------------------------
		Misc ------------------------------------------------------------- */
		$('.valign').verticalAlign();

		//fix IE6 PNG transparency
        if($.browser.msie && $.browser.version < 7) {
        	DD_belatedPNG.fix('img, .png');
		}

        $(".js_show").removeClass("js_show");
        $(".js_hide").hide();
        
        if(!($.browser.msie && $.browser.version == 6)) {
        	$(".js_show_no_ie6").removeClass("js_show_no_ie6");
        	$(".js_hide_no_ie6").hide();
        }


    /*  ------------------------------------------------------------------
        External Link ---------------------------------------------------- */
        var allowedDomains = [location.hostname];
        $("a[href^=http]:not(.internal):not([rel^='popup'])")
        .filter(function(el){
            for ( var i=0; i < allowedDomains.length; i++ ) {
                if ( this.href.indexOf(allowedDomains[i])>-1 ) return false;
            }
            return true;
        }).bind("click", function(){ return !window.open(this.href); });
		$('a.new-window').bind("click", function(){ return !window.open(this.href); });


    /*  ------------------------------------------------------------------
        Font Switcher ---------------------------------------------------- */
        $("#fontswitcher").switchSize();


    /*  ------------------------------------------------------------------
        Popup ------------------------------------------------------------ */
        $("a[rel^='popup']").bind("click", function(){
            rel = $(this).attr("rel");
            rel = rel.replace("popup", "").split("x");
            w = rel[0];
            h = rel[1];
            var my_popup = window.open($(this).attr("href"), $(this).attr("id"), "location=0, status=0, scrollbars=1, menubar=0, toolbar=0, width="+w+", height="+h);
            if (my_popup) {my_popup.focus();}
            return !my_popup;
        });


    /*  ------------------------------------------------------------------
	    Remove default value on Focus ------------------------------------ */
		$("input[type='text'][@title]")
		.bind("focus",function(){ if(this.value==this.title){ this.value=""; } })
		.bind("blur",function(){ if(this.value==""){ this.value=this.title; } });

    /*  ------------------------------------------------------------------
        Sub-navigation Menu ---------------------------------------------- */
        $('#m_nav li a.open_sub').click(function (){
            $('#m_nav li.withsub').removeClass('withsub_hover');
            $(this).parent().addClass('withsub_hover');
        });

        $('#m_nav li a.close_sub').click(function (){
            $('#m_nav li.withsub_hover').removeClass('withsub_hover');
        });

        /* bind href */
        $('div.change a').click(function (){
        	$('a#m_location').trigger('click');
		});
		$('.change').click(function (){
        	$('a#m_location').trigger('click');
		});


    /*  ------------------------------------------------------------------
        Invite Friends --------------------------------------------------- */
		if($('#frm_contest').length) {
			
			var $fname  		= $('#friend_name');
			var $email  		= $('#friend_email');
			var $ferror 		= $('#friends_error');
			var $ferror_dupe 	= $('#friends_dupe_error');
			var $fbox			= $("#contest_winners_friends_email");
			var limit   		= 10;
			
			/* hide the smartTextBox onload */
			if($fbox.val().length) {
				/* initialize the smartTextBox */
				$fbox.smartTextBox({
					submitKeys : [],
					submitChars : [],
					separator : ",",
					onElementAdd: function() { 
						if($('.smartTextBox-box-elem').size() == limit) {
							$fname.attr('disabled','disabled');
							$email.attr('disabled','disabled');						
							$('#add').removeClass('b_orange').addClass('b_grey');
						}
					},
					onElementRemove: function() {
						if($('.smartTextBox-box-elem').size() < limit) {
							$fname.attr('disabled','');
							$email.attr('disabled','');						
							$('#add').removeClass('b_grey').addClass('b_orange');
						}
						if($('.smartTextBox-box-elem').size() == 0) {
							$('.smartTextBox').hide();	
						}
					}
				});
			} else {
				$fbox.hide();	
			}
			
			function checkForEnter (event) {
				if (event.keyCode == 13) {
					$('#add').trigger('click');	  
				} 
			}
			
									
			function isValidEmail(email) {
				var filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})$/;
				return filter.test(email);
			}
			function hasAnyErrors() {
				if( $fname.val() == '' || $fname.attr('title') == $fname.val() || $email.val() == '' || !isValidEmail($email.val()) || $email.attr('title') == $email.val() ) { return true; }
			}
			function hasNameError() {
				if( ($fname.val() == '' || $fname.attr('title') == $fname.val()) ) { return true; }	
			}
			function hasEmailError() {
				if( ($email.val() == '' || !isValidEmail($email.val()) || $email.attr('title') == $email.val()) ) { return true; }	
			}
			
			$('#add').click(function() {
				
				if(hasAnyErrors() && $('.smartTextBox-box-elem').size() < limit) {
					
					/* show error message */
					$ferror.show();
					/* show/hide name error */
					if(hasNameError()) { $fname.addClass('invalid'); }
					if(!hasNameError()) { $fname.removeClass('invalid'); }
					/* show/hide email error */
					if(hasEmailError()) { $email.addClass('invalid'); }
					if(!hasEmailError()) { $email.removeClass('invalid'); } 
					$email.blur();
					
				} else if(!hasAnyErrors() && $('.smartTextBox-box-elem').size() < limit) {
					
					$('.smartTextBox').show();
					
					/* initialize the smartTextBox */
					$fbox.smartTextBox({
						submitKeys : [],
						submitChars : [],
						separator : ",",
						onElementAdd: function() { 
							if($('.smartTextBox-box-elem').size() == limit) {
								$fname.attr('disabled','disabled');
								$email.attr('disabled','disabled');						
								$('#add').removeClass('b_orange').addClass('b_grey');
							}
						},
						onElementRemove: function() {
							if($('.smartTextBox-box-elem').size() < limit) {
								$fname.attr('disabled','');
								$email.attr('disabled','');						
								$('#add').removeClass('b_grey').addClass('b_orange');
							}
							if($('.smartTextBox-box-elem').size() == 0) {
								$('.smartTextBox').hide();	
							}
						}
					});

					var content = $fname.val()+' <'+$email.val().toLowerCase()+'>';
					var friendslist = $fbox.val();

					
					if(friendslist.indexOf($email.val().toLowerCase()) > -1) {
						/* show error message */
						$ferror_dupe.show();
						/* show email error */
						$email.addClass('invalid');
						$email.blur();
					}
					/* add the valid friend to the smart textbox */
					else if(friendslist.indexOf($email.val().toLowerCase()) == -1) { // only add if email not already in list
						$fbox.smartTextBox('add', content);
						$email.blur();
						/* reset the errors */
						$ferror.hide(); $ferror_dupe.hide();
						$fname.removeClass('invalid');
						$email.removeClass('invalid');
						/* reset the input fields */
						$fname.val($fname.attr('title'));
						$email.val($email.attr('title'));
					}
					
				}
				return false;
			});
			
			$('#friend_email').keydown(checkForEnter);
			$('.smartTextBox').keypress(function(event) {
				if(event.keyCode == 8 || event.keyCode == 9 || event.keyCode == 13) { // allow backspace, tab, enter
					return true 
				} else {
					return false;
				}
			});
	
		}


/*  ------------------------------------------------------------------
	Validate/Submit Contest Form ------------------------------------- */
	if($('#frm_contest').length) {
		$('#submit_frm').click(function() { $('#frm_contest').submit(); });

		$.validator.addMethod('placeholdercheck', function(value, element) {
			return String(value) != String($(element).attr('title'));
		},'Error');

		jQuery.validator.addMethod("phoneUS", function(phone_number, element) {
			phone_number = phone_number.replace(/\s+/g, ""); 
			return this.optional(element) || phone_number.length > 9 &&
				phone_number.match(/^(1-?)?(\([2-9]\d{2}\)|[2-9]\d{2})-?[2-9]\d{2}-?\d{4}$/);
		}, "Error");

		$.validator.addMethod("postalCode", function(value) {
			 return value.match(/^[a-zA-Z][0-9][a-zA-Z](-| )?[0-9][a-zA-Z][0-9]$/);
		}, 'Error');

		$('#frm_contest').validate({
			onfocusout: false,
			focusInvalid: false,
			rules: {
				'contest_winners[first_name]': 'placeholdercheck',
				'contest_winners[last_name]': 'placeholdercheck',
				'contest_winners[email]': { placeholdercheck: true, email: true },
				'contest_winners[confirm_email]' : { placeholdercheck: true, email: true, equalTo: '#contest_winners_email' },
				'contest_winners[phone]': { placeholdercheck: true, phoneUS: true },
				'contest_winners[address]': 'placeholdercheck',
				'contest_winners[city]': 'placeholdercheck',
				'contest_winners[province]': 'placeholdercheck',
				'contest_winners[postal_code]': { placeholdercheck: true, postalCode: true, minlength: 6, maxlength: 7 },
				'contest_winners[randr]': 'required',
				'contest_winners[stq_answer]': 'placeholdercheck',
				'contest_winners[verify]': 'required',
				'contest_winners[captcha]': 'placeholdercheck'
			},
			ignore: '.ignore',
			errorClass: "invalid",
			debug: false,
			errorPlacement: function(error, element) { /* invisible error msgs, but still needed to enable highlighting */ },
			showErrors: function(errorMap, errorList) {
				$(errorList).each(function() {
					if(this.element.name == 'contest_winners[stq_answer]') {
						$('#skill_error').show();
					} else {
						$('#main_error').show();
					};
				});
				this.defaultShowErrors();
			},
			highlight: function(element, errorClass) {
				if(element.type == 'checkbox') {
					$(element).addClass(errorClass);
					$(element).next().addClass(errorClass);
					$.scrollTo('.invalid:first');
				} else {
					$(element).addClass(errorClass);
					$.scrollTo('.error:first');
				}
			},
			unhighlight: function(element, errorClass) {
				if(element.type == 'checkbox') {
					$(element).removeClass(errorClass);
					$(element).next().removeClass(errorClass);
				} else {
					$(element).removeClass(errorClass);
				}
				if (this.numberOfInvalids() == 0) {
                    $(".error").hide();
                }
			},
			invalidHandler: function(form, validator, errorClass) {
			},	
			submitHandler: function(form) {
				form.submit();
			}
		});
	}


/*  ------------------------------------------------------------------
	Validate/Submit Contest Form ------------------------------------- */
	if($('#winners_table').length) {
		$('tbody tr:even').addClass('even');
		$('tbody tr:odd').addClass('odd');
	}

    }); /* end OnLoad */

/*  ------------------------------------------------------------------
	Email Consent ---------------------------------------------------- */
    function emailConsent() {
    	if (document.getElementById("email_consent").checked) {
    		document.getElementById("frm_subscribe_home_email").disabled=false;
        } else {
    		document.getElementById("frm_subscribe_home_email").disabled=true;
    	}
    }
    
    function emailConsentHeader() {
    	if (document.getElementById("email_consent_header").checked) {
    		document.getElementById("frm_subscribe_header_email").disabled=false;
        } else {
    		document.getElementById("frm_subscribe_header_email").disabled=true;
    	}
    }

