
// &copyright; NimbleCat , 2008

// make sure that the required includes are there
 if (typeof NC == 'undefined') {
       alert("promo.js requires the NC JavaScript framework");
 }
 
 // promo manager
 
 (function () {

 NC.promo.PromoManager = function() {
	/* private variables and methods */
 	var currentPromo = null;
 	var selectionId = null;
 	
 	 	return {
 	 		/* public methods */
 	 		getPromo: function( ) {
 	 			return currentPromo;
 	 		},
 	 		
 	 		setPromo: function( promo) {
 	 			currentPromo = promo;
 	 		},
 	 		
 	 		setSelectionId: function( _selectionId) {
 	 			selectionId = _selectionId;
 	 		},
 	 		
 	 		getSelectionId: function() {
 	 			return selectionId;
 	 		},
 	 		
 	 		hidePromo: function() {
 	 			if (currentPromo != null) {
 	 				var promoFrameEl = document.getElementById( currentPromo.getPromoFrameName());
					promoFrameEl.style.display = 'none';
					var promoEl = document.getElementById( currentPromo.getPromoDivName());
					promoEl.innerHTML = '';
 	 			}
 	 			
 	 		},
			
			startPeopleSearchPromo: function( promoDivName, promoFrameName, style) {
				gaPageTracker._trackEvent(this.getCpid(), "Click", "PeopleSearch"); 
				var promo = new NC.promo.PeopleSearchPromo( promoDivName, promoFrameName, style);
				this.setPromo( promo);
				promo.start();
			},
			
			ShowSearchResult: 1,
			ShowMoreLikeMe: 2,
			ShowWelcomePage: 4,
			
		 	doAutoLogin: function( resultsDivName, userState, showFlags, welcomePageUrl, welcomePopupUrl) {
				gaPageTracker._trackEvent(NC.promo.PromoManager.getCpid(), "Click", 'SignupWoResume'); 
				var email = '';
				var md5Id = '';
				var name = '';
				var zipCode = '';
				var query = '';
				var elEmail = document.getElementById( 'Email');
				if (elEmail != null) {
					email = NC.util.Dom.getValue( elEmail);
				}
				var elName = document.getElementById( 'Name');
				if (elName != null) {
					name = NC.util.Dom.getValue( elName);
				}
				var elQuery = document.getElementById( 'PeopleSearchQuery');
				if (elQuery != null) {
					query = NC.util.Dom.getValue( elQuery);
				}
				var autoLoginUrl = './js_doautosignup.php?';
				var autoLoginParms = new Object();
				autoLoginParms['Name'] = name;
				autoLoginParms['Email'] = email;
				autoLoginParms['Md5Id'] = md5Id;
				autoLoginParms['ZipCode'] = zipCode;
				autoLoginParms['us'] = userState;
				if ((showFlags & this.ShowSearchResult) > 0) {
					autoLoginParms['q'] = query;
				}
				else if ((showFlags & this.ShowWelcomePage) > 0) {
					autoLoginParms['Content'] = welcomePageUrl;
				}
				if (welcomePopupUrl == null || welcomePopUrl.length == 0) {
					welcomePopupUrl = 'welcomeGeneral.php';
				}
				autoLoginParms['Welcome'] = welcomePopupUrl;
				var callback =
				{
				};
				progressDialog = './progress.php';
				NC.widget.MessageManager.showDialog(progressDialog, resultsDivName, callback, false, 400);
				NC.widget.LoginManager.clearLoginFormVisibleFlag();
				NC.widget.LoginManager.doAutoLogin( autoLoginUrl, autoLoginParms, resultsDivName);
			},
			
			startLinkUploadPromo: function() {
				gaPageTracker._trackEvent(this.getCpid(), "Click", "GradeLinkToProfile"); 
				var promo = new NC.promo.LinkUploadPromo( 'ProfileScoreDiv', ''); 
				if (promo != null) {				
					NC.promo.PromoManager.setPromo( promo); 									   
					promo.start();
				}
			},
			
			startScoreWoSignupPromo: function() {
				gaPageTracker._trackEvent(this.getCpid(), "Click", "GradeResume"); 
				var promo = new NC.promo.ScoreWoSignupPromo( 'ProfileScoreDiv', ''); 
				if (promo != null) {				
					NC.promo.PromoManager.setPromo( promo); 									   
					promo.start();
				}
			},
			
			// support functions extracted from js_main_nl_v3_sn - support all home pages
			
			getCpid: function() {
				var cpid = NC.util.UrlUtil.parameterExists( window.location.search, 'cpid');
				if (cpid == null) {
					return -1;
				}
				else {
					return cpid[1];
				}
				
			},
			
			getParameterValue: function( parameterName) {
				var value = NC.util.UrlUtil.parameterExists( window.location.search, parameterName);
				if (value == null) {
					return -1;
				}
				else {
					return value[1];
				}
				
			},
			
			uploadAndScoreResume: function() {
				gaPageTracker._trackEvent(this.getCpid(), "Click", "UploadAndScoreResume"); 
				NC.widget.ResumeUploadManager.doFileUploadCheckInvite();
			},
				
			startCandidateSearch: function() {
				gaPageTracker._trackEvent(this.getCpid(), "Click", "DoCandidateSearch"); 
				NC.util.AjaxManager.doCandidateSearchCheckInvite();
			},
			
			showLogin: function() {
				var cxid = this.getParameterValue('cxid');
				var action = 'ConsumerLogin';
				if (cxid == 6) {
					action = 'EmployerLogin';
				}
				gaPageTracker._trackEvent(this.getCpid(), "Click", action); 
				NC.widget.LoginManager.showLoginDialog('../content/jslogin_v3.php', false, 250);	
			},
			
			startFacebookPromo: function( appName) {
				gaPageTracker._trackEvent(this.getCpid(), "Click", "GradeFacebookProfile"); 
				promo = new NC.promo.FacebookProfileAnalyzerPromo( appName, 'ProfileScoreDiv', null); 
				if (promo != null) {				
					NC.promo.PromoManager.setPromo( promo); 									   
					promo.start();
				}
			},
			
			startFacebookLoginPromo: function( ) {
				gaPageTracker._trackEvent(this.getCpid(), "Click", "FacebookLogin"); 
				promo = new NC.promo.FacebookLoginPromo( 'ProfileScoreDiv', null); 
				if (promo != null) {				
					NC.promo.PromoManager.setPromo( promo); 									   
					promo.start();
				}
			},
			
			startFacebookAuthorizationPromo: function( appName) {
				promo = new NC.promo.FacebookAuthorizationPromo( appName, 'ProfileScoreDiv', null); 
				if (promo != null) {				
					NC.promo.PromoManager.setPromo( promo); 									   
					promo.start();
				}
			},
			
			makeFullName: function(firstName, middleName, lastName) {
				var fullName = firstName;
				if (middleName.length > 1 || middleName != '-') {
					fullName += " " + middleName;
				}
				fullName += " " + lastName;
				return fullName		
			}
	
			
 	 	}
  }();

})(); 	
 


