String.prototype.trim = function () {
	return this.replace(/^\s+|\s+$/g, "");
}

String.prototype.isEmail = function() {
	return /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/.test(this);
}

cs_createCookie = function(name,value,days) {
  var d = document;
	if (days) {
    var date = new Date();
    date.setTime(date.getTime()+(days*24*60*60*1000));
    var expires = "; expires="+date.toGMTString();
  }
  else expires = "";
  d.cookie = name+"="+value+expires+"; path=/";
}

cs_readCookie = function(name) {
  var d = document;
	var nameEQ = name + "=";
  var ca = d.cookie.split(';');
  for(var i=0;i < ca.length;i++) {
    var c = ca[i];
    while (c.charAt(0)==' ') c = c.substring(1,c.length);
    if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
  }
  return null;
}

function cs_makeDaysOfMonth() {
  var i = 0;
  this[i++] = 0; // dummy
  this[i++] = 31;
  this[i++] = 29;
  this[i++] = 31;
  this[i++] = 30;
  this[i++] = 31;
  this[i++] = 30;
  this[i++] = 31;
  this[i++] = 31;
  this[i++] = 30;
  this[i++] = 31;
  this[i++] = 30;
  this[i  ] = 31;
  this.length = i;
}

function cs_calcAge(dd, mm, yy) {
  var t, mon, day, year, DD, MM, YY, age;
  var MTB = new cs_makeDaysOfMonth();
  YY   = parseInt(yy);	// year of birth (4 digits)
  MM   = parseInt(mm);	// month of birth (1-12)
  DD   = parseInt(dd);	// date of birth (1-31)
  if (MTB[MM] < DD || DD < 1) return -1;
  t    = new Date();	// get current date
  year = t.getFullYear();	// get year of current
  mon  = t.getMonth() + 1;	// get month of current
  day  = t.getDate();	// get date of current
  if (MM == 2 && DD == 29){	// check leap year
    if (!(((YY % 4 == 0) && (YY % 100 != 0)) || (YY % 400 == 0))){
      //alert("The year " +YY+ " ends at 28th of "+MM+" month\nPlease check the date.");
      //return -1;
    }
  }
  age = year - YY;
  if ((MM > mon) || (MM == mon && day < DD)) age --;

  return age;
}

cs_setSelectedOption = function(el, v) {
	var i, o;
	for(i = 0; o = el.getElementsByTagName("option")[i]; i++) {
		if(o.value == v) {
			o.selected = true;
			break;
		}
	}
}

cs_setBirthdate = function() {
	var d = document, o;
	var birthdate = cs_readCookie("csBirthdate");
	var a = cs_readCookie("age");
	if(birthdate) {
		var b = birthdate.split("/");
		var bm = d.getElementById("bmonth");
		var bd = d.getElementById("bday");
		var by = d.getElementById("byear");
		// set month
		cs_setSelectedOption(bm, b[0]);
		// set day
		cs_setSelectedOption(bd, b[1]);
		// set year
		cs_setSelectedOption(by, b[2]);
		// disable birthdate selector if under 13
		if(a && a < 13) {
			bm.disabled = true;
			bd.disabled = true;
			by.disabled = true;
		}
	}
}

cs_submitFAQ = function() {
	var d = document;
	if(d.getElementById("Category").value == "" && d.getElementById("searchkey").value.trim() == "") {
		alert("Please select an FAQ category or enter a search term.");
		return false;
	} else if(d.getElementById("searchkey").value.trim() != "") {
		// FAQ search
		d.getElementById("frmFAQ").action = "/cgi-bin/brandpages/faq/search.pl";
		return true;
	} else {
		// FAQ category selected
		return true;
	}
}

