var _dsCart = Class.create({
  initialize: function() {
        this.rooms = [];
        this.dining = [];
        this.trans = [];
        this.fun = [];
        this.addons = [];
        this.allowMultipleRooms = false;
        this.allowMultipleDining = false;
        this.allowMultipleTrans = true;
        this.allowMultipleFun = true;
        this.funOnlyOne = ["IMPULSE","JAZZJACKS","COMEDYWORKS"];
        this.funAllowDups = false;
        this.transOnlyOne = [["TOWNCAR","ROLLS"],["PEDITAXI","PEDITAXITOUR","horse_carriage","OW_TOWNCAR"]];
        this.transAllowDups = false;
        this.pkgdate = '';
        this.pkgtitle = '';
        this.pkgmenu = '';
        this.pkgsummary = '';
        this.majorTrans = ["TOWNCAR","ROLLS","PU_TOWNCAR"];
        this.minorTrans = ["PEDITAXI","PEDITAXITOUR","horse_carriage","OW_TOWNCAR"];
        this.originAddress = null;
        this.destinationAddress = '';
        this.distanceBetween = '';
        this.venuesHaveChanged = false;
    },
    clearCart: function() {
        this.rooms = [];
        this.dining = [];
        this.trans = [];
        this.fun = [];
        this.addons = [];
        this.originAddress = null;
        this.destinationAddress = '';
        this.distanceBetween = '';
        this.venuesHaveChanged = false;
    },
    loadAddressHash: function() {
        this.addressHash.set('1515REST',this.createAddressObj('1515 Market St','Denver','CO','80202'));
        this.addressHash.set('BROKER',this.createAddressObj('821 17th St','Denver','CO','80202'));
        this.addressHash.set('REDSQUARE',this.createAddressObj('1512 Larimer Street','Denver','CO','80202'));
        this.addressHash.set('MERCURY',this.createAddressObj('2199 California St','Denver','CO','80205'));
        this.addressHash.set('LECENTRAL',this.createAddressObj('112 E 8th Ave','Denver','CO','80203'));
        this.addressHash.set('IMPULSE',this.createAddressObj('1634 18th Street','Denver','CO','80202-1212'));
        this.addressHash.set('JAZZJACKS',this.createAddressObj('500 16th Street','Denver','CO','80202-4283'));
        this.addressHash.set('COMEDYWORKS',this.createAddressObj('1226 15th Street','Denver','Colorado','80202'));
        this.addressHash.set('WOODHOUSE',this.createAddressObj('941 East 17th Avenue','Denver','CO','80218'));
    },
    getVenueAddress: function(id) {
        var obj = this.addressHash.get(id);
        var str = obj['adr'] + ', ' + obj['city'] + ', ' + obj['state'] + ' ' + obj['zip'];
        return str;
    },
    createAddressObj: function(adr,city,state,zip) {
        var obj = new Object();
        obj.adr = adr;
        obj.city = city;
        obj.state = state;
        obj.zip = zip;
        return obj;
    },

    addRooms: function(a) {
        this.rooms = [];
        this.rooms.unshift(a);
    },
    removeRooms: function(a) {
        this.rooms = this.rooms.without(a);
    },
    getRooms: function() {
        return this.rooms;
    },
    addDining: function(a) {
   //     if (this.dining.length>0) this.venuesHaveChanged = true;
        this.dining = [];
        this.dining.unshift(a);
    },
    removeDining: function(a) {
        this.dining = this.dining.without(a);
    },
    getDining: function() {
        return this.dining;
    },
    addTrans: function(a) {
        var only = this.transOnlyOne;
        var omajor = only[0];
        var ominor = only[1];
        if (this.allowMultipleTrans) {
            if (omajor.indexOf(a)>-1) {
                for (var i=0;i<omajor.length;i++) {
                    var majitem = omajor[i];
                    this.trans = this.trans.without(majitem);
                }
            }
            if (ominor.indexOf(a)>-1) {
                for (var i=0;i<ominor.length;i++) {
                    var minitem = ominor[i];
                    this.trans = this.trans.without(minitem);
                }
            }
          //  if (!this.transAllowDups) {
          //    this.trans = this.trans.without(a);
          //  }
        } else {
            this.trans = [];
        }
        
        this.trans.unshift(a);
    },
    removeTrans: function(a) {
        var index = this.trans.indexOf(a);
        if (index>-1) {
          this.trans.splice(index,1);
        }
    },
    getTrans: function() {
        return this.trans;
    },
    addFun: function(a) {
        var cur = this.fun;
        var only = this.funOnlyOne;
        if (this.allowMultipleFun) {
            if (only.indexOf(a)>-1) {
                for (var i=0;i<only.length;i++) {
                    var item = only[i];
                    this.fun = this.fun.without(item);
                }
            }
            if (!this.funAllowDups) {
                this.fun = this.fun.without(a);
            }
        } else {
            this.fun = [];           
        }
        
        this.fun.unshift(a);
    },
    removeFun: function(a) {
        var index = this.fun.indexOf(a);
        if (index>-1) {
          this.fun.splice(index,1);
        }
    },
    getFun: function() {
        return this.fun;
    },
    addAddons: function(a) {
        this.addons.unshift(a);
    },
    removeAddons: function(a) {
        this.addons = this.addons.without(a);
    },
    getAddons: function() {
        return this.addons;
    },
    getAllPackageItems: function() {
        var r = this.getRooms();
        var d = this.getDining();
        var t = this.getTrans();
        var f = this.getFun();
        return r.concat(d,t,f);
    },
    getAllCartItems: function() {
        var p = this.getAllPackageItems();
        var a = this.getAddons();
        return p.concat(a);
    },
    haveVenuesChanged: function() {
        return this.venuesHaveChanged;
    },
    setHaveVenuesChanged: function(b) {
        this.venuesHaveChanged = b;
    },
    getVenueItems : function() {
          var vary = [];
         var d = this.getDining();
         if (d.length>0) vary.push(d[0]);
         var f = this.getFun();
         if (f.length>0) vary.push(f[0]);
         return vary;
    },
     getAllVenueItems : function() {
         var d = this.getDining();
         var f = this.getFun();
        return d.concat(f);
    },
    removeItem: function(type,id) {
        if (type == 'R') this.removeRooms(id);
        if (type == 'D') this.removeDining(id);
        if (type == 'T') this.removeTrans(id);
        if (type == 'E') this.removeFun(id);
        if (type == 'A') this.removeAddons(id);
    },
    addItem: function(type,id) {
        if (type == 'R') this.rooms.unshift(id);
        if (type == 'D') this.dining.unshift(id);
        if (type == 'T') this.trans.unshift(id);
        if (type == 'E') this.fun.unshift(id);
        if (type == 'A') this.addons.unshift(id);
    },
    areMultiplesAllowed: function(type) {
        var allowed;
        if (type == 'R') allowed = this.allowMultipleRooms;
        if (type == 'D') allowed = this.allowMultipleDining;
        if (type == 'T') allowed = this.allowMultipleTrans;
        if (type == 'E') allowed = this.allowMultipleFun;
        return allowed;
    },
    getArrayForType: function(type) {
        var work = null;
        if (type == 'R') work = this.getRooms();
        if (type == 'D') work= this.getDining();
        if (type == 'T') work = this.getTrans();
        if (type == 'E') work = this.getFun();
        return work;
    },
    setPkgdate: function(d) {
        this.pkgdate = d;
    },
    setPkgtitle: function(p) {
        this.pkgtitle = p;
    },
    setPkgmenu: function(m) {
        this.pkgmenu = m;
    },
    isValidCombo: function() {
        var valid = false;
        var r = this.getRooms();
        var d = this.getDining();
        var t = this.getTrans();
        var f = this.getFun();
        var hm = this.hasMajorTrans();
        if ((d.length>0) && (f.length>0)) valid = true;
        if ((d.length>0) && (r.length>0)) valid = true;       
        if ((f.length>0) && (r.length>0)) valid = true;
        if ((d.length>0) && (hm)) valid = true;
        if ((f.length>0) && (hm)) valid = true;
        if ((r.length>0) && (hm)) valid = true;
        return valid;
    },
    hasMajorTrans: function() {
        var hasmajor = false;
        var majors = this.majorTrans;
        var titems = this.getTrans();
        titems.each(function(id) {
            if (majors.indexOf(id) > -1) {
                hasmajor = true;
            }
        });
        return hasmajor;
    },
    recommendLocalTrans: function() {
        var rec = true;
        var hasminor = false;
        var dande = this.getVenueItems();
        if (dande.length<2) {
            return false;
        } else {
          var alltrans = this.getTrans();
          var minort = this.minorTrans;
          for (var i=0;i<alltrans.length;i++) {
              var transitem = alltrans[i];
              if (minort.indexOf(transitem)>-1) {
                  hasminor = true;
                  break;
              }
          }
          if (hasminor) rec = false;
        }
        return rec;
    },
    isCarPickupMode: function() {
        var cpdi = this.getTrans();
        var ok = false;
        if (cpdi.indexOf('PU_TOWNCAR') > -1) {
            ok = true;
        }
        return ok; //ok;
    },
    setOriginAddress: function(a) {
        this.originAddress = a;
    },
     getOriginAddress: function() {
        return this.originAddress;
    },
    getOriginAddressString: function() {
        var oadr = '';
        var obj = this.originAddress;
        if (obj != null) {
          oadr = obj['address'] + ', ' + obj['city'] + ', ' + obj['state'] + ' ' + obj['zip'];
        }
        return oadr;
    },
    getPickupTime: function() {
        var putime = '';
        var obj = this.originAddress;
        if (obj != null) {
            putime = obj['putime'];
        }
        return putime;
    },

    setDestinationAddress: function(a) {
        var curdest = this.destinationAddress;
        if (curdest != a) {
               this.venuesHaveChanged = true;
        }
        this.destinationAddress = a;
    },
    getDestinationAddress: function() {
        return this.destinationAddress;
    },
    setDistanceBetween: function(a) {
        this.distanceBetween = a;
    },
    getDistanceBetween: function() {
        return this.distanceBetween;
    },
    getPickupDistance: function() {
        var pd = '';
        if (this.originAddress != null) {
            pd = this.originAddress['miles'];
        }
        return pd;
    },
    getPickupCharges: function(miles) {
        var imiles = parseInt(miles);
        var tripprice = (imiles * 3 * 2) + 8;
        if (tripprice < 35) tripprice = 35;
        return tripprice;
    }



}); // end class

/*
 * this.packageDate = '';
        this.packageTitle = '';
 *this.allowMultipleRooms = false;
        this.allowMultipleDining = false;
        this.allowMultipleTrans = false;
        this.allowMultipleFun = false;
 * if (type == 'D') {goToTabNumber(0);_diningSelected = false;}
  if (type == 'T') {goToTabNumber(1);_transSelected = false;}
  if (type == 'E') {goToTabNumber(2);_funSelected = false;}
  if (type == 'R') {goToTabNumber(3);_roomSelected = false;}
  if (type == 'A')
 */