// constructor

 NC.promo.Base = function( promoDivName, promoFrameName) {
 	this.promoDivName = promoDivName;
 	this.promoFrameName = promoFrameName;
 }
 
 NC.promo.Base.formatWelcome = function( docroot) {
		var firstName = NC.util.Dom.extractEncodedField( docroot, NC.widget.ResumeWizard.StrFirstname);
		var lastName = NC.util.Dom.extractEncodedField( docroot, NC.widget.ResumeWizard.StrLastname);
		var middleName = NC.util.Dom.extractEncodedField( docroot, NC.widget.ResumeWizard.StrMiddleinitial);
		
		var ncScore = NC.util.Dom.extractField( docroot, NC.widget.ResumeWizard.StrNCScore);
		var managerCategory = NC.util.Dom.extractField( docroot, NC.widget.ResumeWizard.StrManagerCategory);
		var explanation = NC.util.Dom.extractField( docroot, NC.widget.ResumeWizard.StrExplanation);
		
		/*
		* */
		
//		content += 'Name: ' + firstName + '&nbsp;' + middleName + '&nbsp;' + lastName + '<br>';
//		content += 'Address: ' + street + ', ' + city + ', ' + state + ', ' + zipCode;
  		var content = '';	
  		
		var categories = docroot.getElementsByTagName("category");
		
		if (categories.getLength() > 0) {
		// add categories and scores
			content += '<h1>NC';
			content += ncScore;
			content += '</h1><p>';
			if (managerCategory == NC.widget.ResumeWizard.ManagerCategory_Manager) {
				content += 'Your resume indicates that you are a manager.</p><p>';
			}
			else if (managerCategory == NC.widget.ResumeWizard.ManagerCategory_Exec) {
				content += 'Your resume indicates that you are an executive.</p><p>';
			}
			if (categories.getLength() > 0) {
				content += 'Your resume indicates skills and experience in ';
			}
			for (ci = 0; ci < categories.getLength(); ci++) {
				if (ci > 0) {
					content += ', ';
				}
				var category = categories.item(ci);
				var categoryName = category.getElementsByTagName( "categoryname").item(0);
				var categoryNameValue = categoryName.getFirstChild().getNodeValue();
				var categoryWeight = category.getElementsByTagName( "categoryweight").item(0);
				var categoryWeightValue = categoryWeight.getFirstChild().getNodeValue()
				content +=  categoryNameValue ;
			}
			content += '</p>';
			return content;
		}
 }
 
 // methods
 
  NC.promo.Base.prototype = {

 	start: function() {
 		
 	},
 	
 	showUploadPage: function() {
 	},
 	
 	loginUser: function() {
 		
 	},
 	
 	getPromoDivName: function() {
 		return this.promoDivName;
 	},
 	
 	getPromoFrameName: function() {
 		return this.promoFrameName;
 	},
 	
 	positionPromoDialog: function( dialog) {
		var container = document.getElementById('PageContainer');
		var topleft = NC.util.Dom.getAbsoluteXY( container);
		topleft[0] += 450;
		topleft[1] += 375;
		dialog.style.left= topleft[0] + "px";
		dialog.style.top= topleft[1] + "px";
		dialog.style.width="460px";
 	},
  
  
    centerPromoDialog: function( dialog, containerName) {
		var container = document.getElementById(containerName);
		var topleft = NC.util.Dom.getAbsoluteXY( container);
		var dialogwidth = 460;
		topleft[0] += (950 - dialogwidth)/2;
		topleft[1] += (800 - 375)/2;
		dialog.style.left= topleft[0] + "px";
		dialog.style.top= topleft[1] + "px";
		dialog.style.width = dialogwidth + "px";
 	},
	
	setDocRoot: function( docRoot) {
		this.docRoot = docRoot;
	},
	
	getDocRoot: function() {
		return this.docRoot;
	},
	
 	doAutoLogin: function( eventLabel, userState) {
		if (typeof eventLabel != 'undefined' && eventLabel.length > 0) {
			gaPageTracker._trackEvent(NC.promo.PromoManager.getCpid(), "Click", eventLabel); 
		}
		var email = NC.util.Dom.extractEncodedField( this.docRoot, NC.widget.ResumeWizard.StrEmail);
		var md5Id = NC.util.Dom.extractField( this.docRoot, NC.widget.ResumeWizard.StrMd5id);
		var firstName = NC.util.Dom.extractEncodedField( this.docRoot, NC.widget.ResumeWizard.StrFirstname);
		var lastName = NC.util.Dom.extractEncodedField( this.docRoot, NC.widget.ResumeWizard.StrLastname);
		var middleName = NC.util.Dom.extractEncodedField( this.docRoot, NC.widget.ResumeWizard.StrMiddleinitial);
		var fullName = NC.promo.PromoManager.makeFullName( firstName, middleName, lastName);
		var zipCode = NC.util.Dom.extractEncodedField( this.docRoot, NC.widget.ResumeWizard.StrZipcode);
		var randomZipCode = NC.util.Dom.extractEncodedField( this.docRoot, NC.widget.ResumeWizard.StrRandomzipcode);
		var categoryId = NC.util.Dom.extractField( this.docRoot, NC.widget.ResumeWizard.StrCategoryid);
		var zipIsRandom = 0;
		if (zipCode.length == 0) {
			zipCode = randomZipCode;
			zipIsRandom = 1;
		}
		var autoLoginUrl = './js_doautosignup.php?';
		var autoLoginParms = new Object();
		autoLoginParms['Name'] = fullName;
		autoLoginParms['Email'] = email;
		autoLoginParms['Md5Id'] = md5Id;
		autoLoginParms['ZipCode'] = zipCode;
		autoLoginParms['ZipIsRandom'] = zipIsRandom;
		autoLoginParms['Category'] = categoryId;
		autoLoginParms['us'] = userState;
			autoLoginParms['Welcome'] = 'welcomeGeneral.php';
//			autoLoginParms['Qs'] = '1';
//			autoLoginParms['ct'] = '23';
		
		var callback =
		{
		};
		progressDialog = './referralLoginProgress.php';
		NC.widget.MessageManager.showDialog(progressDialog, this.promoDivName, callback, false, 400);
		NC.widget.LoginManager.clearLoginFormVisibleFlag();
		NC.widget.LoginManager.doAutoLogin( autoLoginUrl, autoLoginParms, this.promoDivName);
	}
	/*,
	
 	shareScore: function(targetName, resultsDivName, docRoot) {
		NC.promo.PromoManager.getPromo().setDocRoot( docRoot);
		var firstName = NC.util.Dom.extractEncodedField( docRoot, NC.widget.ResumeWizard.StrFirstname);
		var lastName = NC.util.Dom.extractEncodedField( docRoot, NC.widget.ResumeWizard.StrLastname);
		var middleName = NC.util.Dom.extractEncodedField( docRoot, NC.widget.ResumeWizard.StrMiddleinitial);
		var fullName = firstName + " " + middleName + " " + lastName;
		var ncScore = NC.util.Dom.extractField( docRoot, NC.widget.ResumeWizard.StrNCScore);
		var explanation = NC.util.Dom.extractField( docRoot, NC.widget.ResumeWizard.StrExplanation);
		var topCategoryName = NC.widget.ResumeUploadManager.getTopCategoryName();
		var topCategoryId = NC.widget.ResumeUploadManager.getTopCategoryId();
		var topCategoryScore = NC.widget.ResumeUploadManager.getTopCategoryScore();
		var managerCategory = parseInt(NC.widget.ResumeUploadManager.getManagerCategory());
		var managerStars = Math.round(NC.widget.ResumeUploadManager.getManagerScore()/20);
		if (ncScore > 70) {
			var updateUrl = './shareMyScore.php?ncscore=' + ncScore + '&resumeid=' + NC.widget.ResumeUploadManager.getResumeId()
							+ '&name='+ fullName;
			NC.GaussAppManager.insertScore(topCategoryName, '2009-12-15', '', managerCategory, managerStars, ncScore, 999, '', 'mygaussbox');
			var updater = new NC.util.AjaxUpdate( 'GET', updateUrl, 'ProfileScoreDiv',  'ProfileScoreDiv', null);
			updater.doUpdate( true);
		}
		else {
			alert( "we don't know what to do here");
		}
	}
	*/
	
	
  }
  
  // constructor
  
  NC.promo.ConnectionSearchPromo = function( promoDivName, promoFrameName) {
		var fnSuperClass = NC.promo.ConnectionSearchPromo.superclass.constructor;
		fnSuperClass.call( this, promoDivName, promoFrameName);
  }
  
  NC.lang.extend(NC.promo.ConnectionSearchPromo, NC.promo.Base, 
  {
 	start: function() {
 		var pars = 'NewJob=1';
		pars = encodeURI( pars);
		this.dialog = new NC.widget.ValidatedModalDialog(
			'js_searchedit_ajax_nl.php?', 
			pars, 
			this.promoDivName, 
			'JobEditForm',
	 		function( updateUrl, updateParms, updateTarget) // submission function
	 		{
	 			updateUrl += '?' + updateParms;
				NC.util.AjaxManager._xmlHttpGet(updateUrl,  updateTarget, false);
	 		}, 
	 		'', 		  // update url
	 		'',			  // update target
	 		function( form, errorDiv) // validation function
	 		{
				return true;	
	 		},
	 		'',
	 		false
		);	
		var dialog = document.getElementById( this.promoFrameName);
		dialog.style.display = 'block';
//		NC.util.Dom.setAbsoluteXY( dialog, [350,450], true);
		this.centerPromoDialog( dialog, 'PageContainerPlainLogo');
		this.dialog.show( 0, 0, 0);	// dialog already positioned -	
		NC.widget.ResumeUploadManager.setupResumeUploadPopup( '', '', this.promoDivName, 
			'ResumeUploadForm', 'UploadIFrame', '', '', this.promoDivName, false, false,
			'./updateResumeInfo.php', this.onInfoAvailable, null, null);	
 	},
 	
 	onInfoAvailable: function(targetName, resultsDivName, docRoot) {
		var email = NC.util.Dom.extractEncodedField( docRoot, NC.widget.ResumeWizard.StrEmail);
		var md5Id = NC.util.Dom.extractField( docRoot, NC.widget.ResumeWizard.StrMd5id);
		var firstName = NC.util.Dom.extractEncodedField( docRoot, NC.widget.ResumeWizard.StrFirstname);
		var lastName = NC.util.Dom.extractEncodedField( docRoot, NC.widget.ResumeWizard.StrLastname);
		var middleName = NC.util.Dom.extractEncodedField( docRoot, NC.widget.ResumeWizard.StrMiddleinitial);
		var fullName = NC.promo.PromoManager.makeFullName( firstName, middleName, lastName);
		var zipCode = NC.util.Dom.extractEncodedField( docRoot, NC.widget.ResumeWizard.StrZipcode);
		var topCategoryScore = NC.util.Dom.extractField( docRoot, NC.widget.ResumeWizard.StrTopCategoryScore);
		var ncScore = NC.util.Dom.extractField( docRoot, NC.widget.ResumeWizard.StrNCScore);
		var autoLoginUrl = './js_doautosignup.php?';
		var autoLoginParms = new Object();
		autoLoginParms['Name'] = fullName;
		autoLoginParms['Email'] = email;
		autoLoginParms['Md5Id'] = md5Id;
		autoLoginParms['ZipCode'] = zipCode;
//			autoLoginParms['Welcome'] = 'welcomeConnectionPromo.php';
//			autoLoginParms['Qs'] = '1';
		autoLoginParms['SelectionId'] = NC.promo.PromoManager.getSelectionId();
/*		
		autoLoginUrl += 'Name=' + fullName;
		autoLoginUrl += '&Email=' + email;
		autoLoginUrl += '&Md5Id=' + md5Id;
		autoLoginUrl += '&ZipCode=' + zipCode;
		autoLoginUrl += '&SelectionId=' + NC.promo.PromoManager.getSelectionId();
*/
		var callback =
		{
		};
		progressDialog = './autoLoginProgress.php';
		NC.widget.MessageManager.showDialog(progressDialog, resultsDivName, callback, false, 400);
		NC.widget.LoginManager.clearLoginFormVisibleFlag();
		NC.widget.LoginManager.doAutoLogin( autoLoginUrl, autoLoginParms, resultsDivName);
	}
 	
	  	
  });
  
  // constructor
  
  NC.promo.ReferrralPromo = function( promoDivName, promoFrameName) {
		var fnSuperClass = NC.promo.ReferrralPromo.superclass.constructor;
		fnSuperClass.call( this, promoDivName, promoFrameName);
  }
  
  NC.lang.extend(NC.promo.ReferrralPromo, NC.promo.Base, 
  {
 	start: function() {
		NC.widget.ResumeUploadManager.setupResumeUploadPopup( '', '', this.promoDivName, 
			'ResumeUploadForm', 'UploadIFrame', '', '', this.promoDivName, false, false,
			'./updateResumeInfo.php', this.onInfoAvailable, null, null);
				
		var r = NC.util.UrlUtil.parameterExists( window.location.search, 'refcode');
		var targetId = NC.util.UrlUtil.parameterExists( window.location.search, 'targetid');
		var referPage = './showReferralPromoPage.php';
		var separator = '?';
		if (r != null) {
			referPage += separator + 'refcode=' + r[1];
			separator = '&';;
		}
		if (targetId != null) {
			referPage += separator + 'targetid=' + targetId[1];
		}
		var updater = new NC.util.AjaxUpdate( 'GET', referPage, this.promoDivName,  this.promoDivName, null);
		updater.doUpdate( true);
		var promoDialog = new NC.widget.ModalDialog("", "", this.promoDivName, "", true);

		var dialogFrame = document.getElementById( this.promoFrameName);
		dialogFrame.style.display = 'block';
		this.centerPromoDialog( dialogFrame, 'PageContainerPlainLogo');
		promoDialog.show( 0, 0, 0);		
 	},
 	
 	onInfoAvailable: function(targetName, resultsDivName, docRoot) {
		var email = NC.util.Dom.extractEncodedField( docRoot, NC.widget.ResumeWizard.StrEmail);
		var md5Id = NC.util.Dom.extractField( docRoot, NC.widget.ResumeWizard.StrMd5id);
		var firstName = NC.util.Dom.extractEncodedField( docRoot, NC.widget.ResumeWizard.StrFirstname);
		var lastName = NC.util.Dom.extractEncodedField( docRoot, NC.widget.ResumeWizard.StrLastname);
		var middleName = NC.util.Dom.extractEncodedField( docRoot, NC.widget.ResumeWizard.StrMiddleinitial);
		var fullName = NC.promo.PromoManager.makeFullName( firstName, middleName, lastName);
		var zipCode = NC.util.Dom.extractEncodedField( docRoot, NC.widget.ResumeWizard.StrZipcode);
		var topCategoryScore = NC.util.Dom.extractField( docRoot, NC.widget.ResumeWizard.StrTopCategoryScore);
		var ncScore = NC.util.Dom.extractField( docRoot, NC.widget.ResumeWizard.StrNCScore);
		var autoLoginUrl = './js_doautosignup.php?';
		var autoLoginParms = new Object();
		autoLoginParms['Name'] = fullName;
		autoLoginParms['Email'] = email;
		autoLoginParms['Md5Id'] = md5Id;
		autoLoginParms['ZipCode'] = zipCode;

		var r = NC.util.UrlUtil.parameterExists( window.location.search, 'refcode');
		var iid = NC.util.UrlUtil.parameterExists( window.location.search, 'iid');
		if (r != null) {
			autoLoginParms['refcode'] = r[1];
			if (iid == null) { // standard referral
				autoLoginParms['ct'] = '23';
				autoLoginParms['Welcome'] = 'welcomeReferral.php';
			}
			else {
				autoLoginParms['ct'] = '5';
				autoLoginParms['cd'] = iid[1];
				autoLoginParms['Welcome'] = 'welcomeInvite.php';
			}
//				autoLoginParms['Qs'] = '1';
		}
		
		var callback =
		{
		};
		progressDialog = './referralLoginProgress.php';
		NC.widget.MessageManager.showDialog(progressDialog, resultsDivName, callback, false, 400);
		NC.widget.LoginManager.clearLoginFormVisibleFlag();
		NC.widget.LoginManager.doAutoLogin( autoLoginUrl, autoLoginParms, resultsDivName);
	}
 	
	  	
  });
  
  // constructor
  
  NC.promo.ScorePromo = function( promoDivName, promoFrameName) {
		var fnSuperClass = NC.promo.ScorePromo.superclass.constructor;
		fnSuperClass.call( this, promoDivName, promoFrameName);
  }
  
  NC.lang.extend(NC.promo.ScorePromo, NC.promo.Base, 
  {
 	start: function() {
		NC.widget.ResumeUploadManager.setupResumeUploadPopup( '', '', this.promoDivName, 
			'ResumeUploadForm', 'UploadIFrame', '', '', this.promoDivName, false, false,
			'./updateResumeInfo.php', this.onInfoAvailable, null, null);
				
		var startPage = './uploadScoreResume.php';
		var updater = new NC.util.AjaxUpdate( 'GET', startPage, this.promoDivName,  this.promoDivName, null);
		updater.doUpdate( true);
		var promoDialog = new NC.widget.ModalDialog("", "", this.promoDivName, "", true);

		var dialogFrame = document.getElementById( this.promoFrameName);
		dialogFrame.style.display = 'block';
		this.centerPromoDialog( dialogFrame, 'PageContainerPlainLogo');
		promoDialog.show( 0, 0, 0);		
 	},
 	
 	onInfoAvailable: function(targetName, resultsDivName, docRoot) {
		var email = NC.util.Dom.extractEncodedField( docRoot, NC.widget.ResumeWizard.StrEmail);
		var md5Id = NC.util.Dom.extractField( docRoot, NC.widget.ResumeWizard.StrMd5id);
		var firstName = NC.util.Dom.extractEncodedField( docRoot, NC.widget.ResumeWizard.StrFirstname);
		var lastName = NC.util.Dom.extractEncodedField( docRoot, NC.widget.ResumeWizard.StrLastname);
		var middleName = NC.util.Dom.extractEncodedField( docRoot, NC.widget.ResumeWizard.StrMiddleinitial);
		var fullName = NC.promo.PromoManager.makeFullName( firstName, middleName, lastName);
		var zipCode = NC.util.Dom.extractEncodedField( docRoot, NC.widget.ResumeWizard.StrZipcode);
		var topCategoryScore = NC.util.Dom.extractField( docRoot, NC.widget.ResumeWizard.StrTopCategoryScore);
		var ncScore = NC.util.Dom.extractField( docRoot, NC.widget.ResumeWizard.StrNCScore);
		var autoLoginUrl = './js_doautosignup.php?';
		var autoLoginParms = new Object();
		autoLoginParms['Name'] = fullName;
		autoLoginParms['Email'] = email;
		autoLoginParms['Md5Id'] = md5Id;
		autoLoginParms['ZipCode'] = zipCode;
//			autoLoginParms['Welcome'] = 'welcomeScore.php';
//			autoLoginParms['Qs'] = '1';
//			autoLoginParms['ct'] = '23';
		
		var callback =
		{
		};
		progressDialog = './referralLoginProgress.php';
		NC.widget.MessageManager.showDialog(progressDialog, resultsDivName, callback, false, 400);
		NC.widget.LoginManager.clearLoginFormVisibleFlag();
		NC.widget.LoginManager.doAutoLogin( autoLoginUrl, autoLoginParms, resultsDivName);
	}
 	
	  	
  });
  
    // constructor
  
  NC.promo.AutoSignupPromo = function( promoDivName, promoFrameName, md5Id) {
		var fnSuperClass = NC.promo.AutoSignupPromo.superclass.constructor;
		fnSuperClass.call( this, promoDivName, promoFrameName);
		this.md5Id = md5Id;
  }
  
  NC.lang.extend(NC.promo.AutoSignupPromo, NC.promo.Base, 
  {
 	start: function() {
		var targetName = '';
		var resultsDivName = this.promoDivName;
		NC.widget.ResumeUploadManager.getResumeInfoByMd5Id( this.md5Id, targetName, resultsDivName, this.onInfoAvailable);
 	},
 	
 	onInfoAvailable: function(targetName, resultsDivName, docRoot) {
		var email = NC.util.Dom.extractEncodedField( docRoot, NC.widget.ResumeWizard.StrEmail);
		var md5Id = NC.util.Dom.extractField( docRoot, NC.widget.ResumeWizard.StrMd5id);
		var firstName = NC.util.Dom.extractEncodedField( docRoot, NC.widget.ResumeWizard.StrFirstname);
		var lastName = NC.util.Dom.extractEncodedField( docRoot, NC.widget.ResumeWizard.StrLastname);
		var middleName = NC.util.Dom.extractEncodedField( docRoot, NC.widget.ResumeWizard.StrMiddleinitial);
		var fullName = NC.promo.PromoManager.makeFullName( firstName, middleName, lastName);
		var zipCode = NC.util.Dom.extractEncodedField( docRoot, NC.widget.ResumeWizard.StrZipcode);
		var topCategoryScore = NC.util.Dom.extractField( docRoot, NC.widget.ResumeWizard.StrTopCategoryScore);
		var ncScore = NC.util.Dom.extractField( docRoot, NC.widget.ResumeWizard.StrNCScore);
		var autoLoginUrl = './js_doautosignup.php?';
		var autoLoginParms = new Object();
		autoLoginParms['Name'] = fullName;
		autoLoginParms['Email'] = email;
		autoLoginParms['Md5Id'] = md5Id;
		autoLoginParms['ZipCode'] = zipCode;
//			autoLoginParms['Welcome'] = 'welcomeScore.php';
//			autoLoginParms['Qs'] = '1';
//			autoLoginParms['ct'] = '23';
		
		var callback =
		{
		};
		progressDialog = './referralLoginProgress.php';
		NC.widget.MessageManager.showDialog(progressDialog, resultsDivName, callback, false, 400);
		NC.widget.LoginManager.clearLoginFormVisibleFlag();
		NC.widget.LoginManager.doAutoLogin( autoLoginUrl, autoLoginParms, resultsDivName);
	}
 	
	  	
  });
  
    // constructor
  
  NC.promo.FacebookLoginPromo = function( promoDivName, promoFrameName) {
		var fnSuperClass = NC.promo.FacebookLoginPromo.superclass.constructor;
		fnSuperClass.call( this, promoDivName, promoFrameName);
  }
  
  NC.lang.extend(NC.promo.FacebookLoginPromo, NC.promo.Base, 
  {
 	start: function() {
		var targetName = '';
		var resultsDivName = this.promoDivName;
		var autoLoginUrl = './js_doautosignup.php?';
		var autoLoginParms = new Object();
		autoLoginParms['FbLogin'] = '1';
		
		var callback =
		{
		};
		progressDialog = './facebookLoginProgress.php';
		NC.widget.MessageManager.showDialog(progressDialog, resultsDivName, callback, false, 400);
		NC.widget.LoginManager.clearLoginFormVisibleFlag();
		NC.widget.LoginManager.doAutoLogin( autoLoginUrl, autoLoginParms, resultsDivName);
 	} 	
	  	
  });
  
    // constructor
  
  NC.promo.EmployerInfoPromo = function( promoDivName, promoFrameName) {
		var fnSuperClass = NC.promo.EmployerInfoPromo.superclass.constructor;
		fnSuperClass.call( this, promoDivName, promoFrameName);
  }
  
  NC.lang.extend(NC.promo.EmployerInfoPromo, NC.promo.Base, 
  {
 	start: function() {
 		var pars = '';
		this.dialog = new NC.widget.ValidatedModalDialog(
			'getEmployerInfoForm.php?', 
			pars, 
			this.promoDivName, 
			'EmployerEnrollmentForm',
	 		function( updateUrl, updateParms, updateTarget) // submission function
	 		{
	 			updateUrl += '?' + updateParms;
				NC.util.AjaxManager._xmlHttpGet(updateUrl,  updateTarget, false);
	 		}, 
	 		'', 		  // update url
	 		'',			  // update target
	 		function( form, errorDiv) // validation function
	 		{
				return true;	
	 		},
	 		'',
	 		false
		);	
		var dialog = document.getElementById( this.promoFrameName);
		dialog.style.display = 'block';
//		NC.util.Dom.setAbsoluteXY( dialog, [350,450], true);
		this.centerPromoDialog( dialog, 'PageContainerPlainLogo');
		this.dialog.show( 0, 0, 0);	// dialog already positioned -	
 	},
 	
 	onInfoAvailable: function(targetName, resultsDivName, docRoot) {
	}
 	
	  	
  });
  
    // constructor
  
  NC.promo.FacebookProfileAnalyzerPromo = function( appName, promoDivName, promoFrameName) {
		var fnSuperClass = NC.promo.FacebookProfileAnalyzerPromo.superclass.constructor;
		fnSuperClass.call( this, promoDivName, promoFrameName);
		this.appName = appName;
  }
  
 NC.lang.extend(NC.promo.FacebookProfileAnalyzerPromo, NC.promo.Base, 
  {
 	start: function() {
				// first show progress bar
				var progressCallback =
				{
	  				success:function( o) {
						var targetDiv = document.getElementById( NC.promo.PromoManager.getPromo().getPromoDivName());
						targetDiv.innerHTML = o.responseText;
						var callback =
						{
								success:function( o) {
									NC.widget.ResumeUploadManager.processEncodedProfile( o.responseText);
										var docRoot = NC.widget.ResumeUploadManager.getDomRoot();
										NC.promo.PromoManager.getPromo().setDocRoot( docRoot);
										var ncScore = NC.util.Dom.extractField( docRoot, NC.widget.ResumeWizard.StrNCScore);
										var offers = NC.offer.OfferManager.constructOffer( this.promoDivName,docRoot, NC.offer.OfferManager.SourceFacebook);
										NC.offer.OfferManager.setOffers( offers);
										NC.offer.OfferManager.startNextOffer();
								},
								failure:function( o) {
									// some global notification of failure
									alert( "A System Error has occurred. Please contact customersupport@nimblecat.com");
								},
							scope: this    				
						};
						var updateUrl = './processFacebookProfile.php?app=' + this.appName;
						var connection = new NC.util.AjaxConnection( 'GET', updateUrl, null);
						connection.executeMethod( callback);
	  				},
	  				failure:function( o) {
	  				},
					scope: this    				
				};
				var connection = new NC.util.AjaxConnection( 'GET', './progress.php', null);
				connection.executeMethod( progressCallback);
  }	
	  	
  });
  
  NC.promo.FacebookAuthorizationPromo = function( appName, promoDivName, promoFrameName) {
		var fnSuperClass = NC.promo.FacebookAuthorizationPromo.superclass.constructor;
		fnSuperClass.call( this, promoDivName, promoFrameName);
		this.appName = appName;
  }
  
 NC.lang.extend(NC.promo.FacebookAuthorizationPromo, NC.promo.Base, 
  {
 	start: function() {
		offers = NC.offer.OfferManager.constructFacebookAuthorizationOffer( this.promoDivName, null, null, this.appName);						
		NC.offer.OfferManager.setOffers( offers);
		NC.offer.OfferManager.startNextOffer();
  	}	
	  	
  });
  
  
    // constructor
  
  NC.promo.ScoreWoSignupPromo = function( promoDivName, promoFrameName) {
		var fnSuperClass = NC.promo.ScoreWoSignupPromo.superclass.constructor;
		fnSuperClass.call( this, promoDivName, promoFrameName);
  }
  
  NC.lang.extend(NC.promo.ScoreWoSignupPromo, NC.promo.Base, 
  {
 	start: function() {
		NC.widget.ResumeUploadManager.setupResumeUploadPopup( '', '', this.promoDivName, 
			'ResumeUploadForm', 'UploadIFrame', 'ProgressDiv', '<img src="../imagesv2/progressbar.gif">', this.promoDivName, false, false,
			'./updateResumeInfo.php', this.shareScore, null, null);
				
		var startPage = './uploadScoreResume1.php';
		var updater = new NC.util.AjaxUpdate( 'GET', startPage, this.promoDivName,  this.promoDivName, null);
		updater.doUpdate( true);
		var promoDialog = new NC.widget.ModalDialog("", "", this.promoDivName, "", true);

		var dialogFrame = document.getElementById( this.promoFrameName);
		if (dialogFrame != null) {
			dialogFrame.style.display = 'block';
			this.centerPromoDialog(dialogFrame, 'PageContainerPlainLogo');
			promoDialog.show(0, 0, 0);
		}
 	},
	
	shareScore: function(targetName, resultsDivName, docRoot) {
		NC.promo.PromoManager.getPromo().setDocRoot( docRoot);
		var ncScore = NC.util.Dom.extractField( docRoot, NC.widget.ResumeWizard.StrNCScore);
		var offers = NC.offer.OfferManager.constructOffer( resultsDivName,docRoot, NC.offer.OfferManager.SourceResume);
		NC.offer.OfferManager.setOffers( offers);
		NC.offer.OfferManager.startNextOffer();
	}
  });
  
      // constructor
  
  NC.promo.LinkUploadPromo = function( promoDivName, promoFrameName) {
		var fnSuperClass = NC.promo.LinkUploadPromo.superclass.constructor;
		fnSuperClass.call( this, promoDivName, promoFrameName);
  }
  
  NC.lang.extend(NC.promo.LinkUploadPromo, NC.promo.Base, 
  {
 	start: function() {
		var pars = '';
		var formSource = './uploadResumeFromLink.php';
		this.linkUploadDialog = new NC.widget.ValidatedModalDialog(
			formSource, 
			pars, 
			this.promoDivName, 
			'ResumeLinkUploadForm',
	 		function( updateUrl, updateParms, updateTarget) // submission function
	 		{
				// first show progress bar
				var progressCallback =
				{
	  				success:function( o) {
						var targetDiv = document.getElementById( this.target);
						targetDiv.innerHTML = o.responseText;
						var callback =
						{
			  				success:function( o) {
								// now process uploaded profile
								NC.widget.ResumeUploadManager.processEncodedProfile( o.responseText);
								var docRoot = NC.widget.ResumeUploadManager.getDomRoot();
								NC.promo.PromoManager.getPromo().setDocRoot( docRoot);
								var categories = NC.offer.OfferManager.getCategories(docRoot);
								var ncScore = NC.util.Dom.extractField( docRoot, NC.widget.ResumeWizard.StrNCScore);
								var offers = NC.offer.OfferManager.constructOffer( this.target,docRoot, NC.offer.OfferManager.SourceLinkedIn);
								NC.offer.OfferManager.setOffers( offers);
								NC.offer.OfferManager.startNextOffer();
			  				},
			  				failure:function( o) {
			  				},
							scope: this    				
						};
						updateUrl += '?' + updateParms;
						var connection = new NC.util.AjaxConnection( 'GET', updateUrl, null);
						connection.executeMethod( callback);
	  				},
	  				failure:function( o) {
	  				},
					scope: this    				
				};
				var connection = new NC.util.AjaxConnection( 'GET', 'progress.php', null);
				connection.executeMethod( progressCallback);
	 		}, 
	 		'./scoreResume.php', // update url
	 		'', // update target
	 		function( form, errorDiv) // validation function
	 		{
	 			var rVal = true;
	 			var errorMessage = '';
				var controls = form.elements;
				for (var ci = 0; ci < controls.length; ci++) {
					if (controls[ci].name == 'ResumeFileLink') {
						if (NC.util.Dom.getValue(controls[ci]).length <= 0) {
							rVal = false;
							if (errorMessage.length > 0) {
								errorMessage += '<br>';
							}
							errorMessage += 'Please enter the url where we can find your profile';
						}
					}
				}
				if (!rVal) {
					var element = document.getElementById(errorDiv);
					element.innerHTML = errorMessage;
					element.style.display = 'block';
				}
				return rVal;	
	 		},
	 		'NCError',
	 		false // not a popup
		);	
		this.linkUploadDialog.show( 0, 0, 0);	// not a popup - size does not matter
 	},
	
	uploadFromLink: function() {
		this.linkUploadDialog.post();
	}
  });
  
      // constructor
  
  NC.promo.AcceptInvitePromo = function( promoDivName, promoFrameName, referralCode, invitationId, resumeId, purpose) {
		var fnSuperClass = NC.promo.AcceptInvitePromo.superclass.constructor;
		fnSuperClass.call( this, promoDivName, promoFrameName);
		this.referralCode = referralCode;
		this.invitationId = invitationId;
		this.resumeId = resumeId;
		this.purpose = purpose;
  }
  
  NC.lang.extend(NC.promo.AcceptInvitePromo, NC.promo.Base, 
  {
 	start: function() {
		var targetName = '';
		var resultsDivName = this.promoDivName;
		NC.widget.ResumeUploadManager.getResumeInfoByResumeId( this.resumeId, targetName, resultsDivName, this.onInfoAvailable, this);
 	},
 	
 	onInfoAvailable: function(targetName, resultsDivName, docRoot, promo) {
		var email = NC.util.Dom.extractEncodedField( docRoot, NC.widget.ResumeWizard.StrEmail);
		var md5Id = NC.util.Dom.extractField( docRoot, NC.widget.ResumeWizard.StrMd5id);
		var firstName = NC.util.Dom.extractEncodedField( docRoot, NC.widget.ResumeWizard.StrFirstname);
		var lastName = NC.util.Dom.extractEncodedField( docRoot, NC.widget.ResumeWizard.StrLastname);
		var middleName = NC.util.Dom.extractEncodedField( docRoot, NC.widget.ResumeWizard.StrMiddleinitial);
		var fullName = NC.promo.PromoManager.makeFullName( firstName, middleName, lastName);
		var zipCode = NC.util.Dom.extractEncodedField( docRoot, NC.widget.ResumeWizard.StrZipcode);
		var topCategoryScore = NC.util.Dom.extractField( docRoot, NC.widget.ResumeWizard.StrTopCategoryScore);
		var ncScore = NC.util.Dom.extractField( docRoot, NC.widget.ResumeWizard.StrNCScore);
		var autoLoginUrl = './js_doautosignup.php?';
		var autoLoginParms = new Object();
		autoLoginParms['Name'] = fullName;
		autoLoginParms['Email'] = email;
		autoLoginParms['Md5Id'] = md5Id;
		autoLoginParms['ZipCode'] = zipCode;
		autoLoginParms['InvitationId'] = promo.invitationId;
		autoLoginParms['ReferralCode'] = promo.referralCode;
		autoLoginParms['Purpose'] = promo.purpose;
//			autoLoginParms['Welcome'] = 'welcomeScore.php';
//			autoLoginParms['Qs'] = '1';
//			autoLoginParms['ct'] = '23';
		
		var callback =
		{
		};
		progressDialog = './inviteLoginProgress.php';
		NC.widget.MessageManager.showDialog(progressDialog, resultsDivName, callback, false, 400);
		NC.widget.LoginManager.clearLoginFormVisibleFlag();
		NC.widget.LoginManager.doAutoLogin( autoLoginUrl, autoLoginParms, resultsDivName);
	}
 	
	  	
  });
  
    // constructor
  
  NC.promo.PeopleSearchPromo = function( promoDivName, promoFrameName, style) {
		var fnSuperClass = NC.promo.PeopleSearchPromo.superclass.constructor;
		fnSuperClass.call( this, promoDivName, promoFrameName);
		this.style = style; // 0: desktop; 1: mobile
  }
  
  NC.lang.extend(NC.promo.PeopleSearchPromo, NC.promo.Base, 
  {
 	start: function(nResults) {
		offers = NC.offer.OfferManager.constructPeopleSearchOffer( this.promoDivName, null, null, this.style);						
		NC.offer.OfferManager.setOffers( offers);
		NC.offer.OfferManager.startNextOffer();
 	}
  });

  
  
  
  // constructor

 NC.offer.Base = function( displayDivName, docRoot, source ) {
	this.displayDivName = displayDivName;
	this.docRoot = docRoot;
	this.source = source;
	this.url = null; // set later 
 }