cs_submitContact = function() {
	var d = document;
	var bm = d.getElementById("bmonth").value;
	var bd = d.getElementById("bday").value;
	var by = d.getElementById("byear").value;
	var t = d.getElementById("topic").value;
	if(bm == "" || bd == "" || by == "") {
		alert("Please enter a valid date of birth.");
		return false;
	}
	cs_createCookie("csBirthdate", bm + "/" + bd + "/" + by);
	var birthdate = new Date(by, bm - 1, bd);
	//var today = new Date();
	// var a = (today - birthdate) / 1000 / 60 / 60 / 24;
	// if(Math.floor(a / 365) == 13) {
		// a = Math.floor((a - 3) / 365); // fudge factor for leap years
	// } else {
		// a = Math.floor(a / 365);
	// }
	var a = cs_calcAge(bd, bm, by);
	d.getElementById("age").value = a;
	if(t == "" && a > 12) {
		alert("Please specify a topic.");
		return false;
	}
	if(t == "investor" && a > 12) {
		window.open("http://investor.kelloggs.com/contactus.cfm");
		return false;
	}
	return true;
}

cs_checkAge = function() { // unused
	var d = document;
	var a = d.getElementById("age").value;
	var t = d.getElementById("topic");
	if(a == "1" || a == "7") {
		t.selectedIndex = 0;
		t.disabled = true;
	} else {
		t.disabled = false;
	}
}

cs_submitCountry = function() {
	var d = document;
	var c = d.getElementById("country").value;
	if(c == "") {
		alert("Please select a country.");
		return false;
	}
	window.open(c);
	return false;
}

cs_showHelpFile = function(topic) { // deprecated 6/3/2008
	var root, host = location.hostname;
  if(host.indexOf("gilmore") != -1) {
    root = "";
  } else if(host.indexOf("stagek") != -1) {
    root = "http://kelloggs.stagek.com";
  } else {
    root = "http://www.kelloggs.com";
  }
  switch(topic) {
		case "upc":
			window.open(root + "/us/brandpages/faq/upc.html","upchelp","width=500,height=400");
			break;
		case "best-before":
			window.open(root + "/us/brandpages/faq/manufacture_code.html","manhelp","width=500,height=400");
			break;
	}
}

cs_getElemPosition = function (el) {
	var x = 0, y = 0;
	if (el.offsetParent) {
		do {
			x += el.offsetLeft;
			y += el.offsetTop;
		} while (el = el.offsetParent);
	}
	return {"x": x, "y": y};
}

cs_showtooltip = function(id, trigger) {
	var t = document.getElementById(id), triggerPos;
	if (t) {
		// position tooltip near the trigger
		triggerPos = cs_getElemPosition(trigger);
		t.style.visibility = "hidden";
		t.style.display = "block";
		t.style.left = (triggerPos.x + 10) + "px";
		t.style.top = (triggerPos.y - t.offsetHeight) + "px";
		// show the tooltip
		t.style.visibility = "visible";
	}
}

cs_hidetooltip = function(id) {
	var t = document.getElementById(id);
	if (t) {
		t.style.display = "none";
		t.style.left = "-1000px";
		t.style.top = "-1000px";
	}
}

