// Overlay script
// (c) 2010 Ipsos MORI
// 04 mar 2010

// Get the current DD/MM/YYYY
//Current date
var d = new Date()
var curr_date = d.getDate();
var curr_month = d.getMonth() + 1;
var curr_year = d.getFullYear();
var currentDate = curr_date + "/" + curr_month + "/" + curr_year

//survey Start date
var startDate = window.startIpsos;

//Survey End date
var endDate = window.endIpsos;

///////SYS PARAMS START/////////
var showurl = new Array();
///////SYS PARAMS END///////////

///////USER PARAMS START//////////
var marginsLR=0;		// left and right margins
var marginsTB=0;		// top and bottom margins
var width=430;			// set layer width 
var height=320;			// set layer height
var ygap=40;

//Disable overlay if user blocks cookies - if block rules are in place they would not work without cookies. Disabling here will avoid annoying the user because they will constantly receive the overlay.
var cookiesDisabledBlock = true;

//Cookie names
var cookiecheck = "nicecookiecheck";
var surveybar = "nicesurveybar";
var closecount = "niceblockcount";
var showcount = "niceshowcount";
var overlayblk = "niceoverlayblk";
var closecountcookiedate = "closecountdate";
var showcountcookiedate = "showcountdate";

//var cookieParams = "path=/;domain=127.0.0.1";
var cookieParams = "path=/";

//Survey URL
var surveyURL = window.surveyURL;

//use scriptaculous fading effect for overlay entry/hiding (loads in prototype and scriptaculous effects modules) - may conflict, if errors turn off
var useFading = false; 

//edit the below for setting the ratio. The value is show 1 popup in every x visitors (average).
var ratio = 1;

//How long to wait before showing the overlay (in ms i.e. 5000 = 5secs)
var delayBeforeShow = 1000;

//should input items be hidden - used as they may overlap the overlay
var hideInput = false;

//should select items be hidden - used as they may overlap the overlay
var hideSelect = false;

//is this a bar survey?
var barSurvey = true;

//Will the bar add in spacing for itself, or   over exiting content? ('spaced' or 'hover')
var barType = 'spaced';
//var barType = 'hover';

//Will the bar remain static at the top of the page or scroll when the user scrolls?
var movingbar = true;

//var barColor = '#FF6600';
var barColor = '#0473c5';
var barFontColor = '#FFFFFF';
var barFontSize = '1em';
var barFontStyle = 'none';

//Should the overlay be blocked from reappearing once the overlay is shown to the visitor? (for session duration)
var blockOnOverlayLoad = true;
//var blockOnOverlayLoadParams = '-99'; //stop forever (expires=Fri, 31 Dec 2010 12:00:00 UTC)
var blockOnOverlayLoadParams = '0'; //stop for this session
//var blockOnOverlayLoadParams = '0,2'; //stop for hours,mins

//Should the overlay be blocked from reappearing if the survey is launched? (for session duration)
var blockOnSurveyLoad = false;
//var blockOnSurveyLoadParams = '-99'; //stop forever (expires=Fri, 31 Dec 2010 12:00:00 UTC)
//var blockOnSurveyLoadParams = '0'; //stop for this session
//var blockOnSurveyLoadParams = '0,2'; //stop for hours,mins

//Should the overlay be blocked from reappearing if the survey is launched from the bar? (for session duration)
var blockOnSurveyLoadBar = false;
//var blockOnSurveyLoadBarParams = '-99'; //stop forever (expires=Fri, 31 Dec 2010 12:00:00 UTC)
//var blockOnSurveyLoadBarParams = '0'; //stop for this session
//var blockOnSurveyLoadBarParams = '0,2'; //stop for hours,mins

//var blockOnOverlayClose = true;
var blockOnOverlayClose = false;
//var blockOnOverlayCloseParams = '-99'; //stop forever (expires=Fri, 31 Dec 2010 12:00:00 UTC)
//var blockOnOverlayCloseParams = '0'; //stop for this session
//var blockOnOverlayCloseParams = '72,0'; //stop for hours,mins
//var blockOnOverlayCloseParams = '0,2'; //stop for hours,mins

