/**
 *
 * MboxNVX 
 * Mbox Reduced Implementation
 * @version 2.0.0
 *
 */

var mboxNVXOffer = function () {
	// Stored the offer name and the form location
	var offerTest = "";
	var formName ="";
	
	/**
	 *  addLoadEvent is a function used to append functions
	 *  to the window.onload event.
	 *  @param func The function name to execute once the page has finished loading
	 */
	var addLoadEvent = function(func) {
		var oldonload = window.onload;
		if (typeof window.onload != 'function') {
			window.onload = func;	
		} else {
			window.onload = function() {
				if (oldonload) {
					oldonload();
				}
				func();
			};
		}
	};
	/**
	 * onElementAppear is a class used to create an 
	 * interval timer to find an element in the DOM. 
	 * Once an element is found in the DOM, the 
	 * interval timer will be removed and a function will be executed
	 * @param func The function name to execute once the element has been found
	 * @param original The element ID to search for in the DOM tree
	 * @param replacement Additional content to be used for replacement
	 */
	function onElementAppear(func, original, replacement) {
		var onElementTimer;
		var onElementFunc = func;
		var onElementID = original;
		var onContentNew = replacement;
		function findElems() {
			if(document.getElementById(onElementID)) {
				clearInterval(onElementTimer);
				eval(onElementFunc)(onElementID, replacement);
			}
		}
		this.setFind = function() {
			onElementTimer = setInterval(findElems, 20);
		};
	}	
	// Modifies CSS
	var modifyCSS = function(){
		var cssIndex = 0;
		var getCSSRule = function (ruleName) {
			ruleName = ruleName.toLowerCase();
			if (document.styleSheets) {
				for(var i=0; i<document.styleSheets.length; i++) {
					var styleSheet = document.styleSheets[i];
					var j=0;
					var cssRule = false;
					if(styleSheet.title == "mboxNVXOffer") {
						cssIndex = i;
						do {
							cssRule = (styleSheet.cssRules) ? styleSheet.cssRules[j] : styleSheet.rules[j];	
							if (cssRule) {
								if (cssRule.selectorText.toLowerCase()==ruleName) {
									return cssRule;
								}
							}
							j++;
						}while (cssRule);
					}
				}
			}
			return false;
		};
		var addDefaultStyleSheet = function() {
			var cssNode = document.createElement('style');
			cssNode.type = 'text/css';
			cssNode.rel = 'stylesheet';
			cssNode.media = 'screen';
			cssNode.title = 'mboxNVXOffer';
			document.getElementsByTagName("head")[0].appendChild(cssNode);	
		};
		var addCSSRule = function(ruleName) {
			if (document.styleSheets) {
				if (!getCSSRule(ruleName)) {
					if (document.styleSheets[cssIndex].addRule) {
						document.styleSheets[cssIndex].addRule(ruleName, null,0);
					} else {
						document.styleSheets[cssIndex].insertRule(ruleName+' { }', 0); 
					}                                                
				}                                                   
			}                                                      
			return getCSSRule(ruleName);                           
		};
		return {
			get: function (ruleName) {
				getCSSRule(ruleName);
			},
			add: function (ruleName) {
				addCSSRule(ruleName);
			},
			hide: function (original) {
				var origElemStyle = addCSSRule('#'+original);
				origElemStyle.style.visibility = "hidden";
			},
			show: function (original) {
				var origElemStyle = addCSSRule('#'+original);
				origElemStyle.style.visibility = "visible";
			},
			none: function (original) {
				var origElemStyle = addCSSRule('#'+original);
				origElemStyle.style.display = "none";
			},
			hideDefault: function (original) {
				var origElemStyle = addCSSRule('.'+original);
				origElemStyle.style.display = "none";
			},
			init: function () {
				addDefaultStyleSheet();
			}
		};
	}();
	modifyCSS.init();
	modifyCSS.hideDefault("mboxNVXOffer");	
	// Replace script swaps out content from one div into another div
	function replaceInit(original, replacement) {
		modifyCSS.hide(original);
		var replaceExec = new onElementAppear("replaceExec", original, replacement);
		replaceExec.setFind();
	}
	function replaceExec(original, replacement) {
		document.getElementById(original).innerHTML = document.getElementById(replacement).innerHTML;
		document.getElementById(replacement).innerHTML = "";
		modifyCSS.show(original);
	}	
	// Hide script hides divs. Simpler than adding CSS, keeps offer syntax clean
	function hideInit(original) {
		modifyCSS.none(original);
	}	
	// Remove script destroys the innerHTML of an element
	function removeInit(original) {
		modifyCSS.none(original);
		var removeExec = new onElementAppear("removeExec", original);
		removeExec.setFind();
	}
	function removeExec(original, replacement) {
		document.getElementById(original).innerHTML = "";
	}	
	// Append script appends content to the innerHTML of an element
	function appendInit(original, replacement) {
		modifyCSS.hide(original);
		var appendExec = new onElementAppear("appendExec", original, replacement);
		appendExec.setFind();
	}
	function appendExec(original, replacement) {
		document.getElementById(original).innerHTML += document.getElementById(replacement).innerHTML;
		document.getElementById(replacement).innerHTML = "";
		modifyCSS.show(original);
	}	
	// Prepend script prepends content to the innerHTML of an element
	function prependInit(original, replacement) {
		modifyCSS.hide(original);
		var prependExec = new onElementAppear("prependExec", original, replacement);
		prependExec.setFind();
	}
	function prependExec(original, replacement) {
		document.getElementById(original).innerHTML = document.getElementById(replacement).innerHTML + document.getElementById(original).innerHTML;
		document.getElementById(replacement).innerHTML = "";
		modifyCSS.show(original);
	}	
	// SRC script changes the source of an image or input image
	function srcInit(original, replacement) {
		modifyCSS.hide(original);
		var srcPreload = new Image();
		srcPreload.src = replacement;
		var srcExec = new onElementAppear("srcExec", original, replacement);
		srcExec.setFind();
	}
	function srcCheck(original) {
		if(document.getElementById(original).nodeName.toLowerCase()=="img") {
			return true;
		} else if ((document.getElementById(original).nodeName.toLowerCase()=="input") && (document.getElementById(original).type.toLowerCase()=="image")) {
			return true;
		}
		else {
			return false;
		}
	}
	function srcExec(original, replacement) {
		if(srcCheck(original)) {
			document.getElementById(original).src = replacement;
		}
		modifyCSS.show(original);
	}
	
	// Info displays info about MboxNVX 
	function infoInit (){
		var infoMsg = "Norvax Mbox JavaScript Helper\nVersion 2.0.0 \n(c) 2009-2010 Norvax, Inc.";
		if(typeof console != "undefined") {
			console.log(infoMsg);
		}
		else {
			alert(infoMsg);
		}
	}
	// Adds offer information to a page
	function offerInit() {
		if(document.getElementsByName("custom_tnt").length == 0){
			var custom_tnt = document.createElement("input");
			custom_tnt.type = "hidden";
			custom_tnt.name = "custom_tnt";
			custom_tnt.value = offerTest;
			document.getElementsByName(formName)[0].appendChild(custom_tnt);		
		}
	}	
	// Publicly accessible functions
	return {
		deleteContent: function(original) {
			var deleteContent = removeInit(original);
		},
		replaceContent: function(original, replacement) {
			var replaceContent = new replaceInit(original, replacement);
		},
		hide: function(original) {
			var hide = new hideInit(original);
		},
		remove: function(original) {
			var remove = new removeInit(original);
		},
		replace: function(original, replacement) {
			var replace = new replaceInit(original, replacement);
		},
		append: function(original, replacement) {
			var append = new appendInit(original, replacement);
		},
		prepend: function(original, replacement) {
			var prepend = new prependInit(original, replacement);
		},
		image: function (original, replacement) {
			var src = new srcInit(original, replacement);
		},
		offer: function (target, name) {
			(offerTest == "") ? offerTest = name : offerTest = offerTest;
			(formName == "") ? formName = target : formName = formName; 
			addLoadEvent(offerInit);
		},
		info: function() {
			infoInit();
		}
	};
}();

