// set global variable
var wapoUtilities;

// create global object
function WapoUtil() {
}

// gets cookie with specified name
WapoUtil.prototype.Get_Cookie = function( check_name ) {
	var a_all_cookies, a_temp_cookie, cookie_name, cookie_value, b_cookie_found, i;
	
	// first we'll split this cookie up into name/value pairs
	// note: document.cookie only returns name=value, not the other components
	a_all_cookies = document.cookie.split( ';' );
	b_cookie_found = false; // set boolean t/f default f

	for ( i = 0; i < a_all_cookies.length; i+=1 ) {
		// 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;  /* unreachable break? */
		}
		a_temp_cookie = null;
		cookie_name = '';
	}
	
	if ( !b_cookie_found ) {
		return null;
	}
};

//this deletes the cookie when called
WapoUtil.prototype.Delete_Cookie = function( name, path, domain ) {
	if ( this.Get_Cookie( name ) ) {
		document.cookie = name + "=" +
	        ( ( path ) ? ";path=" + path : "") +
	        ( ( domain ) ? ";domain=" + domain : "" ) +
	        ";expires=Thu, 01-Jan-1970 00:00:01 GMT";
	}
};

WapoUtil.prototype.Set_Cookie = function( name, value, expires, path, domain, secure ) {
	var today, expires_date;
	
	// set time, it's in milliseconds
	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;
	}
	expires_date = new Date( today.getTime() + (expires) );

	document.cookie = name + "=" + escape( value ) +
		( ( expires ) ? ";expires=" + expires_date.toGMTString() : "" ) +
		( ( path ) ? ";path=" + path : "" ) +
		( ( domain ) ? ";domain=" + domain : "" ) +
		( ( secure ) ? ";secure" : "" );
};


WapoUtil.prototype.Get_Request_Parameter = function( queryString, parameterName ) {
	var begin, end;
	
    // Add "=" to the parameter name (i.e. parameterName=value)
    parameterName = parameterName + "=";
    if ( queryString.length > 0 ) {
        // Find the beginning of the string
        begin = queryString.indexOf ( parameterName );
        // If the parameter name is not found, skip it, otherwise return the value
        if ( begin !== -1 ) {
            // Add the length (integer) to the beginning
            begin += parameterName.length;
            // Multiple parameters are separated by the "&" sign
            end = queryString.indexOf ( "&" , begin );
			if ( end === -1 ) {
				end = queryString.length;
			}
			// Return the string
			return unescape ( queryString.substring ( begin, end ) );
		}
		// Return "null" if no parameter has been found
		return "null";
    }
};


WapoUtil.prototype.getParameter = function( parameterName ) {
	var queryString, begin, end;
	
    queryString = window.top.location.search.substring(1);
    // Add "=" to the parameter name (i.e. parameterName=value)
    parameterName = parameterName + "=";
    if ( queryString.length > 0 ) {
        // Find the beginning of the string
        begin = queryString.indexOf ( parameterName );
        // If the parameter name is not found, skip it, otherwise return the value
        if ( begin !== -1 ) {
            // Add the length (integer) to the beginning
            begin += parameterName.length;
            // Multiple parameters are separated by the "&" sign
            end = queryString.indexOf ( "&" , begin );
            if ( end === -1 ) {
                end = queryString.length;
            }
            // Return the string
            return unescape ( queryString.substring ( begin, end ) );
        }
        // Return "null" if no parameter has been found
        return "null";
    }
};


WapoUtil.prototype.getBaseDomainName = function( hostName ) {
	var baseDomainName, lastDotIdx, secondDotIdx;

    baseDomainName = hostName;
    lastDotIdx = hostName.lastIndexOf('.');
    if (lastDotIdx > -1) {
      secondDotIdx = hostName.lastIndexOf('.', lastDotIdx - 1);
      if (secondDotIdx > -1) {
        baseDomainName = hostName.substring(secondDotIdx + 1);
      }
    }

    return baseDomainName;
};

WapoUtil.prototype.setCrossDomain = function( hostName ) {
    	var domain = wapoUtilities.getBaseDomainName(window.location.hostname);
	var cross = wapoUtilities.Get_Cookie( 'wpl_cross' );
	if (cross) { cross = cross + ',' + hostName; }
	else { cross = hostName; }
	wapoUtilities.Set_Cookie('wpl_cross', cross, "1", "/", domain, false);
};

WapoUtil.prototype.Cross_Domain = function( hostName ) {
    	var domain = wapoUtilities.getBaseDomainName(window.location.hostname);
	var cross = wapoUtilities.Get_Cookie( 'wpl_cross' );
	if (cross) { cross = cross + ',' + hostName; }
	else { cross = hostName; }
	wapoUtilities.Set_Cookie('wpl_cross', cross, "1", "/", domain, false);
};

wapoUtilities = new WapoUtil();

// check to see if the client s_vi cookie exists already, and if it doesn't kick off the process to create it
function checkVisitorId(domain) {
	var cookieExists, wapoIFrame;
	
	cookieExists = wapoUtilities.Get_Cookie('s_vi');
	
	if (cookieExists === null) {
		wapoIFrame = document.createElement( 'iframe' );
		wapoIFrame.height = 1;
		wapoIFrame.width = 1;
		wapoIFrame.style.display= 'none';
		wapoIFrame.src = 'http://www.washingtonpost.com/wp-srv/wapolabs/dw/readomniturecookie.html?' + domain;
		document.getElementById( 'wapo_338542' ).appendChild( wapoIFrame );
	}
}

