if (typeof(SNI.DIY.Sweepstakes) === "undefined") { 
	SNI.DIY.Sweepstakes = {}; 
}

SNI.DIY.Sweepstakes = {

	init: function() {
		SNI.DIY.Util.overlay();
		$('form.form select').dropdown();
		//SNI.DIY.Sweepstakes.moreNewsletters();
		SNI.DIY.Sweepstakes.checkAll();
		SNI.DIY.Sweepstakes.closeErrors();
		var form = $("#sweepsEntryForm");
		
		var _ckVals = SNI.Util.Cookie.get('sniSweepsVals');
		if (_ckVals !== null) {
			var _aryCkVals = _ckVals.split('|');
			_xemail = _aryCkVals[0];
			if (_aryCkVals[1] !== undefined) {_xfn = _aryCkVals[1];
			} else {_xfn = '';}
			if (_aryCkVals[2] !== undefined) {_xln = _aryCkVals[2];
			} else {_xln = '';}
			if (_aryCkVals[3] !== undefined) {_xaddy = _aryCkVals[3];
			} else {_xaddy = '';}
			if (_aryCkVals[4] !== undefined) {_xcity = _aryCkVals[4];
			} else {_xcity = '';}
			if (_aryCkVals[5] !== undefined) {_xstate = _aryCkVals[5];
			} else {_xstate = 0;}
			if (_aryCkVals[6] !== undefined) {_xzip = _aryCkVals[6];
			} else {_xzip = '';}
			if (_aryCkVals[7] !== undefined) {_xphone = _aryCkVals[7];
			} else {_xphone = '';}
			if (_aryCkVals[8] !== undefined) {_xgender = _aryCkVals[8];
			} else {_xgender = null;}
		}
		$("#fvEmail").blur(function () {
        	checkCkVals($("#fvEmail").val(), form);
    	});
			
		var validator = form.validate({
   
			//debug: true,
			errorContainer: 'div.sweeps .form-errors',
			errorLabelContainer: 'div.sweeps .form-errors ul',
			wrapper: "li",
	
			rules: {
				fvFirst: "required",
				fvLast: "required",
				fvAddress1: "required",
				fvCity: "required",
				fvState: "required",
				fvZip: {
					required: true,
      				minlength: 5
				},
				fvEvePhone: {
					required: true,
					phoneUS: true
				},
				fvEmail: { 
					required: true,
					email: true
				},
				fvEmailConfirm: {
					required: true,
					equalTo: "#fvEmail"
				},
				fvGender: "required"
			},
	
			messages: {
				fvFirst: "Please enter your first name",
				fvLast: "Please enter your last name",
				fvAddress1: "Please enter your address",
				fvCity: "Please enter your city",
				fvState: "Please select your state",
				fvZip: "Please enter your 5 digit ZIP code",
				fvEvePhone: "Please enter a valid phone number",
				fvEmail: "Please enter an e-mail address",
				fvEmailConfirm: "Please make sure your e-mails match",
				fvGender: "Please select your gender"
			},
	
			showErrors: function(errorMap, errorList) {
				if (errorList.length) {
					this.defaultShowErrors();
					SNI.DIY.Sweepstakes.scrollTop();
				}
			},
			
			submitHandler: function(form) {
				if(window.onbeforeunload != "undefined") {
					window.onbeforeunload = null;
				}
				ckInit();
				form.submit();
			}
		});
	},
	
	closeErrors: function() {
		// hide the error messages if X is clicked
		$('div.sweeps div.form-errors a.close').click(function() {
			$('div.sweeps div.form-errors').slideUp();
			return false;
		});
	},
	
//	moreNewsletters: function() {
//		// setup more newlsetters faux-accordion
//		$('div.sweeps fieldset.more-newsletters h4 a').click(function() {
//			var link = $(this);
//			if (link.hasClass('active')) {
//				link.removeClass('active')
//				$('div.sweeps fieldset.more-newsletters div.bd').slideUp();
//				link.blur(); // fix for IE
//			} else {
//				link.addClass('active');
//				$('div.sweeps fieldset.more-newsletters div.bd').slideDown();
//				link.blur(); // fix for IE
//			}
//			return false;
//		});
//	},
	
	checkAll: function() {
		// setup check all button
		$('div.sweeps fieldset.more-newsletters a.check-all').click(function() {
			var link = $(this);
			var text = link.find('span');

			if (text.text() == 'Check All') {
				text.text('Uncheck All');
				$('div.sweeps fieldset.more-newsletters input').attr('checked', 'checked');
			} else {
				text.text('Check All');
				$('div.sweeps fieldset.more-newsletters input').removeAttr('checked');
			}
			
			return false
		});
	},
	
	scrollTop: function() {
		var winOffset = 70;  // must account for the project finder height
		var win = $(window);
		var winTop = win.scrollTop() + winOffset;
		var errorTop = $('div.sweeps .form-errors').offset().top;
		
		if (errorTop < winTop) {
			win.scrollTop(errorTop - winOffset);
		}
	},
	
	thanks: function() {
    	SNI.DIY.Sweepstakes.emailAFriend();
		SNI.DIY.Sweepstakes.reminder();
		
		if (jQuery.query.has('fvEmail')) {
			$('#sweeps-thanks').show();
			//$('div.sponsor-lead').hide();
			mdManager.addParameter("Sweepstakes", "SweepsThankYou");
    	}
		
		if (jQuery.query.has('status')) {
			$('#sweeps-thanks').show();
			//$('div.sponsor-lead').hide();
			$('#remind-message').text("Thanks for Signing Up!");
			$('#remind-message-sub').text("You should begin receiving e-mails shortly.");
			mdManager.addParameter("Sweepstakes", "SweepsThankYou");
    	}
		
		$('#sweeps-thanks a.close').click(function() {
			$('#sweeps-thanks').slideUp();
			//$('div.sponsor-lead').slideDown();
			return false;
		});
	},
	
	emailAFriend: function(){
		var module = $("#email-a-friend");
		var form = module.find("form");
		form.submit(function(){return false;});
		var null_value = "";
		var initMessage = form.find("textarea").val();
		

		// Reveal the Email-A-Friend Panel
		SNI.DIY.Sweepstakes.revealModule(".email",module);
		$(".close").click(function(){
			SNI.DIY.Sweepstakes.closeModule(".email",module);
		});
		$(".form-submit a").click(function(){
			SNI.DIY.Sweepstakes.closeModule(".email",module);
			return false;
		});

	 //	Validation && Submit
		form.validate({
			errorLabelContainer: module.find('.message'),
			wrapper: '',
			rules: {
				from_name: {
					required: true
				},
				from_email: {
					required: true,
					email: true
				},
				to_emails: {
					required: true,
					multipleEmails: true
				}
			},
			messages: {
				from_name: {
					required: "Whoops. Please enter your name."
				},
				from_email: {
					required: "Whoops. Please enter your e-mail address.",
					email: "Whoops. Please check the format of your e-mail address and re-enter (i.e. joe@hgtv.com)."
				},
				to_emails: {
					required: "Whoops. Please enter at least one friend e-mail address.",
					multipleEmails: "Whoops. One or more of your friend e-mail addresses is not formatted correctly. Please check the format and re-enter (i.e. joe@hgtv.com)."
				}
			},
			showErrors: function(errorMap, errorList) {
				if (errorList.length) {
					module.find('.message').addClass('alert').text('');
					// select the email field
					element = $(errorList[0].element);
					if (element.hasClass('isemail')) {
						element.select();
					}
					// only show one error at a time for this form
					this.errorList = [this.errorList[0]];
					this.defaultShowErrors();
				}
			}, 
			submitHandler: function() {
				var txtarea = form.find('input[name="body"]');
				var txtarea_comment = txtarea.val();
				var msg_body = form.find('input[name="from_name"]').val() + txtarea.val() + "\n\n";
				msg_body += "http://www.DIYNetwork.com/blogcabin\n\n";
				msg_body += "Enter Now!";
				
				module.find('.message').hide().removeClass("alert");
				form.find('fieldset').hide();
				form.find("label").removeClass("error");
				form.find('button').addClass('disabled').attr('disabled', 'disabled');
				form.find('.cancel').addClass("disabled");
				form.find('.loading').show();
				txtarea.val(msg_body);
				
				var form_data = form.serialize();
				$.ajax({
					type: "POST",
					url: form.attr("action"),
					cache: false,
					data: form_data,
					success: function(data){
						form.find('.loading').hide();
						var response = $(data);
						var emailSent = response.eq(7).text();
						if (emailSent == "false") {
							txtarea.val(txtarea_comment);
							form.find('fieldset').show();
							form.find('button').removeClass('disabled').removeAttr('disabled');
							form.find('.cancel').removeClass("disabled");
							form.find("label[for='friends-email']").addClass("error");
							$("#friends-email").select();
							module.find('.message').addClass("alert").text("Whoops. The e-mail could not be sent to one or more of your friends. Please check the format of their e-mail address and re-enter (i.e. joe@DIYNetwork.com).").show();
						} else {
							var success = module.find('.success');
							var page_title = mdManager.getPageTitle();
							form.hide();
							success.show();
							var timeout = setTimeout(function(){	
								SNI.DIY.Sweepstakes.closeModule(".email",module,300);
								module.hide();
								// Reset form
								success.hide();
								txtarea.val(txtarea_comment);
								module.find('.message').text("All fields are required.").show();
								form.find("input:text").each(function(){
									$(this).val(""); 
								});
								form.find('button').removeClass('disabled').removeAttr('disabled');
								form.find('.cancel').removeClass("disabled");
								form.find('fieldset').show();
								form.show();
							}, 3000);
							$(".close").click(function(){
								clearTimeout(timeout);
								SNI.DIY.Sweepstakes.closeModule(".email",module);
								module.hide();
								// Reset form
								success.hide();
								txtarea.val(txtarea_comment);
								module.find('.message').text("All fields are required.").show();
								form.find("input:text").each(function(){
									$(this).val(""); 
								});
								form.find('button').removeClass('disabled').removeAttr('disabled');
								form.find('.cancel').removeClass("disabled");
								form.find('fieldset').show();
								form.show();
							});
						}
					},
					error: function(){
						form.find('.loading').hide();
						txtarea.val(txtarea_comment);
						form.find('fieldset').show();
						form.find('button').removeClass('disabled').removeAttr('disabled');
						form.find('.cancel').removeClass("disabled");
						module.find('.message').addClass("alert").text("Whoops. We encountered an error when trying to e-mail this page. Please wait a few moments and try again.").show();
					}
 				});
			}
		});
	},
		
	reminder: function() {
		var module = $("#sweeps-reminders");
		var form = module.find("form");
		var null_value = "";

		// Reveal the Email-A-Friend Panel
		SNI.DIY.Sweepstakes.revealModule(".reminder",module);
		$(".close").click(function(){
			SNI.DIY.Sweepstakes.closeModule(".reminder",module);
		});
		$(".form-submit a").click(function(){
			SNI.DIY.Sweepstakes.closeModule(".reminder",module);
			return false;
		});

	 //	Validation && Submit
		form.validate({

			debug: false,
		
			rules: {
				FIRST_NAME_: "required",
				LAST_NAME_: "required",
				email: { 
					required: true,
					email: true
				},
				email_confirm: {
					required: true,
					equalTo: "#email"
				}
			},

			messages: {
				FIRST_NAME_: "Please enter your first name",
				LAST_NAME_: "Please enter your last name",
				email: "Please enter an e-mail address",
				email_confirm: "Please make sure your e-mails match"
			},
		
			showErrors: function(errorMap, errorList) {
				if (errorList.length) {
					module.find('.message').addClass('alert').html(errorList[0].message);
					// select the email field
					element = $(errorList[0].element);
					if (element.hasClass('isemail')) {
						element.select();
					}
					// only show one error at a time for this form
					this.errorList = [this.errorList[0]];
//					this.defaultShowErrors();
				}
			}
		});  // form-validate
	},
	
	revealModule: function(trigger,module,container) {
		var containerEl = $("#sweeps-thanks");
		
		if (container != "") {
			containerEl = container;
		}
		
		$(containerEl).find(trigger).click(function() {
			module.fadeIn(SNI.DIY.ANIMATION_SPEED);
			$(this).addClass("active");
			return false;
		})
	},
	
	closeModule: function(trigger,module,speed) {
		if (speed == null) {
			speed = SNI.DIY.ANIMATION_SPEED;
		};
		module.fadeOut(speed);
		if ($(trigger).hasClass("active")) {
			$(trigger).removeClass("active");
		};
	}
}

