swell.svc.quizSvc=function(factory){this.factory=(factory!==undefined)?factory:swell.data.ajaxDaoFactory;
this.endPoints={getSegmentEndPoint:"/services/nocache/quizzes/getsegment",getUserFriendsEndPoint:"/services/nocache/quizzes/getuserfriends",saveSegmentEndPoint:"/facebook/savesegment",getCatSpendDataEndPoint:"/services/nocache/quizzes/getresults"};
swell.svc.baseSvc.call(this,factory);
};
swell.svc.quizSvc.prototype=new swell.svc.baseSvc();
swell.svc.quizSvc.constructor=swell.svc.quizSvc;
swell.svc.quizSvc.prototype.getSegment=function(req){logger.log("service method getSegment called");
var dao=this.factory.getJSONDao();
var svcParams={Quiz:{Items:[]}};
$.each(req.Items,function(i,val){svcParams.Quiz.Items.push({Question:val.Question,Answer:val.Answer});
});
dao.post(this.endPoints.getSegmentEndPoint,this.prepareObjectForPOST(svcParams),function(dao){logger.log("dao callback");
var data=dao.data;
logger.log("returned data:",data);
if(data.Status){req.onSuccess(data);
}else{req.onError();
}});
};
swell.svc.quizSvc.prototype.getCatSpendData=function(req){var dao=this.factory.getJSONDao();
dao.get(this.endPoints.getCatSpendDataEndPoint,{segmentIdentifier:req.segmentIdentifier,location:req.location},function(dao){var data=dao.data;
if(data.Status){req.onSuccess(data);
}else{req.onError();
}});
};
swell.svc.quizSvc.prototype.getUserFriendsBySpendType=function(req){logger.log("service method getUserFriendsBySpendType called");
var dao=this.factory.getJSONDao();
dao.post(this.endPoints.getUserFriendsEndPoint,{id:req.Id},function(dao){logger.log("dao callback");
var data=dao.data;
logger.log("returned data:",data);
if(data.Status){req.onSuccess(data);
}else{req.onError();
}});
};
swell.svc.quizSvc.prototype.saveSegment=function(req){logger.log("service method saveSegment called");
var dao=this.factory.getJSONDao();
logger.log(req);
var svcParams={facebookUserId:req.Id,segmentId:req.SegmentId};
dao.get(this.endPoints.saveSegmentEndPoint,this.prepareObjectForPOST(svcParams),function(dao){logger.log("dao callback from saveSegment");
var data=dao.data;
if(data.Status){req.onSuccess(data);
}else{req.onError();
}});
};
swell.svc.quizSvc.prototype.prepareObjectForPOST=function(value){var result={};
var buildResult=function(object,prefix){for(var key in object){var postKey=isFinite(key)?(prefix!=""?prefix:"")+"["+key+"]":(prefix!=""?prefix+".":"")+key;
switch(typeof(object[key])){case"number":case"string":case"boolean":result[postKey]=object[key];
break;
case"object":if(object[key]&&object[key].toUTCString){result[postKey]=object[key].toUTCString().replace("UTC","GMT");
}else{buildResult(object[key],postKey!=""?postKey:key);
}}}};
buildResult(value,"");
return result;
};
swell.controllers.quizHomeController=function(daoFactory){var daoFactory=(daoFactory!==undefined)?daoFactory:swell.data.ajaxDaoFactory;
swell.controllers.baseController.apply(this,[{daoFactory:daoFactory}]);
this.quizSvc=new swell.svc.quizSvc(this.daoFactory);
this.socNetSvc=new swell.svc.socNetSvc(this.daoFactory);
};
swell.controllers.quizHomeController.prototype=new swell.controllers.baseController();
swell.controllers.quizHomeController.constructor=swell.controllers.quizHomeController;
swell.controllers.quizHomeController.prototype.getSegment=function(req){logger.log("event handled: submit user quiz. request:",req);
var ctrl=this;
var view=this.getView("quizData").instance;
view.isInitialized=true;
this.quizSvc.getSegment($.extend({},req,{onSuccess:function(data){var segment=data.SegmentIdentifier;
swell.cookies.segment.set(data.SegmentIdentifier);
var view=ctrl.getView("quizData").instance;
view.setViewData({SpendType:segment});
},onError:function(data){logger.log("onError");
}}));
};
swell.controllers.quizHomeController.prototype.getUserFriendsBySpendType=function(){logger.log("event handled: get user friends by spend type. request:");
var req={Id:swell.svc.loginSvc.userProfile.uid};
if(req.Id==null){logger.log("exiting getUserFriendsBySpendType with error: unauthenticated user");
return;
}var ctrl=this;
this.quizSvc.getUserFriendsBySpendType($.extend({},req,{onSuccess:function(data){logger.log("success for getUserFriendsBySpendType");
var view=ctrl.getView("spendTypeIndexView").instance;
view.bindFriends(data.SpendTypesWithFacebookFriends);
},onError:function(data){logger.log("onError on getUserFriendsBySpendType");
var view=ctrl.getView("spendTypeIndexView").instance;
}}));
};
swell.controllers.quizHomeController.prototype.clearSpendTypeCookie=function(){logger.log("event handled: clear spend type cookie");
swell.cookies.segment.del();
};
swell.controllers.quizHomeController.prototype.saveUserSegment=function(data){logger.log("event handled: clear spend type cookie");
var ctrl=this;
this.quizSvc.saveSegment($.extend({},data,{onSuccess:function(response){logger.log("success for saveUserSegment");
},onError:function(){logger.log("onError on saveUserSegment");
}}));
};
swell.controllers.quizHomeController.prototype.onLoggedIn=function(data){var view=this.getView("quizHeader").instance;
view.loggedInState(data);
$("#discoveryList").addClass("hide");
$("#segmentList").removeClass("hide");
this.saveUserSegment({Id:swell.svc.loginSvc.userProfile.uid,SegmentId:swell.cookies.segment.get()});
this.getUserFriendsBySpendType();
};
swell.controllers.quizHomeController.prototype.onInviteFBFriends=function(data){var fbml="<fb:request-form "+'action="'+document.location.href+'" '+'method="POST" '+'invite="true" '+'type="Quiz" '+'content="Share this quiz with someone '+"<fb:req-choice url='see wiki page for fb:req-choice for details' "+"label='Take the Quiz!' />\">"+"<fb:multi-friend-selector "+'showborder="false" '+'max="20" '+'bypass="cancel" '+'actiontext="Invite your friends to take the quiz.">'+"</fb:request-form>";
var dlg=FB.UI.FBMLPopupDialog("Some Title",fbml);
dlg.setContentWidth(750);
dlg.setContentHeight(650);
dlg.show();
};
swell.controllers.quizHomeController.prototype.onShareToFBWall=function(templateData){logger.log(templateData);
FB.Connect.streamPublish("",{name:"What's Your Spend Type?",caption:"{*actor*} is a "+templateData.Name+".",description:"Take the Bundle Spending Quiz.",href:"http://"+window.location.hostname+"/quiz"});
};
swell.controllers.quizHomeController.prototype.onQuitQuiz=function(){if(document.referrer.indexOf(swell.config.BaseDomain)==-1){window.location.href="http://"+window.location.hostname+"/everybodysmoney";
}else{window.history.back();
}};
swell.controllers.quizHomeController.prototype.onGetCatSpendDataForSpendtype=function(evArgs){var location=swell.cookies.location.get(),ctrl=this;
this.quizSvc.getCatSpendData({segmentIdentifier:evArgs.segmentIdentifier,location:location,onSuccess:function(response){$("#location").html(String.format("in {0}",response.Location));
var view=ctrl.getView("quizHeader").instance;
if(response.CategoriesData.length!==0){view.setCatSpendData(response.CategoriesData);
}},onError:function(){}});
};
swell.controllers.quizHomeController.prototype.init=function(){swell.events.registerListener("getSpendType",this.getSegment,this);
swell.events.registerListener("clearSpendTypeCookie",this.clearSpendTypeCookie,this);
swell.events.registerListener("saveUserSegment",this.saveUserSegment,this);
swell.events.registerListener("getUserFriendsBySpendType",this.getUserFriendsBySpendType,this);
swell.events.registerListener("loggedIn",this.onLoggedIn,this);
swell.events.registerListener("inviteFBFriends",this.onInviteFBFriends,this);
swell.events.registerListener("shareToFBWall",this.onShareToFBWall,this);
swell.events.registerListener("quitQuiz",this.onQuitQuiz,this);
swell.events.registerListener("getCatSpendDataForSpendType",this.onGetCatSpendDataForSpendtype,this);
};
swell.views.spendTypeIndexView=function(instance,options){swell.views.baseView.apply(this,[instance,options]);
};
swell.views.spendTypeIndexView.prototype=new swell.views.baseView();
swell.views.spendTypeIndexView.constructor=swell.views.quizHome;
swell.views.spendTypeIndexView.prototype.bindFriends=function(data){logger.log("binding facebook users to spend type list");
var friendsIds=[];
$(data).each(function(i,fbUsersWithSegment){$(fbUsersWithSegment.FacebookUsers).slice(0,10).each(function(i,friend){var segmentElement=$("#s-"+fbUsersWithSegment.Segment.Id),profilePicturesContainer=$(".right .fb-icons",segmentElement),image=$(String.format('<img class="fb-icon" alt="" src="{0}"/>',friend.Photo)),frame=$('<img class="fb-frame-sm" alt="" src="/assets/img/fb_frame_sm.png"/>');
logger.log(segmentElement,profilePicturesContainer);
profilePicturesContainer.append(image);
profilePicturesContainer.append(frame);
if($.inArray(friend.Id,friendsIds)==-1){friendsIds.push(friend.Id);
}});
});
$("span.friend-counter span.mid").text(friendsIds.length);
};
swell.views.quizResultHeaderView=function(instance,segment){swell.views.baseView.apply(this,[instance,segment]);
$("#qzInvFriends").click(function(e){e.preventDefault();
swell.events.raiseEvent("inviteFBFriends");
});
$("#qzPostToWall").click(function(e){e.preventDefault();
swell.events.raiseEvent("shareToFBWall",segment);
});
};
swell.views.quizResultHeaderView.prototype=new swell.views.baseView();
swell.views.quizResultHeaderView.constructor=swell.views.quizResultHeaderView;
swell.views.quizResultHeaderView.prototype.loggedInState=function(data){$("#shareSpendType p.subtitle:first").addClass("hide");
$("#fbProfilePic").attr("src",data.pic);
$("#fbLoginBtn").css("display","none");
$("#connectedCont").removeClass("hide");
};
swell.views.quizResultHeaderView.prototype.setCatSpendData=function(data){logger.log("data",data);
var cat1=data[0],cat2=data[1],cat3=data[2];
$("#catCont-1").html(String.format("{0}&nbsp;${1}",cat1.CategoryName,cat1.AverageMonthlySpendingAmount)).addClass("cat-"+cat1.CategoryId);
$("#catCont-2").html(String.format("{0}&nbsp;${1}",cat2.CategoryName,cat2.AverageMonthlySpendingAmount)).addClass("cat-"+cat2.CategoryId);
$("#catCont-3").html(String.format("{0}&nbsp;${1}",cat3.CategoryName,cat3.AverageMonthlySpendingAmount)).addClass("cat-"+cat3.CategoryId);
};
swell.quizHome={quizServiceCrtl:new swell.controllers.quizHomeController(),init:function(){var quizCrtl=this.quizServiceCrtl;
swell.support.updatesConfigurator.visit(this);
swell.support.discoveriesListConfigurator.visit(this,{selectAll:true});
swell.events.registerListener("riaViewLoaded",function(evArgs){this.registerView(evArgs.id,new swell.views.riaView(evArgs.ref));
},this.quizServiceCrtl);
var that=this;
this.quizServiceCrtl.registerView("openXAds",new swell.views.openXAds());
$(document).ready(function(){swell.events.raiseEvent("getSocialMetaData",{targetId:"discoveries"});
quizCrtl.init();
quizCrtl.getView("openXAds").instance.init();
$("#scSpend a").click(function(e){quizCrtl.getView("openXAds").instance.reload();
});
swell.events.raiseEvent("clearSpendTypeCookie");
});
}};
swell.quizResult={quizServiceCrtl:new swell.controllers.quizHomeController(),init:function(segment){var app=this;
swell.controllers.loginController.init();
swell.support.discoveriesListConfigurator.visit(this,{selectAll:true});
swell.support.updatesConfigurator.visit(this);
this.quizServiceCrtl.registerView("quizHeader",new swell.views.quizResultHeaderView("#headerCont",segment));
this.quizServiceCrtl.registerView("spendTypeIndexView",new swell.views.spendTypeIndexView($("div.spend-type-list")));
this.quizServiceCrtl.init();
var segmentId=swell.cookies.segment.get();
swell.events.raiseEvent("getCatSpendDataForSpendType",{segmentIdentifier:segmentId,location:"New York"});
this.quizServiceCrtl.registerView("openXAds",new swell.views.openXAds());
$("#doOver").click(function(e){e.preventDefault();
window.history.back();
});
var quizCrtl=this.quizServiceCrtl;
$(document).ready(function(){quizCrtl.getView("openXAds").instance.init();
});
}};