//Only counts those who close on the initial overlay screen. If using a bar survey, when they close the second window this is not counted. If you need to change this remove 'takepart' text in the closeOverlay() call in content2.html
//!!!!!!NOTE: Expiry dates for this cookie is set in the increaseCloseCount() function!!!!!!
var blockOnOverlayCloseLimit = 1000000;
//var blockOnOverlayCloseLimitParams = '-99'; //stop forever (expires=Fri, 31 Dec 2010 12:00:00 UTC)
var blockOnOverlayCloseLimitParams = '0'; //stop for this session
//var blockOnOverlayCloseLimitParams = '72,0'; //stop for hours,mins
//var blockOnOverlayCloseLimitParams = '0,1'; //stop for hours,mins

//Only counts those who close on the initial overlay screen. If using a bar survey, when they close the second window this is not counted. If you need to change this remove 'takepart' text in the closeOverlay() call in content2.html
//!!!!!!NOTE: Expiry dates for this cookie is set in the increaseShowCount() function!!!!!!
var blockOnOverlayShowLimit = 5;
//var blockOnOverlayCloseLimitParams = '-99'; //stop forever (expires=Fri, 31 Dec 2010 12:00:00 UTC)
//var blockOnOverlayCloseLimitParams = '0'; //stop for this session
//var blockOnOverlayCloseLimitParams = '72,0'; //stop for hours,mins
var blockOnOverlayShowLimitParams = '168,0'; //stop for hours,mins

//edit the below URLs and add more if you only want the overlay to show on certain URLs of the site.
//!!!!!NOTE: URLs are not case sensitive!!!!!!

showurl[0] = window.showURL1;
showurl[1] = window.showURL2;
showurl[2] = window.showURL3;
showurl[3] = window.showURL4;
showurl[4] = window.showURL5;

/////////////END PARAMS////////////

function setUp() {
div = document.createElement("div");
var overlaycontent = "<div id='outer-layer' style='display: none;'>" +
    "<table cellpadding='0' cellspacing='0' width='100%'>" +
    "<tr>" +
			"<td id='topHead'>" +
			"<div id='close' style='float:right;' onclick='closeOverlay()' title='Close'>&nbsp;</div>" +
			"<!--<br><br>-->" +
			"<div id='olHeadLogo' title='NICE logo'><img src='/niceoverlay/imgs/nice_logo.gif' alt='NICE logo' /></div>" +
			"</td>" +
		"</tr>" +
    "<tr>";

    if (barSurvey)
    {
        overlaycontent += "<td id='data-box'><iframe id='imoverlay' src='/niceoverlay/content_bar.html' frameborder='0' border='0' marginwidth='0' marginheight='0' width='410'></iframe></td>"
		} else {
		overlaycontent += "<td id='data-box'><iframe id='imoverlay' src='/niceoverlay/content.html' frameborder='0' border='0' marginwidth='0' marginheight='0' width='410'></iframe></td>"
		};

    overlaycontent += "</tr>" +	
		"<tr>" +
			"<td id='olBottom'>" +
				"<div id='olFooterS1'>" +
					"<a href='http://surveys.ipsosinteractive.com/deploy/templates/uk-default-tpl/privacy.html' target='_blank'><u>Learn more about our privacy policy</u></a><br />" +
					"&copy; 2010 Ipsos MORI. All rights reserved" +
				"</div>" +
			"</td>" +
		"</tr>" +
	"</table>" +
"</div>";

div.innerHTML = overlaycontent;

document.body.appendChild(div);

};

if (useFading)
{
    document.write("<scr" + "ipt src='/niceoverlay/javascripts/prototype.js' type='text/javascript'></scr" + "ipt>");
    document.write("<scr" + "ipt src='/niceoverlay/javascripts/scriptaculous/scriptaculous.js?load=effects' type='text/javascript'></scr" + "ipt>");
};

var rand = Math.random();
var ourRatio = 1 / ratio;

if (rand > ourRatio)
{
  document.cookie = overlayblk + "=1;" + cookieParams;
}; 

