/*---------------------------------------------------------------------------
	PROJECT:		PageOptimizer

	CODE:			po_nav.js

	NAME:			Client navigation Javascript

	PURPOSE:		Javascript for navigation to a page from the page's pool

	AUTHOR:			PNN-ID (Igor Didenko)

	REVISION HISTORY:
	Date			Author
	2004-03-23		PNN-ID (Igor Didenko)

----------------------------------------------------------------------------*/
// PageOptimizer Server URL
var gsPageOptimizerServer = "http://64.78.14.124/PageOptimizer/PageOptimizer.aspx";

// Site Path
var gsPageOptimizerSitePath = "";

// Main Page
var gsPageOptimizerMainPage = "index.shtml";

// Main Page Rate
var gsPageOptimizerMainPageRate = "125";

// Page Pool
var gsPageOptimizerPagePool = "index2.shtml";

// Page Pool Rate
var gsPageOptimizerPageRatePool = "125";

// Destination Page
var gsPageOptimizerDestPage = "join.shtml,members_vero/index.php";

// Site GUID
var gsPageOptimizerSiteGUID = "7135c2b0-0884-445d-9269-0cf77127e684";

// Mavigation Mode
var gsPageOptimizerMavigationMode = "client";

// Generation Mode
var gsPageOptimizerGenerationMode = "same";

//Sending a statistic request to the PageOptimizer Server
function PageOptimizerStatistic()
{
	try
	{
		var sLocationPathName = GetLocationPathName();
		if ((document) && (document.images))
		{
			img = new Image;

			// Get UserGUID from Cookie
			var sUserGUID = PageOptimizerGetCookie(gsPageOptimizerSiteGUID.toLowerCase() + "userguid");					
			if (!sUserGUID){sUserGUID = PageOptimizerGenGUID();}
			else if (sUserGUID.length < 7){sUserGUID = PageOptimizerGenGUID();}
			
			// Save UserGUID to Cookie
			PageOptimizerSetPermanentCookie(gsPageOptimizerSiteGUID.toLowerCase() + "userguid", sUserGUID);
			
			// Get Previos page from Cookie
			var sPrevPage = PageOptimizerGetCookie(gsPageOptimizerSiteGUID.toLowerCase() + "prevpage");					
			if (!sPrevPage){sPrevPage = "";}
			

			var sImgGUID = PageOptimizerGenGUID();
			if (IsDestinationPage(sLocationPathName))
			{
				// It is a destination page
				img.src = gsPageOptimizerServer + "?" + escape(window.location.protocol + "//" + window.location.host + sLocationPathName + "&posection=true&pocmd=stat&potype=dest&siteguid=" + gsPageOptimizerSiteGUID + "&userguid=" + sUserGUID + "&prevpage=" + sPrevPage + "&imgguid=" + sImgGUID);
			}
			else
			{
				// Save Current page to Cookie as previous
				PageOptimizerSetPermanentCookie(gsPageOptimizerSiteGUID.toLowerCase() + "prevpage", sLocationPathName);

				// It is a pool page
				img.src = gsPageOptimizerServer + "?" + escape(window.location.protocol + "//" + window.location.host + sLocationPathName + "&posection=true&pocmd=stat&siteguid=" + gsPageOptimizerSiteGUID  + "&userguid=" + sUserGUID + "&imgguid=" + sImgGUID);
			}
 
		}
	}
	catch(e)
	{                            
	}
}
// Determine if it is destination page
function IsDestinationPage(page)
{
	try
	{
		var aSet = gsPageOptimizerDestPage.split(",");
		for(var j = 0;j < aSet.length;j++)
		{
			if (page.toLowerCase() == (gsPageOptimizerSitePath.toLowerCase() + "/" + aSet[j].toLowerCase()))
				return true;
		}
	}
	catch(e)
	{
	}
	return false;

}