NC.offer.Base.prototype = {

 	show: function() {
		var updater = new NC.util.AjaxUpdate( 'GET', this.url, this.displayDivName,  this.displayDivName, null);
		updater.doUpdate( true);
 	} 	
}

NC.offer.ShareScoreOffer = function( displayDivName, docRoot, source) {
	var fnSuperClass = NC.offer.ShareScoreOffer.superclass.constructor;
	fnSuperClass.call( this, displayDivName, docRoot, source);
}

NC.lang.extend(NC.offer.ShareScoreOffer, NC.offer.Base, 
{
	
	show: function() {
 		var firstName = NC.util.Dom.extractEncodedField( this.docRoot, NC.widget.ResumeWizard.StrFirstname);
		var lastName = NC.util.Dom.extractEncodedField( this.docRoot, NC.widget.ResumeWizard.StrLastname);
		var middleName = NC.util.Dom.extractEncodedField( this.docRoot, NC.widget.ResumeWizard.StrMiddleinitial);
		var fullName = NC.promo.PromoManager.makeFullName( firstName, middleName, lastName);
		var ncScore = NC.util.Dom.extractField( this.docRoot, NC.widget.ResumeWizard.StrNCScore);
		var explanation = NC.util.Dom.extractField( this.docRoot, NC.widget.ResumeWizard.StrExplanation);
		var topCategoryName = NC.widget.ResumeUploadManager.getTopCategoryName();
		var topCategoryId = NC.widget.ResumeUploadManager.getTopCategoryId();
		var topCategoryScore = NC.widget.ResumeUploadManager.getTopCategoryScore();
		var managerCategory = parseInt(NC.widget.ResumeUploadManager.getManagerCategory());
		var managerScore = NC.widget.ResumeUploadManager.getManagerScore();
		var managerStars = Math.round(NC.widget.ResumeUploadManager.getManagerScore()/20);
		var resumeId = NC.widget.ResumeUploadManager.getResumeId();
		NC.GaussAppManager.insertScore(topCategoryName, '2009-12-15', '', managerCategory, managerStars, ncScore, 999, '', 'mygaussbox');
		var content = '<h2 class="orange">Your NimbleCat Score is ' + ncScore + '. </h2>';
		content += '<p>' +
				   '	We just scored your ' + NC.offer.OfferManager.getSourceString( this.source) + '. ' +
				   '</p>' +
				   '<p>';
		if (ncScore >= 90) {
			content += 'Congratulations! ';
		}
		content += explanation;
		content += '</p>';
		content += '<p>' +
				   'We dropped an orange disk into the bar chart to show you how your profile compares with ' +
				   'the thousands of profiles we grade everyday. Check the "Your score" box for more details. ' + 
				   '</p> ' + 
				   '<p>Share your score:</p> ';
		var facebookShare = new NC.widget.ShareScoreOnFacebook(resumeId, managerScore, ncScore, topCategoryName, NC.SiteRoot);
		var twitterShare = new NC.widget.ShareScoreOnTwitter(resumeId, managerScore, ncScore, topCategoryName, NC.SiteRoot);
		var linkedInShare = new NC.widget.ShareScoreOnLinkedIn(resumeId, managerScore, ncScore, topCategoryName, NC.SiteRoot);
		content += facebookShare.makeFacebookShareImage(NC.widget.Share.LargeImage);
		content += linkedInShare.makeLinkedInShareImage(NC.widget.Share.LargeImage);
		content += twitterShare.makeTwitterShareImage(NC.widget.Share.LargeImage);
		content += '</p>';
		content += '				<p>';
		// add the next offer button
		content += '<div class="skipfornow">';
		content += '<a href="#" onclick="javascript:NC.offer.OfferManager.startNextOffer()">Skip for now</a>';
		content += '</div>';
		var displayDiv = document.getElementById( this.displayDivName);
		displayDiv.innerHTML = content;
		gaPageTracker._trackEvent(NC.promo.PromoManager.getCpid(), "Click", "ShareScoreOffer"); 
	}

});