function getElement(elementID) {
   if(document.all) {
      return document.all[elementID];
   } else {
      return document.getElementById(elementID);
   }
}

function toggle(divElement) {
	var node = getElement(divElement);
  	if (node.style.display == "") {
     	node.style.display = "none";
  	} else {
  		node.style.display = "";     	
  	}  
}

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

/* Makes popUps */
function makePopUp(whereTo,winWidth,winHeight) {
	remote=window.open("","remotewin","width="+winWidth+",height="+winHeight+",menubar=0,toolbar=no,scrollbars=yes");
	remote.location.href=whereTo;remote.focus();
}

/* check zip code */
function checkZip(form, field_name) {

	if (field_name == null || field_name == ""){
		field_name="zip";
	}

	var field = form[field_name];

	if(field.value == "") {
		alert("Please enter your zip code.");
		return false;
	} else if(isNaN(field.value)) {
		alert("Please enter your zip code.");
		return false;
	} else if(field.value.length < 5) {
		alert("Please enter your zip code.");
		return false;
	} else if (field.value.length > 5) {
		alert("Please enter your 5-digit zip code");
		return false;
	} else {
		return true;
	}
}

function checkCity(form) {
	if(form.address_1_city.value == "") {
		alert("Please select the city in which you live.");
		return false;
	}
}

function clearZip(form) {
	document.getElementById("zip-code").setAttribute("maxLength", 5);
	document.getElementById("zip-code").value="";
}

function writeZip(form) {

	if (document.getElementById("zip-code").value == "" || isNaN(document.getElementById("zip-code").value)) {
		document.getElementById("zip-code").setAttribute("maxLength", 9);
		document.getElementById("zip-code").value="Zip Code";
	}

}

/*
Script Source URI: http://techpatterns.com/downloads/javascript_cookies.php
*/