//stopOverlay(0) = stop for this session
//stopOverlay(1, 2) = stop for 1hr 2min
//stopOverlay(-99) = stop forever
//stopOverlay(-1) = clear cookie
function stopOverlay(paramvalues)
{
var split = paramvalues.split(",");
if (split.length == 1)
{
var expirehours = split[0];
var expiremins = null;
} else {
var expirehours = split[0];
var expiremins = split[1];
};



if (expirehours == -1)
{
document.cookie = overlayblk + "=1; expires=Tue, 1 Jan 2008 12:00:00 UTC;" + cookieParams;
} else {
if (expirehours == 0 && expiremins == null)
{
document.cookie = overlayblk + "=1;" + cookieParams;
} else {
if (expirehours == -99)
{
document.cookie = overlayblk + "=1; expires=Fri, 31 Dec 2010 12:00:00 UTC;" + cookieParams;
} else {
var expdate = new Date(); 
expdate.setTime(expdate.getTime() + (60 * 1000 * expiremins) + (60 * 60 * 1000 * expirehours)); 

document.cookie = overlayblk + "=1; expires=" + expdate.toGMTString() + ";" + cookieParams;
};
};
};
};

function getCookieValue (cookieName) {
  var exp = new RegExp (escape(cookieName) + "=([^;]+)");
  if (exp.test (document.cookie + ";")) {
    exp.exec (document.cookie + ";");
    return unescape(RegExp.$1);
  }
  else return false;
}

function increaseCloseCount()
{
  if (getCookieValue(closecount))
  {
    //re-writing closecount
    var closeCountValue = getCookieValue(closecount);
    var closeCountExpiryDateValue = getCookieValue(closecountcookiedate);
    var closeCountExpiryDate = new Date(closeCountExpiryDateValue);
    
    closeCountValue++;
    document.cookie = closecount + "=" + closeCountValue + "; expires=" + closeCountExpiryDate.toGMTString() + ";" + cookieParams;
  } else {
  
    var closeCountExpiryDate = new Date(); 
    //plus 7 days
    closeCountExpiryDate.setTime(closeCountExpiryDate.getTime() + (60 * 60 * 1000 * 24 * 7));

    //writing new closecount; 
    
    //write the date into a cookie
    document.cookie = closecountcookiedate + "="  + closeCountExpiryDate.toGMTString() + "; expires=" + closeCountExpiryDate.toGMTString() + ";" + cookieParams;
    //write first close count
    document.cookie = closecount + "=1; expires=" + closeCountExpiryDate.toGMTString() + ";" + cookieParams;
  
  };
}

function increaseShowCount()
{
  if (getCookieValue(showcount))
  {
    //re-writing showcount
    var showCountValue = getCookieValue(showcount);
    var showCountExpiryDateValue = getCookieValue(showcountcookiedate);
    var showCountExpiryDate = new Date(showCountExpiryDateValue);

    showCountValue++;
    document.cookie = showcount + "=" + showCountValue + "; expires=" + showCountExpiryDate.toGMTString() + ";" + cookieParams;
  } else {
  
    var showCountExpiryDate = new Date(); 
    //plus 7 days
    showCountExpiryDate.setTime(showCountExpiryDate.getTime() + (60 * 60 * 1000 * 24 * 7));
    
    //writing new showcount; 

    //write the date into a cookie
    document.cookie = showcountcookiedate + "="  + showCountExpiryDate.toGMTString() + "; expires=" + showCountExpiryDate.toGMTString() + ";" + cookieParams;
    //write first show count
    document.cookie = showcount + "=1; expires=" + showCountExpiryDate.toGMTString() + ";" + cookieParams;
  
  };
}


// shows select boxes
function showSelectBoxes()
{
	var selects = document.body.getElementsByTagName("select");
	for (i = 0; i != selects.length; i++) {
		selects[i].style.visibility = "visible";
	}
}

function showInputBoxes()
{
	var inputs = document.body.getElementsByTagName("input");
	for (i = 0; i != inputs.length; i++) {
		inputs[i].style.visibility = "visible";
	}
}

// hides select boxes
function hideSelectBoxes()
{
	var selects = document.getElementsByTagName("select");
	for (i = 0; i != selects.length; i++) {
		selects[i].style.visibility = "hidden";
	}
}

function hideInputBoxes()
{
	var inputs = document.getElementsByTagName("input");
	for (i = 0; i != inputs.length; i++) {
		inputs[i].style.visibility = "hidden";
	}
}

function pause(ms)
{
	var date = new Date();
	curDate = null;
	do{var curDate = new Date();}
	while( curDate - date < ms);
}