NC.offer.JobAlertOffer = function( displayDivName, docRoot, source) {
	var fnSuperClass = NC.offer.JobAlertOffer.superclass.constructor;
	fnSuperClass.call( this, displayDivName, docRoot, source);
}

NC.lang.extend(NC.offer.JobAlertOffer, NC.offer.Base, 
{
	
	show: function() {
		var content = '';
		var firstName = NC.util.StringUtil.capitalizeWord(NC.util.Dom.extractEncodedField( this.docRoot, NC.widget.ResumeWizard.StrFirstname));
		var fullName = NC.util.Dom.extractEncodedField( this.docRoot, NC.widget.ResumeWizard.StrFullname);
		var email = NC.util.Dom.extractEncodedField( this.docRoot, NC.widget.ResumeWizard.StrEmail);
		var zipCode = NC.util.Dom.extractEncodedField( this.docRoot, NC.widget.ResumeWizard.StrZipcode);
		var randomZipCode = NC.util.Dom.extractEncodedField( this.docRoot, NC.widget.ResumeWizard.StrRandomzipcode);
		if (zipCode == null || zipCode.length == 0) {
			zipCode = randomZipCode;
		}
		var randomCity = '';
		var randomState = '';
		if (randomZipCode.length > 0) {
			randomCity = NC.util.Dom.extractEncodedField( this.docRoot, NC.widget.ResumeWizard.StrRandomcity);
			randomState = NC.util.Dom.extractEncodedField( this.docRoot, NC.widget.ResumeWizard.StrRandomstate);
		}
		var totalJobs = NC.util.Dom.extractField( this.docRoot, NC.widget.ResumeWizard.StrTotaljobs);
		var totalJobsForCategory = NC.util.Dom.extractField( this.docRoot, NC.widget.ResumeWizard.StrTotaljobsforcategory);
		var topCategoryName = NC.util.Dom.extractField( this.docRoot, NC.widget.ResumeWizard.StrTopcategorylabel);
		
		var jobs = this.docRoot.getElementsByTagName(NC.widget.ResumeWizard.StrJobinfo);
		if (jobs.getLength() > 0) {
			if (randomZipCode.length >= 5) {
				content += '<h2 class="orange">NimbleCat would select these jobs for you if you lived in ' + randomCity + ', ' + randomState + '</h2>';
			}
			else {
				content += '<h2 class="orange">NimbleCat selected these jobs for you</h2>';
			}
			for (ji = 0; ji < Math.min(3, jobs.getLength()); ji++) {
				var job = jobs.item(ji);
				var jobValue = decode64( job.getFirstChild().getNodeValue());
				content += '<h3>' + jobValue + '</h3>' ;
			}
			content += '<p>These jobs were selected from <b>' + totalJobs + '</b> jobs scanned in the last 24 hours. <b>' +
					   totalJobsForCategory + '</b> jobs for <b>' + topCategoryName + '</b> were found within 50 miles of  zip code ' +
					   zipCode + '.</p>';
			if (randomZipCode.length > 0) {
				content += '<p style="font-size:9px">This zipcode was selected from the top ten metro areas for jobs in the US because we could not determine a zip code'
						+ ' from your social profile or resume.';
			}
			content += '</p>';
			content += '<h3>';
			var userState = NC.widget.StateManager.JOBUSER  | 
						    NC.widget.StateManager.UPLOADEDRESUME | 
							NC.widget.StateManager.SELECTJOBLOCATION |
							NC.widget.StateManager.SELECTJOBCATEGORY;
			switch( this.source) {
				case NC.offer.OfferManager.SourceFacebook:
					userState |= NC.widget.StateManager.FACEBOOKUSER;
					break;
				
				case NC.offer.OfferManager.SourceLinkedIn:
					userState |= NC.widget.StateManager.LINKEDINUSER;
					break;
					
			}
			content += '<a href="javascript:NC.promo.PromoManager.getPromo().doAutoLogin(\'SignupJob\', ' + userState + ')">Create your account now</a> to see more jobs daily!';
			content += '</h3>';
			// add the next offer button
			content += '<div class="skipfornow">';
			content += '<a href="#" onclick="javascript:NC.offer.OfferManager.startNextOffer()">Skip for now</a>';
			content += '</div>';
			}
		else {
			content = "No jobs were found";
		}
		var displayDiv = document.getElementById( this.displayDivName);
		displayDiv.innerHTML = content;
		gaPageTracker._trackEvent(NC.promo.PromoManager.getCpid(), "Click", "MatchedJobsOffer"); 
	
	}

});