cs_verifyForm = function(f) {
	var d = document;
	switch(f) {
		case "productform":
			if(d.getElementById("ProductName").value.trim() == "") {
				d.getElementById("ProductName").focus();
				alert("Product Name is required.");
				return false;
			}
			if(d.getElementById("Message").value.trim() == "") {
				d.getElementById("Message").focus();
				alert("Message is required.");
				return false;
			}
			return cs_verifyContactInfo();
			break;
		case "promotionsform":
			if(d.getElementById("Message").value.trim() == "") {
				d.getElementById("Message").focus();
				alert("Message is required.");
				return false;
			}
			return cs_verifyContactInfo();
			break;
		case "generalform":
			if(d.getElementById("Message").value.trim() == "") {
				d.getElementById("Message").focus();
				alert("Message is required.");
				return false;
			}
			if(d.getElementById("FirstName").value.trim() == "") {
				d.getElementById("FirstName").focus();
				alert("First Name is required.");
				return false;
			}
			if(d.getElementById("LastName").value.trim() == "") {
				d.getElementById("LastName").focus();
				alert("Last Name is required.");
				return false;
			}
			if(d.getElementById("Zip").value.trim() == "") {
				d.getElementById("Zip").focus();
				alert("ZIP Code is required.");
				return false;
			}
			if(!d.getElementById("Zip").value.match(/^[0-9]{5}-[0-9]{4}$|^[0-9]{5}$/i)) {
				d.getElementById("Zip").focus();
				alert("ZIP Code is not valid.");
				return false;
			}
			if(!d.getElementById("Email").value.isEmail()) {
				d.getElementById("Email").focus();
				alert("Please enter a valid e-mail address.");
				return false;
			}
			if(d.getElementById("Email").value.trim() != d.getElementById("Email2").value.trim()) {
				d.getElementById("Email").focus();
				alert("The e-mail addresses you entered do not match. Please try again.");
				return false;
			}
			return true;
			break;
		case "productrecall":
		    if(d.getElementById("ProductName").value.trim() == "") {
				d.getElementById("ProductName").focus();
				alert("ProductName is required.");
				return false;
			}
			if(d.getElementById("Message").value.trim() == "") {
				d.getElementById("Message").focus();
				alert("Message is required.");
				return false;
			}
			if(d.getElementById("FirstName").value.trim() == "") {
				d.getElementById("FirstName").focus();
				alert("First Name is required.");
				return false;
			}
			if(d.getElementById("LastName").value.trim() == "") {
				d.getElementById("LastName").focus();
				alert("Last Name is required.");
				return false;
			}
			if(d.getElementById("StreetNum").value.trim() == "") {
				d.getElementById("StreetNum").focus();
				alert("House Number is required.");
				return false;
			}
			if(d.getElementById("StreetName").value.trim() == "") {
				d.getElementById("StreetName").focus();
				alert("Street Name is required.");
				return false;
			}
			if(d.getElementById("City").value.trim() == "") {
				d.getElementById("City").focus();
				alert("City is required.");
				return false;
			}
			if(d.getElementById("State").value.trim() == "") {
				d.getElementById("State").focus();
				alert("State is required.");
				return false;
			}
			if(d.getElementById("Zip").value.trim() == "") {
				d.getElementById("Zip").focus();
				alert("ZIP Code is required.");
				return false;
			}
			if(!d.getElementById("Zip").value.match(/^[0-9]{5}-[0-9]{4}$|^[0-9]{5}$/i)) {
				d.getElementById("Zip").focus();
				alert("ZIP Code is not valid.");
				return false;
			}
			if(d.getElementById("Phone").value.trim() == "") {
				d.getElementById("Phone").focus();
				alert("Daytime Phone is required.");
				return false;
			}
			if(!d.getElementById("Email").value.isEmail()) {
				d.getElementById("Email").focus();
				alert("Please enter a valid e-mail address.");
				return false;
			}
			if(d.getElementById("Email").value.trim() != d.getElementById("Email2").value.trim()) {
				d.getElementById("Email").focus();
				alert("The e-mail addresses you entered do not match. Please try again.");
				return false;
			}
			return true;
			break;
		case "nutritionform":
			if(d.getElementById("Message").value.trim() == "") {
				d.getElementById("Message").focus();
				alert("Message is required.");
				return false;
			}
			if(d.getElementById("FirstName").value.trim() == "") {
				d.getElementById("FirstName").focus();
				alert("First Name is required.");
				return false;
			}
			if(d.getElementById("LastName").value.trim() == "") {
				d.getElementById("LastName").focus();
				alert("Last Name is required.");
				return false;
			}
			if(d.getElementById("Zip").value.trim() == "") {
				d.getElementById("Zip").focus();
				alert("ZIP Code is required.");
				return false;
			}
			if(!d.getElementById("Zip").value.match(/^[0-9]{5}-[0-9]{4}$|^[0-9]{5}$/i)) {
				d.getElementById("Zip").focus();
				alert("ZIP Code is not valid.");
				return false;
			}
			if(!d.getElementById("Email").value.isEmail()) {
				d.getElementById("Email").focus();
				alert("Please enter a valid e-mail address.");
				return false;
			}
			if(d.getElementById("Email").value.trim() != d.getElementById("Email2").value.trim()) {
				d.getElementById("Email").focus();
				alert("The e-mail addresses you entered do not match. Please try again.");
				return false;
			}
			return true;
			break;
		case "kidform":
			if(!d.getElementById("Email").value.isEmail()) {
				d.getElementById("Email").focus();
				alert("Please enter a valid e-mail address.");
				return false;
			}
			if(d.getElementById("Email").value.trim() != d.getElementById("Email2").value.trim()) {
				d.getElementById("Email").focus();
				alert("The e-mail addresses you entered do not match. Please try again.");
				return false;
			}
			if(d.getElementById("Message").value.trim() == "") {
				d.getElementById("Message").focus();
				alert("Message is required.");
				return false;
			}
			return true;
			break;
		case "internationalform":
			if(d.getElementById("country").value.trim() == "") {
				d.getElementById("country").focus();
				alert("Country is required.");
				return false;
			}
			if(d.getElementById("FirstName").value.trim() == "") {
				d.getElementById("FirstName").focus();
				alert("First Name is required.");
				return false;
			}
			if(!d.getElementById("Email").value.isEmail()) {
				d.getElementById("Email").focus();
				alert("Please enter a valid e-mail address.");
				return false;
			}
			if(d.getElementById("Email").value.trim() != d.getElementById("Email2").value.trim()) {
				d.getElementById("Email").focus();
				alert("The e-mail addresses you entered do not match. Please try again.");
				return false;
			}
			if(d.getElementById("Message").value.trim() == "") {
				d.getElementById("Message").focus();
				alert("Message is required.");
				return false;
			}
			return true;
			break;
	}
}