var overlayshowing = false;

	function showItems()
	{
		pause(500);

moveOverlay(false);
if(useFading)
{
Effect.toggle('outer-layer','appear');
} else {
document.getElementById('outer-layer').style.display = "";
}

 
    if (hideSelect)
    {
		hideSelectBoxes();
		}
		
		if (hideInput)
    {
		hideInputBoxes();
		}
    		
		overlayshowing = true;
	}
	
	function hideItems()
	{
		pause(200);
		
if(useFading)
{
Effect.toggle('outer-layer','appear');
} else {
document.getElementById('outer-layer').style.display = "none";
}

    if (hideSelect)
    {
		showSelectBoxes();
		}
		if (hideInput)
    {
		showInputBoxes();
		}
				overlayshowing = false;
	}
	
function moveOverlay(init) {
  var scrOfX = 0, scrOfY = 0;
  if( typeof( window.pageYOffset ) == 'number' ) {
    //Netscape compliant
    scrOfY = window.pageYOffset;
    scrOfX = window.pageXOffset;
  } else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) {
    //DOM compliant
    scrOfY = document.body.scrollTop;
    scrOfX = document.body.scrollLeft;
  } else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) ) {
    //IE6 standards compliant mode
    scrOfY = document.documentElement.scrollTop;
    scrOfX = document.documentElement.scrollLeft;
  }

  document.getElementById('outer-layer').style.top = (ygap + scrOfY) + "px";
  document.getElementById('outer-layer').style.left = ((document.documentElement.scrollWidth-width-marginsLR)/2) + "px";

}


	function moveBar(init) {
  var scrOfX = 0, scrOfY = 0;
  if( typeof( window.pageYOffset ) == 'number' ) {
    //Netscape compliant
    scrOfY = window.pageYOffset;
    scrOfX = window.pageXOffset;
  } else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) {
    //DOM compliant
    scrOfY = document.body.scrollTop;
    scrOfX = document.body.scrollLeft;
  } else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) ) {
    //IE6 standards compliant mode
    scrOfY = document.documentElement.scrollTop;
    scrOfX = document.documentElement.scrollLeft;
  }

  

  document.getElementById('surveybar').style.top = scrOfY + "px";
  document.getElementById('surveybar').style.left = "0px";


}



function addLoadEvent(func) {
	var oldonload = window.onload;
	if (typeof window.onload != 'function') {
		window.onload = func;
	}
	else {
		window.onload = function() {
			oldonload();
			func();
		}
	}
}

addLoadEvent(runOverlay);


function runOverlay()
{
if (cookiesDisabledBlock)
{
  var cookiesEnabled = false;
  document.cookie = cookiecheck + "=1;" + cookieParams;
  if (document.cookie.indexOf(cookiecheck) != -1) {cookiesEnabled = true;};
} else { var cookiesEnabled = true; };

  if (document.cookie.indexOf(surveybar) != -1 && cookiesEnabled)
  {
//Surveybar cookie found
  showBar()
  };

//Only show if overlay has not been blocked by a 'overlayblk' cookie, and cookies are enabled.
if (document.cookie.indexOf(overlayblk) == -1 && cookiesEnabled)
{
  if (blockOnOverlayShowLimit == 0 || getCookieValue(showcount) < blockOnOverlayShowLimit)
  {
    //Check for block limit has not been exceeded - set by parameter 'blockOnOverlayCloseLimit'
    if (blockOnOverlayCloseLimit == 0 || getCookieValue(closecount) < blockOnOverlayCloseLimit)
    {
      if (document.cookie.indexOf(surveybar) < 0)
      {
        //URL specific overlay pages script
        if (showurl.length > 0)
        {
          var showonthispage = false;
          for (i=0; i <= showurl.length - 1; i++)
          {
            var thisLength = showurl[i].length;
            
            var showUrlLastChar = (showurl[i]).slice(thisLength-1,thisLength);
            
            //this checks if the showurl should be an exact match to the URL or if just included in it.
            if (showUrlLastChar == "*")
            {
              //trim off the * at the end of URL
              var urlToCheck = (showurl[i]).slice(0,thisLength-1).toLowerCase();
              //check included in URL
              if (((document.location.href).toLowerCase()).indexOf(urlToCheck) >= 0)
              {
                showonthispage = true;
              }
            } else {
              //check exact match of URL
              if ((showurl[i]).toLowerCase() == (document.location.href).toLowerCase())
              {
                showonthispage = true;
              }
            }
          

          };
        } else {
          showonthispage = true;
        };


        if (showonthispage) {

            //Split start and end dates
            var sDSR = startDate.split("/");
            var eDSR = endDate.split("/");
                                                
            var today = new Date();

            var newStartDate = new Date(sDSR[2], sDSR[1], sDSR[0], 0, 0, 0, 0);
            var newEndDate = new Date(eDSR[2], eDSR[1], eDSR[0], 0, 0, 0, 0);
            
            if (curr_year >= sDSR[2] && curr_year <= eDSR[2])
            {
                if ((curr_month == sDSR[1] && curr_date >= sDSR[0]) || (curr_month == eDSR[1] && curr_date <= eDSR[0]))
                {
                    //show overlay
                    setUp();
                    setTimeout('afterpause()', delayBeforeShow);

                    //increase the show count
                    increaseShowCount();
                    
                    if (blockOnOverlayLoad) {
                        stopOverlay(blockOnOverlayLoadParams);
                    }
                }
            }
        };
        
      };
      
    } else {
      //has close count limit has been reached
      if (getCookieValue(closecount) >= blockOnOverlayCloseLimit)
      {
        stopOverlay(blockOnOverlayCloseLimitParams);
      }
    }
  } else {
    //has show count limit has been reached
    if (getCookieValue(closecount) >= blockOnOverlayCloseLimit)
    {
      stopOverlay(blockOnOverlayShowLimitParams);
    }
  }
}
}