NC.offer.ClosingGoodOffer = function( displayDivName, docRoot, source) {
	var fnSuperClass = NC.offer.ClosingGoodOffer.superclass.constructor;
	fnSuperClass.call( this, displayDivName, docRoot, source);
}

NC.lang.extend(NC.offer.ClosingGoodOffer, NC.offer.Base, 
{
	
	show: function() {
		this.url = './closingGoodScoreOffer.php';
        NC.offer.ClosingGoodOffer.superclass.show.call(this);
		gaPageTracker._trackEvent(NC.promo.PromoManager.getCpid(), "Click", "ClosingGoodOffer"); 
	}
});

NC.offer.ClosingBadOffer = function( displayDivName, docRoot, source) {
	var fnSuperClass = NC.offer.ClosingBadOffer.superclass.constructor;
	fnSuperClass.call( this, displayDivName, docRoot, source);
}

NC.lang.extend(NC.offer.ClosingBadOffer, NC.offer.Base, 
{
	
	show: function() {
		this.url = './closingBadScoreOffer.php';
        NC.offer.ClosingGoodOffer.superclass.show.call(this);
		gaPageTracker._trackEvent(NC.promo.PromoManager.getCpid(), "Click", "ClosingBadOffer"); 
	}
});

NC.offer.SelectCategoryOffer = function( displayDivName, docRoot, source, categories, first) {
	var fnSuperClass = NC.offer.SelectCategoryOffer.superclass.constructor;
	fnSuperClass.call( this, displayDivName, docRoot, source);
	this.categories = categories;
	this.first = first;
}