cs_verifyContactInfo = function() {
	var d = document;
	if(d.getElementById("FirstName").value.trim() == "") {
		d.getElementById("FirstName").focus();
		alert("First Name is required.");
		return false;
	}
	if(d.getElementById("LastName").value.trim() == "") {
		d.getElementById("LastName").focus();
		alert("Last Name is required.");
		return false;
	}
	if(d.getElementById("StreetNum").value.trim() == "") {
		d.getElementById("StreetNum").focus();
		alert("House Number is required.");
		return false;
	}
	if(d.getElementById("StreetName").value.trim() == "") {
		d.getElementById("StreetName").focus();
		alert("Street Name is required.");
		return false;
	}
	if(d.getElementById("City").value.trim() == "") {
		d.getElementById("City").focus();
		alert("City is required.");
		return false;
	}
	if(d.getElementById("State").value.trim() == "") {
		d.getElementById("State").focus();
		alert("State is required.");
		return false;
	}
	if(d.getElementById("Zip").value.trim() == "") {
		d.getElementById("Zip").focus();
		alert("ZIP Code is required.");
		return false;
	}
	if(!d.getElementById("Zip").value.match(/^[0-9]{5}-[0-9]{4}$|^[0-9]{5}$/i)) {
		d.getElementById("Zip").focus();
		alert("ZIP Code is not valid.");
		return false;
	}
	if(d.getElementById("Phone").value.trim() == "") {
		d.getElementById("Phone").focus();
		alert("Daytime Phone is required.");
		return false;
	}
	if(!d.getElementById("Email").value.isEmail()) {
		d.getElementById("Email").focus();
		alert("Please enter a valid e-mail address.");
		return false;
	}
	if(d.getElementById("Email").value.trim() != d.getElementById("Email2").value.trim()) {
		d.getElementById("Email").focus();
		alert("The e-mail addresses you entered do not match. Please try again.");
		return false;
	}
	return true;
}