// Get Real path name of the page
function GetLocationPathName()
{
	var sLocationPathName = window.location.pathname;
	if (sLocationPathName.length > 0)
	{
		// If it is default page then set PathName to Main Page
		if ( (sLocationPathName.lastIndexOf("/") == (sLocationPathName.length-1)) ||
                     (sLocationPathName.lastIndexOf("\\") == (sLocationPathName.length-1)) )
			sLocationPathName = gsPageOptimizerSitePath + "/" + gsPageOptimizerMainPage;
	}
	return sLocationPathName;
}
// Navigation to a random page from the page's pool
function PageOptimizerNavigate()
{
	try
	{
		var sLocationPathName = GetLocationPathName();
		var nPageIndFromCookies = -1;

		// If it is not main page then send statistic and return;
		if (sLocationPathName.toLowerCase() != (gsPageOptimizerSitePath.toLowerCase() + "/" + gsPageOptimizerMainPage.toLowerCase() ))
		{
			// Send statistic data to a server
			PageOptimizerStatistic();
			return;
		}


		if (gsPageOptimizerGenerationMode == "same")
		{
			// Get Page from cookies
			var sPool = gsPageOptimizerMainPage + "," + gsPageOptimizerPagePool
			var aSet = sPool.split(",");
			var sPageCookie = PageOptimizerGetCookie(gsPageOptimizerSiteGUID.toLowerCase() + sLocationPathName.toLowerCase());					

			if (sPageCookie)
			{
				for(var j = 0;j < aSet.length;j++)
				{
					if (sPageCookie.toLowerCase() == gsPageOptimizerSitePath.toLowerCase() + "/" + aSet[j].toLowerCase())
					{
						if (!PageOptimizerNavigateFromClient(sLocationPathName,aSet[j])) 
						{
							// Send statistic data to a server
							PageOptimizerStatistic();
							return;
						}
						else return; // Navigate to another pool page 
					}
				}
			}
		}

		if (gsPageOptimizerMavigationMode == "client")
		{

			var sPoolRate = gsPageOptimizerMainPageRate + "," + gsPageOptimizerPageRatePool
			var aSet = sPoolRate.split(",");
			var nTotalRate = 0;
			var nInt;
			var nInd = 0;


			// Calculate Total Rate
			for(var j = 0;j < aSet.length;j++)
			{
				nInt = parseInt(aSet[j]);
				if (isNaN(nInt)) nInt = 0;
				nTotalRate += Math.abs(nInt);
			}

			// Generate Rate
			var nRnd = Math.floor(Math.random() * nTotalRate);
			
			// Get New Page Index
			var nCounter = 0;
			for(var j = 0;j < aSet.length;j++)
			{
				nInt = parseInt(aSet[j]);
				if (isNaN(nInt)) nInt = 0;
				nCounter += Math.abs(nInt);
				
				if (nInt > 0)
				{
					if (nCounter > nRnd)
					{
						// Get New Page
						var sPool = gsPageOptimizerMainPage + "," + gsPageOptimizerPagePool
						aSetPool = sPool.split(",");
					
						if (j < aSetPool.length)
						{
							if (PageOptimizerNavigateFromClient(sLocationPathName,aSetPool[j])) return;
						}
						break;
					}
				}
			}

			// Send statistic data to a server
			PageOptimizerStatistic();
	

		}
		else
		{

			if (window.location.href.indexOf("ispageoptimized=true") == -1)
			{
				window.navigate(gsPageOptimizerServer + "?" + escape(window.location.protocol + "//" + window.location.host + sLocationPathName + window.location.search + "&posection=true&pocmd=nav&siteguid=" + gsPageOptimizerSiteGUID ));
				return;
			}

			// Send statistic data to a server
			PageOptimizerStatistic();
		}
	}
	catch(e)
	{
		// Send statistic data to a server
		PageOptimizerStatistic();
	}
	
}

function PageOptimizergetCookieVal (offset) 
{
  var endstr = document.cookie.indexOf (";", offset);
  if (endstr == -1)
    endstr = document.cookie.length;
  return unescape(document.cookie.substring(offset, endstr));
}

function PageOptimizerGetCookie (name) 
{
	try
	{
	var arg = name + "=";
	var alen = arg.length;
	var clen = document.cookie.length;
	var i = 0;
	while (i < clen) 
	{
		var j = i + alen;
		if (document.cookie.substring(i, j) == arg)
			return PageOptimizergetCookieVal (j);
		i = document.cookie.indexOf(" ", i) + 1;
		if (i == 0) break; 
	}
	}
	catch(e)
	{
	}

	return null;
}

function PageOptimizerSetCookie (name,value,expires,path,domain,secure) {
	document.cookie = name + "=" + escape (value) +
		((expires) ? "; expires=" + expires.toGMTString() : "") +
		((path) ? "; path=" + path : "") +
		((domain) ? "; domain=" + domain : "") +
		((secure) ? "; secure" : "");
}

function PageOptimizerSetPermanentCookie(name, value)
{
	var expdate = new Date ();
	PageOptimizerFixCookieDate (expdate); // Correct for Mac date bug - call only once for given Date object!
	expdate.setTime (expdate.getTime() + (365 * 24 * 60 * 60 * 1000)); // 365 * 24 hrs from now 
	PageOptimizerSetCookie (name, value, expdate,"/");
}

function PageOptimizerFixCookieDate (date) 
{

	var base = new Date(0);
	var skew = base.getTime();
	if (skew > 0)
		date.setTime (date.getTime() - skew);
}

function PageOptimizerNavigateFromClient(sCurrPage,sPage)
{
	// Set Last Page to Cookie
	PageOptimizerSetPermanentCookie(gsPageOptimizerSiteGUID.toLowerCase() + sCurrPage.toLowerCase(), gsPageOptimizerSitePath.toLowerCase() + "/" + sPage.toLowerCase());

	// If it is not current page
	if (sCurrPage.toLowerCase() != (gsPageOptimizerSitePath.toLowerCase() + "/" + sPage.toLowerCase()))
	{
		window.navigate(window.location.protocol + "//" + window.location.host + gsPageOptimizerSitePath + "/" + sPage + window.location.search);
		return true;
	}
	return false;
}

function PageOptimizerGenGUID()
{
	var sGUID = "";

	// Generate Rate
	var nRnd;
	for (var i = 0; i < 6; i++)
	{
		nRnd = Math.floor(Math.random() * 10000);
		if (i != 0) sGUID += "-";
		sGUID += nRnd.toString();
	}
	return sGUID;
}

PageOptimizerNavigate();