NC.lang.extend(NC.offer.SelectCategoryOffer, NC.offer.Base, 
{
	
	show: function() {
		var content = '<h2 class="orange">Please help us improve NimbleCat</h2>';
		if (this.first) {
			content += '<p>Mon dieu! We\'re not sure we got your primary profession right. Is it one of these? If not, please tell us.';
		}
		else {
			content += '<p>We may not have your primary profession right. Is it one of these? If not, please tell us.';
		}
		content += '<form id="SelectCategoryForm" name="SelectCategoryForm" method="post">' ;
		content += '<input type="hidden" name="ResumeId" value="' + NC.widget.ResumeUploadManager.getResumeId() + '" >';

		if (this.categories.length > 0) {
			for (var i = 0; i < this.categories.length; i++) {
				var ocat = this.categories[i];
				content += '<p>';
				content += '<input type="radio" name="CategoryId" value="' + ocat.id + '" >&nbsp;';
				content += ocat.name + '</p>';
			}
			content += '<p>Other&nbsp;';
			content += '<input type="input" name="NewCategory" value = "" length="20">';
			content += '</p>';
			content += '<p><input type="button" onclick="NC.offer.OfferManager.updateCategory(\'SelectCategoryForm\');" class="ncbutton" name="SelectCategory" id="SelectCategory" value="Go"><p>';
			content += '</form>';
		}
		else {
			content += '</p>';
		}
		content += '<div class="skipfornow">';
		content += '<a href="#" onclick="javascript:NC.offer.OfferManager.startNextOffer()">Skip for now</a>';
		content += '</div>';
		var displayDiv = document.getElementById( this.displayDivName);
		displayDiv.innerHTML = content;
		gaPageTracker._trackEvent(NC.promo.PromoManager.getCpid(), "Click", "SelectCategoryOffer"); 
	}
});

NC.offer.ClosingNoCategoryOffer = function( displayDivName, docRoot, source) {
	var fnSuperClass = NC.offer.ClosingNoCategoryOffer.superclass.constructor;
	fnSuperClass.call( this, displayDivName, docRoot, source);
}

NC.lang.extend(NC.offer.ClosingNoCategoryOffer, NC.offer.Base, 
{
	
	show: function() {
		this.url = './closingNoCategoryOffer.php';
        NC.offer.ClosingGoodOffer.superclass.show.call(this);
		gaPageTracker._trackEvent(NC.promo.PromoManager.getCpid(), "Click", "ClosingNoCategoryOffer"); 
	}
});

NC.offer.ImproveScoreOffer = function( displayDivName, docRoot, source, recommendation) {
	var fnSuperClass = NC.offer.ImproveScoreOffer.superclass.constructor;
	fnSuperClass.call( this, displayDivName, docRoot, source);
	this.recommendation = recommendation;
}

NC.lang.extend(NC.offer.ImproveScoreOffer, NC.offer.Base, 
{
	
	show: function() {
		var content = ''
		this.recommendation = '<ul>' + this.recommendation + '</ul>';
		var content = '<h2 class="orange">You can get a higher score</h2>';
		var reco = this.recommendation.replace('[[source]]', NC.offer.OfferManager.getSourceString( this.source));
		var callToAction = '<p>NimbleCat has powerful career tools that you can use to analyse and fine-tune your [[source]].</p>';
		callToAction = callToAction.replace('[[source]]', NC.offer.OfferManager.getSourceString( this.source));
		reco = reco.replace('[[source]]', NC.offer.OfferManager.getSourceString( this.source));
		content += '<p>' + 'We think you can get a higher score:</p>'
		content += reco;
		content += callToAction;
			var userState = NC.widget.StateManager.GRADEUSER  | NC.widget.StateManager.UPLOADEDRESUME;
			switch( this.source) {
				case NC.offer.OfferManager.SourceFacebook:
					userState |= NC.widget.StateManager.FACEBOOKUSER;
					break;
				
				case NC.offer.OfferManager.SourceLinkedIn:
					userState |= NC.widget.StateManager.LINKEDINUSER;
					break;
					
			}
		content += ' <h3><a href="javascript:NC.promo.PromoManager.getPromo().doAutoLogin(\'SignupImproveScore\', ' +  userState + ')">Create your account now</a></h3>';
		content += '<div class="skipfornow">';
		content += '<a href="#" onclick="javascript:NC.offer.OfferManager.startNextOffer()">Skip for now</a>';
		content += '</div>';
		var displayDiv = document.getElementById( this.displayDivName);
		displayDiv.innerHTML = content;
		gaPageTracker._trackEvent(NC.promo.PromoManager.getCpid(), "Click", "ImproveScoreOffer"); 
	}
});



NC.offer.JoinNimbleCatOffer = function( displayDivName, docRoot, source) {
	var fnSuperClass = NC.offer.JoinNimbleCatOffer.superclass.constructor;
	fnSuperClass.call( this, displayDivName, docRoot, source);
}

NC.lang.extend(NC.offer.JoinNimbleCatOffer, NC.offer.Base, 
{
	
	show: function() {
		this.url = './joinNimbleCatOffer.php?source=' + this.source;
        NC.offer.JoinNimbleCatOffer.superclass.show.call(this);
		gaPageTracker._trackEvent(NC.promo.PromoManager.getCpid(), "Click", "GeneralCreateAccountOffer"); 
	}
});

NC.offer.JoinNimbleCatBadScoreOffer = function( displayDivName, docRoot, source) {
	var fnSuperClass = NC.offer.JoinNimbleCatBadScoreOffer.superclass.constructor;
	fnSuperClass.call( this, displayDivName, docRoot, source);
}

NC.lang.extend(NC.offer.JoinNimbleCatBadScoreOffer, NC.offer.Base, 
{
	
	show: function() {
		this.url = './joinNimbleCatOfferBadScore.php?source=' + this.source;
        NC.offer.JoinNimbleCatBadScoreOffer.superclass.show.call(this);
		gaPageTracker._trackEvent(NC.promo.PromoManager.getCpid(), "Click", "CreateAccountBadScoreOffer"); 
	}
});

NC.offer.EmptyProfileOffer = function( displayDivName, docRoot, source) {
	var fnSuperClass = NC.offer.EmptyProfileOffer.superclass.constructor;
	fnSuperClass.call( this, displayDivName, docRoot, source);
}

NC.lang.extend(NC.offer.EmptyProfileOffer, NC.offer.Base, 
{
	
	show: function() {
		this.url = './emptyProfileOffer.php?source=' + this.source;
        NC.offer.EmptyProfileOffer.superclass.show.call(this);
		gaPageTracker._trackEvent(NC.promo.PromoManager.getCpid(), "Click", "CreateAccountEmptyProfileOffer"); 
	}
});

NC.offer.BadParseOffer = function( displayDivName, docRoot, source) {
	var fnSuperClass = NC.offer.BadParseOffer.superclass.constructor;
	fnSuperClass.call( this, displayDivName, docRoot, source);
}

NC.lang.extend(NC.offer.BadParseOffer, NC.offer.Base, 
{
	
	show: function() {
		this.url = './badParseOffer.php?source=' + this.source;
        NC.offer.BadParseOffer.superclass.show.call(this);
		gaPageTracker._trackEvent(NC.promo.PromoManager.getCpid(), "Click", "CreateAccountBadScoreOffer"); 
	}
});

NC.offer.PeopleSearchOpeningOffer = function( displayDivName, docRoot, source, style) {
	var fnSuperClass = NC.offer.PeopleSearchOpeningOffer.superclass.constructor;
	fnSuperClass.call( this, displayDivName, docRoot, source);
	this.style = style;
}

NC.lang.extend(NC.offer.PeopleSearchOpeningOffer, NC.offer.Base, 
{
	
	show: function() {
		if (this.style == 0) {
			this.url = './viewMoreSearchResults.php';
			gaPageTracker._trackEvent(NC.promo.PromoManager.getCpid(), "Click", "PeopleSearchOffer"); 
		}
		else {
			this.url = './viewMoreSearchResultsMobile.php';
			gaPageTracker._trackEvent(NC.promo.PromoManager.getCpid(), "Click", "PeopleSearchOfferMobile"); 
		}
        NC.offer.PeopleSearchOpeningOffer.superclass.show.call(this);
	}
});

NC.offer.FacebookBookmarkOffer = function( displayDivName, docRoot, source) {
	var fnSuperClass = NC.offer.FacebookBookmarkOffer.superclass.constructor;
	fnSuperClass.call( this, displayDivName, docRoot, source);
}

NC.lang.extend(NC.offer.FacebookBookmarkOffer, NC.offer.Base, 
{
	
	show: function() {
		this.url = './facebookBookmarkOffer.php';
        NC.offer.FacebookBookmarkOffer.superclass.show.call(this);
		gaPageTracker._trackEvent(NC.promo.PromoManager.getCpid(), "Click", "FacebookBookmarkOffer"); 
	}
});

NC.offer.FacebookInviteFriendsOffer = function( displayDivName, docRoot, source) {
	var fnSuperClass = NC.offer.FacebookInviteFriendsOffer.superclass.constructor;
	fnSuperClass.call( this, displayDivName, docRoot, source);
}