SNI.DIY.Util.overlay = function() {
	$("a.overlay").click(
      	function () {
        	$(this).siblings("div.flyout").show();
			return false;
      	}
    );
	$("div.flyout a.close").click(
      	function () {
        	$(this).parents("div.flyout").hide();
			return false;
      	}
    );
};

$.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}$/);
}, "Please specify a valid phone number");

function ckInit() {
	var _email = $("#fvEmail").val();
	var _fn = $("#fvFirst").val();
	var _ln = $("#fvLast").val();
	var _addy = $("#fvAddress1").val();
	var _city = $("#fvCity").val();
	var _state = $("#fvState").val();
	var _zip = $("#fvZip").val();
	var _phone = $("#fvEvePhone").val();
	if ($('#sweepsEntryForm input[name="fvGender"]').eq(0).attr("checked") === true) {
		var _gender = 'm';
	} else {
		_gender = 'f';
	}
	var _ckVals = _email + '|' + _fn + '|' + _ln + '|' + _addy + '|' + _city + '|' + _state + '|' + _zip + '|' + _phone + '|' + _gender;
	SNI.Util.Cookie.set('sniSweepsVals', _ckVals, 365);
}

function checkCkVals(userEmail, form) {
	if (userEmail == _xemail) {
		$("#fvEmailConfirm").val($("#fvEmail").val());
		if ($("#fvFirst").val() === '') {$("#fvFirst").val(_xfn);}
		if ($("#fvLast").val() === '') {$("#fvLast").val(_xln);}
		if ($("#fvAddress1").val() === '') {$("#fvAddress1").val(_xaddy);}
		if ($("#fvCity").val() === '') {$("#fvCity").val(_xcity);}
		if ($("#fvState").val() === 0) {$("#fvState").val(_xstate);}
		if ($("#fvZip").val() === '') {$("#fvZip").val(_xzip);}
		if ($("#fvEvePhone").val() === '') {$("#fvEvePhone").val(_xphone);}
		if (form.find('input[name="fvGender"]').eq(0).attr("checked") === false && form.find('input[name="fvGender"]').eq(1).attr("checked") === false) {
			if (_xgender !== null) {
				if (_xgender == 'm') {
					form.find('input[name="fvGender"]').eq(0).attr({ 
          				checked: "true"
        			});
				} else {
					form.find('input[name="fvGender"]').eq(1).attr({ 
          				checked: "true"
        			});
				}
			}
		}
	}
}

