var OmniturePageType = {NORMAL:0, SEARCH:1, LOGIN:2, LOGOUT:3, SITEMAP:4, PRINT:5, SEND2FRIEND:6, 
		NEWSLETTER:7, EXTRANET_SUBSCRIPTION:8, FORMSURVEY:9, ERROR:10, DOWNLOAD:11};

var OmnitureEventType = {RENDER:0, ACTION:1};

var omnitureManager = new Object();

omnitureManager.pageType = OmniturePageType.NORMAL;
omnitureManager.eventType = OmnitureEventType.RENDER;
omnitureManager.pageName = "";
omnitureManager.pageAlias = "";
omnitureManager.pagePath = "";
omnitureManager.isLogin = false;
omnitureManager.contentTitle = null;
omnitureManager.otherJsonInfo = {};

omnitureManager.send = function() {
	//init some default data: page name, type, section prop...
	omnitureManager.initDefaultData();
	
	//for add more or override info
	switch (omnitureManager.pageType) {
		case OmniturePageType.NORMAL:
			//nothing override
			break;
		case OmniturePageType.SEARCH:
			omnitureManager.handleSearchPage();
			break;
		case OmniturePageType.LOGIN:
			omnitureManager.handleLoginPage();
			break;
		case OmniturePageType.LOGOUT:
			omnitureManager.handleLogoutPage();
			break;
		case OmniturePageType.SITEMAP:
			omnitureManager.handleSiteMapPage()
			break;
		case OmniturePageType.PRINT:
			omnitureManager.handlePrintPage();
			break;
		case OmniturePageType.SEND2FRIEND:
			omnitureManager.handleSend2FriendPage();
			break;
		case OmniturePageType.NEWSLETTER:
			omnitureManager.handleNewsLetterdPage();
			break;	
		case OmniturePageType.EXTRANET_SUBSCRIPTION:
			omnitureManager.handleExtranetSubscriptionPage();
			break;		
		case OmniturePageType.FORMSURVEY:
			omnitureManager.handleFormSurveyPage();
			break;	
		case OmniturePageType.ERROR:
			omnitureManager.handleErrorPage();
			break;	
		case OmniturePageType.DOWNLOAD:
			omnitureManager.handleDownloadPage();
			break;	
	}
	
	var s_code = s.t();
	if(s_code) 
		document.write(s_code);
	
	return s;
}

//hard-code for download. todo: refine code
//omnitureData: map data
omnitureManager.listenEvent = function (omnitureData, jsEventName, jsElementQuery) {
	jQuery(jsElementQuery).bind(jsEventName, omnitureData, function(event) {
		omnitureManager.pageType = event.data.pageType;
		omnitureManager.eventType = event.data.eventType;
		
		var downloadFileName = jQuery(this).attr('title');
		omnitureManager.otherJsonInfo = {'downloadFileName':downloadFileName};
		omnitureManager.send();
	});
}

omnitureManager.initDefaultData = function () {
	
	//Update Omniture code with s.charSet="UTF-8"
	s.charSet="UTF-8";
		
	if (omnitureManager.contentTitle != null) {
		s.pageName = omnitureManager.contentTitle;
	} else if (omnitureManager.pageName.length > 0) {
		s.pageName = omnitureManager.pageName;
	} else {
		s.pageName = omnitureManager.pageAlias;
	}
	
	var mlc = omnitureManager.pagePath.split("/");
	
	if (mlc != null && mlc.length > 0){
		var hier1 = "";
		var props = "";
		var firstSection = null;
		var secIndex = 0; 
		
		for (var i = 0; i < mlc.length - 1; i++) {
			if (mlc[i] == "") {
				continue; //for case: first / or //
			}
			
			if (firstSection != null) {
				firstSection = mlc[i];
			}
			
			var propNum = secIndex + 1;
			
			if (propNum < 5) {
				hier1 = statsHelper.listAppend(hier1, mlc[i], ",");
				
				props = statsHelper.listAppend(props, mlc[i], ":"); 

				s["prop" + propNum] = props;
			}
			
			secIndex = secIndex + 1;
		}
		s.channel = firstSection;
		s.hier1 = hier1;
	}
	
	if(omnitureManager.isLogin == true) {
		s.prop7='User logged';
	} else {
		s.prop7='User not logged';
	}
}

omnitureManager.handleSearchPage = function() {
	s.event = "";
	var totalItems = omnitureManager.otherJsonInfo.totalItems;
	var searchText = omnitureManager.otherJsonInfo.searchText;
	
	//s.prop1 = ''; s.prop2 = ''; s.prop3 = ''; s.prop4 = '';
	//s.hier1 = '';
	//s.channel = '';
	
	s.prop5 = totalItems != 0 ? totalItems : "Zero";
	s.prop6 = searchText;
	if (totalItems == 0) {
		s.events = "event16";
		s.prop15 = searchText;
	}
}

