/*
Script Name: Javascript Cookie Script
Author: Public Domain, with some modifications
Script Source URI: http://techpatterns.com/downloads/javascript_cookies.php
Version 1.1.2
Last Update: 5 November 2009

Changes:
1.1.2 explicitly declares i in Get_Cookie with var
1.1.1 fixes a problem with Get_Cookie that did not correctly handle case
where cookie is initialized but it has no "=" and thus no value, the 
Get_Cookie function generates a NULL exception. This was pointed out by olivier, thanks
1.1.0 fixes a problem with Get_Cookie that did not correctly handle
cases where multiple cookies might test as the same, like: site1, site
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  
*/

// this fixes an issue with the old method, ambiguous values 
// with this test document.cookie.indexOf( name + "=" );

// 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
	var i = '';
	
	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, expires, 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 ( expires )
	{
		expires = expires * 1000 * 60 * 60 * 24;
	}
	//alert( 'today ' + today.toGMTString() );// this is for testing purpose only
	var expires_date = new Date( today.getTime() + (expires) );
	//alert('expires ' + expires_date.toGMTString());// this is for testing purposes only

	document.cookie = name + "=" +escape( value ) +
		( ( expires ) ? ";expires=" + expires_date.toGMTString() : "" ) + //expires.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";
}


/* 
	This function tests whether first-party cookies are enabled with one page

	NOTE 1:  In some browsers this function may always return TRUE if the page
	calling this function is loaded from a local file (as compared to from a 
	web server).  Internet Explorer 8 does this for example.

	NOTE 2:  Some of the credit-card payment systems and commerce shopping basket
	implementations require cookies in order to function.
*/
function are_cookies_enabled()
{
	cookie_set = false;

	// Try to set the cookie
	// These are the possible parameters for Set_Cookie:
	// name, value, expires, path, domain, secure

	Set_Cookie( 'test', 'none', '', '/', '', '' );

	// If Get_Cookie succeeds, cookies are enabled, since
	// the cookie was successfully created.

	if ( Get_Cookie( 'test' ) )
	{
		cookie_set = true;

		// Delete the cookie - we don't need it anymore
		// Parameters for Delete_Cookie:
		// name, path, domain
		// make sure you use the same parameters in Set and Delete Cookie.

		Delete_Cookie('test', '/', '');
	}
	else
	{	
		// If the Get_Cookie test fails, cookies are not enabled for this session.
		cookie_set = false;
	}
	return cookie_set;
}


/*
	Retrieve an element by name, and return a reference to the element.
*/
function get_element_by_name(elementName)
{
	var el;

	if (document.getElementById)
	{
		// Standards version
		el = document.getElementById(elementName);
	}
	else if (document.all)
	{
		// Older MS I.E versions
		el = document.all(elementName);
	}
	else if (document.layers)
	{
		// Older Netscape
		el = document.layers(elementName);
	}

	return el;
}


/*
	Show an element by name 
	Applies the visibility='visible' and display='inline' styles 
	to expand and display the element.
*/
function show_element(elementName)
{
	var el = get_element_by_name(elementName);
	if (el)
	{
		el.style.visibility = "visible";
		el.style.display = "inline";
	}
}


/*
	Hide an element by name
	Applies the visibility: hidden; and display: none; styles 
	to contract and hide the element.
*/
function hide_element(elementName)
{
	var el = get_element_by_name(elementName);
	if (el)
	{
		el.style.visibility = "hidden";
		el.style.display = "none";
	}
}


/*
	Hides or shows 3 divs of content depending on whether cookies and JavaScript
	are enabled.  Divs are useful since php and shtml Server Side Includes may
	be used to include content.  Based on JavaScript and cookie usage, this function
	can show or hide content depending on the users cookies setting.

	normal_div:	

		The div containing the content that should be displayed if cookies
		and JavaScript are enabled.  The div content should have the following 
		styles applied in case JavaScript is not enabled:

			visibility: hidden; and display: none;

		If cookies and JavaScript are enabled, show_cookies_required_content() 
		will make the normal_div content visible.

	no_script_div:

		The div to be displayed if JavaScript is not enabled.  For best results,
		this div should have the following styles applied in the event JavaScript is disabled:

			visibility: visible; and display: inline;

		If JavaScript is enabled in the user's browser, then this div will be 
		hidden by the show_cookies_required_content() function.

	no_cookies_div:

		The div to be displayed if cookies are not enabled in the user's browser.
		The div content should have the following styles applied in case JavaScript 
		is not enabled:

			visibility: hidden; and display: none;
*/
function show_cookies_required_content(
	normal_div,
	no_script_div,
	no_cookies_div)
{
	// Hide the JavaScript is disabled portion
	hide_element(no_script_div);
	
	if (are_cookies_enabled())
	{
		show_element(normal_div);
		hide_element(no_cookies_div);
	}
	else
	{
		show_element(no_cookies_div);
		hide_element(normal_div);
	}	
}

