CNB.UserVars=new Hash({'loggedIn':false});CNB.Registration=new Class({Implements:[Options,Events],options:{appId:'187',siloId:'3',editionId:'2',regSource:'',callback:'CNB.Reg',text:{logIn:'Members Login',logOut:'Log Out',welcome:'welcome',join:'Join',anonymous:'Guest',haveErrors:'There appears to be some errors.',inuseUserName:'This Username is already in use.',availableUserName:'This Username is available.',inuseEmail:'This Email Address is already in use.',newEmail:'Please enter a new Email address',pwShort:'Your Password must be at least 8 characters.',wrongEmailPw:'That Email and Password combination do not match our records.',wrongEmail:'That Email is not in our records.',passwordSent:'Your Password reminder has been sent.',passwordChanged:'Your Password has been changed.',emailChanged:'Your Email has been changed.'}},initialize:function(options){this.setOptions(options);this.isAuthenticating=false;this.purs=CNB.Cookie.get('purs_3');this.surs=CNB.Cookie.get('surs_3');this.cnb_user=JSON.decode(Cookie.read('cnb_user'));if($chk(this.purs)){this.regId=this.purs.substring(40,this.purs.indexOf('!'))}this.addEvents({'loggedIn':this.setLoggedIn,'updateDisplay':this.updateStatusDisplay,'confirmUser':this.confirmUser,'initBehavior':this.tracking});window.addEvent('domready',function(){this.fireEvent('initBehavior');this.gate()}.bind(this))},load:function(){this.loadSession()},loadSession:function(){if($chk(this.cnb_user)){CNB.UserVars.extend({'userName':this.cnb_user.userName,'email':this.cnb_user.email,'rememberMe':this.cnb_user.rememberMe})}if($chk(this.purs)&&($chk(this.surs)||CNB.UserVars.get('rememberMe')=='true')){CNB.UserVars.extend({'permToken':this.purs,'sessToken':this.surs,'regId':this.regId});this.fireEvent('loadSession');this.fireEvent('loggedIn')}},updateDisplay:function(){if(!CNB.isDomReady){window.addEvent('domready',function(){this.fireEvent('updateDisplay')}.bind(this))}else{this.fireEvent('updateDisplay')}},logIn:function(options){if(CNB.UserVars.get('loggedIn')){this.logOut()}else{this.setOptions(options);var blocks=this._build_logIn();var f=blocks.build;f.addEvent('submit',function(){this.activeForm=f}.bind(this));f.addEvent('submit',this.authenticate.bind(this));this.layer=new CNB.Layered([blocks.notify,f.cont],{title:'Log In',className:'layer-reg-login',width:'auto',maxHeight:false});f.addEvent('submitStart',this.layer.loading.bind(this.layer,'start'));f.addEvent('error',this.layer.loading.bind(this.layer,'stop'));this.fireEvent('logInFormLoad')}},logOut:function(){this.disableReload=false;var itp='itp_s'+CNB.env.cookieHost.replace('.','-');['purs_3','surs_3','aurs_3','cnb_user',itp].each(function(el){Cookie.dispose(el,{domain:CNB.env.cookieHost,path:'/'})}.bind(this));this.fireEvent('loggedOut');if(!this.disableReload){window.location.reload()}},join:function(options){this.setOptions(options);var blocks=this._build_join();var f=blocks.build;f.addEvent('submit',function(){this.activeForm=f}.bind(this));f.addEvent('submit',this.createUser.bind(this));this.layer=new CNB.Layered([blocks.notify,f.cont,blocks.supplement],{title:'Join '+CNB.env.title,className:'layer-reg-join',width:'auto',maxHeight:false});f.addEvent('submitStart',this.layer.loading.bind(this.layer,'start'));f.addEvent('error',this.layer.loading.bind(this.layer,'stop'));this.addEvent('joinFormLoad',function(){f.fields['userName'].addEvent('blur',function(){this.activeForm=f;this.checkUserName()}.bind(this))}.bind(this));CNB.log('regSource: '+this.options.regSource);this.fireEvent('joinFormLoad',f)},forgotPassword:function(){var blocks=this._build_forgotPw();var f=blocks.build;f.addEvent('submit',function(){this.activeForm=f}.bind(this));f.addEvent('submit',this.sendPassword.bind(this));this.layer=new CNB.Layered([blocks.notify,f.cont],{title:'Forgot Password',className:'layer-reg-forgot',width:'auto'});f.addEvent('submitStart',this.layer.loading.bind(this.layer,'start'));f.addEvent('error',this.layer.loading.bind(this.layer,'stop'))},manageAccount:function(tab){window.open('http://www.zdnet.com/1341-4-44.html?path='+document.location)},authenticate:function(options){var params=$merge({'appId':this.options.appId,'editionId':this.options.editionId,'email':'','password':'','rememberMe':'false'},options);this.callApi('rps/authenticate',this._cb_authenticate,params)},_cb_authenticate:function(data){var r=data.RpsResponse;if(r.Status['@state']=='failed'){this.errors(r.Status.Error);return false}CNB.UserVars.extend({'userName':r.User.UserName['$'],'regId':r.User.RegistrationId['$'],'sessToken':r.User.SessToken['$'],'permToken':r.User.PermToken['$'],'email':r.User.EmailAddress['$'],'rememberMe':r.User.RememberMe['$']});if(this.isAuthenticating){this.fireEvent('authenticate')}else{this.fireEvent('explicityLoggedIn');this.fireEvent('loggedIn');this.fireEvent('executeBehavior')}},createUser:function(opts){var options=this.formatNewsletters(opts);var params=$merge({'appId':this.options.appId,'regSource':this.options.regSource,'userName':'','email':'','password':'','rememberMe':'false'},options);CNB.UserVars.extend({'email':params.email,'userName':params.userName,'rememberMe':params.rememberMe});this.callApi('rps/createUser',this._cb_createUser,params)},_cb_createUser:function(data){var r=data.RpsResponse;if(r.Status['@state']=='failed'){this.errors(r.Status.Error);return false}CNB.UserVars.extend({'regId':r.Receipt.RegistrationId['$'],'permToken':r.Receipt.Session.PermToken['$'],'sessToken':r.Receipt.Session.SessToken['$']});this.fireEvent('createUser');this.fireEvent('loggedIn');this.fireEvent('confirmUser')},sendPassword:function(options){var params=$merge({'appId':this.options.appId,'email':''},options);this.callApi('rps/sendPassword',this._cb_sendPassword,params)},_cb_sendPassword:function(data){var r=data.RpsResponse;if(r.Status['@state']=='failed'){this.errors(r.Status.Error);return false}this.fireEvent('sendPassword');this.layer.replace(this.options.text.passwordSent);this.layer.loading('stop')},changePassword:function(options){var params=$merge({'appId':this.options.appId,'regId':CNB.UserVars.get('regId'),'oldPassword':'','newPassword':'','newPasswordConf':''},options);this.callApi('rps/changePassword',this._cb_changePassword,params)},_cb_changePassword:function(data){var r=data.RpsResponse;if(r.Status['@state']=='failed'){this.errors(r.Status.Error);return false}this.fireEvent('changePassword');this.activeForm.validate.errorMessage(this.options.text.passwordChanged,true);this.activeForm.form.getElements('.input').each(function(el){el.set('value','')}.bind(this))},checkUserName:function(){var input=this.activeForm.fields['userName'].get('value');var params={'siloId':this.options.siloId,'userName':input};if($chk(input)){this.callApi('rps/checkUserName',this._cb_checkUserName,params)}},_cb_checkUserName:function(data){var r=data.RpsResponse;if(r.Status['@state']=='failed'){CNB.log(r.Status.Error);return false}if(r.IsUserNameTaken['$']=='true'){this.activeForm.validate.errorInput(this.activeForm.fields['userName'],this.options.text.inuseUserName)}else{this.activeForm.validate.clearInput(this.activeForm.fields['userName'])}},updateUser:function(options){if(options.newEmail==CNB.UserVars.get('email')){this.activeForm.validate.errorInput(this.activeForm.fields['newEmail'],this.options.text.newEmail);return false}var params=$merge({'appId':this.options.appId,'regId':CNB.UserVars.get('regId'),'newEmail':''},options);this.newEmail=params.newEmail;this.callApi('rps/updateUser',this._cb_updateUser,params)},_cb_updateUser:function(data){var r=data.RpsResponse;if(r.Status['@state']=='failed'){this.errors(r.Status.Error);return false}CNB.UserVars.set('email',this.newEmail);this.setCookies('cnb');this.sendClcEmail();this.fireEvent('changedEmail');this.fireEvent('updateUser');this.fireEvent('confirmUser')},sendClcEmail:function(){CNB.log('sendClcEmail');var params={'appId':this.options.appId,'regId':CNB.UserVars.get('regId')};this.callApi('rps/sendClcEmail',this._cb_sendClcEmail,params)},_cb_sendClcEmail:function(data){var r=data.RpsResponse;if(r.Status['@state']=='failed'){this.errors(r.Status.Error);return false}this.fireEvent('sendClc')},formatNewsletters:function(opts){var newsletters='';var options={};if($chk(opts)){$each(opts,function(val,key){if(val.contains('INTERNAL_NEWSLETTER')){newsletters+=val+','}else{options[key]=val}});options['options']=newsletters;return options}else{return opts}},setLoggedIn:function(){if($chk(this.layer)){this.layer.close('fade')}CNB.UserVars.set('loggedIn',true);this.setCookies();this.updateDisplay()},setCookies:function(cookie){var setCnb=function(){Cookie.write('cnb_user',JSON.encode({'userName':CNB.UserVars.get('userName'),'email':CNB.UserVars.get('email'),'rememberMe':CNB.UserVars.get('rememberMe')}),{duration:1000,domain:CNB.env.cookieHost,path:'/'})};var setSess=function(){if($chk(CNB.UserVars.get('sessToken'))){CNB.Cookie.set('surs_3',CNB.UserVars.get('sessToken'),null,CNB.env.cookieHost)}};var setPerm=function(){if($chk(CNB.UserVars.get('permToken'))){CNB.Cookie.set('purs_3',CNB.UserVars.get('permToken'),1000,CNB.env.cookieHost)}};switch(cookie){case'cnb':setCnb();break;case'sess':setSess();break;case'perm':setPerm();break;default:setCnb();setSess();setPerm()}},confirmUser:function(){this.confirmNotify=new Element('div',{'class':'msg-notify','html':'<p><span>You must confirm your membership!</span> To fully activate your free '+CNB.env.title+' membership, you must verify your e-mail address by clicking on the link included in an email we\'ve just sent you.</p><p>Entered the wrong Email? <a onclick="'+this.options.callback+'.manageAccount()">Update your e-mail address</a>.</p>'});this.confirmSteps='<li><span>1.</span> Go to your e-mail account.</li>'+'<li><span>2.</span> Check your Inbox for an e-mail from membership@noreply.itpapers.com with the subject "<em>Action Required: '+CNB.env.title+' Membership Activation</em>". If you don\'t see this e-mail in your inbox it may have been mistakenly flagged as spam and placed in your Junk E-Mail mail folder.'+'<li><span>3.</span> Click on the account confirmation link within this e-mail to confirm your '+CNB.env.title+' account.';this.fireEvent('confirmBuild');var hed=new Element('h4',{'text':'Next Steps'});var steps=new Element('ul',{'class':'reg-next-steps','html':this.confirmSteps});var supplement=new Element('p',{'class':'msg-supplement','html':'If you are unable to locate this message in either the Inbox or Junk E-Mail mail folders, please <a href="'+CNB.env.helpUrl+'" target="_blank">contact our customer support</a>.'});var btnLevel=new Element('p',{'class':'msg-continue'});var continueBtn=new Element('a',{'class':'btn-submit btn-continue','text':'Continue'}).inject(btnLevel,'bottom').addEvent('click',function(){this.layer.close()}.bind(this));this.layer=new CNB.Layered([this.confirmNotify,hed,steps,supplement,btnLevel],{title:'Activate your '+CNB.env.title+' Account',className:'layer-reg-confirm',maxHeight:false,width:'auto'});this.layer.addEvent('close',function(){this.fireEvent('executeBehavior')}.bind(this))},updateStatusDisplay:function(){var status=$$('.reg-status');status.each(function(el){if(el.hasClass('reg-status-gen')){var html;if(CNB.UserVars.get('loggedIn')===true){var loggedTxt=($chk(CNB.UserVars.get('userName')))?'Logged in as '+CNB.UserVars.get('userName'):'Logged in';html='You are currently: '+loggedTxt+' | <a class="reg-login" onclick="'+this.options.callback+'.logOut();">Log Out</a>'}else{html='You are currently: a Guest | <a class="reg-login" onclick="'+this.options.callback+'.logIn({regSource: \'talkback-login\'});">Log in</a>'}el.empty().set('html',html)}else if(el.hasClass('reg-status-login')){var html;if(CNB.UserVars.get('loggedIn')===true){html='<a onclick="'+this.options.callback+'.manageAccount();">Manage my account</a> - <a onclick="'+this.options.callback+'.logOut();">Log out</a>'}else{html='<a onclick="'+this.options.callback+'.logIn({regSource: \'header-login\'});">Members login</a>'}el.empty().set('html',html)}}.bind(this))},gate:function(){var setRegSource=function(el){var o=el.get('jsonClass');this.options.regSource=($chk(o))?o.source:'';CNB.log(this.options)}.bind(this);var notify=function(msg){if($('msg-notify-alert')){$('msg-notify-alert').destroy()}var notifyMsg=new Element('p',{'id':'msg-notify-alert','html':'<b>'+msg+'</b>'}).inject(this.layer.content.getElement('.msg-notify'),'top')}.bind(this);$$('.reg-gated').each(function(el){if(el.get('tag')=='a'){el.addEvent('click',function(e){if(CNB.UserVars.get('loggedIn')===false){e=new Event(e).stop();this.addEvent('logInFormLoad',notify.bind(this,'Please Log in to access this page.'));this.addEvent('executeBehavior',function(){window.location=el.get('href')}.bind(this));setRegSource(el);this.logIn()}}.bind(this))}if(el.get('tag')=='form'){el.addEvent('submit',function(e){if(CNB.UserVars.get('loggedIn')===false){e.stop();var submitForm=function(){el.submit()};this.addEvent('logInFormLoad',notify.bind(this,'You must be logged in to post your comment.'));this.addEvent('executeBehavior',submitForm);setRegSource(el);this.logIn()}}.bind(this))}}.bind(this))},_build_forgotPw:function(){var z={};z.build=new CNB.FormBuilder({id:'reg-pw',fieldsets:{id:'reg-pw-user',fields:{name:'email',type:'text',label:'Email:',className:'input required email'}},buttons:[{'text':'Send Password',type:'submit','className':'btn-submit btn-send'}]});z.desc=new Element('p',{'class':'msg-description','text':''});z.notify=new Element('div',{'class':'msg-notify','html':'<p>Please enter you email and we will send you your password.</p>'});return z},_build_logIn:function(){var z={};z.build=new CNB.FormBuilder({id:'reg-login',className:'sub-col1',fieldsets:{id:'reg-login-user',fields:[{name:'email',type:'text',label:'Email:',className:'input required email'},{name:'password',type:'password',label:'Password:',className:'input required'},{name:'rememberMe',type:'checkbox',label:'Remember my e-mail and password for automatic login.',value:'true',checked:'true'}]},buttons:[{text:'Log In',type:'submit',className:'btn-submit btn-log-in'}]});z.notify=new Element('div',{'class':'msg-notify','html':'<p>Not a member? <a onclick="'+this.options.callback+'.join();">Join Now</a>.</p>'});z.supplement=new Element('p',{'class':'msg-supplement msg-forgot-pw','html':'<a onclick="'+this.options.callback+'.forgotPassword();">Forgot Your Password?</a>'}).inject(z.build.cont,'bottom');return z},_build_join:function(){var z={};z.build=new CNB.FormBuilder({id:'reg-short',fieldsets:[{id:'reg-short-user',className:'sub-col1',legend:'User Information',fields:[{name:'userName',type:'text',label:'Username:',className:'input specialchars required'},{name:'password',type:'password',label:'Password:',className:'input required password'},{name:'confirm',type:'password',label:'Confirm Password:',className:'input required password confirm-pw'},{name:'email',type:'text',label:'Email Address:',className:'input required email'},{name:'rememberMe',type:'checkbox',label:'Remember my e-mail and password for automatic login.',value:'true',checked:'true'}]},{id:'reg-short-nl',className:'sub-col3 reg-nl',legend:'Newsletters',fields:[{name:'e580',type:'checkbox',label:'New products, discounts and special offers from our premier enterprise sponsors',value:'e580:INTERNAL_NEWSLETTER',checked:'true'},{name:'e590',type:'checkbox',label:'ZDNet\'s White Paper Membership Newsletter',value:'e590:INTERNAL_NEWSLETTER',checked:'true'},{name:'e589',type:'checkbox',label:'ZDNet\'s Must-Read News Alerts',value:'e589:INTERNAL_NEWSLETTER',checked:'true'},{name:'e539',type:'hidden',value:'e539:INTERNAL_NEWSLETTER',checked:'true'},{name:'e550',type:'hidden',value:'e550:INTERNAL_NEWSLETTER',checked:'true'}]}],buttons:[{text:'Join',type:'submit',className:'btn-submit btn-join'}]});new Element('h5',{'id':'reg-short-nl-hed','text':'I\'d also like to receive the following newsletters:'}).inject(z.build.fieldsets['reg-short-nl'],'top');new Element('p',{'id':'reg-short-user-hed','class':'msg-supplement msg-note','text':'All fields required unless noted'}).inject(z.build.form,'before');z.supplement=new Element('p',{'id':'reg-short-terms','class':'msg-supplement msg-terms','html':'<b>Terms of Service</b> - As a ZDNet registrant, you will receive a complimentary subscription to the ZDNet\'s Tech Update Today and ZDNet Announcements newsletters. By using this service, you indicate that you agree to our <a href="http://www.cnetnetworks.com/editorial/terms.html" target="_blank">Terms and Conditions</a> and have read and understand our <a href="http://www.cnetnetworks.com/editorial/privacy.html" target="_blank">Privacy Policy</a>.'});z.notify=new Element('div',{'class':'msg-notify','html':'<p><b>Not yet a member? Create your free ZDNet membership below.</b></p><p>Already have an account? <a onclick="'+this.options.callback+'.logIn();">Log In Now</a>.</p>'});return z},_build_manageAccount:function(){var z={};z.hed=new Element('ul',{'id':'selector-reg','class':'select-default clear'});var hed1=new Element('li',{'html':'<a>Change Email</a>'}).inject(z.hed,'bottom');var hed2=new Element('li',{'html':'<a>Change Password</a>'}).inject(z.hed,'bottom');z.build1=new CNB.FormBuilder({id:'reg-manage-userinfo',className:'select-box',fieldsets:{fields:[{name:'newEmail',type:'text',label:'Email:','value':CNB.UserVars.get('email'),className:'input required email'}]},buttons:[{text:'Change Email',type:'submit',className:'btn-submit btn-update'}]});z.build2=new CNB.FormBuilder({id:'reg-manage',className:'select-box',fieldsets:{fields:[{name:'oldPassword',type:'password',label:'Old Password:',className:'input required'},{name:'newPassword',type:'password',label:'New Password:',className:'input required password'},{name:'newPasswordConf',type:'password',label:'Confirm New Password:',className:'input required password confirm-pw'}]},buttons:[{text:'Change Password',type:'submit',className:'btn-submit btn-update'}]});z.supplement=new Element('p',{'class':'msg-supplement msg-forgot-pw','html':'<a onclick="'+this.options.callback+'.forgotPassword();">Forgot Your Password?</a>'}).inject(z.build2.cont,'bottom');z.notify=new Element('div',{'class':'msg-notify','html':'<h6>More management options:</h6><ul class="tyte"><li><a href="http://www.zdnet.com/1320-4_24-44.html" target="_blank">Full membership profile</a></li><li><a href="http://nl.zdnet.com/acct_mgmt.sc?brand=zdnet" target="_blank">Manage your newsletters</a></li>'});return z},callApi:function(resource,callback,params){var jsonp=new Request.JSONP({url:CNB.env.apiURS+resource+'/',data:$merge(params,{apiKey:CNB.env.cnbApiKey,viewType:'json'}),onComplete:callback.bind(this),onFailure:this._apiFail.bind(this)}).send()},tracking:function(){var ping=function(cval){if($chk(cval)){CNB.DW.ping({ctype:'ria;evt;objtyp;obj',cval:cval})}};this.addEvent('explicityLoggedIn',ping.pass('shortreg;success;rps-api;login'));this.addEvent('loggedOut',ping.pass('shortreg;success;rps-api;logout'));this.addEvent('sendClc',ping.pass('shortreg;success;rps-api;send-clc-email'));this.addEvent('createUser',ping.pass('shortreg;success;rps-api;create-user'));this.addEvent('sendPassword',ping.pass('shortreg;success;rps-api;send-password'));this.addEvent('changePassword',ping.pass('shortreg;success;rps-api;change-password'));this.addEvent('changeEmail',ping.pass('shortreg;success;rps-api;change-email'));this.addEvent('apiFail',ping.pass('shortreg;fail;api;api-failed'));this.addEvent('logInFormLoad',ping.pass('shortreg;view;popup;login'));this.addEvent('joinFormLoad',ping.pass('shortreg;view;popup;create-user'));this.fireEvent('initTracking')},_apiFail:function(){CNB.log('apifailed');this.layer.loading('stop');this.fireEvent('apiFail');this.activeForm.validate.errorMessage('We have encountered a technical problem. Please try submitting the form again, or logging in at the <a href="http://www.zdnet.com/1320-4_24-44.html?path='+document.location+'">Members Log In page</a>.')},errors:function(response){this.layer.loading('stop');$splat(response).each(function(el){try{switch(el['@applicationCode']){case'login_error.email_password':this.activeForm.validate.errorMessage(this.options.text.wrongEmailPw);break;case'inuse.userName':this.activeForm.validate.errorInput(this.activeForm.fields['userName'],this.options.text.inuseUserName);break;case'missing.userName':break;case'inuse.email':this.activeForm.validate.errorInput(this.activeForm.fields['email'],this.options.text.inuseEmail);break;case'invalid.emailaddress':this.activeForm.validate.errorInput(this.activeForm.fields['email'],this.options.text.wrongEmail);break;case'tooshort.password':this.activeForm.validate.errorInput(this.activeForm.fields['password'],this.options.text.pwShort);break;case'error.singleLink':this.activeForm.validate.errorMessage(this.options.text.alreadyLinked);break;default:if($defined(this.activeForm)){this.activeForm.validate.errorMessage(el.ErrorMessage['$'])}}}catch(e){CNB.log(e)}}.bind(this))}});CNB.Reg=new CNB.Registration();CNB.Reg.load();