function afterpause ()
{
  showItems();
  window.onresize= moveOverlay;
  document.onscroll= moveOverlay;
  window.onscroll= moveOverlay;
};

function showBar() {

div = document.createElement("div");

if (barType == 'spaced') { div.style.position = 'relative'; };
if (barType == 'hover') { div.style.position = 'relative'; };

div.id = "surveybar";
div.style.left = 0;
div.style.top = 0;
div.style.display = "inline";
div.style.width = "100%";
div.style.zIndex = "20";


div.innerHTML = "<table align='center' width='100%' bgcolor='" + barColor + "' cellpadding='5px' cellspacing=0 padding=0 margin=0><tr><td width='100%' style='padding: 5px; text-align: center' align='center'><span style='color: " + barFontColor + "; font-size: " + barFontSize + ";'><a style='color: " + barFontColor + "; text-decoration: " + barFontStyle + ";' href='" + surveyURL + "' title='Click to take the survey.' target='_blank' onclick='window.open(\"" + surveyURL + "\");callSurveyFromBar();return false;'>Click here to take the survey</a></span></td></tr></table>";


document.body.style.paddingTop = 0;


	var forms = document.getElementsByTagName("form");
	for (i = 0; i != forms.length; i++) {
	forms[i].style.margin = "0px";
	}

document.body.insertBefore(div, document.body.firstChild);

  document.cookie = surveybar + "=1;" + cookieParams;

if (movingbar)
{
  moveBar()
  document.onscroll= moveBar;
  window.onscroll= moveBar;
};
};

function callSurvey() {
window.open(surveyURL);
document.getElementById('outer-layer').style.display = 'none';
if (blockOnSurveyLoad)
{
stopOverlay(blockOnSurveyLoadParams);
};
};

function callSurveyFromBar() {
document.body.style.paddingTop = "10px";


document.getElementById('surveybar').style.display = 'none';

//expire surveybar cookie
document.cookie = surveybar + "=1; expires=Tue, 1 Jan 2008 12:00:00 UTC;" + cookieParams;

if (blockOnSurveyLoadBar)
{
stopOverlay(blockOnSurveyLoadBarParams);
};
};

function closeOverlay(noIncBlockCount) {

pause(200);

if(useFading)
{
Effect.toggle('outer-layer','appear');
} else {
document.getElementById('outer-layer').style.display = "none";
}		

    if (hideSelect)
    {
		showSelectBoxes();
		}
		if (hideInput)
    {
		showInputBoxes();
		}
				overlayshowing = false;

if (blockOnOverlayClose)
{
stopOverlay(blockOnOverlayCloseParams);
}


//do not want to increment if bar survey and closed from second overlay page.
if (noIncBlockCount != "takepart")
{
//Increase blockcount cookie to increment the Close overlay count - compared on overlay initialisation to the 'blockOnOverlayCloseLimit' parameter.
increaseCloseCount();
}

};