NC.lang.extend(NC.offer.FacebookInviteFriendsOffer, NC.offer.Base, 
{
	
	show: function() {
		// get dialog display and show the invite friends dialog in it
		var dialog = document.getElementById( 'FBFormWrapper');
		dialog.style.width = '760px';
		dialog.style.height = '800px';
		dialog.style.display = 'block';
		NC.util.Facebook.insertInviteFriendsDialog( 'FBFormWrapper');
		gaPageTracker._trackEvent(NC.promo.PromoManager.getCpid(), "Click", "FacebookInviteFriendsOffer"); 
	}
});

NC.offer.FacebookAuthorizationOffer = function( displayDivName, docRoot, source, appName) {
	var fnSuperClass = NC.offer.FacebookAuthorizationOffer.superclass.constructor;
	fnSuperClass.call( this, displayDivName, docRoot, source);
	this.appName = appName;
}

NC.lang.extend(NC.offer.FacebookAuthorizationOffer, NC.offer.Base, 
{
	
	show: function() {
		alert( "FacebookAuthorizationOffer.show()");
		this.url = './facebookAuthorizationOffer.php';
        NC.offer.FacebookAuthorizationOffer.superclass.show.call(this);
 		/*
		FB.Connect.requireSession(
		function() {
			alert( "require session succeeded");
			NC.promo.PromoManager.startFacebookPromo('ncscore');			
		},
		function() {
			alert( "require session was cancelled");
		},
		true
		);
		*/
		/*
		var api = new FB.ApiClient('2be2db0572d68ea7c662d4f1194372c3', '/xd_receiver.htm', null);
		        
		//require user to login
		api.requireLogin(function(exception) {
		    // Example of calling API in non-batched mode.
		    //In non-batched mode, a callback function as last argument
		    api.friends_get(function(result, exception) {
		      Debug.assert(!exception);
		      Debug.dump(result, 'friendsResult from non-batch execution ');  
		    });    
		});
		*/
	}
});


 // offer manager
 
 (function () {

 NC.offer.OfferManager = function() {
	/* private variables and methods */
 	var offers = null; // array of offers
 	var currentOffer = null;
	var recommendation = '';
	var goodScore = true;
	var canImprove = false;
	var unknownCategory = false;
	var facebookConnected = false;
	var hint = this.HintScore;
 	
 	 	return {
			
			HintNone: 0,
			HintScore: 1,
			HintJobs: 2,
			
			setHint: function( hintValue) {
				hint = hintValue;
			},
			
			getHint: function( ) {
				return hint;
			},
 	 		
			SourceResume:	1,

			SourceFacebook: 2,
			
			SourceLinkedIn: 3,
			 
 	 		/* public methods */
			
			getSourceString: function( source) {
				switch( source) {
					case this.SourceResume:
						return 'resume';
					
					case this.SourceFacebook:
						return 'Facebook profile';
						
					case this.SourceLinkedIn:
						return 'LinkedIn profile';
						
					default:
						return 'profile or resume';
				}
			},
 	 		
 	 		getOffers: function( ) {
 	 			return offers;
 	 		},
 	 		
 	 		setOffers: function( _offers) {
 	 			offers = _offers;
	 		},
			
			ignoreNextOffer: function() {
				return offers.shift();
			},
			
			startNextOffer: function() {
 				currentOffer = offers.shift();
				if (currentOffer != null) {
					currentOffer.show();
				}
				else {
//					alert( "no offer to show");
				}
			},
			
			
			getCategories: function(docRoot) {
				var categories = docRoot.getElementsByTagName("category");
				var catArray = new Array();
				if (categories.getLength() > 0) {
					for (ci = 0; ci < categories.getLength(); ci++) {
						var category = categories.item(ci);
						var categoryId = category.getElementsByTagName("categoryid").item(0);
						var categoryIdValue = categoryId.getFirstChild().getNodeValue();
//									alert( "categoryId =" + categoryIdValue);
						var categoryName = category.getElementsByTagName("categoryname").item(0);
//									alert( "categoryName=" + categoryName);
						var categoryNameValue = categoryName.getFirstChild().getNodeValue();
//									alert( "value = " + categoryNameValue);
						var categoryWeight = category.getElementsByTagName("categoryweight").item(0);
//									alert( "categoryweight=" + categoryWeight);
						var categoryWeightValue = categoryWeight.getFirstChild().getNodeValue()
//									alert( "value = " + categoryWeightValue);
						var oCat = {};
						oCat.name = categoryNameValue;
						oCat.weight = categoryWeightValue;
						oCat.id = categoryIdValue;
						catArray[ci] = oCat;
					}
				}
				return catArray;
			},
			
			scoreCutoff: 70,
			categoryCutoff: 70,
			resumeLengthCutoff: 6000,
			empDescCutoff: 200,
			goodResumeMessage: '<li>Congratulations!  Your score indicates that your [[source]] clearly shows your skills and professionalism.</li>',
			shortResumeMessage: '<li>Your [[source]] is shorter than average.  Adding more details may improve your score.</li>',
			fewEmployersMessage: '<li>Adding details about other positions you have held may also improve your score.</li>',
			noDegreeMessage: '<li>Adding your educational qualifications is helpful too.</li>',
			shortEmpDescMessage: '<li>You should consider adding more details to your employment history.</li>',
			unfocusedNonManagerMessage: '<li>It appears you may have multiple "professions" in your [[source]].  You may wish to focus  on a single profession to show your expertise in that area.</li>',
			unfocusedManagerMessage: '<li>You appear to have substantial management experience across multiple professions.  You may wish to focus either on your management expertise or on a single profession to show your expertise in that area.</li>',
			badParseMessage: '<li>We may not have detected all the employment or education in your resume.</li>',
			
			makeResumeRecommendation: function( textLength, avgEmpDescLength,  numEmployers, numEducation, badParse,
																	managerCategory, managerScore, ncScore, categories) {
				var recommendation = '';
				if (textLength < this.resumeLengthCutoff) { // short resume
					canImprove = true;
					recommendation += this.shortResumeMessage;
					if (avgEmpDescLength < this.empDescCutoff) {
						recommendation += this.shortEmpDescMessage;
					}
					if ( numEmployers <= 2) {
						recommendation += this.fewEmployersMessage;
					}
					if (numEducation == 0) {
						recommendation += this.noDegreeMessage;
					}
					if (badParse) {
						recommendation += this.badParseMessage;
					}
				}
				if (managerCategory == 2) {
					if (categories.length >= 2) {
						recommendation += this.unfocusedManagerMessage;
					}
				}
				else {
					if (categories.length >=2) {
						recommendation += this.unfocusedNonManagerMessage;
					}
				}
				return recommendation;
			},

			constructOffer: function( displayDiv, docRoot, source) {
				var ncScore = NC.util.Dom.extractField( docRoot, NC.widget.ResumeWizard.StrNCScore);
				var topCategoryName = NC.widget.ResumeUploadManager.getTopCategoryName();
				var topCategoryScore = NC.widget.ResumeUploadManager.getTopCategoryScore();
				var categories = NC.offer.OfferManager.getCategories( docRoot);
				var managerCategory = NC.widget.ResumeUploadManager.getManagerCategory();
				var managerScore = NC.widget.ResumeUploadManager.getManagerScore();
				var textLength = NC.widget.ResumeUploadManager.getResumeTextLength();
				var numEmployers = NC.widget.ResumeUploadManager.getEmploymentCount();
				var avgEmpDescLength = NC.widget.ResumeUploadManager.getAverageEmpDescLength();
				var numEducation = NC.widget.ResumeUploadManager.getEducationCount();
				/*
				alert( 'score=' + ncScore + ', catname=' + topCategoryName + ', topCatScore=' + topCategoryScore + ', nCat=' + categories.length + ', mgrCat=' +
						managerCategory + ', mgrScore=' + managerScore + ', textLength=' + textLength + ', numEmployers=' + numEmployers 
						+ ', avgDesc=' + avgEmpDescLength);
				*/
				var unknownCategory = false;
				var emptyProfile = false;
				var badParse = false;
				var goodScore = false;
				if (ncScore > this.scoreCutoff ||
						topCategoryScore > this.categoryCutoff ||
						(managerCategory == 2 && managerScore > 60)) {
					goodScore = true;
				}
				if (  textLength >= this.resumeLengthCutoff/2 && 
					(topCategoryScore < 50 ||
					 categories.length >= 3)) { // don't know the category
					unknownCategory = true;
				}
				if (( source == this.SourceFacebook ||
					 source == this.SourceLinkedIn) &&
					 numEmployers == 0) {
					 	emptyProfile = true;
				}
				if (source == this.SourceResume &&
					numEmployers == 0) {
						badParse = true;
					}
				var offers = null;
				var recommendation = this.makeResumeRecommendation(textLength, avgEmpDescLength, numEmployers, numEducation, badParse,
																	managerCategory, managerScore, ncScore, categories);
				if (goodScore) {
					offers = this.constructGoodScoreOffer( displayDiv, docRoot, source, recommendation, 
																	textLength, numEmployers, numEducation, avgEmpDescLength, categories);
				}
				else if (emptyProfile) {
					offers = this.constructEmptyProfileOffer( displayDiv, docRoot, source, recommendation, 
																	textLength, numEmployers, numEducation, avgEmpDescLength, categories);
				}
				else if (badParse) {
					offers = this.constructBadParseOffer( displayDiv, docRoot, source, recommendation, 
																	textLength, numEmployers, numEducation, avgEmpDescLength, categories);
				}
				else {
					offers = this.constructUnknownCategoryOffer( displayDiv, docRoot, source, recommendation, 
																	textLength, numEmployers, numEducation,avgEmpDescLength, categories);
				}
				return offers;
			},
			
			constructGoodScoreOffer: function( displayDiv, docRoot, source, recommendation, 
																	textLength, numEmployers, numEducation, avgEmpDescLength, categories) {
				var goodScoreOffer = new Array();
				var nextOffer = 0;
				if (NC.util.Facebook.isAppConnected()) {
					goodScoreOffer[nextOffer++] = new NC.offer.ShareScoreOffer(displayDiv, docRoot, source);
					/*
					if (recommendation.length > 0) {
						goodScoreOffer[nextOffer++] = new NC.offer.ImproveScoreOffer(displayDiv, docRoot, source, recommendation);
					}
					var jobs = docRoot.getElementsByTagName(NC.widget.ResumeWizard.StrJobinfo);
					if (jobs.getLength() > 0) {
						goodScoreOffer[nextOffer++] = new NC.offer.JobAlertOffer(displayDiv, docRoot, source);
					}
					if (categories.length > 0) {
						goodScoreOffer[nextOffer++] = new NC.offer.SelectCategoryOffer(displayDiv, docRoot, source, categories, false);
					}
					*/
					goodScoreOffer[nextOffer++] = new NC.offer.FacebookBookmarkOffer(displayDiv, docRoot, source);
					goodScoreOffer[nextOffer++] = new NC.offer.FacebookInviteFriendsOffer(displayDiv, docRoot, source);
				}
				else {
					var jobs = docRoot.getElementsByTagName(NC.widget.ResumeWizard.StrJobinfo);
					if (hint == this.HintJobs) {
						if (jobs.getLength() > 0) {
							goodScoreOffer[nextOffer++] = new NC.offer.JobAlertOffer(displayDiv, docRoot, source);
						}
					}
					goodScoreOffer[nextOffer++] = new NC.offer.ShareScoreOffer(displayDiv, docRoot, source);
					if (hint != this.HintJobs) {
						if (jobs.getLength() > 0) {
							goodScoreOffer[nextOffer++] = new NC.offer.JobAlertOffer(displayDiv, docRoot, source);
						}
					}
					goodScoreOffer[nextOffer++] = new NC.offer.JoinNimbleCatOffer(displayDiv, docRoot, source);
					if (recommendation.length > 0) {
						goodScoreOffer[nextOffer++] = new NC.offer.ImproveScoreOffer(displayDiv, docRoot, source, recommendation);
					}
					if (categories.length > 0) {
						goodScoreOffer[nextOffer++] = new NC.offer.SelectCategoryOffer(displayDiv, docRoot, source, categories, false);
					}
					goodScoreOffer[nextOffer++] = new NC.offer.ClosingGoodOffer(displayDiv, docRoot, source);
				}
				return goodScoreOffer;
			},
			
			constructBadScoreOffer: function( displayDiv, docRoot, source, recommendation, 
																	textLength, numEmployers, numEducation, avgEmpDescLength, categories) {
				var badScoreOffer = new Array();
				nextOffer = 0;
				if (NC.util.Facebook.isAppConnected()) {
					/*
					if (recommendation.length > 0) {
						badScoreOffer[nextOffer++] = new NC.offer.ImproveScoreOffer(displayDiv, docRoot, source, recommendation);
					}
					if (categories.length > 0) {
						badScoreOffer[nextOffer++] = new NC.offer.SelectCategoryOffer(displayDiv, docRoot, source, categories, false);
					}
					*/
					badScoreOffer[nextOffer++] = new NC.offer.FacebookBookmarkOffer(displayDiv, docRoot, source);
					badScoreOffer[nextOffer++] = new NC.offer.FacebookInviteFriendsOffer(displayDiv, docRoot, source);
				}
				else {
					var jobs = docRoot.getElementsByTagName(NC.widget.ResumeWizard.StrJobinfo);
					if (hint == this.HintJobs) {
						if (jobs.getLength() > 0) {
							badScoreOffer[nextOffer++] = new NC.offer.JobAlertOffer(displayDiv, docRoot, source);
						}
					}
					if (recommendation.length > 0) {
						badScoreOffer[nextOffer++] = new NC.offer.ImproveScoreOffer(displayDiv, docRoot, source, recommendation);
					}
					if (hint != this.HintJobs) {
						if (jobs.getLength() > 0) {
							badScoreOffer[nextOffer++] = new NC.offer.JobAlertOffer(displayDiv, docRoot, source);
						}
					}
					badScoreOffer[nextOffer++] = new NC.offer.JoinNimbleCatBadScoreOffer(displayDiv, docRoot, source);
					if (categories.length > 0) {
						badScoreOffer[nextOffer++] = new NC.offer.SelectCategoryOffer(displayDiv, docRoot, source, categories, false);
					}
					badScoreOffer[nextOffer++] = new NC.offer.ClosingBadOffer(displayDiv, docRoot, source);
				}
				return badScoreOffer;
			},
			
			constructUnknownCategoryOffer: function( displayDiv, docRoot, source, recommendation, 
																	textLength, numEmployers, numEducation, avgEmpDescLength, categories) {
				var offers = new Array();
				nextOffer = 0;
				if (NC.util.Facebook.isAppConnected()) {
					/*
					if (categories.length > 0) {
						offers[nextOffer++] = new NC.offer.SelectCategoryOffer(displayDiv, docRoot, source, categories, true);
					}
					if (recommendation.length > 0) {
						offers[nextOffer++] = new NC.offer.ImproveScoreOffer(displayDiv, docRoot, source, recommendation);
					}
					*/
					offers[nextOffer++] = new NC.offer.FacebookBookmarkOffer(displayDiv, docRoot, source);
					offers[nextOffer++] = new NC.offer.FacebookInviteFriendsOffer(displayDiv, docRoot, source);
				}
				else {
					var jobs = docRoot.getElementsByTagName(NC.widget.ResumeWizard.StrJobinfo);
					if (hint == this.HintJobs) {
						if (jobs.getLength() > 0) {
							offers[nextOffer++] = new NC.offer.JobAlertOffer(displayDiv, docRoot, source);
						}
					}
					if (categories.length > 0) {
						offers[nextOffer++] = new NC.offer.SelectCategoryOffer(displayDiv, docRoot, source, categories, true);
					}
					if (recommendation.length > 0) {
						offers[nextOffer++] = new NC.offer.ImproveScoreOffer(displayDiv, docRoot, source, recommendation);
					}
					if (hint != this.HintJobs) {
						if (jobs.getLength() > 0) {
							offers[nextOffer++] = new NC.offer.JobAlertOffer(displayDiv, docRoot, source);
						}
					}
					offers[nextOffer++] = new NC.offer.JoinNimbleCatBadScoreOffer(displayDiv, docRoot, source);
					offers[nextOffer++] = new NC.offer.ClosingNoCategoryOffer(displayDiv, docRoot, source);
				}
				return offers;
			},
			
			constructEmptyProfileOffer: function( displayDiv, docRoot, source, recommendation, 
																	textLength, numEmployers, numEducation, avgEmpDescLength, categories) {
				var offers = new Array();
				nextOffer = 0;
				if (NC.util.Facebook.isAppConnected()) {
					/*
					offers[nextOffer++] = new NC.offer.EmptyProfileOffer(displayDiv, docRoot, source, categories, true);
					*/
					offers[nextOffer++] = new NC.offer.FacebookBookmarkOffer(displayDiv, docRoot, source);
					offers[nextOffer++] = new NC.offer.FacebookInviteFriendsOffer(displayDiv, docRoot, source);
				}
				else {
					offers[nextOffer++] = new NC.offer.EmptyProfileOffer(displayDiv, docRoot, source, categories, true);
					offers[nextOffer++] = new NC.offer.ClosingNoCategoryOffer(displayDiv, docRoot, source);
				}
				return offers;
			},
			
			constructBadParseOffer: function( displayDiv, docRoot, source, recommendation, 
																	textLength, numEmployers, numEducation, avgEmpDescLength, categories) {
				var offers = new Array();
				nextOffer = 0;
				if (NC.util.Facebook.isAppConnected()) {
					/*
					offers[nextOffer++] = new NC.offer.BadParseOffer(displayDiv, docRoot, source, categories, true);
					*/
					offers[nextOffer++] = new NC.offer.FacebookBookmarkOffer(displayDiv, docRoot, source);
					offers[nextOffer++] = new NC.offer.FacebookInviteFriendsOffer(displayDiv, docRoot, source);
				}
				else {
					offers[nextOffer++] = new NC.offer.BadParseOffer(displayDiv, docRoot, source, categories, true);
					offers[nextOffer++] = new NC.offer.ClosingNoCategoryOffer(displayDiv, docRoot, source);
				}
				return offers;
			},
			
			constructPeopleSearchOffer: function( displayDiv, docRoot, source, style) {
				var offers = new Array();
				var nextOffer = 0;
				offers[nextOffer++] = new NC.offer.PeopleSearchOpeningOffer(displayDiv, docRoot, source, style);
				return offers;
			},
			
			constructFacebookAuthorizationOffer: function ( displayDiv, docRoot, source, appName) {
				var offers = new Array();
				var nextOffer = 0;
				offers[nextOffer++] = new NC.offer.FacebookAuthorizationOffer(displayDiv, docRoot, source, appName);
				return offers;
			},
			
			startSearchSignupWoResume: function(userType) {
				// check if search div is shown and hide it
				var searchDiv = document.getElementById( 'PeopleSearchDivMain');
				if (searchDiv != null) {
					searchDiv.style.display = 'none';
				}
				var url = './searchSignupWoResume.php?us=' + userType;
				var updater = new NC.util.AjaxUpdate( 'GET', url, 'MainFrame',  'MainFrame', null);
				updater.doUpdate( true);
			},
			
			CreateAccountButton: 1,
			CreateAccountLink: 2,
			startSignupWoResume: function( userType, signupLinkType) {
				if (signupLinkType == this.CreateAccountButton) {
					gaPageTracker._trackEvent(NC.promo.PromoManager.getCpid(), "Click", "CreateAccountButton"); 
				}
				else {
					gaPageTracker._trackEvent(NC.promo.PromoManager.getCpid(), "Click", "CreateAccountLink"); 
				}
				var url = './signupWoResume.php?us=' + userType;
				var updater = new NC.util.AjaxUpdate( 'GET', url, 'MainFrame',  'MainFrame', null);
				updater.doUpdate( true);
			},
			
			updateCategory: function(formName) {
				var form = document.getElementById( formName);
				var postData = NC.util.Dom.serializeForm( form);
				var callback =
				{
	  				success:function( o) {
						NC.offer.OfferManager.startNextOffer();
	  				},
	  				failure:function( o) {
						NC.offer.OfferManager.startNextOffer();
	  				},
					scope: this    				
				};
				var connection = new NC.util.AjaxConnection( 'GET', './selectNewCategory.php?' + postData, null);
				connection.executeMethod( callback);
			},
			
			bookMark: function() {
				// first bookmark then reload the page
				this.finishOffer();
			},
			
			finishOffer: function() {
				// first bookmark then reload the page
				window.location.reload();
			}			
 	 	}
  }();

})(); 	
 
  

 
  


  

  


  
  
  

  
  