omnitureManager.handleLoginPage = function() {
	//s.prop1 = ''; s.prop2 = ''; s.prop3 = ''; s.prop4 = '';
    //s.hier1 = '';
    //s.channel = '';
    
    var userLogin = omnitureManager.otherJsonInfo.userLogin;
    switch (omnitureManager.eventType) {
		case OmnitureEventType.RENDER: //page login or login fail
			//nothing
			break;
		case OmnitureEventType.ACTION: //login successfully
			s.events = 'event8';
			s.prop26 = userLogin;
			s.eVar26 = userLogin;
			break;
	}
}

omnitureManager.handleLogoutPage = function() {
}

omnitureManager.handleSiteMapPage = function() {
	s.prop1 = ''; s.prop2 = ''; s.prop3 = ''; s.prop4 = '';
    s.hier1 = '';
    s.channel = '';
}

omnitureManager.handlePrintPage = function() {
	s.pageName = omnitureManager.pageName;
	s.events = 'event18';
	if (omnitureManager.contentTitle != null) {
		s.prop25 = omnitureManager.contentTitle;
	} else {
		s.prop25 = omnitureManager.pageName;
	}
	
	s.prop20='Print page Tool';
	s.eVar20='Print page Tool';
}

omnitureManager.handleSend2FriendPage = function() {
	switch (omnitureManager.eventType) {
		case OmnitureEventType.RENDER:
			//nothing
			break;
		case OmnitureEventType.ACTION:
			s.events = 'event17';
			s.pageName = 'Sent to friend ThankYouPage';
			s.prop24 = omnitureManager.pageName;
			s.prop20 = 'Send to Friend Tool';
			s.eVar20 = 'Send to Friend Tool';
			break;
	}
	
}

omnitureManager.handleNewsLetterdPage = function() {
	var linkedEmailingList = omnitureManager.otherJsonInfo.linkedEmailingList;
	
	switch (omnitureManager.eventType) {
		case OmnitureEventType.RENDER:
			s.eVar7 = 'Newsletter ' + linkedEmailingList + ' Signup Lead';
			s.events = 'event3';
			break;
		case OmnitureEventType.ACTION:
			s.events = 'event4,event6';
//			s.events = 'event6';
			s.prop20 = 'Newsletter ' + linkedEmailingList + ' subscription Tool';
			s.eVar20 = 'Newsletter ' + linkedEmailingList + ' subscription Tool';
			s.pageName = omnitureManager.pageName + ' - ThankYouPage Newsletter ' + linkedEmailingList
			break;
	}
}

omnitureManager.handleExtranetSubscriptionPage = function() {
	var linkedGroup = omnitureManager.otherJsonInfo.linkedGroup;
	
	switch (omnitureManager.eventType) {
		case OmnitureEventType.RENDER:
			s.eVar7 = 'Registration ' + linkedGroup + ' Asked Lead';
			s.events = 'event3';
			break;
		case OmnitureEventType.ACTION:
			s.events = 'event4,event7';
			s.prop20 = 'Extranet ' + linkedGroup + ' subscription asked Tool';
			s.eVar20 = 'Extranet ' + linkedGroup + ' Asked Tool';
			s.pageName = omnitureManager.pageName + ' - ThankYouPage Registration ' + linkedGroup
			break;
	}
}

omnitureManager.handleFormSurveyPage = function() {
	s.event = "";
	var stepNum = omnitureManager.otherJsonInfo.stepNum;
	var stepCount = omnitureManager.otherJsonInfo.stepCount;
	var isSurvey = omnitureManager.otherJsonInfo.isSurvey;
	var isForm = omnitureManager.otherJsonInfo.isForm;
	var fnsName = omnitureManager.otherJsonInfo.fnsName;
	var isShowThankYouMessage = omnitureManager.otherJsonInfo.isShowThankYouMessage;
	
	//first step
	if (stepNum == 1) {
		s.events = "event3";
		s.eVar7 =  fnsName + " Lead";
	}
	
	//last step
	if (stepNum > stepCount) {
		s.prop22 = fnsName;
		s.eVar22 = fnsName;
	}
	0	
	if (isShowThankYouMessage && stepNum > stepCount) {
		if (isForm == true) {
			s.pageName = omnitureManager.pageName + " -  ThankYouPage form " + fnsName;
		} else {
			s.pageName = omnitureManager.pageName + " -  ThankYouPage survey " + fnsName;
		}
		
		s.events = "event4";
	}
	if (isSurvey && stepNum >= 2 && stepNum <= stepCount) {
		s.pageName = omnitureManager.pageName + '>' + fnsName + '>' + stepNum;
	}
	
}

