Advertisement
Guest User

Untitled

a guest
Mar 24th, 2012
173
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. var API_URL = 'http://localhost/app/api';
  2.  
  3. function Event(id, name, desc, dtStart, dtEnd) {
  4.     var self = this;
  5.     self.id = ko.observable(id);
  6.     self.name = ko.observable(name);
  7.     self.desc = ko.observable(desc);
  8.     self.dtStart = ko.observable(dtStart);
  9.     self.dtEnd = ko.observable(dtEnd);
  10.     self.registered = ko.observable(false);
  11. }
  12.  
  13. function EventsViewModel() {
  14.     var self = this;
  15.     self.events = ko.observableArray([]);
  16.     self.eventsCache = [];
  17.     self.selectedEvent = ko.observable(null);
  18.     self.searchQuery = ko.observable("");
  19.    
  20.     self.viewEvent = function(event) {
  21.         self.selectedEvent(event);
  22.         location.hash = "#" + event.id();
  23.     };
  24.    
  25.     self.loadUpcoming = function() {
  26.         // deep linking
  27.         var id = location.hash.replace("#", "");
  28.        
  29.         $.getJSON(API_URL + '/events/upcoming', function(events) {
  30.             $.each(events, function(i, event) {
  31.                 var evt = new Event(event.id, event.name, event.description, event.dtStart, event.dtEnd);
  32.                 self.events.push(evt);
  33.                 self.eventsCache.push(evt);
  34.                
  35.                 if (evt.id() == id)
  36.                     self.selectedEvent(evt);
  37.                 // check if event is registered already
  38.                 if ($.storage.get("reg" + event.id) == true)
  39.                     evt.registered(true)
  40.             });
  41.         });
  42.     };
  43.    
  44.     self.registrationValidationOpts = {
  45.         rules: {
  46.             name: {
  47.                 required: true,
  48.                 maxlength: 64
  49.             },
  50.             email: {
  51.                 required: true,
  52.                 maxlength: 128,
  53.                 email: true
  54.             },
  55.             contact: {
  56.                 required: true,
  57.                 digits: true,
  58.                 minlength: 8,
  59.                 maxlength: 8
  60.             },
  61.             faculty: {
  62.                 maxlength: 64
  63.             },
  64.             course: {
  65.                 maxlength: 64
  66.             },
  67.             year: {
  68.                 maxlength: 1,
  69.                 digits: true
  70.             }
  71.         },
  72.         messages: {
  73.             name: {
  74.                 required: "Please enter your name",
  75.                 maxlength: "Your name should not be more than {0} characters"
  76.             },
  77.             email: {
  78.                 required: "Please enter your email",
  79.                 maxlength: "Your email should not be more than {0} characters",
  80.                 email: "This email address appears to be invalid"
  81.             },
  82.             contact: {
  83.                 required: "Please enter your contact number",
  84.                 maxlength: "Your contact should be 8 digits long",
  85.                 minlength: "Your contact should be 8 digits long",
  86.                 digits: "Your contact should only contain digits"
  87.             },
  88.             faculty: {
  89.                 maxlength: "Your faculty should not be more than {0} characters"
  90.             },
  91.             course: {
  92.                 maxlength: "Your course should not be more than {0} characters"
  93.             },
  94.             year: {
  95.                 maxlength: "Your year of study should not be more than {0} digits long",
  96.                 digits: "Year of study should only contain digits"
  97.             }
  98.         }
  99.     };
  100.    
  101.     self.submitRegistration = function() {
  102.         var $frm = $("#frmRegister"),
  103.         formData = $.parseJSON($.toJSON($frm.serializeObject()));
  104.        
  105.         // validation  
  106.         $frm.validate(self.registrationValidationOpts);
  107.         if (!$frm.valid())
  108.             return false;
  109.        
  110.         // store particulars in local storage
  111.         $.storage.set("particulars", formData);
  112.         populateRegistrationForm();
  113.        
  114.         // submit request to server
  115.         $.post(API_URL + '/events/register/' + self.selectedEvent().id(),
  116.             formData,
  117.             function(json) {
  118.                 if (json.status == "success") {
  119.                     // mark event as registered
  120.                     self.selectedEvent().registered(true);
  121.                     $.storage.set("reg" + self.selectedEvent().id(), true); // store in local storage too
  122.                 } else {
  123.                     alert('Your registration was unsuccessful');
  124.                 }
  125.             });
  126.                
  127.         return false;
  128.     };
  129.    
  130.     self.search = function() {
  131.         var q = $.trim(self.searchQuery()), i, len;
  132.        
  133.         if (q === "") {
  134.             self.events.removeAll();
  135.             for (i = 0, len = self.eventsCache.length; i < len; i++) {
  136.                 self.events.push(self.eventsCache[i]);
  137.             }
  138.         } else {
  139.             self.events.removeAll();
  140.             for (i = 0, len = self.eventsCache.length; i < len; i++) {
  141.                 if (self.eventsCache[i].name().toLowerCase().indexOf(q) >= 0) {
  142.                     self.events.push(self.eventsCache[i]);
  143.                 }
  144.             }
  145.         }
  146.     };
  147.    
  148.     self.populateRegistrationForm = function() {
  149.         var user = $.storage.get("particulars");
  150.    
  151.         if (user) {
  152.             console.log($("#frmRegister"));
  153.             $("#frmRegister").find("input[name=name]").val(user.name).end()
  154.             .find("input[name=email]").val(user.email).end()
  155.             .find("input[name=contact]").val(user.contact).end()
  156.             .find("input[name=faculty]").val(user.faculty).end()
  157.             .find("input[name=course]").val(user.course).end()
  158.             .find("input[name=year]").val(user.year).end();
  159.         }
  160.         console.log("out")
  161.     }
  162.    
  163. }
  164.  
  165. $.fn.serializeObject = function() {
  166.     var o = {};
  167.     var a = this.serializeArray();
  168.     $.each(a, function() {
  169.         if (o[this.name]) {
  170.             if (!o[this.name].push) {
  171.                 o[this.name] = [o[this.name]];
  172.             }
  173.             o[this.name].push(this.value || '');
  174.         } else {
  175.             o[this.name] = this.value || '';
  176.         }
  177.     });
  178.     return o;
  179. };
  180.  
  181. $(document).ready(function() {
  182.     var eventsViewModel = new EventsViewModel();
  183.     ko.applyBindings(eventsViewModel);
  184.     eventsViewModel.loadUpcoming();
  185.     eventsViewModel.searchQuery.subscribe(eventsViewModel.search);
  186.    
  187.     // init local storage (jQuery Plugin)
  188.     $.storage = new $.store();
  189.    
  190.     // populate registration form with past data for convinence
  191.     console.log($("#frmRegister"))
  192.     eventsViewModel.populateRegistrationForm();
  193. });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement