// application base dir 
var sBaseDir = 'chatroom/chatsave/';

// css dir
var sCssDir = 'skins/';

// images dir
var sImgDir = 'images/';

var bUserCancelledPage = false;

/*------------------------------------------------------------------------------------------------*/

if (window.TOOL === undefined) {
	document.writeln('<script type="text/javascript" src="../javascript/core/tool.js"></script>');
}
if (window.Position === undefined) {
	document.writeln('<script type="text/javascript" src="../javascript/core/Position.js"></script>');
}
if(window.CSconfiguration === undefined) {
    document.writeln('<script type="text/javascript" src="' + location.protocol + '//' + location.host + '/' + sBaseDir + '?cs_config=' + cs_campaign + '"></script>');
} else {
    document.writeln('<script type="text/javascript" src="' + location.protocol + '//' + location.host + '/' + sBaseDir + '?cs_config=all' + '"></script>');
}
/*------------------------------------------------------------------------------------------------*/


var ichat = (function (/*String*/baseDir, /*String*/imgDir) {
	
	var today = new Date();
	
	// chat text
	var sNextText = '';
	
	// default answers
	var aDefaultAnswers = [];
	var aGivenDefault = [];
	
	// answers
	var aAnswers = [];
	
	// processing
	var bProcessing = false;
	
	// user canceled
	var bUserCancelled = false;
	
	// page mask
	var bottomLayer = document.createElement('iframe');
	var oPageMask = document.createElement('div');
	
	// iframe background
	var bg = document.createElement('iframe');
	if(document.all) {
	   var fborder = bg.getAttributeNode('frameborder');
	   var fbottomBorder = bottomLayer.getAttributeNode('frameborder');
	   fborder.value = fbottomBorder.value = 0;
	}
	
	// main window
	var oChatWindow = document.createElement ('div');
	
	// window header
	var oWindowHeader = document.createElement ('div');
	
	// window caption
	var oCaption;
	
	// close button
	var oCloseBtn = document.createElement ('a');
	oCloseBtn.appendChild(document.createTextNode('close'));
	
	// content area
	var oContent = document.createElement ('div');
	
	// form
	var oForm = document.createElement ('div');
	
	// chat log
	var oChatLog = document.createElement ('div');
	
	// typing indicator
	var oTyping = document.createElement('span');
	
	// user message
	var oUsrMsg = document.createElement ('input');
    
    // agent id
    var iAgent;
    
	// agent name
	var sAgent = 'Smart';
	
	// links
	var oLinks = {};
	
	// layout options
	var	options = {
		//for activating and deactivating chat client
		active : true,
	
		// right layout of chat window 
		rightLayout : false,
		
		// window type - modal or popup
		modal : true,
		
		// for popup top
		top : 100,
		
		// for popup left
		left : 100,
		
		// border color
		borderColor : '#ccc',
		
		// border thikness
		borderWidth : 1,
		
		// border style
		borderStyle : 'solid',
		
		// header caption
		caption : 'Wait! Before you go ...',
		
		// header background color
		headerBackground : '#ccc',
		
		// header font size
		fontSize : 16,
		
		// header font color
		fontColor : '#fff',
		
		// header font weight
		bold : false,
		
		// header font style
		italic : false,
		
		// initial message delay
		initDelay : 2,
		
		// smart delay
		smartDelay : 0.1
	};
	
	/**
	 * generates rundom string
	 * 
	 * @param {Integer} strLength
	 * @return {String}
	 * @private
	 */
	var randomString = function (/*Integer*/strLength) {
    	var chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz";
    	var string_length = strLength;
    	var randomstring = '';
    	for (var i=0; i<string_length; i++) {
    		var rnum = Math.floor(Math.random() * chars.length);
    		randomstring += chars.substring(rnum,rnum+1);
    	}
    	return randomstring;
    };
	
	// stats
	var statsTracker = {
	    unique : randomString(11),
	    initiated : 0, // if user tries to leave the page, chat agent will be initiated
	    interaction : 0, // if user types any questions
	    click : 0 // click on the link
	};
	
	/**
	 * sets options for chat window
	 * 
	 * @param {Object} obj
	 * @return void
	 */
	var setOptions = function (/*Object*/obj) {
		
		TOOL.extend(options, obj);
		
		return this;
	};
	
	/**
	 * creates chat window
	 * 
	 * @param {Boolean} bRightLayout
	 * @return void
	 * @private
	 */
	var createWindow = function ( ) {
		
		// page mask
		var oPageMaskStyle = {
			'position' : 'absolute',
			'width' : Position.getInnerSize('width') + 'px',
			'height' : Position .getInnerSize('height') + 'px',
			'top' : Position.getScrollOffset('y') + 'px',
			'left' : Position.getScrollOffset('x') + 'px',
			'background-color' : '#001',
			'opacity' : 0.4,
			'z-index' : 9991,
			'border' : 'none'
		};
		
		$get(oPageMask).setStyle(oPageMaskStyle);
		$get(bottomLayer).setStyle(oPageMaskStyle);
		$get(bottomLayer).setStyle({'opacity' : 0});
		// end page mask
		
		// main window
		oChatWindow.className = 'cs_chatWindow';
		
		var oChatWindowStyle = {
			'width' : '460px',
			'height' : '300px',
			'border' : options.borderWidth + 'px ' + options.borderStyle + ' ' + options.borderColor,
			'position' : 'absolute',
			'top' : options.top + Position.getScrollOffset('y') + 'px',
			'left' : options.left + Position.getScrollOffset('x') + 'px',
			'z-index' : 9992
		};
		
		$get(oChatWindow).setStyle (oChatWindowStyle);
		$get(bg).setStyle(oChatWindowStyle);
		$get(bg).setStyle({'border' : 'none', 'opacity' : 0});
		
			// window header
			oWindowHeader.className = 'cs_windowHeader';
			
			var oWindowHeaderStyle = {
				'padding-top' : '5px',
				'width' : '100%',
				'height' : TOOL.Client.IE ? '25px' : '20px',
				'background-color' : options.headerBackground,
				'color' : options.fontColor,
				'position' : 'relative',
				'margin-bottom' : '10px'
			};
			
			$get(oWindowHeader).setStyle (oWindowHeaderStyle);
			
				// window caption
				oCaption = document.createElement(options.italic ? 'em' : 'span');
				
				var oCaptionStyle = {
					'margin-left' : '10px',
					'font-weight' : options.bold ? 'bold' : 'normal',
					'font-size' : options.fontSize,
					'cursor' : 'default',
					'-moz-user-select' : 'none',
					'-khtml-user-select' : 'none',
					'user-select' : 'none'
				};
				
				$get(oCaption).setStyle(oCaptionStyle);
				oCaption.onselectstart = function ( ) { return false; };				
				oCaption.appendChild(document.createTextNode(options.caption));
				// end window caption
				
				// close button
				oCloseBtn.className = 'cs_closeBtn';
				oCloseBtn.title = 'Close';
				oCloseBtn.href = '#';
				
				var oCloseBtnStyle = {
				    'padding' : '2px 5px',
					'position' : 'absolute',
					'top' : '2px',
					'right' : '5px',
					'border' : '1px solid #aaa'
				};
				
				$get(oCloseBtn).setStyle (oCloseBtnStyle);
				oCloseBtn.onclick = closeWindow;
				// end close button
			
			oWindowHeader.appendChild (oCaption);
			
			oWindowHeader.appendChild (oCloseBtn);
			// end window header
		
			// content area
			
				// form
				var oFormStyle = {
					'display' : 'block',
					'float' : 'left',
					'padding' : '0 0 0 10px'
				};
				
				$get(oForm).setStyle (oFormStyle);
				
					// chat log
					oChatLog.className = 'cs_chatLog';
					
					var oChatLogStyle = {
						'width' : '250px',
						'height' : '180px',
						'overflow-y' : 'scroll',
						'border' : '1px solid #ccc',
						'background-color' : '#fff'
					};
					
					$get(oChatLog).setStyle (oChatLogStyle);
					// end chat log
					
					// typing indicator
					oTyping.className = 'cs_typing';
					
					var oTypingStyle = {
						'display' : 'block',
						'width' : '250px',
						'height' : '15px'
					};
					$get(oTyping).setStyle(oTypingStyle);
					
					// user message
					oUsrMsg.className = 'cs_userMessage';
					oUsrMsg.type = 'text';
					oUsrMsg.name = 'userMessage';
					
					var oUsrMsgStyle = {
						'display' : 'block',
						'width' : '250px',
						'height' : '50px'
					};
					
					$get(oUsrMsg).setStyle(oUsrMsgStyle);
					
					oUsrMsg.onkeypress = keyPressHandler;
					// end user message
					
					// submit button
					var oSubmit = document.createElement ('input');
					oSubmit.className = 'cs_submitBtn';
					oSubmit.type = 'button';
					oSubmit.value = 'SEND';
					// end submit button 
				
				oForm.appendChild(oChatLog);
				
				oForm.appendChild(oTyping);
				
				oForm.appendChild (oUsrMsg);
				
				//oForm.appendChild (oSubmit); I hope we won't need this
				// end form
			
			oContent.appendChild (oForm);
			// end content area
		
		oChatWindow.appendChild(oWindowHeader);
		
		oChatWindow.appendChild(oContent);
		// end main window
		
		if (options.modal)
		{
		    if (document.all) {
		        document.body.scroll = 'no';
		        document.documentElement.style.overflow = 'hidden';
		    }
		    var iTop = Position.getScrollOffset('y');
			document.body.style.overflow = 'hidden';
			document.body.scrollTop = iTop;
			
			document.body.appendChild(bottomLayer);
			document.body.appendChild(oPageMask);
			
			oChatWindow.setStyle({
				'top' : (Position.getInnerSize('height') - parseInt(oChatWindow.style.height))/2 + Position.getScrollOffset('y') + 'px',
				'left' : (Position.getInnerSize('width') - parseInt(oChatWindow.style.width))/2 + 'px'
			});
			bg.setStyle({
				'top' : (Position.getInnerSize('height') - parseInt(oChatWindow.style.height))/2 + Position.getScrollOffset('y') + 'px',
				'left' : (Position.getInnerSize('width') - parseInt(oChatWindow.style.width))/2 + 'px'
			});
		} else {
			EventUtil.addEventHandler(oWindowHeader, 'mousedown', dragStart);
		}
		
		document.body.appendChild(bg);
		document.body.appendChild(oChatWindow);
		
		if(window.CSconfiguration !== undefined) {
		    important.fire();
		}
		
		loadOpener ( );
		
		return this;
	};
	
	/**
	 * sets agent name and picture
	 * 
	 * @param {String} sAgentName
	 * @param {String} sAgentPicture
	 * @return void
	 * @private
	 */
	var setAgent = function (/*String*/sAgentName, /*String*/sAgentPicture) {
		sAgent = sAgentName ? sAgentName : sAgent;
		
		if (sAgentPicture) {
		    
		    var oldImage = $get(oContent).getElementsByClassName('cs_chatAgent');
		    
		    if (oldImage.length) {
		        oContent.removeChild(oldImage[0]);
		    }
		    
			// chat agent div
			var oChatAgent = document.createElement('div');
			oChatAgent.className = 'cs_chatAgent';
			
			var oChatAgentStyle = {
				'width' : '150px',
				'padding' : '0 10px',
				'height' : '1%'
			};
			
			$get(oChatAgent).setStyle(oChatAgentStyle);
			
			// agent picture
			var oAgentPicture = new Image( );
			oAgentPicture.className = 'cs_agentPicture';
			oAgentPicture.src = window.location.protocol + '//' + window.location.host + '/' + sBaseDir + imgDir + sAgentPicture;
			
			var oImgStyle = {
				'width' : '150px',
				'height' : '180px'
			};
			
			$get(oAgentPicture).setStyle (oImgStyle);
			// end agent picture
			
			// agent name plate
			var oAgentNamePlate = document.createElement('span');
			oAgentNamePlate.className = 'cs_agentName';
			
			var oAgentNamePlateStyle = {
				'display' : 'block',
				'padding-top' : '5px',
				'width' : '100%',
				'text-align' : 'center'
			};
						
			$get(oAgentNamePlate).setStyle(oAgentNamePlateStyle);
			oAgentNamePlate.appendChild(document.createTextNode(sAgent));
			// end agent name plate
			
			oChatAgent.appendChild(oAgentPicture);
			oChatAgent.appendChild(oAgentNamePlate);
			// end chat agent div
			
			if(options.rightLayout) {
				$get(oChatAgent).setStyle ({'float' : 'right'});
				oContent.appendChild(oChatAgent);
			} else {
				$get(oChatAgent).setStyle ({'float' : 'left'});
				oContent.insertBefore(oChatAgent, oForm);
			}
		}
		return this;
	};
	
	/**
	 * creates links object
	 * 
	 * @param {Array} links
	 * @return void
	 * @private
	 */
	var setLinks = function (/*Array*/links) {
	    for (var i=0, l=links.length; i<l; i+=1) {
	        oLinks['[[link_' + links[i].id + ']]'] = '<a href="' + links[i].url + /*(links[i].url.indexOf('?') !== -1 ? '&' : '?') + 'cs_u=' + URLEncode(statsTracker.date) + */'" onclick="ichat.recordClick()">' + links[i].title + '</a>';
	    }
	    return this;
	};
	
	/**
	 * loads opening data for chat conversaion
	 * 
	 * @return void
	 * @private
	 */
	var loadOpener = function ( ) {
		var day = new Date();
		var rnd = day.getTime();
		var load = new Net.Loader(window.location.protocol + "//" + window.location.host + '/' + baseDir + "?chatsave=1&rnd=" + rnd + "&campaign=" + cs_campaign + (options.defaultAgent && options.defaultAgent !== 0 ? "&default="+options.defaultAgent : "") + "&get_opener", {
			onComplete : startConversation
		});
		return this;
	};
	
	/**
	 * replace special tags
	 * 
	 * @param {String} text
	 * @return {String}
	 * @private
	 */
	var replaceTags = function (/*String*/text) {
	    var s = text.replace(/\[\[agent\]\]/g, sAgent);

		for(var each in oLinks) {
		    var reString = each.replace(/\[/g, '\\[');
		    reString = reString.replace(/\]/g, '\\]');
		    var re = new RegExp(reString, 'g');
		    s = s.replace(re, oLinks[each]);
		}
		
		return s;
	};
	
	/**
	 * start chat
	 * 
	 * @param {Object} transport
	 * @return void
	 * @private
	 */
	var startConversation = function (/*Object*/transport) {
		var o = eval ('(' + transport.responseText + ')');
		
		iAgent = o.agentId;
		setAgent(o.agentName, o.agentPicture);
		setLinks(o.links);
		aDefaultAnswers = o.dflt;
		
		for (var i = 0, l= o.answers.length; i<l; i+=1)	{
		    var a = replaceTags(o.answers[i]);
			addAnswer(a);
		}
				
		return this;
	};
	
	/**
	 * adds answer to chat log
	 * 
	 * @param {String} text
	 * @return void
	 * @private
	 */
	var addAnswer = function (/*String*/text) {		
		aAnswers.push(text);
		if (!bProcessing) {
			processAnswer(aAnswers.shift(),false);
		}
		return this;
	};
	
	/**
	 * delays the answer from server as if someone is typeing
	 * 
	 * @param {String} text
	 * @param {Boolean} say
	 * @return void
	 * @private
	 */
	var processAnswer = function (/*String*/text, /*Boolean*/say) {
		
		var sayIt = function () {
		    processAnswer('', true);
		};
		
		var isTyping = function () {
			oTyping.innerHTML = sAgent + ' is typing ...';
		};
		
		if (!say) {
			sNextText = text;
			var t1 = Timer((options.initDelay * 1000) + (options.smartDelay * 1000) * text.length, 1);
			var t2 = Timer(options.initDelay * 1000, 1);
			
			t1.on(Timer.COMPLETE, sayIt);
			t2.on(Timer.COMPLETE, isTyping);
			
			t1.start();
			t2.start();
			
			bProcessing = true;
		} else {
			oTyping.innerHTML = '';
			
			var day = new Date();
			var now = day.toLocaleTimeString();
			
			var oAnswer = document.createElement('p');
			
			var oAnswerStyle = {
				'padding' : '5px',
				'margin' : '0'
			};
			
			$get(oAnswer).setStyle(oAnswerStyle);
			
			var oLogStyle = {
				'color' : '#d00',
				'margin-right' : '5px'
			};
			
			var oTimeLog = document.createElement('span');
			oTimeLog.appendChild(document.createTextNode('[' + now + ']'));
			
			$get(oTimeLog).setStyle(oLogStyle);
			
			var oAgentName = document.createElement('span');
			oAgentName.style.fontWeight = 'bold';
			oAgentName.appendChild(document.createTextNode(sAgent + ':'));
			
			$get(oAgentName).setStyle(oLogStyle);
			
			oAnswer.appendChild(oTimeLog);
			oAnswer.appendChild(oAgentName);
			oAnswer.innerHTML += sNextText;
			
			oChatLog.appendChild(oAnswer);
			oChatLog.scrollTop = parseInt(oChatLog.scrollHeight) - TOOL.getComputedStyle(oChatLog, 'height', true);
			
			if (aAnswers.length > 0) {
				processAnswer(aAnswers.shift(), false);
			} else {
				bProcessing = false;
			}
		}
		return this;
	};
	
	/**
	 * on keypress handler
	 * 
	 * @return void
	 * @private
	 */
	var keyPressHandler = function (e) {
		e = EventUtil.formatEvent(e);
		var sMsg = oUsrMsg.value;
		if (e.which === 13) {
			e.preventDefault();
			if (sMsg !== '') {
				sendMessage (sMsg);
			}
		}
		return this;
	};
	
	/**
	 * sends users message to server
	 * 
	 * @param {String} msg
	 * @return void
	 * @private
	 */
	var sendMessage = function (/*String*/msg) {
		
		// keep statistic
		statsTracker.interaction = 1;
		
		if (msg === '' || msg === null) {
			return;
		}
		
		var day = new Date();
		var now = day.toLocaleTimeString();
		var rnd = day.getTime();
		
		var oMessage = document.createElement('p');
		
		var oMessageStyle = {
			'padding' : '5px',
			'margin' : '0'
		};
		
		$get(oMessage).setStyle(oMessageStyle);
		
		var oLogStyle = {
			'color' : '#00d',
			'margin-right' : '5px'
		};
		
		var oTimeLog = document.createElement('span');
		oTimeLog.appendChild(document.createTextNode('[' + now + ']'));
		
		$get(oTimeLog).setStyle(oLogStyle);
		
		var oUser = document.createElement('span');
		oUser.style.fontWeight = 'bold';
		oUser.appendChild(document.createTextNode('You:'));
		
		$get(oUser).setStyle(oLogStyle);
		
		oMessage.appendChild(oTimeLog);
		oMessage.appendChild(oUser);
		oMessage.innerHTML += msg;
		
		oUsrMsg.value = '';
		
		oChatLog.appendChild(oMessage);
		oChatLog.scrollTop = parseInt(oChatLog.scrollHeight) - TOOL.getComputedStyle(oChatLog, 'height', true);
		
		var oSender = new Net.Loader(location.protocol + "//" + location.host + '/' + baseDir + "?chatsave=1&rnd=" + rnd + "&campaign=" + cs_campaign + "&say=" + escape(msg), {
			onComplete : chat
		});
	};
	
	/**
	 * respond to user input
	 * 
	 * @param {Object} transport
	 * @return void
	 * @private
	 */
	var chat = function (/*Object*/transport) {
		var o = eval('(' + transport.responseText + ')');
		if(o.answers.length) {
		    aAnswers = [];
    		for (var i = 0, l= o.answers.length; i<l; i+=1)	{
    		    var a = replaceTags(o.answers[i]);
    			addAnswer(a);
    		}
		} else {
		    if(!aDefaultAnswers.length) {
		        aDefaultAnswers = aGivenDefault;
		        aGivenDefault = [];
		    }
		    var a = aDefaultAnswers.shift();
		    aGivenDefault.push(a);
		    if(a.indexOf('[[cut]]') !== -1) {
		        var aa = a.split('[[cut]]');
		        for(var i=0, ans; ans = aa[i]; i+=1) {
		            ans = replaceTags(ans);
		            addAnswer(ans);
		        }
		    } else {
		        a = replaceTags(a);
		        addAnswer(a);
		    }
		}
		return this;
	};
	
	/**
	 * close chat window
	 * 
	 * @return void
	 * @private
	 */
	var closeWindow = function (e) {
		e = EventUtil.formatEvent(e);
		e.stopPropagation ( );
		e.preventDefault ( );
		
		if (options.modal) {
		    document.body.removeChild(bottomLayer);
			document.body.removeChild (oPageMask);
			document.body.scroll = '';
			document.documentElement.style.overflow = '';
			document.body.style.overflow = '';
		}
		document.body.removeChild (oChatWindow);
		document.body.removeChild(bg);
		
		// for admin and settings
		if(window.CSconfiguration !== undefined) {
		    bUserCancelled = false;
		    oWindowHeader.removeChild(oCaption);
		    oChatLog.innerHTML = '';
		}
		
		return this;
	};
	
	// variables for drag : moving x and y 
	var mx = 0, my = 0;
	
	/**
	 * on start drag
	 * 
	 * @return void
	 * @private
	 */
	var dragStart = function (e) {
		e = EventUtil.formatEvent(e);
		e.preventDefault ( );
		mx = e.pageX;
		my = e.pageY;
		
		EventUtil.addEventHandler(document, 'mousemove', drag);
		EventUtil.addEventHandler(document, 'mouseup', dragEnd);
		
		return this;
	};
	
	/**
	 * on dragging
	 * 
	 * @return void
	 * @private
	 */
	var drag = function (e) {
		var dx, dy;
		
		e = EventUtil.formatEvent(e);
		e.preventDefault ( );
		dx = e.pageX - mx;
		dy = e.pageY - my;
		mx = e.pageX;
		my = e.pageY;
		
		oChatWindow.setStyle({
		    'left' : TOOL.getComputedStyle(oChatWindow, 'left', true) + dx + 'px',
		    'top' : TOOL.getComputedStyle(oChatWindow, 'top', true) + dy + 'px'
		});
	    bg.setStyle({
	        'left' : TOOL.getComputedStyle(oChatWindow, 'left', true) + dx + 'px',
	        'top' : TOOL.getComputedStyle(oChatWindow, 'top', true) + dy + 'px'
	    });	
		return this;
	};
	
	/**
	 * end dragging
	 * 
	 * @return void
	 * @private
	 */
	var dragEnd = function (e) {
		e = EventUtil.formatEvent(e);
		e.preventDefault ( );
		EventUtil.removeEventHandler(document, 'mousemove', drag);
		EventUtil.removeEventHandler(document, 'mouseup', dragEnd);
	};
	
	return {
		/**
		 * displays alert and offers chat to user
		 * 
		 * @return void
		 */
		onUnloadHandler : function (e) {
		    //Force do not open chatsave window
		    if (!(window.allowLoadChat === undefined) && !allowLoadChat) {
		       return; 
		    }
			if (bUserCancelled) {
			   var data = [];
			   for(var each in statsTracker) {
			       data[each] = statsTracker[each];
			   }
			   data['campaign'] = cs_campaign;
			   data['agent'] = iAgent;
               var s = new Net.Loader(location.protocol + '//' + location.host + '/' + baseDir + '?stats=on', {
                    method : 'post',
                    params : data,
                    asynchronous : false
                });
			   return;
			}
			
			bUserCancelled=true;
			
			// keep statistic
			statsTracker.initiated = 1;
			
			// create window
			createWindow ( );
			
			// Send alert
			txtButton = 'Cancel'; 
			if(navigator.userAgent.toLowerCase().indexOf('chrome') > -1)
			{
			    txtButton = 'Stay on this Page';
			}
			alert("Wait! A live agent would like to talk to you about last minute savings,\r\nPlease hit '"+txtButton+"' on the next window to remain on this page...");
	
			if (window.event){
				window.event.returnValue = "\r\nPress 'CANCEL' below to chat...\r\n";
			} else {
				e.returnValue = "\r\nPress 'CANCEL' below to chat...\r\n";
			}
			return "\r\nPress 'Stay on this Page' below to chat...\r\n";
		},
		
		/**
		 * for submiting page
		 * 
		 * @return void
		 */
		cancelChat : function ( ) {
			bUserCancelled = true;
			return this;
		},
		
		/**
		 * keeps record of clicks on link
		 * 
		 * @return void
		 */
		recordClick : function (e) {
		    statsTracker.click = 1;
		},
		
		checkForException : function() {
		    var exception;
		    for(var i=0; exception = oDisplayOptions.exceptions[i]; i+=1) {
    		    if(location.search && location.search.toLowerCase().indexOf('aff_id=' + exception) > -1) {
    		       bUserCancelled = true;
    		       bUserCancelledPage = true;
    		       break;
    		    }
		    }
		},
		
		/**
		 * initiates page if campaign is active
		 * 
		 * @return void
		 */
		pageVisit : function() {
		    var exception;
		    for(var i=0; exception = oDisplayOptions.exceptions[i]; i+=1) {
    		    if(location.search && location.search.toLowerCase().indexOf('aff_id=' + exception) > -1) {
    		       bUserCancelled = true;
    		       bUserCancelledPage = true;
    		       break;
    		    }
		    }
		    setOptions (oDisplayOptions);
		    
		    if(options.active) {
		        // Attach body onunload event
		        if (window.body) {
                	window.body.onbeforeunload = ichat.onUnloadHandler; // IE
                } else {
                	window.onbeforeunload = ichat.onUnloadHandler; // FX
                }
                
                // make record of the visit in database 
		        var init_data = [];
                for(var each in statsTracker) {
                   init_data[each] = statsTracker[each];
                }
                init_data['campaign'] = cs_campaign;
                var l = new Net.Loader(location.protocol + '//' + location.host + '/' + baseDir + '?stats=on', {
                    method : 'post',
                    params : init_data,
                    asynchronous : false
                });
		    }
		},
		/**
		 * for customizing display options
		 */
		testOptions : function () {
		    setOptions (oDisplayOptions);
		    return this;
		}
	};
	
})(sBaseDir, sImgDir);