function confirmExit(e) {
	if(!e) e = window.event;

	//e.cancelBubble is supported by IE - this will kill the bubbling process.
	e.cancelBubble = true;

	//This is displayed on the dialog
	return "It appears you have not entered the sweepstakes.\nDon't miss a chance to win the Design Star Sweepstakes.";

	//e.stopPropagation works in Firefox.
	if (e.stopPropagation) {
		e.stopPropagation();
		e.preventDefault();
	}
}

new function(settings) { 
  // Various Settings
  var $separator = settings.separator || '&';
  var $spaces = settings.spaces === false ? false : true;
  var $suffix = settings.suffix === false ? '' : '[]';
  
  jQuery.query = new function() {
    var queryObject = function(a) {
      var self = this;
      self.keys = {};
      
      if (a.queryObject) {
        jQuery.each(a.keys, function(key, val) {
          self.destructiveSet(key, val);
        });
      } else {
        var q = "" + a;
        q = q.replace(/^\?/,''); // remove any leading ?
        q = q.replace(/[;&]$/,''); // remove any trailing & || ;
        if ($spaces) q = q.replace('+',' '); // replace +'s with spaces

        jQuery.each(q.split(/[&;]/), function(){
          var key = this.split('=')[0];
          var val = this.split('=')[1];
          var temp, hashKey = null, type = null; 
          
          if (/^-?[0-9]+\.[0-9]+$/.test(val)) // simple float regex
            val = parseFloat(val);
          else if (/^-?[0-9]+$/.test(val)) // simple int regex
            val = parseInt(val);
            
          if (/\[([^\] ]+)\]$/.test(key)) // hash syntax
            type = Object, hashkey = key.replace(/^.+\[([^\] ]+)\]$/,"$1"), key = key.replace(/\[([^\] ]+)\]$/,"");
          else if (/\[\]$/.test(key)) // array syntax
            type = Array, key = key.replace(/\[\]$/,"");
          
          val = val || true;
          
          if (!type && self.has(key)) 
            type = Array, self.destructiveSet(key, self.has(key, Array) ? self.keys[key] : [self.keys[key]]);
          
          if (!type)
            self.destructiveSet(key, val);
          else
            if (type == Object) 
              temp = self.keys[key] || {}, temp[hashkey] = val, self.destructiveSet(key, temp);
            else if (type == Array)
              temp = self.keys[key] || [], temp.push(val), self.destructiveSet(key, temp);
        });
      }
      return self;
    };
    
    queryObject.prototype = {
      queryObject: true,
      has: function(key, type) {
        var keys = this.keys;
        return !!type ? keys[key] != undefined && keys[key] !== null && keys[key].constructor == type : keys[key] != undefined && keys[key] !== null;
      },
      get: function(key) {
        var value = (key == undefined) ? this.keys : this.keys[key];
        if (value.constructor == Array)
          return value.slice(0);
        else if (value.constructor == Object)
          return jQuery.extend({}, value);
        else
          return value;
      },
      destructiveSet: function(key, val) {
        if (val == undefined || val === null)
          this.destructiveRemove(key);
        else
          this.keys[key] = val;
        return this;
      },
      set: function(key, val) {
        return this.copy().destructiveSet(key, val);
      },
      destructiveRemove: function(key) {
        if (typeof this.keys[key] != 'undefined') 
          delete this.keys[key];
        return this;
      },
      remove: function(key) {
        return this.copy().destructiveRemove(key);
      },
      destructiveEmpty: function() {
        var self = this;
        jQuery.each(self.keys, function(key, value) {
          delete self.keys[key];
        });
        return self;
      },
      copy: function() {
        return new queryObject(this);
      },
      empty: function(destructive) {
        return this.copy().destructiveEmpty();
      },
      toString: function() {
        var i = 0, queryString = [], self = this, addFields = function(o, key, value) {
          o.push(key);
          if (value !== true) {
            o.push("=");
            o.push(encodeURIComponent(value));
          }
        };
        jQuery.each(this.keys, function(key, value) {
          var o = [];
          if (value !== false) {
            if (i++ == 0)
              o.push("?");
            if (self.has(key, Object)) {
              var _o = []
              jQuery.each(value, function(_key, _value) {
                var __o = [];
                addFields(__o, key + "[" + _key + "]", _value);
                _o.push(__o.join(""));
              });
              o.push(_o.join($separator));
            } else if (self.has(key, Array)) {
              var _o = []
              jQuery.each(value, function(_key, _value) {
                var __o = [];
                addFields(__o, key + $suffix, _value);
                _o.push(__o.join(""));
              });
              o.push(_o.join($separator));
            } else {
              addFields(o,key,value);
            }
          }
          queryString.push(o.join(""));
        });
        return queryString.join($separator);
      }
    };
    
    return new queryObject(location.search);
  };
}(jQuery.query || {}); // Pass in jQuery.query as se