omnitureManager.handleErrorPage = function() {
	s.event = "";
	var errorInputPageUrl = omnitureManager.otherJsonInfo.errorInputPageUrl;
	switch (omnitureManager.eventType) {
		case OmnitureEventType.RENDER:
			s.pageType = "errorPage";
//			s.pageName = "404:" + omnitureManager.pagePath; //in this error case, omnitureManager.pagePath is error page url, not error input url
			s.pageName = "404:" + errorInputPageUrl;
		case OmnitureEventType.ACTION:
			break;
	}
}

omnitureManager.handleDownloadPage = function() {
	var downloadFileName = omnitureManager.otherJsonInfo.downloadFileName;
	s.events = "event10";
	s.prop23 = downloadFileName;
	s.eVar10 = downloadFileName;
	s.prop10 = downloadFileName;
}

omnitureManager.test = function() {
	omnitureManager.pageName = "contact";
	omnitureManager.pageAlias = "contact-us";
	omnitureManager.pagePath = "osmoz/europe/contact-us/";
	
	//test print page
	s = {};
	omnitureManager.pageType = OmniturePageType.PRINT;
	console.log("PRINT PAGE:  %b", omnitureManager.send());
	
	//test send 2 friend page, event: action
	s = {};
	omnitureManager.pageType = OmniturePageType.SEND2FRIEND;
	omnitureManager.eventType = OmnitureEventType.ACTION;
	console.log("SEND 2 FRIEND:  %b", omnitureManager.send());
	
	//test newsletter page, event: render
	s = {};
	omnitureManager.otherJsonInfo = {'linkedEmailingList':'emailing group'};
	omnitureManager.pageType = OmniturePageType.NEWSLETTER;
	omnitureManager.eventType = OmnitureEventType.RENDER;
	console.log("NEWSLETTER - RENDER:  %b", omnitureManager.send());
	
	//test newsletter page, event: action
	s = {};
	omnitureManager.otherJsonInfo = {'linkedEmailingList':'emailing group'};
	omnitureManager.pageType = OmniturePageType.NEWSLETTER;
	omnitureManager.eventType = OmnitureEventType.ACTION;
	console.log("NEWSLETTER - ACTION:  %b", omnitureManager.send());
	
	//test extranet subscription page, event: render
	s = {};
	omnitureManager.otherJsonInfo = {'linkedGroup':'extranet group'};
	omnitureManager.pageType = OmniturePageType.EXTRANET_SUBSCRIPTION;
	omnitureManager.eventType = OmnitureEventType.RENDER;
	console.log("EXTRANET_SUBSCRIPTION - RENDER:  %b", omnitureManager.send());
	
	//test extranet subscription page, event: action
	s = {};
	omnitureManager.otherJsonInfo = {'linkedGroup':'extranet group'};
	omnitureManager.pageType = OmniturePageType.EXTRANET_SUBSCRIPTION;
	omnitureManager.eventType = OmnitureEventType.ACTION;
	console.log("EXTRANET_SUBSCRIPTION - ACTION:  %b", omnitureManager.send());
	
	//test login page, event: action
	s = {};
	omnitureManager.otherJsonInfo = {'userLogin':'system'};
	omnitureManager.pageType = OmniturePageType.LOGIN;
	omnitureManager.eventType = OmnitureEventType.ACTION;
	omnitureManager.isLogin = true;
	console.log("LOGIN - ACTION:  %b", omnitureManager.send());
	
	//test Error page, event: render
	s = {};
	omnitureManager.pageType = OmniturePageType.ERROR;
	omnitureManager.eventType = OmnitureEventType.RENDER;
	console.log("ERROR - RENDER:  %b", omnitureManager.send());
	
	//test form and survey. event: action
	s = {};
	omnitureManager.pageType = OmniturePageType.FORMSURVEY;
	omnitureManager.eventType = OmnitureEventType.ACTION;
	omnitureManager.otherJsonInfo = {'stepNum':2, 'stepCount': 5, 'isSurvey': true, 'isForm': false, 'fnsName': 'form survey name', 'isShowThankYouMessage': true}
	console.log("FORMSURVEY - ACTION:  %b", omnitureManager.send());
}

var statsHelper = new Object();
statsHelper.listAppend = function(list, element, delimiter) {
	if (list == null || list == undefined || list == "") {
		return element;
	}
	return list + delimiter + element;
}