// To use, simple do: Get_Cookie('cookie_name'); 
// replace cookie_name with the real cookie name, '' are required
function Get_Cookie( check_name ) {
	// first we'll split this cookie up into name/value pairs
	// note: document.cookie only returns name=value, not the other components
	var a_all_cookies = document.cookie.split( ';' );
	var a_temp_cookie = '';
	var cookie_name = '';
	var cookie_value = '';
	var b_cookie_found = false; // set boolean t/f default f
	
	for ( i = 0; i < a_all_cookies.length; i++ )
	{
		// now we'll split apart each name=value pair
		a_temp_cookie = a_all_cookies[i].split( '=' );
		
		
		// and trim left/right whitespace while we're at it
		cookie_name = a_temp_cookie[0].replace(/^\s+|\s+$/g, '');
	
		// if the extracted name matches passed check_name
		if ( cookie_name == check_name )
		{
			b_cookie_found = true;
			// we need to handle case where cookie has no value but exists (no = sign, that is):
			if ( a_temp_cookie.length > 1 )
			{
				cookie_value = unescape( a_temp_cookie[1].replace(/^\s+|\s+$/g, '') );
			}
			// note that in cases where cookie is initialized but no value, null is returned
			return cookie_value;
			break;
		}
		a_temp_cookie = null;
		cookie_name = '';
	}
	if ( !b_cookie_found ) 
	{
		return null;
	}
}

/*
only the first 2 parameters are required, the cookie name, the cookie
value. Cookie time is in milliseconds, so the below expires will make the 
number you pass in the Set_Cookie function call the number of days the cookie
lasts, if you want it to be hours or minutes, just get rid of 24 and 60.

Generally you don't need to worry about domain, path or secure for most applications
so unless you need that, leave those parameters blank in the function call.
*/
function Set_Cookie( name, value, minutes, path, domain, secure ) {
	// set time, it's in milliseconds
	var today = new Date();
	today.setTime( today.getTime() );
	// if the expires variable is set, make the correct expires time, the
	// current script below will set it for x number of days, to make it
	// for hours, delete * 24, for minutes, delete * 60 * 24
	if ( minutes )
	{
		minutes = minutes * 1000 * 60;
	}
	//alert( 'today ' + today.toGMTString() );// this is for testing purpose only
	var minutes_date = new Date( today.getTime() + (minutes) );
	//alert('minutes ' + minutes_date.toGMTString());// this is for testing purposes only

	document.cookie = name + "=" +escape( value ) +
		( ( minutes ) ? ";expires=" + minutes_date.toGMTString() : "" ) + //minutes.toGMTString()
		( ( path ) ? ";path=" + path : "" ) + 
		( ( domain ) ? ";domain=" + domain : "" ) +
		( ( secure ) ? ";secure" : "" );
}

// this deletes the cookie when called
function Delete_Cookie( name, path, domain ) {
	if ( Get_Cookie( name ) ) document.cookie = name + "=" +
			( ( path ) ? ";path=" + path : "") +
			( ( domain ) ? ";domain=" + domain : "" ) +
			";expires=Thu, 01-Jan-1970 00:00:01 GMT";
}


//Create Full Year only
function createYear() {
	var year = (new Date()).getFullYear();
	document.write(year);
}

// Create date
function createDate() {
	var months = new Array(13);
				months[1]="January";
				months[2]="February";
				months[3]="March";
				months[4]="April";
				months[5]="May";
				months[6]="June";
				months[7]="July";
				months[8]="August";
				months[9]="September";
				months[10]="October";
				months[11]="November";
				months[12]="December";
				
	var lmonth = months[(new Date()).getMonth()+1];
	var date = (new Date()).getDate();
	var year = (new Date()).getYear();

	if (year<2000){
		year=year +1900;
	}
	document.write(lmonth + " " + date + ", "+year);
}

function getReferrer()
{
	return document.referrer;
}

/* Makes popUps */
function makePopUp(whereTo,winWidth,winHeight) {
	remote=window.open("","remotewin","width="+winWidth+",height="+winHeight+",menubar=0,toolbar=no,scrollbars=yes");
	remote.location.href=whereTo;remote.focus();
}

function setType(id) {
	var type="default"
	if(id=="index-radio1") {
		document.getElementById(id).src="images2/index-radioon.gif";
		document.getElementById("index-radio2").src="images2/index-radiooff.gif";
		document.getElementById("index-radio3").src="images2/index-radiooff.gif";
		type="value of Radio1";
	}
	else if(id=="index-radio2") {
		document.getElementById(id).src="images2/index-radioon.gif";
		document.getElementById("index-radio1").src="images2/index-radiooff.gif";
		document.getElementById("index-radio3").src="images2/index-radiooff.gif";
		type="value of Radio2";
	}
	else if(id=="index-radio3") {
		document.getElementById(id).src="images2/index-radioon.gif";
		document.getElementById("index-radio1").src="images2/index-radiooff.gif";
		document.getElementById("index-radio2").src="images2/index-radiooff.gif";
		type="value of Radio3";
	}
document.getElementById(id).value=type;
}
