Commit 4f95edcd by Tuomas Riihimäki

Changed layout, added shopping for bill, and propably something else...

1 parent 07f6ac62
Showing with 1375 additions and 377 deletions
...@@ -9,6 +9,8 @@ package fi.insomnia.bortal.beans { ...@@ -9,6 +9,8 @@ package fi.insomnia.bortal.beans {
import fi.insomnia.bortal.beanutil.AuthorisationBeanLocal; import fi.insomnia.bortal.beanutil.AuthorisationBeanLocal;
import fi.insomnia.bortal.facade.BillFacade; import fi.insomnia.bortal.facade.BillFacade;
import fi.insomnia.bortal.facade.BillLineFacade;
import fi.insomnia.bortal.facade.EventFacade;
import flash.utils.IDataInput; import flash.utils.IDataInput;
import flash.utils.IDataOutput; import flash.utils.IDataOutput;
import flash.utils.IExternalizable; import flash.utils.IExternalizable;
...@@ -18,14 +20,18 @@ package fi.insomnia.bortal.beans { ...@@ -18,14 +20,18 @@ package fi.insomnia.bortal.beans {
private var _authbean:AuthorisationBeanLocal; private var _authbean:AuthorisationBeanLocal;
private var _billFacade:BillFacade; private var _billFacade:BillFacade;
private var _billLineFacade:BillLineFacade;
private var _eventbean:EventBeanLocal; private var _eventbean:EventBeanLocal;
private var _eventfacade:EventFacade;
private var _secubean:SecurityBeanLocal; private var _secubean:SecurityBeanLocal;
private var _userBean:UserBeanLocal; private var _userBean:UserBeanLocal;
public function readExternal(input:IDataInput):void { public function readExternal(input:IDataInput):void {
_authbean = input.readObject() as AuthorisationBeanLocal; _authbean = input.readObject() as AuthorisationBeanLocal;
_billFacade = input.readObject() as BillFacade; _billFacade = input.readObject() as BillFacade;
_billLineFacade = input.readObject() as BillLineFacade;
_eventbean = input.readObject() as EventBeanLocal; _eventbean = input.readObject() as EventBeanLocal;
_eventfacade = input.readObject() as EventFacade;
_secubean = input.readObject() as SecurityBeanLocal; _secubean = input.readObject() as SecurityBeanLocal;
_userBean = input.readObject() as UserBeanLocal; _userBean = input.readObject() as UserBeanLocal;
} }
...@@ -33,7 +39,9 @@ package fi.insomnia.bortal.beans { ...@@ -33,7 +39,9 @@ package fi.insomnia.bortal.beans {
public function writeExternal(output:IDataOutput):void { public function writeExternal(output:IDataOutput):void {
output.writeObject(_authbean); output.writeObject(_authbean);
output.writeObject(_billFacade); output.writeObject(_billFacade);
output.writeObject(_billLineFacade);
output.writeObject(_eventbean); output.writeObject(_eventbean);
output.writeObject(_eventfacade);
output.writeObject(_secubean); output.writeObject(_secubean);
output.writeObject(_userBean); output.writeObject(_userBean);
} }
......
...@@ -15,13 +15,16 @@ package fi.insomnia.bortal.beans { ...@@ -15,13 +15,16 @@ package fi.insomnia.bortal.beans {
[Bindable] [Bindable]
public class ProductBeanBase implements IExternalizable { public class ProductBeanBase implements IExternalizable {
protected var _productFacade:ProductFacade; private var _eventBean:EventBeanLocal;
private var _productFacade:ProductFacade;
public function readExternal(input:IDataInput):void { public function readExternal(input:IDataInput):void {
_eventBean = input.readObject() as EventBeanLocal;
_productFacade = input.readObject() as ProductFacade; _productFacade = input.readObject() as ProductFacade;
} }
public function writeExternal(output:IDataOutput):void { public function writeExternal(output:IDataOutput):void {
output.writeObject(_eventBean);
output.writeObject(_productFacade); output.writeObject(_productFacade);
} }
} }
......
...@@ -10,20 +10,24 @@ package fi.insomnia.bortal.facade { ...@@ -10,20 +10,24 @@ package fi.insomnia.bortal.facade {
import flash.utils.IDataInput; import flash.utils.IDataInput;
import flash.utils.IDataOutput; import flash.utils.IDataOutput;
import javax.persistence.EntityManager; import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
[Bindable] [Bindable]
public class EventFacadeBase extends GenericFacade { public class EventFacadeBase extends GenericFacade {
private var _em:EntityManager; private var _em:EntityManager;
private var _emf:EntityManagerFactory;
override public function readExternal(input:IDataInput):void { override public function readExternal(input:IDataInput):void {
super.readExternal(input); super.readExternal(input);
_em = input.readObject() as EntityManager; _em = input.readObject() as EntityManager;
_emf = input.readObject() as EntityManagerFactory;
} }
override public function writeExternal(output:IDataOutput):void { override public function writeExternal(output:IDataOutput):void {
super.writeExternal(output); super.writeExternal(output);
output.writeObject(_em); output.writeObject(_em);
output.writeObject(_emf);
} }
} }
} }
\ No newline at end of file
package fi.insomnia.bortal.beans; package fi.insomnia.bortal.beans;
import java.io.ByteArrayOutputStream; import java.io.ByteArrayOutputStream;
import java.math.BigDecimal;
import javax.ejb.EJB; import javax.ejb.EJB;
import javax.ejb.Stateless; import javax.ejb.Stateless;
...@@ -9,9 +10,16 @@ import fi.insomnia.bortal.beanutil.AuthorisationBeanLocal; ...@@ -9,9 +10,16 @@ import fi.insomnia.bortal.beanutil.AuthorisationBeanLocal;
import fi.insomnia.bortal.beanutil.AuthorisationBeanLocal.Right; import fi.insomnia.bortal.beanutil.AuthorisationBeanLocal.Right;
import fi.insomnia.bortal.beanutil.AuthorisationBeanLocal.RightType; import fi.insomnia.bortal.beanutil.AuthorisationBeanLocal.RightType;
import fi.insomnia.bortal.beanutil.PdfPrinter; import fi.insomnia.bortal.beanutil.PdfPrinter;
import fi.insomnia.bortal.enums.Permission;
import fi.insomnia.bortal.enums.RolePermission;
import fi.insomnia.bortal.exceptions.EjbPermissionDeniedException;
import fi.insomnia.bortal.facade.BillFacade; import fi.insomnia.bortal.facade.BillFacade;
import fi.insomnia.bortal.facade.BillLineFacade;
import fi.insomnia.bortal.facade.EventFacade;
import fi.insomnia.bortal.model.Bill; import fi.insomnia.bortal.model.Bill;
import fi.insomnia.bortal.model.BillLine;
import fi.insomnia.bortal.model.LanEvent; import fi.insomnia.bortal.model.LanEvent;
import fi.insomnia.bortal.model.Product;
import fi.insomnia.bortal.model.User; import fi.insomnia.bortal.model.User;
/** /**
...@@ -33,6 +41,10 @@ public class BillBean implements BillBeanLocal { ...@@ -33,6 +41,10 @@ public class BillBean implements BillBeanLocal {
private AuthorisationBeanLocal authbean; private AuthorisationBeanLocal authbean;
@EJB @EJB
private EventBeanLocal eventbean; private EventBeanLocal eventbean;
@EJB
private EventFacade eventfacade;
@EJB
private BillLineFacade billLineFacade;
/** /**
* Default constructor. * Default constructor.
...@@ -67,7 +79,53 @@ public class BillBean implements BillBeanLocal { ...@@ -67,7 +79,53 @@ public class BillBean implements BillBeanLocal {
if (bill == null) { if (bill == null) {
return null; return null;
} }
if (bill.getBillNumber() == null || bill.getBillNumber() <= 0) {
generateBillNumber(bill);
}
return new PdfPrinter(bill).output(); return new PdfPrinter(bill).output();
} }
private void generateBillNumber(Bill bill) {
if (bill.getBillNumber() == null || bill.getBillNumber() == 0) {
LanEvent currEvent = eventbean.getCurrentEvent();
Integer billnr = billFacade.getBiggestBillNumber(currEvent);
if (billnr == null || billnr < currEvent.getNextBillNumber()) {
billnr = currEvent.getNextBillNumber();
} else {
++billnr;
}
bill.setBillNumber(billnr);
billFacade.merge(bill);
}
}
@Override
public Bill createEmptyBill(User shoppingUser) throws EjbPermissionDeniedException {
if (shoppingUser != null && userBean.hasCurrentUserPermission(Permission.USER_MANAGEMENT, RolePermission.EXECUTE)) {
String msg = new StringBuilder("User tried to shop to ").append(shoppingUser.getId()).append(" another without sufficient rights").toString();
throw new EjbPermissionDeniedException(secubean, userBean.getCurrentUser(), msg);
}
if (shoppingUser == null) {
shoppingUser = userBean.getCurrentUser();
}
LanEvent event = eventbean.getCurrentEvent();
Bill ret = new Bill(event, shoppingUser);
billFacade.create(ret);
return ret;
}
@Override
public BillLine addProductToBill(Bill bill, Product product, BigDecimal count) {
// TODO: Lähetettyä laskua ei saa kaikki muokata!
// TODO: Jos ei olla tekemässä omaa laskua tarkistetaan onko riittävät
// oikeudet.
BillLine line = new BillLine(bill, product.getName(), product.getUnitName(), count, product.getPrice(), product.getVat());
billLineFacade.create(line);
return line;
}
} }
package fi.insomnia.bortal.beans; package fi.insomnia.bortal.beans;
import java.math.BigDecimal;
import java.util.List; import java.util.List;
import javax.ejb.EJB; import javax.ejb.EJB;
...@@ -15,7 +16,10 @@ import fi.insomnia.bortal.model.Product; ...@@ -15,7 +16,10 @@ import fi.insomnia.bortal.model.Product;
public class ProductBean implements ProductBeanLocal { public class ProductBean implements ProductBeanLocal {
@EJB @EJB
ProductFacade productFacade; private ProductFacade productFacade;
@EJB
private EventBeanLocal eventBean;
/** /**
* Default constructor. * Default constructor.
...@@ -30,4 +34,21 @@ public class ProductBean implements ProductBeanLocal { ...@@ -30,4 +34,21 @@ public class ProductBean implements ProductBeanLocal {
return productFacade.findAll(); return productFacade.findAll();
} }
@Override
public Product createProduct(String name, BigDecimal price) {
Product entity = new Product(eventBean.getCurrentEvent(), name, price);
productFacade.create(entity);
return entity;
}
@Override
public List<Product> getProducts() {
return productFacade.findAll();
}
@Override
public void mergeChanges(Product product) {
productFacade.merge(product);
}
} }
...@@ -167,7 +167,6 @@ public class TestDataBean implements TestDataBeanLocal { ...@@ -167,7 +167,6 @@ public class TestDataBean implements TestDataBeanLocal {
b.setDeliveryTerms("Toimitetaan, ehkä..."); b.setDeliveryTerms("Toimitetaan, ehkä...");
Calendar duedate = Calendar.getInstance(); Calendar duedate = Calendar.getInstance();
duedate.add(Calendar.DATE, 14); duedate.add(Calendar.DATE, 14);
b.setDueDate(duedate);
b.setNotes("Some notes..."); b.setNotes("Some notes...");
b.setNoticetime("14 vrk"); b.setNoticetime("14 vrk");
b.setOurReference("Meitin viite ( Insomnia XII )"); b.setOurReference("Meitin viite ( Insomnia XII )");
......
...@@ -99,8 +99,6 @@ public class UserBean implements UserBeanLocal { ...@@ -99,8 +99,6 @@ public class UserBean implements UserBeanLocal {
return (context.getCallerPrincipal() == null || user == null) ? false : context.getCallerPrincipal().getName().equals(user.getNick()); return (context.getCallerPrincipal() == null || user == null) ? false : context.getCallerPrincipal().getName().equals(user.getNick());
} }
@Override @Override
public User getCurrentUser() { public User getCurrentUser() {
Principal principal = context.getCallerPrincipal(); Principal principal = context.getCallerPrincipal();
...@@ -134,10 +132,6 @@ public class UserBean implements UserBeanLocal { ...@@ -134,10 +132,6 @@ public class UserBean implements UserBeanLocal {
} }
// TODO: FIX THIS!! really bad idea.... // TODO: FIX THIS!! really bad idea....
if (user.isSuperadmin()) {
logger.debug("Returning true for superadmin for {} perm {}", target.name(), permission);
return true;
}
AccessRight expectedRight = accessRightBeanLocal.findOrCreate(target); AccessRight expectedRight = accessRightBeanLocal.findOrCreate(target);
...@@ -150,6 +144,10 @@ public class UserBean implements UserBeanLocal { ...@@ -150,6 +144,10 @@ public class UserBean implements UserBeanLocal {
} }
} }
} }
if (user.isSuperadmin()) {
logger.debug("Returning true for superadmin for {} perm {}", target.name(), permission);
return true;
}
return false; return false;
} }
...@@ -191,4 +189,9 @@ public class UserBean implements UserBeanLocal { ...@@ -191,4 +189,9 @@ public class UserBean implements UserBeanLocal {
} }
@Override
public boolean hasCurrentUserPermission(Permission permission, RolePermission rolePermission) {
return this.hasPermission(permission, getCurrentUser(), rolePermission);
}
} }
...@@ -356,9 +356,9 @@ public class PdfPrinter { ...@@ -356,9 +356,9 @@ public class PdfPrinter {
drawText(70, 156, bill.getAddr3(), addrfont); drawText(70, 156, bill.getAddr3(), addrfont);
drawText(70, 144, bill.getAddr4(), addrfont); drawText(70, 144, bill.getAddr4(), addrfont);
drawText(70, 132, bill.getAddr5(), addrfont); drawText(70, 132, bill.getAddr5(), addrfont);
drawText(355, 110, "Laskun ID", addrfont); drawText(355, 110, BillUtils.createReferenceNumber(bill.getReferenceNumberBase()).toString(), addrfont);
drawText(465, 86, decRound(bill.totalPrice()), addrfont); drawText(465, 86, decRound(bill.totalPrice()), addrfont);
drawText(355, 86, "Erapaiva", addrfont); drawText(355, 86, DATE_FORMAT.format(bill.getDueDate().getTime()), addrfont);
} }
......
...@@ -4,7 +4,10 @@ import javax.ejb.LocalBean; ...@@ -4,7 +4,10 @@ import javax.ejb.LocalBean;
import javax.ejb.Stateless; import javax.ejb.Stateless;
import javax.persistence.EntityManager; import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext; import javax.persistence.PersistenceContext;
import javax.persistence.TypedQuery;
import fi.insomnia.bortal.model.Bill; import fi.insomnia.bortal.model.Bill;
import fi.insomnia.bortal.model.LanEvent;
@Stateless @Stateless
@LocalBean @LocalBean
...@@ -21,4 +24,10 @@ public class BillFacade extends EventChildGenericFacade<Bill> { ...@@ -21,4 +24,10 @@ public class BillFacade extends EventChildGenericFacade<Bill> {
return em; return em;
} }
public int getBiggestBillNumber(LanEvent e) {
TypedQuery<Integer> q = getEm().createNamedQuery("Bill.findbiggestBillNumber", Integer.class);
q.setParameter("event", e);
return q.getSingleResult();
}
} }
...@@ -3,7 +3,10 @@ package fi.insomnia.bortal.facade; ...@@ -3,7 +3,10 @@ package fi.insomnia.bortal.facade;
import javax.ejb.LocalBean; import javax.ejb.LocalBean;
import javax.ejb.Stateless; import javax.ejb.Stateless;
import javax.persistence.EntityManager; import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.LockModeType;
import javax.persistence.PersistenceContext; import javax.persistence.PersistenceContext;
import javax.persistence.PersistenceUnit;
import javax.persistence.TypedQuery; import javax.persistence.TypedQuery;
import org.slf4j.Logger; import org.slf4j.Logger;
...@@ -19,6 +22,9 @@ public class EventFacade extends GenericFacade<Integer, LanEvent> { ...@@ -19,6 +22,9 @@ public class EventFacade extends GenericFacade<Integer, LanEvent> {
@PersistenceContext @PersistenceContext
private EntityManager em; private EntityManager em;
@PersistenceUnit
private EntityManagerFactory emf;
public EventFacade() { public EventFacade() {
super(LanEvent.class); super(LanEvent.class);
} }
...@@ -40,4 +46,6 @@ public class EventFacade extends GenericFacade<Integer, LanEvent> { ...@@ -40,4 +46,6 @@ public class EventFacade extends GenericFacade<Integer, LanEvent> {
q.setParameter("name", name); q.setParameter("name", name);
return this.getSingleNullableResult(q); return this.getSingleNullableResult(q);
} }
} }
package fi.insomnia.bortal.beans; package fi.insomnia.bortal.beans;
import java.io.ByteArrayOutputStream; import java.io.ByteArrayOutputStream;
import java.math.BigDecimal;
import javax.ejb.Local; import javax.ejb.Local;
import fi.insomnia.bortal.exceptions.EjbPermissionDeniedException;
import fi.insomnia.bortal.model.Bill; import fi.insomnia.bortal.model.Bill;
import fi.insomnia.bortal.model.BillLine;
import fi.insomnia.bortal.model.Product;
import fi.insomnia.bortal.model.User;
@Local @Local
public interface BillBeanLocal { public interface BillBeanLocal {
...@@ -12,6 +17,10 @@ public interface BillBeanLocal { ...@@ -12,6 +17,10 @@ public interface BillBeanLocal {
ByteArrayOutputStream getPdfBillStream(Bill bill); ByteArrayOutputStream getPdfBillStream(Bill bill);
Bill createEmptyBill(User shoppingUser) throws EjbPermissionDeniedException;
BillLine addProductToBill(Bill bill, Product product, BigDecimal count);
......
package fi.insomnia.bortal.beans; package fi.insomnia.bortal.beans;
import java.math.BigDecimal;
import java.util.List; import java.util.List;
import javax.ejb.Local; import javax.ejb.Local;
...@@ -10,4 +12,10 @@ public interface ProductBeanLocal { ...@@ -10,4 +12,10 @@ public interface ProductBeanLocal {
List<Product> listUserShoppableProducts(); List<Product> listUserShoppableProducts();
Product createProduct(String name, BigDecimal price);
List<Product> getProducts();
void mergeChanges(Product product);
} }
...@@ -29,6 +29,8 @@ public interface UserBeanLocal { ...@@ -29,6 +29,8 @@ public interface UserBeanLocal {
boolean isCurrentUser(User thisuser); boolean isCurrentUser(User thisuser);
boolean hasCurrentUserPermission(Permission userManagement, RolePermission execute);
......
...@@ -12,9 +12,12 @@ public enum Permission { ...@@ -12,9 +12,12 @@ public enum Permission {
PERMISSION("Description"), PERMISSION("Description"),
LOGIN("User can see loginbutton. (only defaultuser should have permission to that one)"), LOGIN("User can see loginbutton. (only defaultuser should have permission to that one)"),
USER_MANAGEMENT("User has right to view all users(r), modify users(w) "), USER_MANAGEMENT("User has right to view all users(r), modify users(w), execute actions for user(x), Eg shop! "),
TICKET_SALES("User has right to view, and/or buy tickets"), TICKET_SALES("User has right to view, and/or buy tickets"),
ROLE_MANAGEMENT("User has right to view(r), modify(w) and assign(x) roles"); ROLE_MANAGEMENT("User has right to view(r), modify(w) and assign(x) roles"),
PRODUCT("View(r), modify(w), and shop(x) products"),
;
private String description; private String description;
public static Permission getPermission(String name) { public static Permission getPermission(String name) {
......
...@@ -3,12 +3,14 @@ package fi.insomnia.bortal.exceptions; ...@@ -3,12 +3,14 @@ package fi.insomnia.bortal.exceptions;
import fi.insomnia.bortal.beans.SecurityBeanLocal; import fi.insomnia.bortal.beans.SecurityBeanLocal;
import fi.insomnia.bortal.model.User; import fi.insomnia.bortal.model.User;
public class EjbPermissionDeniedException extends Exception{ public class EjbPermissionDeniedException extends Exception {
public EjbPermissionDeniedException(SecurityBeanLocal bean, User user, String message) { public EjbPermissionDeniedException(SecurityBeanLocal bean, User user, String message) {
super(message); super(message);
bean.logPermissionDenied(user, this); bean.logPermissionDenied(user, this);
} }
/** /**
* *
*/ */
......
...@@ -23,6 +23,7 @@ import javax.persistence.Table; ...@@ -23,6 +23,7 @@ import javax.persistence.Table;
import javax.persistence.Temporal; import javax.persistence.Temporal;
import javax.persistence.TemporalType; import javax.persistence.TemporalType;
import javax.persistence.Version; import javax.persistence.Version;
import javax.persistence.UniqueConstraint;
import static javax.persistence.TemporalType.DATE; import static javax.persistence.TemporalType.DATE;
/** /**
...@@ -31,13 +32,15 @@ import static javax.persistence.TemporalType.DATE; ...@@ -31,13 +32,15 @@ import static javax.persistence.TemporalType.DATE;
* not null. * not null.
*/ */
@Entity @Entity
@Table(name = "bills") @Table(name = "bills", uniqueConstraints = { @UniqueConstraint(columnNames = { "event_id", "bill_number" }) })
@NamedQueries({ @NamedQueries({
@NamedQuery(name = "Bill.findAll", query = "SELECT b FROM Bill b"), @NamedQuery(name = "Bill.findAll", query = "SELECT b FROM Bill b"),
@NamedQuery(name = "Bill.findByDueDate", query = "SELECT b FROM Bill b WHERE b.dueDate = :dueDate"), // @NamedQuery(name = "Bill.findByDueDate", query =
// "SELECT b FROM Bill b WHERE b.dueDate = :dueDate"),
@NamedQuery(name = "Bill.findByPaidDate", query = "SELECT b FROM Bill b WHERE b.paidDate = :paidDate"), @NamedQuery(name = "Bill.findByPaidDate", query = "SELECT b FROM Bill b WHERE b.paidDate = :paidDate"),
@NamedQuery(name = "Bill.findByNotes", query = "SELECT b FROM Bill b WHERE b.notes = :notes") }) @NamedQuery(name = "Bill.findByNotes", query = "SELECT b FROM Bill b WHERE b.notes = :notes"),
@NamedQuery(name = "Bill.findbiggestBillNumber", query = "SELECT max(b.billNumber) from Bill b where b.event = :event") })
public class Bill implements EventChildInterface { public class Bill implements EventChildInterface {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
...@@ -48,9 +51,10 @@ public class Bill implements EventChildInterface { ...@@ -48,9 +51,10 @@ public class Bill implements EventChildInterface {
/** /**
* When the bill is due to be paid. * When the bill is due to be paid.
*/ */
@Column(name = "due_date") // Can be calculated from SentDate + paymentTime
@Temporal(TemporalType.TIMESTAMP) // @Column(name = "due_date")
private Calendar dueDate; // @Temporal(TemporalType.TIMESTAMP)
// private Calendar dueDate;
/** /**
* When the money has appeared on the bank account. * When the money has appeared on the bank account.
...@@ -189,14 +193,22 @@ public class Bill implements EventChildInterface { ...@@ -189,14 +193,22 @@ public class Bill implements EventChildInterface {
public Bill(LanEvent event) { public Bill(LanEvent event) {
this.id = new EventPk(event); this.id = new EventPk(event);
} }
public Calendar getDueDate() { public Bill(LanEvent event, User user) {
return dueDate; this.id = new EventPk(event);
this.setUser(user);
this.setAddr1(user.getFirstnames() + user.getLastname());
this.setAddr2(user.getAddress());
this.setAddr3(user.getZip() + user.getPostalTown());
} }
public void setDueDate(Calendar dueDate) { public Calendar getDueDate() {
this.dueDate = dueDate;
Calendar dueDate = (Calendar) this.getSentDate().clone();
dueDate.add(Calendar.DATE, this.getPaymentTime());
return dueDate;
} }
public Calendar getPaidDate() { public Calendar getPaidDate() {
......
...@@ -30,7 +30,7 @@ import javax.persistence.Version; ...@@ -30,7 +30,7 @@ import javax.persistence.Version;
*/ */
@Entity @Entity
@Table(name = "events") @Table(name = "events")
@NamedQueries( { @NamedQueries({
@NamedQuery(name = "LanEvent.findAll", query = "SELECT e FROM LanEvent e"), @NamedQuery(name = "LanEvent.findAll", query = "SELECT e FROM LanEvent e"),
@NamedQuery(name = "LanEvent.findByStartTime", query = "SELECT e FROM LanEvent e WHERE e.startTime = :startTime"), @NamedQuery(name = "LanEvent.findByStartTime", query = "SELECT e FROM LanEvent e WHERE e.startTime = :startTime"),
@NamedQuery(name = "LanEvent.findByEndTime", query = "SELECT e FROM LanEvent e WHERE e.endTime = :endTime"), @NamedQuery(name = "LanEvent.findByEndTime", query = "SELECT e FROM LanEvent e WHERE e.endTime = :endTime"),
...@@ -52,8 +52,6 @@ public class LanEvent implements ModelInterface { ...@@ -52,8 +52,6 @@ public class LanEvent implements ModelInterface {
@Temporal(TemporalType.TIMESTAMP) @Temporal(TemporalType.TIMESTAMP)
private Calendar startTime; private Calendar startTime;
@Column(name = "end_time") @Column(name = "end_time")
@Temporal(TemporalType.TIMESTAMP) @Temporal(TemporalType.TIMESTAMP)
private Calendar endTime; private Calendar endTime;
...@@ -65,13 +63,13 @@ public class LanEvent implements ModelInterface { ...@@ -65,13 +63,13 @@ public class LanEvent implements ModelInterface {
private String referer; private String referer;
/** /**
* Bill's reference number will be formed by adding * Bill's reference number will be formed by adding this number to the bill
* this number to the bill number and adding the * number and adding the checksum of that number as the last digit
* checksum of that number as the last digit
*/ */
private Integer referenceNumberBase = 54321; private Integer referenceNumberBase = 54321;
@Column(nullable = false)
private int nextBillNumber = 1;
@JoinColumn(name = "event_organiser_id", referencedColumnName = "event_organiser_id", nullable = false, updatable = false) @JoinColumn(name = "event_organiser_id", referencedColumnName = "event_organiser_id", nullable = false, updatable = false)
@ManyToOne(optional = false) @ManyToOne(optional = false)
private EventOrganiser organiser; private EventOrganiser organiser;
...@@ -80,11 +78,10 @@ public class LanEvent implements ModelInterface { ...@@ -80,11 +78,10 @@ public class LanEvent implements ModelInterface {
@ManyToOne(optional = false) @ManyToOne(optional = false)
private EventStatus status; private EventStatus status;
@OneToMany(mappedBy = "parentEvent")
@OneToMany(mappedBy="parentEvent")
private List<LogEntry> logEntries; private List<LogEntry> logEntries;
@JoinColumns( { @JoinColumns({
@JoinColumn(name = "default_role_id", referencedColumnName = "id"), @JoinColumn(name = "default_role_id", referencedColumnName = "id"),
@JoinColumn(name = "event_id", referencedColumnName = "event_id", nullable = false, updatable = false, insertable = false) }) @JoinColumn(name = "event_id", referencedColumnName = "event_id", nullable = false, updatable = false, insertable = false) })
@OneToOne @OneToOne
...@@ -115,7 +112,6 @@ public class LanEvent implements ModelInterface { ...@@ -115,7 +112,6 @@ public class LanEvent implements ModelInterface {
public LanEvent() { public LanEvent() {
} }
public Calendar getStartTime() { public Calendar getStartTime() {
return startTime; return startTime;
} }
...@@ -295,26 +291,27 @@ public class LanEvent implements ModelInterface { ...@@ -295,26 +291,27 @@ public class LanEvent implements ModelInterface {
return organiser; return organiser;
} }
public void setReferenceNumberBase(Integer referenceNumberBase) { public void setReferenceNumberBase(Integer referenceNumberBase) {
this.referenceNumberBase = referenceNumberBase; this.referenceNumberBase = referenceNumberBase;
} }
public Integer getReferenceNumberBase() { public Integer getReferenceNumberBase() {
return referenceNumberBase; return referenceNumberBase;
} }
public void setLogEntries(List<LogEntry> logEntries) { public void setLogEntries(List<LogEntry> logEntries) {
this.logEntries = logEntries; this.logEntries = logEntries;
} }
public List<LogEntry> getLogEntries() { public List<LogEntry> getLogEntries() {
return logEntries; return logEntries;
} }
public void setNextBillNumber(int nextBillNumber) {
this.nextBillNumber = nextBillNumber;
}
public int getNextBillNumber() {
return nextBillNumber;
}
} }
...@@ -64,12 +64,16 @@ public class Product implements EventChildInterface { ...@@ -64,12 +64,16 @@ public class Product implements EventChildInterface {
@OneToMany(cascade = CascadeType.ALL, mappedBy = "product") @OneToMany(cascade = CascadeType.ALL, mappedBy = "product")
private List<Discount> discounts; private List<Discount> discounts;
private BigDecimal vat = BigDecimal.ZERO;
private String unitName = "";
@ManyToMany() @ManyToMany()
@JoinTable(name = "product_foodwavetemplate", joinColumns = { @JoinTable(name = "product_foodwavetemplate", joinColumns = {
@JoinColumn(name = "product_id", referencedColumnName = "id"), @JoinColumn(name = "product_id", referencedColumnName = "id"),
@JoinColumn(name = "event_id", referencedColumnName = "event_id") }, inverseJoinColumns = { @JoinColumn(name = "event_id", referencedColumnName = "event_id") }, inverseJoinColumns = {
@JoinColumn(name = "food_wave_template_id", referencedColumnName = "id"), @JoinColumn(name = "food_wave_template_id", referencedColumnName = "id"),
@JoinColumn(name = "event_id", referencedColumnName = "event_id") }, uniqueConstraints = { @UniqueConstraint(columnNames = { "product_id", "food_wave_template_id", "event_id" }) }) @JoinColumn(name = "event_id", referencedColumnName = "event_id") },
uniqueConstraints = { @UniqueConstraint(columnNames = { "product_id", "food_wave_template_id", "event_id" }) })
private List<FoodWaveTemplate> foodWaveTemplates; private List<FoodWaveTemplate> foodWaveTemplates;
@Version @Version
...@@ -83,10 +87,11 @@ public class Product implements EventChildInterface { ...@@ -83,10 +87,11 @@ public class Product implements EventChildInterface {
this.id = new EventPk(event); this.id = new EventPk(event);
} }
public Product(LanEvent event, BigDecimal price, int sort) { public Product(LanEvent event, String name, BigDecimal price) {
this(event); this(event);
this.price = price; this.price = price;
this.sort = sort; this.name = name;
} }
public String getName() { public String getName() {
...@@ -227,5 +232,21 @@ public class Product implements EventChildInterface { ...@@ -227,5 +232,21 @@ public class Product implements EventChildInterface {
public void setPrepaid(boolean prepaid) { public void setPrepaid(boolean prepaid) {
this.prepaid = prepaid; this.prepaid = prepaid;
} }
public void setVat(BigDecimal vat) {
this.vat = vat;
}
public BigDecimal getVat() {
return vat;
}
public void setUnitName(String unitName) {
this.unitName = unitName;
}
public String getUnitName() {
return unitName;
}
} }
<?xml version="1.0"?> <?xml version="1.0"?>
<faces-config <faces-config xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd" http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"
version="2.0" version="2.0">
> <application>
<application> <resource-bundle>
<resource-bundle> <base-name>resources.i18n</base-name>
<base-name>resources.i18n</base-name> <var>i18n</var>
<var>i18n</var> </resource-bundle>
</resource-bundle> <message-bundle>resources.i18n</message-bundle>
<message-bundle>resources.i18n</message-bundle> <!-- Legal Country codes: http://www.iso.org/iso/country_codes/iso_3166_code_lists/english_country_names_and_code_elements.htm -->
<!-- Legal Country codes: http://www.iso.org/iso/country_codes/iso_3166_code_lists/english_country_names_and_code_elements.htm --> <!-- Assigned Country codes: -->
<!-- Assigned Country codes: --> <!-- Insomnia: IN (INDIA) -->
<!-- Insomnia: IN (INDIA) --> <!-- Stream: ST (SAO TOME AND PRINCIPE ) -->
<!-- Stream: ST (SAO TOME AND PRINCIPE ) --> <!-- Vector VE (VENEZUELA, BOLIVARIAN REPUBLIC OF) -->
<!-- Vector VE (VENEZUELA, BOLIVARIAN REPUBLIC OF) --> <locale-config>
<locale-config> <default-locale>fi_FI</default-locale>
<default-locale>fi_FI</default-locale> <supported-locale>fi_IN_XII</supported-locale>
<supported-locale>fi_IN_XII</supported-locale> <supported-locale>en_ST_v7</supported-locale>
<supported-locale>en_ST_v7</supported-locale>
</locale-config>
</application>
<navigation-rule>
<from-view-id>/role/create.xhtml</from-view-id>
<navigation-case>
<from-outcome>roleCreated</from-outcome>
<to-view-id>/role/edit.xhtml</to-view-id>
</navigation-case>
</navigation-rule>
<navigation-rule>
<from-view-id>/user/list.xhtml</from-view-id>
<navigation-case>
<from-outcome>userEdit</from-outcome>
<to-view-id>/user/edit.xhtml</to-view-id>
</navigation-case>
</navigation-rule>
<navigation-rule>
<from-view-id>/user/edit.xhtml</from-view-id>
<navigation-case>
<from-outcome>userSave</from-outcome>
<to-view-id>/user/edit.xhtml</to-view-id>
</navigation-case>
</navigation-rule>
<navigation-rule>
<from-view-id>/role/list.xhtml</from-view-id>
<navigation-case>
<from-outcome>roleEdit</from-outcome>
<to-view-id>/role/edit.xhtml</to-view-id>
</navigation-case>
</navigation-rule>
<navigation-rule> </locale-config>
<from-view-id>*</from-view-id> </application>
<navigation-case>
<from-outcome>permissionDenied</from-outcome> <navigation-rule>
<to-view-id>/permissionDenied.xhtml</to-view-id> <from-view-id>/role/create.xhtml</from-view-id>
</navigation-case> <navigation-case>
<navigation-case> <from-outcome>roleCreated</from-outcome>
<from-outcome>viewExpired</from-outcome> <to-view-id>/role/edit.xhtml</to-view-id>
<to-view-id>/viewExpired.xhtml</to-view-id> </navigation-case>
</navigation-case> </navigation-rule>
<navigation-case> <navigation-rule>
<from-outcome>logout</from-outcome> <from-view-id>/user/list.xhtml</from-view-id>
<to-view-id>/auth/logout.xhtml</to-view-id> <navigation-case>
</navigation-case> <from-outcome>userEdit</from-outcome>
<navigation-case> <to-view-id>/user/edit.xhtml</to-view-id>
<from-outcome>loginSuccess</from-outcome> </navigation-case>
<to-view-id>/NotImplementedYet.xhtml</to-view-id> </navigation-rule>
</navigation-case> <navigation-rule>
<navigation-case> <from-view-id>/user/edit.xhtml</from-view-id>
<from-outcome>loginFailed</from-outcome> <navigation-case>
<to-view-id>/NotImplementedYet.xhtml</to-view-id> <from-outcome>userSave</from-outcome>
</navigation-case> <to-view-id>/user/edit.xhtml</to-view-id>
</navigation-rule> </navigation-case>
<navigation-rule> </navigation-rule>
<from-view-id>/role/edit.xhtml</from-view-id> <navigation-rule>
<navigation-case> <from-view-id>/role/list.xhtml</from-view-id>
<from-outcome>roleSaved</from-outcome> <navigation-case>
<to-view-id>/role/edit.xhtml</to-view-id> <from-outcome>roleEdit</from-outcome>
</navigation-case> <to-view-id>/role/edit.xhtml</to-view-id>
</navigation-rule> </navigation-case>
<factory> </navigation-rule>
<exception-handler-factory>fi.insomnia.bortal.exceptions.BortalExceptionHandlerFactory</exception-handler-factory>
</factory> <navigation-rule>
<from-view-id>*</from-view-id>
<navigation-case>
<from-outcome>frontpage</from-outcome>
<to-view-id>/news/frontpage.xhtml</to-view-id>
</navigation-case>
<navigation-case>
<from-outcome>userprefs</from-outcome>
<to-view-id>/news/edit.xhtml</to-view-id>
</navigation-case>
<navigation-case>
<from-outcome>shopfrontpage</from-outcome>
<to-view-id>/product/createBill.xhtml</to-view-id>
</navigation-case>
<navigation-case>
<from-outcome>adminfront</from-outcome>
<to-view-id>/admin/frontpage.xhtml</to-view-id>
</navigation-case>
<navigation-case>
<from-outcome>permissionDenied</from-outcome>
<to-view-id>/permissionDenied.xhtml</to-view-id>
</navigation-case>
<navigation-case>
<from-outcome>viewExpired</from-outcome>
<to-view-id>/viewExpired.xhtml</to-view-id>
</navigation-case>
<navigation-case>
<from-outcome>logout</from-outcome>
<to-view-id>/auth/logout.xhtml</to-view-id>
</navigation-case>
<navigation-case>
<from-outcome>loginSuccess</from-outcome>
<to-view-id>/NotImplementedYet.xhtml</to-view-id>
</navigation-case>
<navigation-case>
<from-outcome>loginFailed</from-outcome>
<to-view-id>/NotImplementedYet.xhtml</to-view-id>
</navigation-case>
</navigation-rule>
<navigation-rule>
<from-view-id>/role/edit.xhtml</from-view-id>
<navigation-case>
<from-outcome>roleSaved</from-outcome>
<to-view-id>/role/edit.xhtml</to-view-id>
</navigation-case>
</navigation-rule>
<factory>
<exception-handler-factory>fi.insomnia.bortal.exceptions.BortalExceptionHandlerFactory</exception-handler-factory>
</factory>
</faces-config> </faces-config>
......
...@@ -14,11 +14,15 @@ ...@@ -14,11 +14,15 @@
<role-name>USER_BASE</role-name> <role-name>USER_BASE</role-name>
<group-name>USER_BASE</group-name> <group-name>USER_BASE</group-name>
</security-role-mapping> </security-role-mapping>
<class-loader delegate="true" /> <class-loader delegate="true"/>
<jsp-config> <jsp-config>
<property name="keepgenerated" value="true"> <property name="keepgenerated" value="true">
<description>Keep a copy of the generated servlet class java code.</description> <description>Keep a copy of the generated servlet class java code.</description>
</property> </property>
</jsp-config> </jsp-config>
<locale-charset-info default-locale="">
<locale-charset-map locale="" charset=""/>
<parameter-encoding default-charset="UTF-8"/>
</locale-charset-info>
</sun-web-app> </sun-web-app>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
MOI!
</body>
</html>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8" ?> <?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" <html
xmlns:h="http://java.sun.com/jsf/html" xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html"
xmlns:tools="http://java.sun.com/jsf/composite/tools" xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets"> xmlns:tools="http://java.sun.com/jsf/composite/tools"
<f:view locale="#{userView.locale}">
<h:head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title><ui:insert name="title">Default title</ui:insert></title>
<!-- **** layout stylesheet **** -->
<link rel="stylesheet" type="text/css" href="#{request.contextPath}/resources/style/style.css" />
<!-- **** colour scheme stylesheet **** --> xmlns:layout="http://java.sun.com/jsf/composite/tools/layout"
<link rel="stylesheet" type="text/css" href="#{request.contextPath}/resources/style/green.css" /> xmlns:ui="http://java.sun.com/jsf/facelets">
</h:head>
<h:body>
<div id="main">
<div id="links">
<!-- **** INSERT LINKS HERE **** -->
<ui:insert name="somelinks">
<a href="http://www.insomnia.fi">www.insomnia.fi</a> <tools:loginLogout />
</ui:insert>
</div>
<div id="logo"><h1><ui:insert name="globaltitle">Lan Bortal</ui:insert></h1></div>
<div id="menu">
<ui:insert name="toplinks"><ui:include src="/layout/toplinks.xhtml" /></ui:insert>
</div>
<div id="content">
<div id="column1">
<div class="sidebaritem">
<div class="sbihead">
<h1>additional links</h1>
</div>
<div class="sbilinks">
<!-- **** INSERT ADDITIONAL LINKS HERE **** -->
<ui:insert name="sidelinks">
<ul>
<li><a href="http://www.openwebdesign.org">open web design</a></li>
<li><a href="http://www.w3schools.com/xhtml/default.asp">learn XHTML</a></li>
<li><a href="http://www.w3schools.com/css/default.asp">learn CSS</a></li>
<li><a href="http://www.mozilla.com/firefox">get firefox</a></li>
</ul>
</ui:insert>
</div>
</div>
<div class="sidebaritem">
<div class="sbihead">
<h1>latest news</h1>
</div>
<div class="sbicontent">
<!-- **** INSERT NEWS ITEMS HERE **** -->
<h2>01.09.2006</h2>
<p>This is where you can put your latest news.</p>
<p><a href="#">read more ...</a></p>
<p></p>
<p></p>
<h2>01.09.2006</h2>
<p>This is where you can put your latest news.</p>
<p><a href="#">read more ...</a></p>
</div>
</div>
<div class="sidebaritem">
<div class="sbihead">
<h1>other information</h1>
</div>
<div class="sbicontent">
<!-- **** INSERT OTHER INFORMATION HERE **** -->
<p>
This space can be used for additional information such as a contact phone number, address
or maybe even a graphic.
</p>
</div>
</div>
</div>
<div id="column2">
<h:messages globalOnly="true"/>
<h:body>
<ui:insert name="content"> <ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml" >
Default content.. <ui:define name="title"><ui:insert name="title" /></ui:define>
</ui:insert> <ui:define name="topmenu"><layout:toplinks selected="frontpage" /></ui:define>
</div> <ui:define name="content"><ui:insert name="content" /></ui:define>
</div> </ui:composition>
<div id="footer">
copyright &copy; Insomnia Ry, Stream Ry, Vector Ry | <a href="#">email@emailaddress</a> | <a href="http://validator.w3.org/check?uri=referer">XHTML 1.1</a> | <a href="http://jigsaw.w3.org/css-validator/check/referer">CSS</a> | <a href="http://www.dcarter.co.uk">design by dcarter</a>
</div>
</div>
</h:body> </h:body>
</f:view>
</html> </html>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html
xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:tools="http://java.sun.com/jsf/composite/tools"
xmlns:ui="http://java.sun.com/jsf/facelets" >
<h:head>
</h:head>
<h:body>
<ui:component><div class="link#{ isSelected ?'a': ''}" ><ui:insert name="link" /></div></ui:component>
</h:body>
</html>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html
xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:tools="http://java.sun.com/jsf/composite/tools"
xmlns:ui="http://java.sun.com/jsf/facelets">
<f:view locale="#{sessionHandler.locale}">
<h:head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Omnia <ui:insert name="title"></ui:insert></title>
<link rel="stylesheet" type="text/css" href="#{request.contextPath}/resources/style/insomnia1/style.css" />
</h:head>
<h:body>
<div id="wrapper">
<div id="navigation">
<img id="head" src="#{request.contextPath}/resources/style/insomnia1/img/header.gif" alt="" />
<div style="float: left" >
<div id="headerbox"><tools:loginLogout /></div>
<div><ui:insert name="topmenu" /></div>
</div>
</div>
<div id="content">
<div id="cwrap">
<h:messages globalOnly="true" />
<h:messages />
<ui:insert name="content" />
</div>
</div>
<div id="footer">#{i18n['copyright']}</div>
</div>
</h:body>
</f:view>
</html>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html
xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:tools="http://java.sun.com/jsf/composite/tools"
xmlns:ui="http://java.sun.com/jsf/facelets">
<f:view locale="#{userView.locale}">
<h:head>
<meta
http-equiv="Content-Type"
content="text/html; charset=UTF-8" />
<title><ui:insert name="title">Default title</ui:insert></title>
<!-- **** layout stylesheet **** -->
<link
rel="stylesheet"
type="text/css"
href="#{request.contextPath}/resources/style/style.css" />
<!-- **** colour scheme stylesheet **** -->
<link
rel="stylesheet"
type="text/css"
href="#{request.contextPath}/resources/style/green.css" />
</h:head>
<h:body>
<div id="main">
<div id="links"><!-- **** INSERT LINKS HERE **** --> <ui:insert name="somelinks">
<a href="http://www.insomnia.fi">www.insomnia.fi</a>
<tools:loginLogout />
</ui:insert></div>
<div id="logo">
<h1><ui:insert name="globaltitle">Lan Bortal</ui:insert></h1>
</div>
<div id="menu"><ui:insert name="toplinks">
<ui:include src="/layout/toplinks.xhtml" />
</ui:insert></div>
<div id="content">
<div id="column1">
<div class="sidebaritem">
<div class="sbihead">
<h1>additional links</h1>
</div>
<div class="sbilinks"><!-- **** INSERT ADDITIONAL LINKS HERE **** --> <ui:insert name="sidelinks">
<ul>
<li><a href="http://www.openwebdesign.org">open web design</a></li>
<li><a href="http://www.w3schools.com/xhtml/default.asp">learn XHTML</a></li>
<li><a href="http://www.w3schools.com/css/default.asp">learn CSS</a></li>
<li><a href="http://www.mozilla.com/firefox">get firefox</a></li>
</ul>
</ui:insert></div>
</div>
<div class="sidebaritem">
<div class="sbihead">
<h1>latest news</h1>
</div>
<div class="sbicontent"><!-- **** INSERT NEWS ITEMS HERE **** -->
<h2>01.09.2006</h2>
<p>This is where you can put your latest news.</p>
<p><a href="#">read more ...</a></p>
<p></p>
<p></p>
<h2>01.09.2006</h2>
<p>This is where you can put your latest news.</p>
<p><a href="#">read more ...</a></p>
</div>
</div>
<div class="sidebaritem">
<div class="sbihead">
<h1>other information</h1>
</div>
<div class="sbicontent"><!-- **** INSERT OTHER INFORMATION HERE **** -->
<p>This space can be used for additional information such as a contact phone number, address or maybe even a graphic.</p>
</div>
</div>
</div>
<div id="column2"><h:messages globalOnly="true" />
<h:messages />
<ui:insert name="content">
Default content..
</ui:insert></div>
</div>
<div id="footer"><h:outputText value="#{i18n[copyright]}" /><a href="#">email@emailaddress</a> | <a href="http://validator.w3.org/check?uri=referer">XHTML 1.1</a> | <a href="http://jigsaw.w3.org/css-validator/check/referer">CSS</a> | <a href="http://www.dcarter.co.uk">design by dcarter</a></div>
</div>
</h:body>
</f:view>
</html>
\ No newline at end of file
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets">
<ul>
<!-- **** INSERT NAVIGATION ITEMS HERE (use id="selected" to identify the page you're on **** -->
<li><a id="selected" href="#">home</a></li>
<li><a href="#">page 1</a></li>
<li><a href="#">page 2</a></li>
<li><a href="#">page 3</a></li>
<li><a href="#">contact</a></li>
</ul>
</ui:composition>
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html
xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:products="http://java.sun.com/jsf/composite/tools/products">
<h:body>
<ui:composition template="/layout/default-template.xhtml">
<ui:define name="title">CreateUser</ui:define>
<ui:define name="header">Add new user</ui:define>
<ui:define name="content">
<products:create />
</ui:define>
</ui:composition>
</h:body>
</html>
\ No newline at end of file
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html
xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:tools="http://java.sun.com/jsf/composite/tools"
xmlns:products="http://java.sun.com/jsf/composite/tools/products"
xmlns:f="http://java.sun.com/jsf/core">
<h:body>
<ui:composition template="/layout/default-template.xhtml">
<ui:define name="title">Users</ui:define>
<ui:define name="header">Edit user</ui:define>
<ui:define name="content">
<h:outputScript target="head" library="script" name="jquery.min.js" />
<h:outputScript target="head" library="script" name="shopscript.js" />
<tools:canRead id ="authcont" target="PRODUCT">
<products:shop items="#{productShopView.billCart}" commitValue="#{i18n['productshop.commit']}" >
<f:actionListener for="commitbutton" binding="#{productShopView.commitBillCart()}" />
</products:shop>
</tools:canRead>
</ui:define>
<ui:define name="footer">footer</ui:define>
</ui:composition>
</h:body>
</html>
\ No newline at end of file
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html <html
xmlns="http://www.w3.org/1999/xhtml" xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html" xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core" xmlns:f="http://java.sun.com/jsf/core"
xmlns:shop="http://java.sun.com/jsf/composite/tools/shop" xmlns:c="http://java.sun.com/jsp/jstl/core"
> xmlns:products="http://java.sun.com/jsf/composite/tools/products">
<h:head> <h:head>
<title></title> <title></title>
</h:head> </h:head>
<h:body> <h:body>
<ui:composition template="/layout/default-template.xhtml"> <ui:composition template="/layout/default-template.xhtml">
<ui:define name="title">Omnia</ui:define> <ui:define name="title">CreateUser</ui:define>
<ui:define name="header">Lippukauppa</ui:define> <ui:define name="header">Add new user</ui:define>
<ui:define name="content"> <ui:define name="content">
<shop:productlist /> <products:edit />
</ui:define> </ui:define>
<ui:define name="footer">Osta liput</ui:define> </ui:composition>
</ui:composition> </h:body>
</h:body>
</html> </html>
\ No newline at end of file
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html
xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:products="http://java.sun.com/jsf/composite/tools/products"
xmlns:f="http://java.sun.com/jsf/core">
<h:body>
<ui:composition template="/layout/default-template.xhtml">
<ui:define name="title">Users</ui:define>
<ui:define name="header">Edit user</ui:define>
<ui:define name="content">
<products:list />
</ui:define>
<ui:define name="footer">footer</ui:define>
</ui:composition>
</h:body>
</html>
\ No newline at end of file
/*!
* jQuery JavaScript Library v1.4.2
* http://jquery.com/
*
* Copyright 2010, John Resig
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* Includes Sizzle.js
* http://sizzlejs.com/
* Copyright 2010, The Dojo Foundation
* Released under the MIT, BSD, and GPL Licenses.
*
* Date: Sat Feb 13 22:33:48 2010 -0500
*/
(function(A,w){function ma(){if(!c.isReady){try{s.documentElement.doScroll("left")}catch(a){setTimeout(ma,1);return}c.ready()}}function Qa(a,b){b.src?c.ajax({url:b.src,async:false,dataType:"script"}):c.globalEval(b.text||b.textContent||b.innerHTML||"");b.parentNode&&b.parentNode.removeChild(b)}function X(a,b,d,f,e,j){var i=a.length;if(typeof b==="object"){for(var o in b)X(a,o,b[o],f,e,d);return a}if(d!==w){f=!j&&f&&c.isFunction(d);for(o=0;o<i;o++)e(a[o],b,f?d.call(a[o],o,e(a[o],b)):d,j);return a}return i?
e(a[0],b):w}function J(){return(new Date).getTime()}function Y(){return false}function Z(){return true}function na(a,b,d){d[0].type=a;return c.event.handle.apply(b,d)}function oa(a){var b,d=[],f=[],e=arguments,j,i,o,k,n,r;i=c.data(this,"events");if(!(a.liveFired===this||!i||!i.live||a.button&&a.type==="click")){a.liveFired=this;var u=i.live.slice(0);for(k=0;k<u.length;k++){i=u[k];i.origType.replace(O,"")===a.type?f.push(i.selector):u.splice(k--,1)}j=c(a.target).closest(f,a.currentTarget);n=0;for(r=
j.length;n<r;n++)for(k=0;k<u.length;k++){i=u[k];if(j[n].selector===i.selector){o=j[n].elem;f=null;if(i.preType==="mouseenter"||i.preType==="mouseleave")f=c(a.relatedTarget).closest(i.selector)[0];if(!f||f!==o)d.push({elem:o,handleObj:i})}}n=0;for(r=d.length;n<r;n++){j=d[n];a.currentTarget=j.elem;a.data=j.handleObj.data;a.handleObj=j.handleObj;if(j.handleObj.origHandler.apply(j.elem,e)===false){b=false;break}}return b}}function pa(a,b){return"live."+(a&&a!=="*"?a+".":"")+b.replace(/\./g,"`").replace(/ /g,
"&")}function qa(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function ra(a,b){var d=0;b.each(function(){if(this.nodeName===(a[d]&&a[d].nodeName)){var f=c.data(a[d++]),e=c.data(this,f);if(f=f&&f.events){delete e.handle;e.events={};for(var j in f)for(var i in f[j])c.event.add(this,j,f[j][i],f[j][i].data)}}})}function sa(a,b,d){var f,e,j;b=b&&b[0]?b[0].ownerDocument||b[0]:s;if(a.length===1&&typeof a[0]==="string"&&a[0].length<512&&b===s&&!ta.test(a[0])&&(c.support.checkClone||!ua.test(a[0]))){e=
true;if(j=c.fragments[a[0]])if(j!==1)f=j}if(!f){f=b.createDocumentFragment();c.clean(a,b,f,d)}if(e)c.fragments[a[0]]=j?f:1;return{fragment:f,cacheable:e}}function K(a,b){var d={};c.each(va.concat.apply([],va.slice(0,b)),function(){d[this]=a});return d}function wa(a){return"scrollTo"in a&&a.document?a:a.nodeType===9?a.defaultView||a.parentWindow:false}var c=function(a,b){return new c.fn.init(a,b)},Ra=A.jQuery,Sa=A.$,s=A.document,T,Ta=/^[^<]*(<[\w\W]+>)[^>]*$|^#([\w-]+)$/,Ua=/^.[^:#\[\.,]*$/,Va=/\S/,
Wa=/^(\s|\u00A0)+|(\s|\u00A0)+$/g,Xa=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,P=navigator.userAgent,xa=false,Q=[],L,$=Object.prototype.toString,aa=Object.prototype.hasOwnProperty,ba=Array.prototype.push,R=Array.prototype.slice,ya=Array.prototype.indexOf;c.fn=c.prototype={init:function(a,b){var d,f;if(!a)return this;if(a.nodeType){this.context=this[0]=a;this.length=1;return this}if(a==="body"&&!b){this.context=s;this[0]=s.body;this.selector="body";this.length=1;return this}if(typeof a==="string")if((d=Ta.exec(a))&&
(d[1]||!b))if(d[1]){f=b?b.ownerDocument||b:s;if(a=Xa.exec(a))if(c.isPlainObject(b)){a=[s.createElement(a[1])];c.fn.attr.call(a,b,true)}else a=[f.createElement(a[1])];else{a=sa([d[1]],[f]);a=(a.cacheable?a.fragment.cloneNode(true):a.fragment).childNodes}return c.merge(this,a)}else{if(b=s.getElementById(d[2])){if(b.id!==d[2])return T.find(a);this.length=1;this[0]=b}this.context=s;this.selector=a;return this}else if(!b&&/^\w+$/.test(a)){this.selector=a;this.context=s;a=s.getElementsByTagName(a);return c.merge(this,
a)}else return!b||b.jquery?(b||T).find(a):c(b).find(a);else if(c.isFunction(a))return T.ready(a);if(a.selector!==w){this.selector=a.selector;this.context=a.context}return c.makeArray(a,this)},selector:"",jquery:"1.4.2",length:0,size:function(){return this.length},toArray:function(){return R.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this.slice(a)[0]:this[a]},pushStack:function(a,b,d){var f=c();c.isArray(a)?ba.apply(f,a):c.merge(f,a);f.prevObject=this;f.context=this.context;if(b===
"find")f.selector=this.selector+(this.selector?" ":"")+d;else if(b)f.selector=this.selector+"."+b+"("+d+")";return f},each:function(a,b){return c.each(this,a,b)},ready:function(a){c.bindReady();if(c.isReady)a.call(s,c);else Q&&Q.push(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(R.apply(this,arguments),"slice",R.call(arguments).join(","))},map:function(a){return this.pushStack(c.map(this,
function(b,d){return a.call(b,d,b)}))},end:function(){return this.prevObject||c(null)},push:ba,sort:[].sort,splice:[].splice};c.fn.init.prototype=c.fn;c.extend=c.fn.extend=function(){var a=arguments[0]||{},b=1,d=arguments.length,f=false,e,j,i,o;if(typeof a==="boolean"){f=a;a=arguments[1]||{};b=2}if(typeof a!=="object"&&!c.isFunction(a))a={};if(d===b){a=this;--b}for(;b<d;b++)if((e=arguments[b])!=null)for(j in e){i=a[j];o=e[j];if(a!==o)if(f&&o&&(c.isPlainObject(o)||c.isArray(o))){i=i&&(c.isPlainObject(i)||
c.isArray(i))?i:c.isArray(o)?[]:{};a[j]=c.extend(f,i,o)}else if(o!==w)a[j]=o}return a};c.extend({noConflict:function(a){A.$=Sa;if(a)A.jQuery=Ra;return c},isReady:false,ready:function(){if(!c.isReady){if(!s.body)return setTimeout(c.ready,13);c.isReady=true;if(Q){for(var a,b=0;a=Q[b++];)a.call(s,c);Q=null}c.fn.triggerHandler&&c(s).triggerHandler("ready")}},bindReady:function(){if(!xa){xa=true;if(s.readyState==="complete")return c.ready();if(s.addEventListener){s.addEventListener("DOMContentLoaded",
L,false);A.addEventListener("load",c.ready,false)}else if(s.attachEvent){s.attachEvent("onreadystatechange",L);A.attachEvent("onload",c.ready);var a=false;try{a=A.frameElement==null}catch(b){}s.documentElement.doScroll&&a&&ma()}}},isFunction:function(a){return $.call(a)==="[object Function]"},isArray:function(a){return $.call(a)==="[object Array]"},isPlainObject:function(a){if(!a||$.call(a)!=="[object Object]"||a.nodeType||a.setInterval)return false;if(a.constructor&&!aa.call(a,"constructor")&&!aa.call(a.constructor.prototype,
"isPrototypeOf"))return false;var b;for(b in a);return b===w||aa.call(a,b)},isEmptyObject:function(a){for(var b in a)return false;return true},error:function(a){throw a;},parseJSON:function(a){if(typeof a!=="string"||!a)return null;a=c.trim(a);if(/^[\],:{}\s]*$/.test(a.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]").replace(/(?:^|:|,)(?:\s*\[)+/g,"")))return A.JSON&&A.JSON.parse?A.JSON.parse(a):(new Function("return "+
a))();else c.error("Invalid JSON: "+a)},noop:function(){},globalEval:function(a){if(a&&Va.test(a)){var b=s.getElementsByTagName("head")[0]||s.documentElement,d=s.createElement("script");d.type="text/javascript";if(c.support.scriptEval)d.appendChild(s.createTextNode(a));else d.text=a;b.insertBefore(d,b.firstChild);b.removeChild(d)}},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,b,d){var f,e=0,j=a.length,i=j===w||c.isFunction(a);if(d)if(i)for(f in a){if(b.apply(a[f],
d)===false)break}else for(;e<j;){if(b.apply(a[e++],d)===false)break}else if(i)for(f in a){if(b.call(a[f],f,a[f])===false)break}else for(d=a[0];e<j&&b.call(d,e,d)!==false;d=a[++e]);return a},trim:function(a){return(a||"").replace(Wa,"")},makeArray:function(a,b){b=b||[];if(a!=null)a.length==null||typeof a==="string"||c.isFunction(a)||typeof a!=="function"&&a.setInterval?ba.call(b,a):c.merge(b,a);return b},inArray:function(a,b){if(b.indexOf)return b.indexOf(a);for(var d=0,f=b.length;d<f;d++)if(b[d]===
a)return d;return-1},merge:function(a,b){var d=a.length,f=0;if(typeof b.length==="number")for(var e=b.length;f<e;f++)a[d++]=b[f];else for(;b[f]!==w;)a[d++]=b[f++];a.length=d;return a},grep:function(a,b,d){for(var f=[],e=0,j=a.length;e<j;e++)!d!==!b(a[e],e)&&f.push(a[e]);return f},map:function(a,b,d){for(var f=[],e,j=0,i=a.length;j<i;j++){e=b(a[j],j,d);if(e!=null)f[f.length]=e}return f.concat.apply([],f)},guid:1,proxy:function(a,b,d){if(arguments.length===2)if(typeof b==="string"){d=a;a=d[b];b=w}else if(b&&
!c.isFunction(b)){d=b;b=w}if(!b&&a)b=function(){return a.apply(d||this,arguments)};if(a)b.guid=a.guid=a.guid||b.guid||c.guid++;return b},uaMatch:function(a){a=a.toLowerCase();a=/(webkit)[ \/]([\w.]+)/.exec(a)||/(opera)(?:.*version)?[ \/]([\w.]+)/.exec(a)||/(msie) ([\w.]+)/.exec(a)||!/compatible/.test(a)&&/(mozilla)(?:.*? rv:([\w.]+))?/.exec(a)||[];return{browser:a[1]||"",version:a[2]||"0"}},browser:{}});P=c.uaMatch(P);if(P.browser){c.browser[P.browser]=true;c.browser.version=P.version}if(c.browser.webkit)c.browser.safari=
true;if(ya)c.inArray=function(a,b){return ya.call(b,a)};T=c(s);if(s.addEventListener)L=function(){s.removeEventListener("DOMContentLoaded",L,false);c.ready()};else if(s.attachEvent)L=function(){if(s.readyState==="complete"){s.detachEvent("onreadystatechange",L);c.ready()}};(function(){c.support={};var a=s.documentElement,b=s.createElement("script"),d=s.createElement("div"),f="script"+J();d.style.display="none";d.innerHTML=" <link/><table></table><a href='/a' style='color:red;float:left;opacity:.55;'>a</a><input type='checkbox'/>";
var e=d.getElementsByTagName("*"),j=d.getElementsByTagName("a")[0];if(!(!e||!e.length||!j)){c.support={leadingWhitespace:d.firstChild.nodeType===3,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/red/.test(j.getAttribute("style")),hrefNormalized:j.getAttribute("href")==="/a",opacity:/^0.55$/.test(j.style.opacity),cssFloat:!!j.style.cssFloat,checkOn:d.getElementsByTagName("input")[0].value==="on",optSelected:s.createElement("select").appendChild(s.createElement("option")).selected,
parentNode:d.removeChild(d.appendChild(s.createElement("div"))).parentNode===null,deleteExpando:true,checkClone:false,scriptEval:false,noCloneEvent:true,boxModel:null};b.type="text/javascript";try{b.appendChild(s.createTextNode("window."+f+"=1;"))}catch(i){}a.insertBefore(b,a.firstChild);if(A[f]){c.support.scriptEval=true;delete A[f]}try{delete b.test}catch(o){c.support.deleteExpando=false}a.removeChild(b);if(d.attachEvent&&d.fireEvent){d.attachEvent("onclick",function k(){c.support.noCloneEvent=
false;d.detachEvent("onclick",k)});d.cloneNode(true).fireEvent("onclick")}d=s.createElement("div");d.innerHTML="<input type='radio' name='radiotest' checked='checked'/>";a=s.createDocumentFragment();a.appendChild(d.firstChild);c.support.checkClone=a.cloneNode(true).cloneNode(true).lastChild.checked;c(function(){var k=s.createElement("div");k.style.width=k.style.paddingLeft="1px";s.body.appendChild(k);c.boxModel=c.support.boxModel=k.offsetWidth===2;s.body.removeChild(k).style.display="none"});a=function(k){var n=
s.createElement("div");k="on"+k;var r=k in n;if(!r){n.setAttribute(k,"return;");r=typeof n[k]==="function"}return r};c.support.submitBubbles=a("submit");c.support.changeBubbles=a("change");a=b=d=e=j=null}})();c.props={"for":"htmlFor","class":"className",readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",colspan:"colSpan",tabindex:"tabIndex",usemap:"useMap",frameborder:"frameBorder"};var G="jQuery"+J(),Ya=0,za={};c.extend({cache:{},expando:G,noData:{embed:true,object:true,
applet:true},data:function(a,b,d){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var f=a[G],e=c.cache;if(!f&&typeof b==="string"&&d===w)return null;f||(f=++Ya);if(typeof b==="object"){a[G]=f;e[f]=c.extend(true,{},b)}else if(!e[f]){a[G]=f;e[f]={}}a=e[f];if(d!==w)a[b]=d;return typeof b==="string"?a[b]:a}},removeData:function(a,b){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var d=a[G],f=c.cache,e=f[d];if(b){if(e){delete e[b];c.isEmptyObject(e)&&c.removeData(a)}}else{if(c.support.deleteExpando)delete a[c.expando];
else a.removeAttribute&&a.removeAttribute(c.expando);delete f[d]}}}});c.fn.extend({data:function(a,b){if(typeof a==="undefined"&&this.length)return c.data(this[0]);else if(typeof a==="object")return this.each(function(){c.data(this,a)});var d=a.split(".");d[1]=d[1]?"."+d[1]:"";if(b===w){var f=this.triggerHandler("getData"+d[1]+"!",[d[0]]);if(f===w&&this.length)f=c.data(this[0],a);return f===w&&d[1]?this.data(d[0]):f}else return this.trigger("setData"+d[1]+"!",[d[0],b]).each(function(){c.data(this,
a,b)})},removeData:function(a){return this.each(function(){c.removeData(this,a)})}});c.extend({queue:function(a,b,d){if(a){b=(b||"fx")+"queue";var f=c.data(a,b);if(!d)return f||[];if(!f||c.isArray(d))f=c.data(a,b,c.makeArray(d));else f.push(d);return f}},dequeue:function(a,b){b=b||"fx";var d=c.queue(a,b),f=d.shift();if(f==="inprogress")f=d.shift();if(f){b==="fx"&&d.unshift("inprogress");f.call(a,function(){c.dequeue(a,b)})}}});c.fn.extend({queue:function(a,b){if(typeof a!=="string"){b=a;a="fx"}if(b===
w)return c.queue(this[0],a);return this.each(function(){var d=c.queue(this,a,b);a==="fx"&&d[0]!=="inprogress"&&c.dequeue(this,a)})},dequeue:function(a){return this.each(function(){c.dequeue(this,a)})},delay:function(a,b){a=c.fx?c.fx.speeds[a]||a:a;b=b||"fx";return this.queue(b,function(){var d=this;setTimeout(function(){c.dequeue(d,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])}});var Aa=/[\n\t]/g,ca=/\s+/,Za=/\r/g,$a=/href|src|style/,ab=/(button|input)/i,bb=/(button|input|object|select|textarea)/i,
cb=/^(a|area)$/i,Ba=/radio|checkbox/;c.fn.extend({attr:function(a,b){return X(this,a,b,true,c.attr)},removeAttr:function(a){return this.each(function(){c.attr(this,a,"");this.nodeType===1&&this.removeAttribute(a)})},addClass:function(a){if(c.isFunction(a))return this.each(function(n){var r=c(this);r.addClass(a.call(this,n,r.attr("class")))});if(a&&typeof a==="string")for(var b=(a||"").split(ca),d=0,f=this.length;d<f;d++){var e=this[d];if(e.nodeType===1)if(e.className){for(var j=" "+e.className+" ",
i=e.className,o=0,k=b.length;o<k;o++)if(j.indexOf(" "+b[o]+" ")<0)i+=" "+b[o];e.className=c.trim(i)}else e.className=a}return this},removeClass:function(a){if(c.isFunction(a))return this.each(function(k){var n=c(this);n.removeClass(a.call(this,k,n.attr("class")))});if(a&&typeof a==="string"||a===w)for(var b=(a||"").split(ca),d=0,f=this.length;d<f;d++){var e=this[d];if(e.nodeType===1&&e.className)if(a){for(var j=(" "+e.className+" ").replace(Aa," "),i=0,o=b.length;i<o;i++)j=j.replace(" "+b[i]+" ",
" ");e.className=c.trim(j)}else e.className=""}return this},toggleClass:function(a,b){var d=typeof a,f=typeof b==="boolean";if(c.isFunction(a))return this.each(function(e){var j=c(this);j.toggleClass(a.call(this,e,j.attr("class"),b),b)});return this.each(function(){if(d==="string")for(var e,j=0,i=c(this),o=b,k=a.split(ca);e=k[j++];){o=f?o:!i.hasClass(e);i[o?"addClass":"removeClass"](e)}else if(d==="undefined"||d==="boolean"){this.className&&c.data(this,"__className__",this.className);this.className=
this.className||a===false?"":c.data(this,"__className__")||""}})},hasClass:function(a){a=" "+a+" ";for(var b=0,d=this.length;b<d;b++)if((" "+this[b].className+" ").replace(Aa," ").indexOf(a)>-1)return true;return false},val:function(a){if(a===w){var b=this[0];if(b){if(c.nodeName(b,"option"))return(b.attributes.value||{}).specified?b.value:b.text;if(c.nodeName(b,"select")){var d=b.selectedIndex,f=[],e=b.options;b=b.type==="select-one";if(d<0)return null;var j=b?d:0;for(d=b?d+1:e.length;j<d;j++){var i=
e[j];if(i.selected){a=c(i).val();if(b)return a;f.push(a)}}return f}if(Ba.test(b.type)&&!c.support.checkOn)return b.getAttribute("value")===null?"on":b.value;return(b.value||"").replace(Za,"")}return w}var o=c.isFunction(a);return this.each(function(k){var n=c(this),r=a;if(this.nodeType===1){if(o)r=a.call(this,k,n.val());if(typeof r==="number")r+="";if(c.isArray(r)&&Ba.test(this.type))this.checked=c.inArray(n.val(),r)>=0;else if(c.nodeName(this,"select")){var u=c.makeArray(r);c("option",this).each(function(){this.selected=
c.inArray(c(this).val(),u)>=0});if(!u.length)this.selectedIndex=-1}else this.value=r}})}});c.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(a,b,d,f){if(!a||a.nodeType===3||a.nodeType===8)return w;if(f&&b in c.attrFn)return c(a)[b](d);f=a.nodeType!==1||!c.isXMLDoc(a);var e=d!==w;b=f&&c.props[b]||b;if(a.nodeType===1){var j=$a.test(b);if(b in a&&f&&!j){if(e){b==="type"&&ab.test(a.nodeName)&&a.parentNode&&c.error("type property can't be changed");
a[b]=d}if(c.nodeName(a,"form")&&a.getAttributeNode(b))return a.getAttributeNode(b).nodeValue;if(b==="tabIndex")return(b=a.getAttributeNode("tabIndex"))&&b.specified?b.value:bb.test(a.nodeName)||cb.test(a.nodeName)&&a.href?0:w;return a[b]}if(!c.support.style&&f&&b==="style"){if(e)a.style.cssText=""+d;return a.style.cssText}e&&a.setAttribute(b,""+d);a=!c.support.hrefNormalized&&f&&j?a.getAttribute(b,2):a.getAttribute(b);return a===null?w:a}return c.style(a,b,d)}});var O=/\.(.*)$/,db=function(a){return a.replace(/[^\w\s\.\|`]/g,
function(b){return"\\"+b})};c.event={add:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){if(a.setInterval&&a!==A&&!a.frameElement)a=A;var e,j;if(d.handler){e=d;d=e.handler}if(!d.guid)d.guid=c.guid++;if(j=c.data(a)){var i=j.events=j.events||{},o=j.handle;if(!o)j.handle=o=function(){return typeof c!=="undefined"&&!c.event.triggered?c.event.handle.apply(o.elem,arguments):w};o.elem=a;b=b.split(" ");for(var k,n=0,r;k=b[n++];){j=e?c.extend({},e):{handler:d,data:f};if(k.indexOf(".")>-1){r=k.split(".");
k=r.shift();j.namespace=r.slice(0).sort().join(".")}else{r=[];j.namespace=""}j.type=k;j.guid=d.guid;var u=i[k],z=c.event.special[k]||{};if(!u){u=i[k]=[];if(!z.setup||z.setup.call(a,f,r,o)===false)if(a.addEventListener)a.addEventListener(k,o,false);else a.attachEvent&&a.attachEvent("on"+k,o)}if(z.add){z.add.call(a,j);if(!j.handler.guid)j.handler.guid=d.guid}u.push(j);c.event.global[k]=true}a=null}}},global:{},remove:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){var e,j=0,i,o,k,n,r,u,z=c.data(a),
C=z&&z.events;if(z&&C){if(b&&b.type){d=b.handler;b=b.type}if(!b||typeof b==="string"&&b.charAt(0)==="."){b=b||"";for(e in C)c.event.remove(a,e+b)}else{for(b=b.split(" ");e=b[j++];){n=e;i=e.indexOf(".")<0;o=[];if(!i){o=e.split(".");e=o.shift();k=new RegExp("(^|\\.)"+c.map(o.slice(0).sort(),db).join("\\.(?:.*\\.)?")+"(\\.|$)")}if(r=C[e])if(d){n=c.event.special[e]||{};for(B=f||0;B<r.length;B++){u=r[B];if(d.guid===u.guid){if(i||k.test(u.namespace)){f==null&&r.splice(B--,1);n.remove&&n.remove.call(a,u)}if(f!=
null)break}}if(r.length===0||f!=null&&r.length===1){if(!n.teardown||n.teardown.call(a,o)===false)Ca(a,e,z.handle);delete C[e]}}else for(var B=0;B<r.length;B++){u=r[B];if(i||k.test(u.namespace)){c.event.remove(a,n,u.handler,B);r.splice(B--,1)}}}if(c.isEmptyObject(C)){if(b=z.handle)b.elem=null;delete z.events;delete z.handle;c.isEmptyObject(z)&&c.removeData(a)}}}}},trigger:function(a,b,d,f){var e=a.type||a;if(!f){a=typeof a==="object"?a[G]?a:c.extend(c.Event(e),a):c.Event(e);if(e.indexOf("!")>=0){a.type=
e=e.slice(0,-1);a.exclusive=true}if(!d){a.stopPropagation();c.event.global[e]&&c.each(c.cache,function(){this.events&&this.events[e]&&c.event.trigger(a,b,this.handle.elem)})}if(!d||d.nodeType===3||d.nodeType===8)return w;a.result=w;a.target=d;b=c.makeArray(b);b.unshift(a)}a.currentTarget=d;(f=c.data(d,"handle"))&&f.apply(d,b);f=d.parentNode||d.ownerDocument;try{if(!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()]))if(d["on"+e]&&d["on"+e].apply(d,b)===false)a.result=false}catch(j){}if(!a.isPropagationStopped()&&
f)c.event.trigger(a,b,f,true);else if(!a.isDefaultPrevented()){f=a.target;var i,o=c.nodeName(f,"a")&&e==="click",k=c.event.special[e]||{};if((!k._default||k._default.call(d,a)===false)&&!o&&!(f&&f.nodeName&&c.noData[f.nodeName.toLowerCase()])){try{if(f[e]){if(i=f["on"+e])f["on"+e]=null;c.event.triggered=true;f[e]()}}catch(n){}if(i)f["on"+e]=i;c.event.triggered=false}}},handle:function(a){var b,d,f,e;a=arguments[0]=c.event.fix(a||A.event);a.currentTarget=this;b=a.type.indexOf(".")<0&&!a.exclusive;
if(!b){d=a.type.split(".");a.type=d.shift();f=new RegExp("(^|\\.)"+d.slice(0).sort().join("\\.(?:.*\\.)?")+"(\\.|$)")}e=c.data(this,"events");d=e[a.type];if(e&&d){d=d.slice(0);e=0;for(var j=d.length;e<j;e++){var i=d[e];if(b||f.test(i.namespace)){a.handler=i.handler;a.data=i.data;a.handleObj=i;i=i.handler.apply(this,arguments);if(i!==w){a.result=i;if(i===false){a.preventDefault();a.stopPropagation()}}if(a.isImmediatePropagationStopped())break}}}return a.result},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),
fix:function(a){if(a[G])return a;var b=a;a=c.Event(b);for(var d=this.props.length,f;d;){f=this.props[--d];a[f]=b[f]}if(!a.target)a.target=a.srcElement||s;if(a.target.nodeType===3)a.target=a.target.parentNode;if(!a.relatedTarget&&a.fromElement)a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement;if(a.pageX==null&&a.clientX!=null){b=s.documentElement;d=s.body;a.pageX=a.clientX+(b&&b.scrollLeft||d&&d.scrollLeft||0)-(b&&b.clientLeft||d&&d.clientLeft||0);a.pageY=a.clientY+(b&&b.scrollTop||
d&&d.scrollTop||0)-(b&&b.clientTop||d&&d.clientTop||0)}if(!a.which&&(a.charCode||a.charCode===0?a.charCode:a.keyCode))a.which=a.charCode||a.keyCode;if(!a.metaKey&&a.ctrlKey)a.metaKey=a.ctrlKey;if(!a.which&&a.button!==w)a.which=a.button&1?1:a.button&2?3:a.button&4?2:0;return a},guid:1E8,proxy:c.proxy,special:{ready:{setup:c.bindReady,teardown:c.noop},live:{add:function(a){c.event.add(this,a.origType,c.extend({},a,{handler:oa}))},remove:function(a){var b=true,d=a.origType.replace(O,"");c.each(c.data(this,
"events").live||[],function(){if(d===this.origType.replace(O,""))return b=false});b&&c.event.remove(this,a.origType,oa)}},beforeunload:{setup:function(a,b,d){if(this.setInterval)this.onbeforeunload=d;return false},teardown:function(a,b){if(this.onbeforeunload===b)this.onbeforeunload=null}}}};var Ca=s.removeEventListener?function(a,b,d){a.removeEventListener(b,d,false)}:function(a,b,d){a.detachEvent("on"+b,d)};c.Event=function(a){if(!this.preventDefault)return new c.Event(a);if(a&&a.type){this.originalEvent=
a;this.type=a.type}else this.type=a;this.timeStamp=J();this[G]=true};c.Event.prototype={preventDefault:function(){this.isDefaultPrevented=Z;var a=this.originalEvent;if(a){a.preventDefault&&a.preventDefault();a.returnValue=false}},stopPropagation:function(){this.isPropagationStopped=Z;var a=this.originalEvent;if(a){a.stopPropagation&&a.stopPropagation();a.cancelBubble=true}},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=Z;this.stopPropagation()},isDefaultPrevented:Y,isPropagationStopped:Y,
isImmediatePropagationStopped:Y};var Da=function(a){var b=a.relatedTarget;try{for(;b&&b!==this;)b=b.parentNode;if(b!==this){a.type=a.data;c.event.handle.apply(this,arguments)}}catch(d){}},Ea=function(a){a.type=a.data;c.event.handle.apply(this,arguments)};c.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){c.event.special[a]={setup:function(d){c.event.add(this,b,d&&d.selector?Ea:Da,a)},teardown:function(d){c.event.remove(this,b,d&&d.selector?Ea:Da)}}});if(!c.support.submitBubbles)c.event.special.submit=
{setup:function(){if(this.nodeName.toLowerCase()!=="form"){c.event.add(this,"click.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="submit"||d==="image")&&c(b).closest("form").length)return na("submit",this,arguments)});c.event.add(this,"keypress.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="text"||d==="password")&&c(b).closest("form").length&&a.keyCode===13)return na("submit",this,arguments)})}else return false},teardown:function(){c.event.remove(this,".specialSubmit")}};
if(!c.support.changeBubbles){var da=/textarea|input|select/i,ea,Fa=function(a){var b=a.type,d=a.value;if(b==="radio"||b==="checkbox")d=a.checked;else if(b==="select-multiple")d=a.selectedIndex>-1?c.map(a.options,function(f){return f.selected}).join("-"):"";else if(a.nodeName.toLowerCase()==="select")d=a.selectedIndex;return d},fa=function(a,b){var d=a.target,f,e;if(!(!da.test(d.nodeName)||d.readOnly)){f=c.data(d,"_change_data");e=Fa(d);if(a.type!=="focusout"||d.type!=="radio")c.data(d,"_change_data",
e);if(!(f===w||e===f))if(f!=null||e){a.type="change";return c.event.trigger(a,b,d)}}};c.event.special.change={filters:{focusout:fa,click:function(a){var b=a.target,d=b.type;if(d==="radio"||d==="checkbox"||b.nodeName.toLowerCase()==="select")return fa.call(this,a)},keydown:function(a){var b=a.target,d=b.type;if(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(d==="checkbox"||d==="radio")||d==="select-multiple")return fa.call(this,a)},beforeactivate:function(a){a=a.target;c.data(a,
"_change_data",Fa(a))}},setup:function(){if(this.type==="file")return false;for(var a in ea)c.event.add(this,a+".specialChange",ea[a]);return da.test(this.nodeName)},teardown:function(){c.event.remove(this,".specialChange");return da.test(this.nodeName)}};ea=c.event.special.change.filters}s.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(f){f=c.event.fix(f);f.type=b;return c.event.handle.call(this,f)}c.event.special[b]={setup:function(){this.addEventListener(a,
d,true)},teardown:function(){this.removeEventListener(a,d,true)}}});c.each(["bind","one"],function(a,b){c.fn[b]=function(d,f,e){if(typeof d==="object"){for(var j in d)this[b](j,f,d[j],e);return this}if(c.isFunction(f)){e=f;f=w}var i=b==="one"?c.proxy(e,function(k){c(this).unbind(k,i);return e.apply(this,arguments)}):e;if(d==="unload"&&b!=="one")this.one(d,f,e);else{j=0;for(var o=this.length;j<o;j++)c.event.add(this[j],d,i,f)}return this}});c.fn.extend({unbind:function(a,b){if(typeof a==="object"&&
!a.preventDefault)for(var d in a)this.unbind(d,a[d]);else{d=0;for(var f=this.length;d<f;d++)c.event.remove(this[d],a,b)}return this},delegate:function(a,b,d,f){return this.live(b,d,f,a)},undelegate:function(a,b,d){return arguments.length===0?this.unbind("live"):this.die(b,null,d,a)},trigger:function(a,b){return this.each(function(){c.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0]){a=c.Event(a);a.preventDefault();a.stopPropagation();c.event.trigger(a,b,this[0]);return a.result}},
toggle:function(a){for(var b=arguments,d=1;d<b.length;)c.proxy(a,b[d++]);return this.click(c.proxy(a,function(f){var e=(c.data(this,"lastToggle"+a.guid)||0)%d;c.data(this,"lastToggle"+a.guid,e+1);f.preventDefault();return b[e].apply(this,arguments)||false}))},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var Ga={focus:"focusin",blur:"focusout",mouseenter:"mouseover",mouseleave:"mouseout"};c.each(["live","die"],function(a,b){c.fn[b]=function(d,f,e,j){var i,o=0,k,n,r=j||this.selector,
u=j?this:c(this.context);if(c.isFunction(f)){e=f;f=w}for(d=(d||"").split(" ");(i=d[o++])!=null;){j=O.exec(i);k="";if(j){k=j[0];i=i.replace(O,"")}if(i==="hover")d.push("mouseenter"+k,"mouseleave"+k);else{n=i;if(i==="focus"||i==="blur"){d.push(Ga[i]+k);i+=k}else i=(Ga[i]||i)+k;b==="live"?u.each(function(){c.event.add(this,pa(i,r),{data:f,selector:r,handler:e,origType:i,origHandler:e,preType:n})}):u.unbind(pa(i,r),e)}}return this}});c.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error".split(" "),
function(a,b){c.fn[b]=function(d){return d?this.bind(b,d):this.trigger(b)};if(c.attrFn)c.attrFn[b]=true});A.attachEvent&&!A.addEventListener&&A.attachEvent("onunload",function(){for(var a in c.cache)if(c.cache[a].handle)try{c.event.remove(c.cache[a].handle.elem)}catch(b){}});(function(){function a(g){for(var h="",l,m=0;g[m];m++){l=g[m];if(l.nodeType===3||l.nodeType===4)h+=l.nodeValue;else if(l.nodeType!==8)h+=a(l.childNodes)}return h}function b(g,h,l,m,q,p){q=0;for(var v=m.length;q<v;q++){var t=m[q];
if(t){t=t[g];for(var y=false;t;){if(t.sizcache===l){y=m[t.sizset];break}if(t.nodeType===1&&!p){t.sizcache=l;t.sizset=q}if(t.nodeName.toLowerCase()===h){y=t;break}t=t[g]}m[q]=y}}}function d(g,h,l,m,q,p){q=0;for(var v=m.length;q<v;q++){var t=m[q];if(t){t=t[g];for(var y=false;t;){if(t.sizcache===l){y=m[t.sizset];break}if(t.nodeType===1){if(!p){t.sizcache=l;t.sizset=q}if(typeof h!=="string"){if(t===h){y=true;break}}else if(k.filter(h,[t]).length>0){y=t;break}}t=t[g]}m[q]=y}}}var f=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
e=0,j=Object.prototype.toString,i=false,o=true;[0,0].sort(function(){o=false;return 0});var k=function(g,h,l,m){l=l||[];var q=h=h||s;if(h.nodeType!==1&&h.nodeType!==9)return[];if(!g||typeof g!=="string")return l;for(var p=[],v,t,y,S,H=true,M=x(h),I=g;(f.exec(""),v=f.exec(I))!==null;){I=v[3];p.push(v[1]);if(v[2]){S=v[3];break}}if(p.length>1&&r.exec(g))if(p.length===2&&n.relative[p[0]])t=ga(p[0]+p[1],h);else for(t=n.relative[p[0]]?[h]:k(p.shift(),h);p.length;){g=p.shift();if(n.relative[g])g+=p.shift();
t=ga(g,t)}else{if(!m&&p.length>1&&h.nodeType===9&&!M&&n.match.ID.test(p[0])&&!n.match.ID.test(p[p.length-1])){v=k.find(p.shift(),h,M);h=v.expr?k.filter(v.expr,v.set)[0]:v.set[0]}if(h){v=m?{expr:p.pop(),set:z(m)}:k.find(p.pop(),p.length===1&&(p[0]==="~"||p[0]==="+")&&h.parentNode?h.parentNode:h,M);t=v.expr?k.filter(v.expr,v.set):v.set;if(p.length>0)y=z(t);else H=false;for(;p.length;){var D=p.pop();v=D;if(n.relative[D])v=p.pop();else D="";if(v==null)v=h;n.relative[D](y,v,M)}}else y=[]}y||(y=t);y||k.error(D||
g);if(j.call(y)==="[object Array]")if(H)if(h&&h.nodeType===1)for(g=0;y[g]!=null;g++){if(y[g]&&(y[g]===true||y[g].nodeType===1&&E(h,y[g])))l.push(t[g])}else for(g=0;y[g]!=null;g++)y[g]&&y[g].nodeType===1&&l.push(t[g]);else l.push.apply(l,y);else z(y,l);if(S){k(S,q,l,m);k.uniqueSort(l)}return l};k.uniqueSort=function(g){if(B){i=o;g.sort(B);if(i)for(var h=1;h<g.length;h++)g[h]===g[h-1]&&g.splice(h--,1)}return g};k.matches=function(g,h){return k(g,null,null,h)};k.find=function(g,h,l){var m,q;if(!g)return[];
for(var p=0,v=n.order.length;p<v;p++){var t=n.order[p];if(q=n.leftMatch[t].exec(g)){var y=q[1];q.splice(1,1);if(y.substr(y.length-1)!=="\\"){q[1]=(q[1]||"").replace(/\\/g,"");m=n.find[t](q,h,l);if(m!=null){g=g.replace(n.match[t],"");break}}}}m||(m=h.getElementsByTagName("*"));return{set:m,expr:g}};k.filter=function(g,h,l,m){for(var q=g,p=[],v=h,t,y,S=h&&h[0]&&x(h[0]);g&&h.length;){for(var H in n.filter)if((t=n.leftMatch[H].exec(g))!=null&&t[2]){var M=n.filter[H],I,D;D=t[1];y=false;t.splice(1,1);if(D.substr(D.length-
1)!=="\\"){if(v===p)p=[];if(n.preFilter[H])if(t=n.preFilter[H](t,v,l,p,m,S)){if(t===true)continue}else y=I=true;if(t)for(var U=0;(D=v[U])!=null;U++)if(D){I=M(D,t,U,v);var Ha=m^!!I;if(l&&I!=null)if(Ha)y=true;else v[U]=false;else if(Ha){p.push(D);y=true}}if(I!==w){l||(v=p);g=g.replace(n.match[H],"");if(!y)return[];break}}}if(g===q)if(y==null)k.error(g);else break;q=g}return v};k.error=function(g){throw"Syntax error, unrecognized expression: "+g;};var n=k.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF-]|\\.)+)/,
CLASS:/\.((?:[\w\u00c0-\uFFFF-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(g){return g.getAttribute("href")}},
relative:{"+":function(g,h){var l=typeof h==="string",m=l&&!/\W/.test(h);l=l&&!m;if(m)h=h.toLowerCase();m=0;for(var q=g.length,p;m<q;m++)if(p=g[m]){for(;(p=p.previousSibling)&&p.nodeType!==1;);g[m]=l||p&&p.nodeName.toLowerCase()===h?p||false:p===h}l&&k.filter(h,g,true)},">":function(g,h){var l=typeof h==="string";if(l&&!/\W/.test(h)){h=h.toLowerCase();for(var m=0,q=g.length;m<q;m++){var p=g[m];if(p){l=p.parentNode;g[m]=l.nodeName.toLowerCase()===h?l:false}}}else{m=0;for(q=g.length;m<q;m++)if(p=g[m])g[m]=
l?p.parentNode:p.parentNode===h;l&&k.filter(h,g,true)}},"":function(g,h,l){var m=e++,q=d;if(typeof h==="string"&&!/\W/.test(h)){var p=h=h.toLowerCase();q=b}q("parentNode",h,m,g,p,l)},"~":function(g,h,l){var m=e++,q=d;if(typeof h==="string"&&!/\W/.test(h)){var p=h=h.toLowerCase();q=b}q("previousSibling",h,m,g,p,l)}},find:{ID:function(g,h,l){if(typeof h.getElementById!=="undefined"&&!l)return(g=h.getElementById(g[1]))?[g]:[]},NAME:function(g,h){if(typeof h.getElementsByName!=="undefined"){var l=[];
h=h.getElementsByName(g[1]);for(var m=0,q=h.length;m<q;m++)h[m].getAttribute("name")===g[1]&&l.push(h[m]);return l.length===0?null:l}},TAG:function(g,h){return h.getElementsByTagName(g[1])}},preFilter:{CLASS:function(g,h,l,m,q,p){g=" "+g[1].replace(/\\/g,"")+" ";if(p)return g;p=0;for(var v;(v=h[p])!=null;p++)if(v)if(q^(v.className&&(" "+v.className+" ").replace(/[\t\n]/g," ").indexOf(g)>=0))l||m.push(v);else if(l)h[p]=false;return false},ID:function(g){return g[1].replace(/\\/g,"")},TAG:function(g){return g[1].toLowerCase()},
CHILD:function(g){if(g[1]==="nth"){var h=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(g[2]==="even"&&"2n"||g[2]==="odd"&&"2n+1"||!/\D/.test(g[2])&&"0n+"+g[2]||g[2]);g[2]=h[1]+(h[2]||1)-0;g[3]=h[3]-0}g[0]=e++;return g},ATTR:function(g,h,l,m,q,p){h=g[1].replace(/\\/g,"");if(!p&&n.attrMap[h])g[1]=n.attrMap[h];if(g[2]==="~=")g[4]=" "+g[4]+" ";return g},PSEUDO:function(g,h,l,m,q){if(g[1]==="not")if((f.exec(g[3])||"").length>1||/^\w/.test(g[3]))g[3]=k(g[3],null,null,h);else{g=k.filter(g[3],h,l,true^q);l||m.push.apply(m,
g);return false}else if(n.match.POS.test(g[0])||n.match.CHILD.test(g[0]))return true;return g},POS:function(g){g.unshift(true);return g}},filters:{enabled:function(g){return g.disabled===false&&g.type!=="hidden"},disabled:function(g){return g.disabled===true},checked:function(g){return g.checked===true},selected:function(g){return g.selected===true},parent:function(g){return!!g.firstChild},empty:function(g){return!g.firstChild},has:function(g,h,l){return!!k(l[3],g).length},header:function(g){return/h\d/i.test(g.nodeName)},
text:function(g){return"text"===g.type},radio:function(g){return"radio"===g.type},checkbox:function(g){return"checkbox"===g.type},file:function(g){return"file"===g.type},password:function(g){return"password"===g.type},submit:function(g){return"submit"===g.type},image:function(g){return"image"===g.type},reset:function(g){return"reset"===g.type},button:function(g){return"button"===g.type||g.nodeName.toLowerCase()==="button"},input:function(g){return/input|select|textarea|button/i.test(g.nodeName)}},
setFilters:{first:function(g,h){return h===0},last:function(g,h,l,m){return h===m.length-1},even:function(g,h){return h%2===0},odd:function(g,h){return h%2===1},lt:function(g,h,l){return h<l[3]-0},gt:function(g,h,l){return h>l[3]-0},nth:function(g,h,l){return l[3]-0===h},eq:function(g,h,l){return l[3]-0===h}},filter:{PSEUDO:function(g,h,l,m){var q=h[1],p=n.filters[q];if(p)return p(g,l,h,m);else if(q==="contains")return(g.textContent||g.innerText||a([g])||"").indexOf(h[3])>=0;else if(q==="not"){h=
h[3];l=0;for(m=h.length;l<m;l++)if(h[l]===g)return false;return true}else k.error("Syntax error, unrecognized expression: "+q)},CHILD:function(g,h){var l=h[1],m=g;switch(l){case "only":case "first":for(;m=m.previousSibling;)if(m.nodeType===1)return false;if(l==="first")return true;m=g;case "last":for(;m=m.nextSibling;)if(m.nodeType===1)return false;return true;case "nth":l=h[2];var q=h[3];if(l===1&&q===0)return true;h=h[0];var p=g.parentNode;if(p&&(p.sizcache!==h||!g.nodeIndex)){var v=0;for(m=p.firstChild;m;m=
m.nextSibling)if(m.nodeType===1)m.nodeIndex=++v;p.sizcache=h}g=g.nodeIndex-q;return l===0?g===0:g%l===0&&g/l>=0}},ID:function(g,h){return g.nodeType===1&&g.getAttribute("id")===h},TAG:function(g,h){return h==="*"&&g.nodeType===1||g.nodeName.toLowerCase()===h},CLASS:function(g,h){return(" "+(g.className||g.getAttribute("class"))+" ").indexOf(h)>-1},ATTR:function(g,h){var l=h[1];g=n.attrHandle[l]?n.attrHandle[l](g):g[l]!=null?g[l]:g.getAttribute(l);l=g+"";var m=h[2];h=h[4];return g==null?m==="!=":m===
"="?l===h:m==="*="?l.indexOf(h)>=0:m==="~="?(" "+l+" ").indexOf(h)>=0:!h?l&&g!==false:m==="!="?l!==h:m==="^="?l.indexOf(h)===0:m==="$="?l.substr(l.length-h.length)===h:m==="|="?l===h||l.substr(0,h.length+1)===h+"-":false},POS:function(g,h,l,m){var q=n.setFilters[h[2]];if(q)return q(g,l,h,m)}}},r=n.match.POS;for(var u in n.match){n.match[u]=new RegExp(n.match[u].source+/(?![^\[]*\])(?![^\(]*\))/.source);n.leftMatch[u]=new RegExp(/(^(?:.|\r|\n)*?)/.source+n.match[u].source.replace(/\\(\d+)/g,function(g,
h){return"\\"+(h-0+1)}))}var z=function(g,h){g=Array.prototype.slice.call(g,0);if(h){h.push.apply(h,g);return h}return g};try{Array.prototype.slice.call(s.documentElement.childNodes,0)}catch(C){z=function(g,h){h=h||[];if(j.call(g)==="[object Array]")Array.prototype.push.apply(h,g);else if(typeof g.length==="number")for(var l=0,m=g.length;l<m;l++)h.push(g[l]);else for(l=0;g[l];l++)h.push(g[l]);return h}}var B;if(s.documentElement.compareDocumentPosition)B=function(g,h){if(!g.compareDocumentPosition||
!h.compareDocumentPosition){if(g==h)i=true;return g.compareDocumentPosition?-1:1}g=g.compareDocumentPosition(h)&4?-1:g===h?0:1;if(g===0)i=true;return g};else if("sourceIndex"in s.documentElement)B=function(g,h){if(!g.sourceIndex||!h.sourceIndex){if(g==h)i=true;return g.sourceIndex?-1:1}g=g.sourceIndex-h.sourceIndex;if(g===0)i=true;return g};else if(s.createRange)B=function(g,h){if(!g.ownerDocument||!h.ownerDocument){if(g==h)i=true;return g.ownerDocument?-1:1}var l=g.ownerDocument.createRange(),m=
h.ownerDocument.createRange();l.setStart(g,0);l.setEnd(g,0);m.setStart(h,0);m.setEnd(h,0);g=l.compareBoundaryPoints(Range.START_TO_END,m);if(g===0)i=true;return g};(function(){var g=s.createElement("div"),h="script"+(new Date).getTime();g.innerHTML="<a name='"+h+"'/>";var l=s.documentElement;l.insertBefore(g,l.firstChild);if(s.getElementById(h)){n.find.ID=function(m,q,p){if(typeof q.getElementById!=="undefined"&&!p)return(q=q.getElementById(m[1]))?q.id===m[1]||typeof q.getAttributeNode!=="undefined"&&
q.getAttributeNode("id").nodeValue===m[1]?[q]:w:[]};n.filter.ID=function(m,q){var p=typeof m.getAttributeNode!=="undefined"&&m.getAttributeNode("id");return m.nodeType===1&&p&&p.nodeValue===q}}l.removeChild(g);l=g=null})();(function(){var g=s.createElement("div");g.appendChild(s.createComment(""));if(g.getElementsByTagName("*").length>0)n.find.TAG=function(h,l){l=l.getElementsByTagName(h[1]);if(h[1]==="*"){h=[];for(var m=0;l[m];m++)l[m].nodeType===1&&h.push(l[m]);l=h}return l};g.innerHTML="<a href='#'></a>";
if(g.firstChild&&typeof g.firstChild.getAttribute!=="undefined"&&g.firstChild.getAttribute("href")!=="#")n.attrHandle.href=function(h){return h.getAttribute("href",2)};g=null})();s.querySelectorAll&&function(){var g=k,h=s.createElement("div");h.innerHTML="<p class='TEST'></p>";if(!(h.querySelectorAll&&h.querySelectorAll(".TEST").length===0)){k=function(m,q,p,v){q=q||s;if(!v&&q.nodeType===9&&!x(q))try{return z(q.querySelectorAll(m),p)}catch(t){}return g(m,q,p,v)};for(var l in g)k[l]=g[l];h=null}}();
(function(){var g=s.createElement("div");g.innerHTML="<div class='test e'></div><div class='test'></div>";if(!(!g.getElementsByClassName||g.getElementsByClassName("e").length===0)){g.lastChild.className="e";if(g.getElementsByClassName("e").length!==1){n.order.splice(1,0,"CLASS");n.find.CLASS=function(h,l,m){if(typeof l.getElementsByClassName!=="undefined"&&!m)return l.getElementsByClassName(h[1])};g=null}}})();var E=s.compareDocumentPosition?function(g,h){return!!(g.compareDocumentPosition(h)&16)}:
function(g,h){return g!==h&&(g.contains?g.contains(h):true)},x=function(g){return(g=(g?g.ownerDocument||g:0).documentElement)?g.nodeName!=="HTML":false},ga=function(g,h){var l=[],m="",q;for(h=h.nodeType?[h]:h;q=n.match.PSEUDO.exec(g);){m+=q[0];g=g.replace(n.match.PSEUDO,"")}g=n.relative[g]?g+"*":g;q=0;for(var p=h.length;q<p;q++)k(g,h[q],l);return k.filter(m,l)};c.find=k;c.expr=k.selectors;c.expr[":"]=c.expr.filters;c.unique=k.uniqueSort;c.text=a;c.isXMLDoc=x;c.contains=E})();var eb=/Until$/,fb=/^(?:parents|prevUntil|prevAll)/,
gb=/,/;R=Array.prototype.slice;var Ia=function(a,b,d){if(c.isFunction(b))return c.grep(a,function(e,j){return!!b.call(e,j,e)===d});else if(b.nodeType)return c.grep(a,function(e){return e===b===d});else if(typeof b==="string"){var f=c.grep(a,function(e){return e.nodeType===1});if(Ua.test(b))return c.filter(b,f,!d);else b=c.filter(b,f)}return c.grep(a,function(e){return c.inArray(e,b)>=0===d})};c.fn.extend({find:function(a){for(var b=this.pushStack("","find",a),d=0,f=0,e=this.length;f<e;f++){d=b.length;
c.find(a,this[f],b);if(f>0)for(var j=d;j<b.length;j++)for(var i=0;i<d;i++)if(b[i]===b[j]){b.splice(j--,1);break}}return b},has:function(a){var b=c(a);return this.filter(function(){for(var d=0,f=b.length;d<f;d++)if(c.contains(this,b[d]))return true})},not:function(a){return this.pushStack(Ia(this,a,false),"not",a)},filter:function(a){return this.pushStack(Ia(this,a,true),"filter",a)},is:function(a){return!!a&&c.filter(a,this).length>0},closest:function(a,b){if(c.isArray(a)){var d=[],f=this[0],e,j=
{},i;if(f&&a.length){e=0;for(var o=a.length;e<o;e++){i=a[e];j[i]||(j[i]=c.expr.match.POS.test(i)?c(i,b||this.context):i)}for(;f&&f.ownerDocument&&f!==b;){for(i in j){e=j[i];if(e.jquery?e.index(f)>-1:c(f).is(e)){d.push({selector:i,elem:f});delete j[i]}}f=f.parentNode}}return d}var k=c.expr.match.POS.test(a)?c(a,b||this.context):null;return this.map(function(n,r){for(;r&&r.ownerDocument&&r!==b;){if(k?k.index(r)>-1:c(r).is(a))return r;r=r.parentNode}return null})},index:function(a){if(!a||typeof a===
"string")return c.inArray(this[0],a?c(a):this.parent().children());return c.inArray(a.jquery?a[0]:a,this)},add:function(a,b){a=typeof a==="string"?c(a,b||this.context):c.makeArray(a);b=c.merge(this.get(),a);return this.pushStack(qa(a[0])||qa(b[0])?b:c.unique(b))},andSelf:function(){return this.add(this.prevObject)}});c.each({parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode",
d)},next:function(a){return c.nth(a,2,"nextSibling")},prev:function(a){return c.nth(a,2,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")},nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling",d)},siblings:function(a){return c.sibling(a.parentNode.firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")?
a.contentDocument||a.contentWindow.document:c.makeArray(a.childNodes)}},function(a,b){c.fn[a]=function(d,f){var e=c.map(this,b,d);eb.test(a)||(f=d);if(f&&typeof f==="string")e=c.filter(f,e);e=this.length>1?c.unique(e):e;if((this.length>1||gb.test(f))&&fb.test(a))e=e.reverse();return this.pushStack(e,a,R.call(arguments).join(","))}});c.extend({filter:function(a,b,d){if(d)a=":not("+a+")";return c.find.matches(a,b)},dir:function(a,b,d){var f=[];for(a=a[b];a&&a.nodeType!==9&&(d===w||a.nodeType!==1||!c(a).is(d));){a.nodeType===
1&&f.push(a);a=a[b]}return f},nth:function(a,b,d){b=b||1;for(var f=0;a;a=a[d])if(a.nodeType===1&&++f===b)break;return a},sibling:function(a,b){for(var d=[];a;a=a.nextSibling)a.nodeType===1&&a!==b&&d.push(a);return d}});var Ja=/ jQuery\d+="(?:\d+|null)"/g,V=/^\s+/,Ka=/(<([\w:]+)[^>]*?)\/>/g,hb=/^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i,La=/<([\w:]+)/,ib=/<tbody/i,jb=/<|&#?\w+;/,ta=/<script|<object|<embed|<option|<style/i,ua=/checked\s*(?:[^=]|=\s*.checked.)/i,Ma=function(a,b,d){return hb.test(d)?
a:b+"></"+d+">"},F={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]};F.optgroup=F.option;F.tbody=F.tfoot=F.colgroup=F.caption=F.thead;F.th=F.td;if(!c.support.htmlSerialize)F._default=[1,"div<div>","</div>"];c.fn.extend({text:function(a){if(c.isFunction(a))return this.each(function(b){var d=
c(this);d.text(a.call(this,b,d.text()))});if(typeof a!=="object"&&a!==w)return this.empty().append((this[0]&&this[0].ownerDocument||s).createTextNode(a));return c.text(this)},wrapAll:function(a){if(c.isFunction(a))return this.each(function(d){c(this).wrapAll(a.call(this,d))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var d=this;d.firstChild&&d.firstChild.nodeType===1;)d=d.firstChild;return d}).append(this)}return this},
wrapInner:function(a){if(c.isFunction(a))return this.each(function(b){c(this).wrapInner(a.call(this,b))});return this.each(function(){var b=c(this),d=b.contents();d.length?d.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){c(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.appendChild(a)})},
prepend:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this)});else if(arguments.length){var a=c(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,
this.nextSibling)});else if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,c(arguments[0]).toArray());return a}},remove:function(a,b){for(var d=0,f;(f=this[d])!=null;d++)if(!a||c.filter(a,[f]).length){if(!b&&f.nodeType===1){c.cleanData(f.getElementsByTagName("*"));c.cleanData([f])}f.parentNode&&f.parentNode.removeChild(f)}return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++)for(b.nodeType===1&&c.cleanData(b.getElementsByTagName("*"));b.firstChild;)b.removeChild(b.firstChild);
return this},clone:function(a){var b=this.map(function(){if(!c.support.noCloneEvent&&!c.isXMLDoc(this)){var d=this.outerHTML,f=this.ownerDocument;if(!d){d=f.createElement("div");d.appendChild(this.cloneNode(true));d=d.innerHTML}return c.clean([d.replace(Ja,"").replace(/=([^="'>\s]+\/)>/g,'="$1">').replace(V,"")],f)[0]}else return this.cloneNode(true)});if(a===true){ra(this,b);ra(this.find("*"),b.find("*"))}return b},html:function(a){if(a===w)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(Ja,
""):null;else if(typeof a==="string"&&!ta.test(a)&&(c.support.leadingWhitespace||!V.test(a))&&!F[(La.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Ka,Ma);try{for(var b=0,d=this.length;b<d;b++)if(this[b].nodeType===1){c.cleanData(this[b].getElementsByTagName("*"));this[b].innerHTML=a}}catch(f){this.empty().append(a)}}else c.isFunction(a)?this.each(function(e){var j=c(this),i=j.html();j.empty().append(function(){return a.call(this,e,i)})}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&
this[0].parentNode){if(c.isFunction(a))return this.each(function(b){var d=c(this),f=d.html();d.replaceWith(a.call(this,b,f))});if(typeof a!=="string")a=c(a).detach();return this.each(function(){var b=this.nextSibling,d=this.parentNode;c(this).remove();b?c(b).before(a):c(d).append(a)})}else return this.pushStack(c(c.isFunction(a)?a():a),"replaceWith",a)},detach:function(a){return this.remove(a,true)},domManip:function(a,b,d){function f(u){return c.nodeName(u,"table")?u.getElementsByTagName("tbody")[0]||
u.appendChild(u.ownerDocument.createElement("tbody")):u}var e,j,i=a[0],o=[],k;if(!c.support.checkClone&&arguments.length===3&&typeof i==="string"&&ua.test(i))return this.each(function(){c(this).domManip(a,b,d,true)});if(c.isFunction(i))return this.each(function(u){var z=c(this);a[0]=i.call(this,u,b?z.html():w);z.domManip(a,b,d)});if(this[0]){e=i&&i.parentNode;e=c.support.parentNode&&e&&e.nodeType===11&&e.childNodes.length===this.length?{fragment:e}:sa(a,this,o);k=e.fragment;if(j=k.childNodes.length===
1?(k=k.firstChild):k.firstChild){b=b&&c.nodeName(j,"tr");for(var n=0,r=this.length;n<r;n++)d.call(b?f(this[n],j):this[n],n>0||e.cacheable||this.length>1?k.cloneNode(true):k)}o.length&&c.each(o,Qa)}return this}});c.fragments={};c.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){c.fn[a]=function(d){var f=[];d=c(d);var e=this.length===1&&this[0].parentNode;if(e&&e.nodeType===11&&e.childNodes.length===1&&d.length===1){d[b](this[0]);
return this}else{e=0;for(var j=d.length;e<j;e++){var i=(e>0?this.clone(true):this).get();c.fn[b].apply(c(d[e]),i);f=f.concat(i)}return this.pushStack(f,a,d.selector)}}});c.extend({clean:function(a,b,d,f){b=b||s;if(typeof b.createElement==="undefined")b=b.ownerDocument||b[0]&&b[0].ownerDocument||s;for(var e=[],j=0,i;(i=a[j])!=null;j++){if(typeof i==="number")i+="";if(i){if(typeof i==="string"&&!jb.test(i))i=b.createTextNode(i);else if(typeof i==="string"){i=i.replace(Ka,Ma);var o=(La.exec(i)||["",
""])[1].toLowerCase(),k=F[o]||F._default,n=k[0],r=b.createElement("div");for(r.innerHTML=k[1]+i+k[2];n--;)r=r.lastChild;if(!c.support.tbody){n=ib.test(i);o=o==="table"&&!n?r.firstChild&&r.firstChild.childNodes:k[1]==="<table>"&&!n?r.childNodes:[];for(k=o.length-1;k>=0;--k)c.nodeName(o[k],"tbody")&&!o[k].childNodes.length&&o[k].parentNode.removeChild(o[k])}!c.support.leadingWhitespace&&V.test(i)&&r.insertBefore(b.createTextNode(V.exec(i)[0]),r.firstChild);i=r.childNodes}if(i.nodeType)e.push(i);else e=
c.merge(e,i)}}if(d)for(j=0;e[j];j++)if(f&&c.nodeName(e[j],"script")&&(!e[j].type||e[j].type.toLowerCase()==="text/javascript"))f.push(e[j].parentNode?e[j].parentNode.removeChild(e[j]):e[j]);else{e[j].nodeType===1&&e.splice.apply(e,[j+1,0].concat(c.makeArray(e[j].getElementsByTagName("script"))));d.appendChild(e[j])}return e},cleanData:function(a){for(var b,d,f=c.cache,e=c.event.special,j=c.support.deleteExpando,i=0,o;(o=a[i])!=null;i++)if(d=o[c.expando]){b=f[d];if(b.events)for(var k in b.events)e[k]?
c.event.remove(o,k):Ca(o,k,b.handle);if(j)delete o[c.expando];else o.removeAttribute&&o.removeAttribute(c.expando);delete f[d]}}});var kb=/z-?index|font-?weight|opacity|zoom|line-?height/i,Na=/alpha\([^)]*\)/,Oa=/opacity=([^)]*)/,ha=/float/i,ia=/-([a-z])/ig,lb=/([A-Z])/g,mb=/^-?\d+(?:px)?$/i,nb=/^-?\d/,ob={position:"absolute",visibility:"hidden",display:"block"},pb=["Left","Right"],qb=["Top","Bottom"],rb=s.defaultView&&s.defaultView.getComputedStyle,Pa=c.support.cssFloat?"cssFloat":"styleFloat",ja=
function(a,b){return b.toUpperCase()};c.fn.css=function(a,b){return X(this,a,b,true,function(d,f,e){if(e===w)return c.curCSS(d,f);if(typeof e==="number"&&!kb.test(f))e+="px";c.style(d,f,e)})};c.extend({style:function(a,b,d){if(!a||a.nodeType===3||a.nodeType===8)return w;if((b==="width"||b==="height")&&parseFloat(d)<0)d=w;var f=a.style||a,e=d!==w;if(!c.support.opacity&&b==="opacity"){if(e){f.zoom=1;b=parseInt(d,10)+""==="NaN"?"":"alpha(opacity="+d*100+")";a=f.filter||c.curCSS(a,"filter")||"";f.filter=
Na.test(a)?a.replace(Na,b):b}return f.filter&&f.filter.indexOf("opacity=")>=0?parseFloat(Oa.exec(f.filter)[1])/100+"":""}if(ha.test(b))b=Pa;b=b.replace(ia,ja);if(e)f[b]=d;return f[b]},css:function(a,b,d,f){if(b==="width"||b==="height"){var e,j=b==="width"?pb:qb;function i(){e=b==="width"?a.offsetWidth:a.offsetHeight;f!=="border"&&c.each(j,function(){f||(e-=parseFloat(c.curCSS(a,"padding"+this,true))||0);if(f==="margin")e+=parseFloat(c.curCSS(a,"margin"+this,true))||0;else e-=parseFloat(c.curCSS(a,
"border"+this+"Width",true))||0})}a.offsetWidth!==0?i():c.swap(a,ob,i);return Math.max(0,Math.round(e))}return c.curCSS(a,b,d)},curCSS:function(a,b,d){var f,e=a.style;if(!c.support.opacity&&b==="opacity"&&a.currentStyle){f=Oa.test(a.currentStyle.filter||"")?parseFloat(RegExp.$1)/100+"":"";return f===""?"1":f}if(ha.test(b))b=Pa;if(!d&&e&&e[b])f=e[b];else if(rb){if(ha.test(b))b="float";b=b.replace(lb,"-$1").toLowerCase();e=a.ownerDocument.defaultView;if(!e)return null;if(a=e.getComputedStyle(a,null))f=
a.getPropertyValue(b);if(b==="opacity"&&f==="")f="1"}else if(a.currentStyle){d=b.replace(ia,ja);f=a.currentStyle[b]||a.currentStyle[d];if(!mb.test(f)&&nb.test(f)){b=e.left;var j=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;e.left=d==="fontSize"?"1em":f||0;f=e.pixelLeft+"px";e.left=b;a.runtimeStyle.left=j}}return f},swap:function(a,b,d){var f={};for(var e in b){f[e]=a.style[e];a.style[e]=b[e]}d.call(a);for(e in b)a.style[e]=f[e]}});if(c.expr&&c.expr.filters){c.expr.filters.hidden=function(a){var b=
a.offsetWidth,d=a.offsetHeight,f=a.nodeName.toLowerCase()==="tr";return b===0&&d===0&&!f?true:b>0&&d>0&&!f?false:c.curCSS(a,"display")==="none"};c.expr.filters.visible=function(a){return!c.expr.filters.hidden(a)}}var sb=J(),tb=/<script(.|\s)*?\/script>/gi,ub=/select|textarea/i,vb=/color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week/i,N=/=\?(&|$)/,ka=/\?/,wb=/(\?|&)_=.*?(&|$)/,xb=/^(\w+:)?\/\/([^\/?#]+)/,yb=/%20/g,zb=c.fn.load;c.fn.extend({load:function(a,b,d){if(typeof a!==
"string")return zb.call(this,a);else if(!this.length)return this;var f=a.indexOf(" ");if(f>=0){var e=a.slice(f,a.length);a=a.slice(0,f)}f="GET";if(b)if(c.isFunction(b)){d=b;b=null}else if(typeof b==="object"){b=c.param(b,c.ajaxSettings.traditional);f="POST"}var j=this;c.ajax({url:a,type:f,dataType:"html",data:b,complete:function(i,o){if(o==="success"||o==="notmodified")j.html(e?c("<div />").append(i.responseText.replace(tb,"")).find(e):i.responseText);d&&j.each(d,[i.responseText,o,i])}});return this},
serialize:function(){return c.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?c.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||ub.test(this.nodeName)||vb.test(this.type))}).map(function(a,b){a=c(this).val();return a==null?null:c.isArray(a)?c.map(a,function(d){return{name:b.name,value:d}}):{name:b.name,value:a}}).get()}});c.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),
function(a,b){c.fn[b]=function(d){return this.bind(b,d)}});c.extend({get:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b=null}return c.ajax({type:"GET",url:a,data:b,success:d,dataType:f})},getScript:function(a,b){return c.get(a,null,b,"script")},getJSON:function(a,b,d){return c.get(a,b,d,"json")},post:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b={}}return c.ajax({type:"POST",url:a,data:b,success:d,dataType:f})},ajaxSetup:function(a){c.extend(c.ajaxSettings,a)},ajaxSettings:{url:location.href,
global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:A.XMLHttpRequest&&(A.location.protocol!=="file:"||!A.ActiveXObject)?function(){return new A.XMLHttpRequest}:function(){try{return new A.ActiveXObject("Microsoft.XMLHTTP")}catch(a){}},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},etag:{},ajax:function(a){function b(){e.success&&
e.success.call(k,o,i,x);e.global&&f("ajaxSuccess",[x,e])}function d(){e.complete&&e.complete.call(k,x,i);e.global&&f("ajaxComplete",[x,e]);e.global&&!--c.active&&c.event.trigger("ajaxStop")}function f(q,p){(e.context?c(e.context):c.event).trigger(q,p)}var e=c.extend(true,{},c.ajaxSettings,a),j,i,o,k=a&&a.context||e,n=e.type.toUpperCase();if(e.data&&e.processData&&typeof e.data!=="string")e.data=c.param(e.data,e.traditional);if(e.dataType==="jsonp"){if(n==="GET")N.test(e.url)||(e.url+=(ka.test(e.url)?
"&":"?")+(e.jsonp||"callback")+"=?");else if(!e.data||!N.test(e.data))e.data=(e.data?e.data+"&":"")+(e.jsonp||"callback")+"=?";e.dataType="json"}if(e.dataType==="json"&&(e.data&&N.test(e.data)||N.test(e.url))){j=e.jsonpCallback||"jsonp"+sb++;if(e.data)e.data=(e.data+"").replace(N,"="+j+"$1");e.url=e.url.replace(N,"="+j+"$1");e.dataType="script";A[j]=A[j]||function(q){o=q;b();d();A[j]=w;try{delete A[j]}catch(p){}z&&z.removeChild(C)}}if(e.dataType==="script"&&e.cache===null)e.cache=false;if(e.cache===
false&&n==="GET"){var r=J(),u=e.url.replace(wb,"$1_="+r+"$2");e.url=u+(u===e.url?(ka.test(e.url)?"&":"?")+"_="+r:"")}if(e.data&&n==="GET")e.url+=(ka.test(e.url)?"&":"?")+e.data;e.global&&!c.active++&&c.event.trigger("ajaxStart");r=(r=xb.exec(e.url))&&(r[1]&&r[1]!==location.protocol||r[2]!==location.host);if(e.dataType==="script"&&n==="GET"&&r){var z=s.getElementsByTagName("head")[0]||s.documentElement,C=s.createElement("script");C.src=e.url;if(e.scriptCharset)C.charset=e.scriptCharset;if(!j){var B=
false;C.onload=C.onreadystatechange=function(){if(!B&&(!this.readyState||this.readyState==="loaded"||this.readyState==="complete")){B=true;b();d();C.onload=C.onreadystatechange=null;z&&C.parentNode&&z.removeChild(C)}}}z.insertBefore(C,z.firstChild);return w}var E=false,x=e.xhr();if(x){e.username?x.open(n,e.url,e.async,e.username,e.password):x.open(n,e.url,e.async);try{if(e.data||a&&a.contentType)x.setRequestHeader("Content-Type",e.contentType);if(e.ifModified){c.lastModified[e.url]&&x.setRequestHeader("If-Modified-Since",
c.lastModified[e.url]);c.etag[e.url]&&x.setRequestHeader("If-None-Match",c.etag[e.url])}r||x.setRequestHeader("X-Requested-With","XMLHttpRequest");x.setRequestHeader("Accept",e.dataType&&e.accepts[e.dataType]?e.accepts[e.dataType]+", */*":e.accepts._default)}catch(ga){}if(e.beforeSend&&e.beforeSend.call(k,x,e)===false){e.global&&!--c.active&&c.event.trigger("ajaxStop");x.abort();return false}e.global&&f("ajaxSend",[x,e]);var g=x.onreadystatechange=function(q){if(!x||x.readyState===0||q==="abort"){E||
d();E=true;if(x)x.onreadystatechange=c.noop}else if(!E&&x&&(x.readyState===4||q==="timeout")){E=true;x.onreadystatechange=c.noop;i=q==="timeout"?"timeout":!c.httpSuccess(x)?"error":e.ifModified&&c.httpNotModified(x,e.url)?"notmodified":"success";var p;if(i==="success")try{o=c.httpData(x,e.dataType,e)}catch(v){i="parsererror";p=v}if(i==="success"||i==="notmodified")j||b();else c.handleError(e,x,i,p);d();q==="timeout"&&x.abort();if(e.async)x=null}};try{var h=x.abort;x.abort=function(){x&&h.call(x);
g("abort")}}catch(l){}e.async&&e.timeout>0&&setTimeout(function(){x&&!E&&g("timeout")},e.timeout);try{x.send(n==="POST"||n==="PUT"||n==="DELETE"?e.data:null)}catch(m){c.handleError(e,x,null,m);d()}e.async||g();return x}},handleError:function(a,b,d,f){if(a.error)a.error.call(a.context||a,b,d,f);if(a.global)(a.context?c(a.context):c.event).trigger("ajaxError",[b,a,f])},active:0,httpSuccess:function(a){try{return!a.status&&location.protocol==="file:"||a.status>=200&&a.status<300||a.status===304||a.status===
1223||a.status===0}catch(b){}return false},httpNotModified:function(a,b){var d=a.getResponseHeader("Last-Modified"),f=a.getResponseHeader("Etag");if(d)c.lastModified[b]=d;if(f)c.etag[b]=f;return a.status===304||a.status===0},httpData:function(a,b,d){var f=a.getResponseHeader("content-type")||"",e=b==="xml"||!b&&f.indexOf("xml")>=0;a=e?a.responseXML:a.responseText;e&&a.documentElement.nodeName==="parsererror"&&c.error("parsererror");if(d&&d.dataFilter)a=d.dataFilter(a,b);if(typeof a==="string")if(b===
"json"||!b&&f.indexOf("json")>=0)a=c.parseJSON(a);else if(b==="script"||!b&&f.indexOf("javascript")>=0)c.globalEval(a);return a},param:function(a,b){function d(i,o){if(c.isArray(o))c.each(o,function(k,n){b||/\[\]$/.test(i)?f(i,n):d(i+"["+(typeof n==="object"||c.isArray(n)?k:"")+"]",n)});else!b&&o!=null&&typeof o==="object"?c.each(o,function(k,n){d(i+"["+k+"]",n)}):f(i,o)}function f(i,o){o=c.isFunction(o)?o():o;e[e.length]=encodeURIComponent(i)+"="+encodeURIComponent(o)}var e=[];if(b===w)b=c.ajaxSettings.traditional;
if(c.isArray(a)||a.jquery)c.each(a,function(){f(this.name,this.value)});else for(var j in a)d(j,a[j]);return e.join("&").replace(yb,"+")}});var la={},Ab=/toggle|show|hide/,Bb=/^([+-]=)?([\d+-.]+)(.*)$/,W,va=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];c.fn.extend({show:function(a,b){if(a||a===0)return this.animate(K("show",3),a,b);else{a=0;for(b=this.length;a<b;a++){var d=c.data(this[a],"olddisplay");
this[a].style.display=d||"";if(c.css(this[a],"display")==="none"){d=this[a].nodeName;var f;if(la[d])f=la[d];else{var e=c("<"+d+" />").appendTo("body");f=e.css("display");if(f==="none")f="block";e.remove();la[d]=f}c.data(this[a],"olddisplay",f)}}a=0;for(b=this.length;a<b;a++)this[a].style.display=c.data(this[a],"olddisplay")||"";return this}},hide:function(a,b){if(a||a===0)return this.animate(K("hide",3),a,b);else{a=0;for(b=this.length;a<b;a++){var d=c.data(this[a],"olddisplay");!d&&d!=="none"&&c.data(this[a],
"olddisplay",c.css(this[a],"display"))}a=0;for(b=this.length;a<b;a++)this[a].style.display="none";return this}},_toggle:c.fn.toggle,toggle:function(a,b){var d=typeof a==="boolean";if(c.isFunction(a)&&c.isFunction(b))this._toggle.apply(this,arguments);else a==null||d?this.each(function(){var f=d?a:c(this).is(":hidden");c(this)[f?"show":"hide"]()}):this.animate(K("toggle",3),a,b);return this},fadeTo:function(a,b,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,d)},
animate:function(a,b,d,f){var e=c.speed(b,d,f);if(c.isEmptyObject(a))return this.each(e.complete);return this[e.queue===false?"each":"queue"](function(){var j=c.extend({},e),i,o=this.nodeType===1&&c(this).is(":hidden"),k=this;for(i in a){var n=i.replace(ia,ja);if(i!==n){a[n]=a[i];delete a[i];i=n}if(a[i]==="hide"&&o||a[i]==="show"&&!o)return j.complete.call(this);if((i==="height"||i==="width")&&this.style){j.display=c.css(this,"display");j.overflow=this.style.overflow}if(c.isArray(a[i])){(j.specialEasing=
j.specialEasing||{})[i]=a[i][1];a[i]=a[i][0]}}if(j.overflow!=null)this.style.overflow="hidden";j.curAnim=c.extend({},a);c.each(a,function(r,u){var z=new c.fx(k,j,r);if(Ab.test(u))z[u==="toggle"?o?"show":"hide":u](a);else{var C=Bb.exec(u),B=z.cur(true)||0;if(C){u=parseFloat(C[2]);var E=C[3]||"px";if(E!=="px"){k.style[r]=(u||1)+E;B=(u||1)/z.cur(true)*B;k.style[r]=B+E}if(C[1])u=(C[1]==="-="?-1:1)*u+B;z.custom(B,u,E)}else z.custom(B,u,"")}});return true})},stop:function(a,b){var d=c.timers;a&&this.queue([]);
this.each(function(){for(var f=d.length-1;f>=0;f--)if(d[f].elem===this){b&&d[f](true);d.splice(f,1)}});b||this.dequeue();return this}});c.each({slideDown:K("show",1),slideUp:K("hide",1),slideToggle:K("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(a,b){c.fn[a]=function(d,f){return this.animate(b,d,f)}});c.extend({speed:function(a,b,d){var f=a&&typeof a==="object"?a:{complete:d||!d&&b||c.isFunction(a)&&a,duration:a,easing:d&&b||b&&!c.isFunction(b)&&b};f.duration=c.fx.off?0:typeof f.duration===
"number"?f.duration:c.fx.speeds[f.duration]||c.fx.speeds._default;f.old=f.complete;f.complete=function(){f.queue!==false&&c(this).dequeue();c.isFunction(f.old)&&f.old.call(this)};return f},easing:{linear:function(a,b,d,f){return d+f*a},swing:function(a,b,d,f){return(-Math.cos(a*Math.PI)/2+0.5)*f+d}},timers:[],fx:function(a,b,d){this.options=b;this.elem=a;this.prop=d;if(!b.orig)b.orig={}}});c.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this);(c.fx.step[this.prop]||
c.fx.step._default)(this);if((this.prop==="height"||this.prop==="width")&&this.elem.style)this.elem.style.display="block"},cur:function(a){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];return(a=parseFloat(c.css(this.elem,this.prop,a)))&&a>-10000?a:parseFloat(c.curCSS(this.elem,this.prop))||0},custom:function(a,b,d){function f(j){return e.step(j)}this.startTime=J();this.start=a;this.end=b;this.unit=d||this.unit||"px";this.now=this.start;
this.pos=this.state=0;var e=this;f.elem=this.elem;if(f()&&c.timers.push(f)&&!W)W=setInterval(c.fx.tick,13)},show:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.show=true;this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur());c(this.elem).show()},hide:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(a){var b=J(),d=true;if(a||b>=this.options.duration+this.startTime){this.now=
this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;for(var f in this.options.curAnim)if(this.options.curAnim[f]!==true)d=false;if(d){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;a=c.data(this.elem,"olddisplay");this.elem.style.display=a?a:this.options.display;if(c.css(this.elem,"display")==="none")this.elem.style.display="block"}this.options.hide&&c(this.elem).hide();if(this.options.hide||this.options.show)for(var e in this.options.curAnim)c.style(this.elem,
e,this.options.orig[e]);this.options.complete.call(this.elem)}return false}else{e=b-this.startTime;this.state=e/this.options.duration;a=this.options.easing||(c.easing.swing?"swing":"linear");this.pos=c.easing[this.options.specialEasing&&this.options.specialEasing[this.prop]||a](this.state,e,0,1,this.options.duration);this.now=this.start+(this.end-this.start)*this.pos;this.update()}return true}};c.extend(c.fx,{tick:function(){for(var a=c.timers,b=0;b<a.length;b++)a[b]()||a.splice(b--,1);a.length||
c.fx.stop()},stop:function(){clearInterval(W);W=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){c.style(a.elem,"opacity",a.now)},_default:function(a){if(a.elem.style&&a.elem.style[a.prop]!=null)a.elem.style[a.prop]=(a.prop==="width"||a.prop==="height"?Math.max(0,a.now):a.now)+a.unit;else a.elem[a.prop]=a.now}}});if(c.expr&&c.expr.filters)c.expr.filters.animated=function(a){return c.grep(c.timers,function(b){return a===b.elem}).length};c.fn.offset="getBoundingClientRect"in s.documentElement?
function(a){var b=this[0];if(a)return this.each(function(e){c.offset.setOffset(this,a,e)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);var d=b.getBoundingClientRect(),f=b.ownerDocument;b=f.body;f=f.documentElement;return{top:d.top+(self.pageYOffset||c.support.boxModel&&f.scrollTop||b.scrollTop)-(f.clientTop||b.clientTop||0),left:d.left+(self.pageXOffset||c.support.boxModel&&f.scrollLeft||b.scrollLeft)-(f.clientLeft||b.clientLeft||0)}}:function(a){var b=
this[0];if(a)return this.each(function(r){c.offset.setOffset(this,a,r)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);c.offset.initialize();var d=b.offsetParent,f=b,e=b.ownerDocument,j,i=e.documentElement,o=e.body;f=(e=e.defaultView)?e.getComputedStyle(b,null):b.currentStyle;for(var k=b.offsetTop,n=b.offsetLeft;(b=b.parentNode)&&b!==o&&b!==i;){if(c.offset.supportsFixedPosition&&f.position==="fixed")break;j=e?e.getComputedStyle(b,null):b.currentStyle;
k-=b.scrollTop;n-=b.scrollLeft;if(b===d){k+=b.offsetTop;n+=b.offsetLeft;if(c.offset.doesNotAddBorder&&!(c.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(b.nodeName))){k+=parseFloat(j.borderTopWidth)||0;n+=parseFloat(j.borderLeftWidth)||0}f=d;d=b.offsetParent}if(c.offset.subtractsBorderForOverflowNotVisible&&j.overflow!=="visible"){k+=parseFloat(j.borderTopWidth)||0;n+=parseFloat(j.borderLeftWidth)||0}f=j}if(f.position==="relative"||f.position==="static"){k+=o.offsetTop;n+=o.offsetLeft}if(c.offset.supportsFixedPosition&&
f.position==="fixed"){k+=Math.max(i.scrollTop,o.scrollTop);n+=Math.max(i.scrollLeft,o.scrollLeft)}return{top:k,left:n}};c.offset={initialize:function(){var a=s.body,b=s.createElement("div"),d,f,e,j=parseFloat(c.curCSS(a,"marginTop",true))||0;c.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"});b.innerHTML="<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";
a.insertBefore(b,a.firstChild);d=b.firstChild;f=d.firstChild;e=d.nextSibling.firstChild.firstChild;this.doesNotAddBorder=f.offsetTop!==5;this.doesAddBorderForTableAndCells=e.offsetTop===5;f.style.position="fixed";f.style.top="20px";this.supportsFixedPosition=f.offsetTop===20||f.offsetTop===15;f.style.position=f.style.top="";d.style.overflow="hidden";d.style.position="relative";this.subtractsBorderForOverflowNotVisible=f.offsetTop===-5;this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==j;a.removeChild(b);
c.offset.initialize=c.noop},bodyOffset:function(a){var b=a.offsetTop,d=a.offsetLeft;c.offset.initialize();if(c.offset.doesNotIncludeMarginInBodyOffset){b+=parseFloat(c.curCSS(a,"marginTop",true))||0;d+=parseFloat(c.curCSS(a,"marginLeft",true))||0}return{top:b,left:d}},setOffset:function(a,b,d){if(/static/.test(c.curCSS(a,"position")))a.style.position="relative";var f=c(a),e=f.offset(),j=parseInt(c.curCSS(a,"top",true),10)||0,i=parseInt(c.curCSS(a,"left",true),10)||0;if(c.isFunction(b))b=b.call(a,
d,e);d={top:b.top-e.top+j,left:b.left-e.left+i};"using"in b?b.using.call(a,d):f.css(d)}};c.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),d=this.offset(),f=/^body|html$/i.test(b[0].nodeName)?{top:0,left:0}:b.offset();d.top-=parseFloat(c.curCSS(a,"marginTop",true))||0;d.left-=parseFloat(c.curCSS(a,"marginLeft",true))||0;f.top+=parseFloat(c.curCSS(b[0],"borderTopWidth",true))||0;f.left+=parseFloat(c.curCSS(b[0],"borderLeftWidth",true))||0;return{top:d.top-
f.top,left:d.left-f.left}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent||s.body;a&&!/^body|html$/i.test(a.nodeName)&&c.css(a,"position")==="static";)a=a.offsetParent;return a})}});c.each(["Left","Top"],function(a,b){var d="scroll"+b;c.fn[d]=function(f){var e=this[0],j;if(!e)return null;if(f!==w)return this.each(function(){if(j=wa(this))j.scrollTo(!a?f:c(j).scrollLeft(),a?f:c(j).scrollTop());else this[d]=f});else return(j=wa(e))?"pageXOffset"in j?j[a?"pageYOffset":
"pageXOffset"]:c.support.boxModel&&j.document.documentElement[d]||j.document.body[d]:e[d]}});c.each(["Height","Width"],function(a,b){var d=b.toLowerCase();c.fn["inner"+b]=function(){return this[0]?c.css(this[0],d,false,"padding"):null};c.fn["outer"+b]=function(f){return this[0]?c.css(this[0],d,false,f?"margin":"border"):null};c.fn[d]=function(f){var e=this[0];if(!e)return f==null?null:this;if(c.isFunction(f))return this.each(function(j){var i=c(this);i[d](f.call(this,j,i[d]()))});return"scrollTo"in
e&&e.document?e.document.compatMode==="CSS1Compat"&&e.document.documentElement["client"+b]||e.document.body["client"+b]:e.nodeType===9?Math.max(e.documentElement["client"+b],e.body["scroll"+b],e.documentElement["scroll"+b],e.body["offset"+b],e.documentElement["offset"+b]):f===w?c.css(e,d):this.css(d,typeof f==="string"?f:f+"px")}});A.jQuery=A.$=c})(window);
function setCartCount(elem, newVal)
{
var chfield = elem;
if(newVal < 0)
{
newVal = 0;
}
chfield.val(newVal);
// parseTotal();
return false;
}
function changeCartCount(elem,val)
{
var chfield = elem;
var oldcount = parseInt(chfield.val());
var newVal = oldcount+val;
return setCartCount(elem,newVal);
}
\ No newline at end of file
.linka A:link {color:#133E51; text-decoration:none}
.linka A:active {color:#133E51; text-decoration:none}
.linka A:visited {color:#133E51; text-decoration:none}
.linka A:hover {color:#133E51; text-decoration:underline;}
.link A:link {color:#FFF; text-decoration:none}
.link A:active {color:#FFF; text-decoration:none}
.link A:visited {color:#FFF; text-decoration:none}
.link A:hover {color:#FFF; text-decoration:underline;}
body {
background-color: #133e51;
margin: 0 auto 0 auto;
font-family: helvetica, arial;
font-size: 10pt;
}
#wrapper {
margin: 0 auto 0 auto;
width: 900px;
height: auto;
}
#navigation {
width: 900px;
height: 80px;
}
#content {
width: 100%;
background-image:url('img/top.gif');
background-repeat: no-repeat;
background-color: #FFF;
padding-top: 3px;
}
#headerbox {
height: 33px;
text-align: right;
margin: 15px 30px 5px 30px;
color: #FFFFFF;
}
.linka {
background-image:url('img/linka2.gif');
width: 117px;
height: 27px;
color: #133E51;
float: left;
vertical-align: bottom;
line-height: 30px;
text-align: center;
font-weight: bold;
margin-right: 3px;
}
.link {
background-image:url('img/link2.gif');
width: 117px;
height: 27px;
color: #FFF;
float: left;
vertical-align: bottom;
line-height: 30px;
text-align: center;
font-weight: bold;
margin-right: 3px;
}
#head {
padding-top: 5px;
margin-right: 10px;
float: left;
}
#cwrap {
padding: 3px 3px 3px 3px;
}
#footer {
background-image:url('img/bottom.gif');
height: 21px;
text-align:center;
}
\ No newline at end of file
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html
xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:composite="http://java.sun.com/jsf/composite"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:tools="http://java.sun.com/jsf/composite/tools">
<composite:interface>
<composite:attribute name="value" required="true" />
<composite:attribute name="outcome" required="true" />
<composite:attribute name="selected" required="true" />
</composite:interface>
<composite:implementation>
<ui:decorate template="/layout/#{sessionHandler.layout}/level1link.xhtml" >
<ui:define name="link">
<h:link outcome="#{cc.attrs.outcome}" value="#{i18n[cc.attrs.value]}" />
</ui:define>
<ui:param name="isSelected" value="#{cc.attrs.selected}" />
</ui:decorate>
</composite:implementation>
</html>
\ No newline at end of file
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html
xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:composite="http://java.sun.com/jsf/composite"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:tools="http://java.sun.com/jsf/composite/tools"
xmlns:layout="http://java.sun.com/jsf/composite/tools/layout">
<composite:interface>
<composite:attribute name="selected" required="true" />
</composite:interface>
<composite:implementation>
<layout:level1link value="topmenu.frontpage" outcome="frontpage" selected="#{cc.attrs.selected == 'frontpage'}" />
<layout:level1link value="topmenu.usersPreferences" outcome="userprefs" selected="#{cc.attrs.selected == 'userprefs'} " />
<layout:level1link value="topmenu.shoppings" outcome="shopfrontpage" selected="#{cc.attrs.selected == 'shopfrontpage'}" />
<layout:level1link value="topmenu.adminfront" outcome="adminfront" selected="#{cc.attrs.selected == 'adminfront'}" />
</composite:implementation>
</html>
\ No newline at end of file
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html
xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:composite="http://java.sun.com/jsf/composite"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:tools="http://java.sun.com/jsf/composite/tools">
<composite:interface>
</composite:interface>
<composite:implementation>
<h:form>
<h:panelGrid columns="2">
<h:outputLabel value="#{i18n['product.name']}:" /><h:inputText value="#{productView.productname}" />
<h:outputLabel value="#{i18n['product.price']}:" /><h:inputText value="#{productView.productprice}" />
<h:commandButton action="#{productView.createProduct()}" value="#{i18n['create']}" />
</h:panelGrid>
</h:form>
</composite:implementation>
</html>
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html
xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:composite="http://java.sun.com/jsf/composite"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:tools="http://java.sun.com/jsf/composite/tools">
<composite:interface>
</composite:interface>
<composite:implementation>
<h:form>
<h:panelGrid columns="2">
<h:outputLabel value="#{i18n['product.name']}:" /><h:inputText value="#{productView.product.name}" />
<h:outputLabel value="#{i18n['product.price']}:" /><h:inputText value="#{productView.product.price}" />
<h:outputLabel value="#{i18n['product.unitName']}:" /><h:inputText value="#{productView.product.unitName}" />
<h:outputLabel value="#{i18n['product.vat']}:" /><h:inputText value="#{productView.product.vat}" />
<h:outputLabel value="#{i18n['product.sort']}:" /><h:inputText value="#{productView.product.sort}" />
<h:outputLabel value="#{i18n['product.barcode']}:" /><h:inputText value="#{productView.product.barcode}" />
<h:outputLabel value="#{i18n['product.prepaid']}" /><h:selectBooleanCheckbox value="#{productView.product.prepaid}" />
<h:commandButton action="#{productView.saveProduct()}" value="#{i18n['save']}" />
</h:panelGrid>
</h:form>
</composite:implementation>
</html>
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html
xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:composite="http://java.sun.com/jsf/composite"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:tools="http://java.sun.com/jsf/composite/tools">
<composite:interface>
</composite:interface>
<composite:implementation>
<tools:canRead target="PRODUCT" >
<h:form>
<h:dataTable border="1" id="product" value="#{productView.products}" var="product">
<h:column>
<f:facet name="header">
<h:outputText value="${i18n['product.name']}" />
</f:facet>
<h:outputText value="#{product.name}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="${i18n['product.price']}" />
</f:facet>
<h:outputText value="#{product.price}" />
</h:column>
<h:column rendered="#{sessionHandler.canWrite('PRODUCT') }">
<f:facet name="header">
<h:outputText value="Edit" />
</f:facet>
<h:commandButton action="#{productView.edit()}" value="Edit" />
</h:column>
</h:dataTable>
</h:form>
</tools:canRead>
</composite:implementation>
</html>
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html
xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:composite="http://java.sun.com/jsf/composite"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:tools="http://java.sun.com/jsf/composite/tools">
<composite:interface>
<composite:attribute name="items" required="true" />
<composite:attribute name="commitValue" required="true" />
<composite:actionSource name="commitbutton" targets="shopform:commitbutton" />
</composite:interface>
<composite:implementation>
<h:form id="shopform">
<h:dataTable
border="1"
id="billcart"
value="#{cc.attrs.items}"
var="cart">
<h:column>
<f:facet name="header">
<h:outputText value="${i18n['product.name']}" />
</f:facet>
<h:outputText value="#{cart.product.name}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="${i18n['product.price']}" />
</f:facet>
<h:outputText value="#{cart.product.price}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="${i18n['product.cart.count']}" />
</f:facet>
<a href="#" onclick="return changeCartCount($(this).next().next(), -1)" >-1</a>
<a href="#" onclick="return changeCartCount($(this).next(), -10)" >-10</a>
<h:inputText size="4" id="cartcount" value="#{cart.count}"></h:inputText>
<a href="#" onclick="return changeCartCount($(this).prev(), +1)" >+1</a>
<a href="#" onclick="return changeCartCount($(this).prev().prev(), +10)" >+10</a>
</h:column>
</h:dataTable>
<h:commandButton id="commitbutton" value="#{cc.attrs.commitValue}" />
</h:form>
</composite:implementation>
</html>
...@@ -37,24 +37,24 @@ ...@@ -37,24 +37,24 @@
</h:column> </h:column>
<h:column> <h:column>
<f:facet name="header"> <f:facet name="header">
<h:outputText value="#{i18n['role.read'}" /> <h:outputText value="#{i18n['role.read']}" />
</f:facet> </f:facet>
<h:selectBooleanCheckbox value="#{rr.read}" /> <h:selectBooleanCheckbox value="#{rr.read}" />
</h:column> </h:column>
<h:column> <h:column>
<f:facet name="header"> <f:facet name="header">
<h:outputText value="#{i18n['role.write']" /> <h:outputText value="#{i18n['role.write']}" />
</f:facet> </f:facet>
<h:selectBooleanCheckbox value="#{rr.write}" /> <h:selectBooleanCheckbox value="#{rr.write}" />
</h:column> </h:column>
<h:column> <h:column>
<f:facet name="header"> <f:facet name="header">
<h:outputText value="#{i18n['role.execute']" /> <h:outputText value="#{i18n['role.execute']}" />
</f:facet> </f:facet>
<h:selectBooleanCheckbox value="#{rr.execute}" /> <h:selectBooleanCheckbox value="#{rr.execute}" />
</h:column> </h:column>
<h:column> <h:column>
<h:commandButton value="#{i18n['role.edit.save']" action="#{roleView.editRoleRight}" /> <h:commandButton value="#{i18n['role.edit.save']}" action="#{roleView.editRoleRight}" />
</h:column> </h:column>
</h:dataTable> </h:dataTable>
</h:form> </h:form>
......
...@@ -20,6 +20,7 @@ ...@@ -20,6 +20,7 @@
<h:panelGrid columns="2"> <h:panelGrid columns="2">
<h:outputLabel value="#{i18n['user.login']}:" /><h:inputText value="#{userView.user.login}" /> <h:outputLabel value="#{i18n['user.login']}:" /><h:inputText value="#{userView.user.login}" />
<h:outputLabel value="#{i18n['user.nick']}:" /><h:inputText value="#{userView.user.nick}" /> <h:outputLabel value="#{i18n['user.nick']}:" /><h:inputText value="#{userView.user.nick}" />
<h:outputLabel value="#{i18n['user.email']}:" /><h:inputText value="#{userView.user.email}" />
<h:outputLabel value="#{i18n['user.firstNames']}:" /><h:inputText value="#{userView.user.firstnames}" /> <h:outputLabel value="#{i18n['user.firstNames']}:" /><h:inputText value="#{userView.user.firstnames}" />
<h:outputLabel value="#{i18n['user.lastName']}:" /><h:inputText value="#{userView.user.lastname}" /> <h:outputLabel value="#{i18n['user.lastName']}:" /><h:inputText value="#{userView.user.lastname}" />
<h:outputLabel value="#{i18n['user.address']}:" /><h:inputText value="#{userView.user.address}" /> <h:outputLabel value="#{i18n['user.address']}:" /><h:inputText value="#{userView.user.address}" />
......
...@@ -27,39 +27,28 @@ ...@@ -27,39 +27,28 @@
</h:column> </h:column>
<h:column> <h:column>
<f:facet name="header"> <f:facet name="header">
<h:outputText value="Real name" /> <h:outputText value="#{i18n['user.nick']}" />
</f:facet> </f:facet>
<h:outputText value="#{user.firstnames}" /> <h:outputText value="#{user.nick}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Address" />
</f:facet>
<h:outputText value="#{user.address}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Town" />
</f:facet>
<h:outputText value="#{user.town}" />
</h:column> </h:column>
<h:column> <h:column>
<f:facet name="header"> <f:facet name="header">
<h:outputText value="Zip" /> <h:outputText value="#{i18n['user.firstnames']}" />
</f:facet> </f:facet>
<h:outputText value="#{user.zip}" /> <h:outputText value="#{user.firstnames}" />
</h:column> </h:column>
<h:column> <h:column>
<f:facet name="header"> <f:facet name="header">
<h:outputText value="Phone number" /> <h:outputText value="#{i18n['user.lastname']}" />
</f:facet> </f:facet>
<h:outputText value="#{user.phone}" /> <h:outputText value="#{user.lastname}" />
</h:column> </h:column>
<h:column> <h:column>
<f:facet name="header"> <f:facet name="header">
<h:outputText value="Sex" /> <h:outputText value="#{i18n['user.email']}" />
</f:facet> </f:facet>
<h:outputText value="#{i18n[concat['user.gender.,#user.gender']]}" /> <h:outputText value="#{user.email}" />
</h:column> </h:column>
<h:column rendered="#{sessionHandler.canWrite('USER_MANAGEMENT') }"> <h:column rendered="#{sessionHandler.canWrite('USER_MANAGEMENT') }">
......
...@@ -32,7 +32,6 @@ package fi.insomnia.bortal.model { ...@@ -32,7 +32,6 @@ package fi.insomnia.bortal.model {
private var _billNumber:Number; private var _billNumber:Number;
private var _delayIntrest:Number; private var _delayIntrest:Number;
private var _deliveryTerms:String; private var _deliveryTerms:String;
private var _dueDate:Date;
private var _event:LanEvent; private var _event:LanEvent;
private var _id:EventPk; private var _id:EventPk;
private var _jpaVersionField:int; private var _jpaVersionField:int;
...@@ -126,13 +125,6 @@ package fi.insomnia.bortal.model { ...@@ -126,13 +125,6 @@ package fi.insomnia.bortal.model {
return _deliveryTerms; return _deliveryTerms;
} }
public function set dueDate(value:Date):void {
_dueDate = value;
}
public function get dueDate():Date {
return _dueDate;
}
[Bindable(event="unused")] [Bindable(event="unused")]
public function get event():LanEvent { public function get event():LanEvent {
return _event; return _event;
...@@ -222,7 +214,6 @@ package fi.insomnia.bortal.model { ...@@ -222,7 +214,6 @@ package fi.insomnia.bortal.model {
_billNumber = function(o:*):Number { return (o is Number ? o as Number : Number.NaN) } (input.readObject()); _billNumber = function(o:*):Number { return (o is Number ? o as Number : Number.NaN) } (input.readObject());
_delayIntrest = function(o:*):Number { return (o is Number ? o as Number : Number.NaN) } (input.readObject()); _delayIntrest = function(o:*):Number { return (o is Number ? o as Number : Number.NaN) } (input.readObject());
_deliveryTerms = input.readObject() as String; _deliveryTerms = input.readObject() as String;
_dueDate = input.readObject() as Date;
_event = input.readObject() as LanEvent; _event = input.readObject() as LanEvent;
_id = input.readObject() as EventPk; _id = input.readObject() as EventPk;
_jpaVersionField = input.readObject() as int; _jpaVersionField = input.readObject() as int;
...@@ -254,7 +245,6 @@ package fi.insomnia.bortal.model { ...@@ -254,7 +245,6 @@ package fi.insomnia.bortal.model {
output.writeObject(_billNumber); output.writeObject(_billNumber);
output.writeObject(_delayIntrest); output.writeObject(_delayIntrest);
output.writeObject(_deliveryTerms); output.writeObject(_deliveryTerms);
output.writeObject(_dueDate);
output.writeObject(_event); output.writeObject(_event);
output.writeObject(_id); output.writeObject(_id);
output.writeObject(_jpaVersionField); output.writeObject(_jpaVersionField);
......
...@@ -32,6 +32,7 @@ package fi.insomnia.bortal.model { ...@@ -32,6 +32,7 @@ package fi.insomnia.bortal.model {
private var _jpaVersionField:int; private var _jpaVersionField:int;
private var _logEntries:ListCollectionView; private var _logEntries:ListCollectionView;
private var _name:String; private var _name:String;
private var _nextBillNumber:int;
private var _organiser:EventOrganiser; private var _organiser:EventOrganiser;
private var _readers:ListCollectionView; private var _readers:ListCollectionView;
private var _referenceNumberBase:Number; private var _referenceNumberBase:Number;
...@@ -121,6 +122,13 @@ package fi.insomnia.bortal.model { ...@@ -121,6 +122,13 @@ package fi.insomnia.bortal.model {
return _name; return _name;
} }
public function set nextBillNumber(value:int):void {
_nextBillNumber = value;
}
public function get nextBillNumber():int {
return _nextBillNumber;
}
public function set organiser(value:EventOrganiser):void { public function set organiser(value:EventOrganiser):void {
_organiser = value; _organiser = value;
} }
...@@ -184,6 +192,7 @@ package fi.insomnia.bortal.model { ...@@ -184,6 +192,7 @@ package fi.insomnia.bortal.model {
_jpaVersionField = input.readObject() as int; _jpaVersionField = input.readObject() as int;
_logEntries = input.readObject() as ListCollectionView; _logEntries = input.readObject() as ListCollectionView;
_name = input.readObject() as String; _name = input.readObject() as String;
_nextBillNumber = input.readObject() as int;
_organiser = input.readObject() as EventOrganiser; _organiser = input.readObject() as EventOrganiser;
_readers = input.readObject() as ListCollectionView; _readers = input.readObject() as ListCollectionView;
_referenceNumberBase = function(o:*):Number { return (o is Number ? o as Number : Number.NaN) } (input.readObject()); _referenceNumberBase = function(o:*):Number { return (o is Number ? o as Number : Number.NaN) } (input.readObject());
...@@ -211,6 +220,7 @@ package fi.insomnia.bortal.model { ...@@ -211,6 +220,7 @@ package fi.insomnia.bortal.model {
output.writeObject(_jpaVersionField); output.writeObject(_jpaVersionField);
output.writeObject(_logEntries); output.writeObject(_logEntries);
output.writeObject(_name); output.writeObject(_name);
output.writeObject(_nextBillNumber);
output.writeObject(_organiser); output.writeObject(_organiser);
output.writeObject(_readers); output.writeObject(_readers);
output.writeObject(_referenceNumberBase); output.writeObject(_referenceNumberBase);
......
...@@ -33,6 +33,8 @@ package fi.insomnia.bortal.model { ...@@ -33,6 +33,8 @@ package fi.insomnia.bortal.model {
private var _prepaid:Boolean; private var _prepaid:Boolean;
private var _price:Number; private var _price:Number;
private var _sort:int; private var _sort:int;
private var _unitName:String;
private var _vat:Number;
meta function isInitialized(name:String = null):Boolean { meta function isInitialized(name:String = null):Boolean {
if (!name) if (!name)
...@@ -122,6 +124,20 @@ package fi.insomnia.bortal.model { ...@@ -122,6 +124,20 @@ package fi.insomnia.bortal.model {
return _sort; return _sort;
} }
public function set unitName(value:String):void {
_unitName = value;
}
public function get unitName():String {
return _unitName;
}
public function set vat(value:Number):void {
_vat = value;
}
public function get vat():Number {
return _vat;
}
public function readExternal(input:IDataInput):void { public function readExternal(input:IDataInput):void {
__initialized = input.readObject() as Boolean; __initialized = input.readObject() as Boolean;
__detachedState = input.readObject() as String; __detachedState = input.readObject() as String;
...@@ -137,6 +153,8 @@ package fi.insomnia.bortal.model { ...@@ -137,6 +153,8 @@ package fi.insomnia.bortal.model {
_prepaid = input.readObject() as Boolean; _prepaid = input.readObject() as Boolean;
_price = function(o:*):Number { return (o is Number ? o as Number : Number.NaN) } (input.readObject()); _price = function(o:*):Number { return (o is Number ? o as Number : Number.NaN) } (input.readObject());
_sort = input.readObject() as int; _sort = input.readObject() as int;
_unitName = input.readObject() as String;
_vat = function(o:*):Number { return (o is Number ? o as Number : Number.NaN) } (input.readObject());
} }
else { else {
_id = input.readObject() as EventPk; _id = input.readObject() as EventPk;
...@@ -158,6 +176,8 @@ package fi.insomnia.bortal.model { ...@@ -158,6 +176,8 @@ package fi.insomnia.bortal.model {
output.writeObject(_prepaid); output.writeObject(_prepaid);
output.writeObject(_price); output.writeObject(_price);
output.writeObject(_sort); output.writeObject(_sort);
output.writeObject(_unitName);
output.writeObject(_vat);
} }
else { else {
output.writeObject(_id); output.writeObject(_id);
......
...@@ -12,7 +12,8 @@ public class PermissionDeniedException extends RuntimeException { ...@@ -12,7 +12,8 @@ public class PermissionDeniedException extends RuntimeException {
public PermissionDeniedException(EjbPermissionDeniedException e) public PermissionDeniedException(EjbPermissionDeniedException e)
{ {
super(e.getMessage());
// Let's not log. EJB already logged...
} }
/** /**
* *
......
...@@ -43,6 +43,16 @@ public class SessionHandler { ...@@ -43,6 +43,16 @@ public class SessionHandler {
public SessionHandler() { public SessionHandler() {
} }
public String getLocale() {
//TODO: Locale selection code missing
return "en_ST_v7";
}
public String getLayout() {
//TODO: layout selection code missing!!
return "insomnia1";
}
public boolean hasPermission(String target, String permission) { public boolean hasPermission(String target, String permission) {
RolePermission perm = null; RolePermission perm = null;
if (permission.equalsIgnoreCase("read")) { if (permission.equalsIgnoreCase("read")) {
...@@ -62,8 +72,6 @@ public class SessionHandler { ...@@ -62,8 +72,6 @@ public class SessionHandler {
return sess; return sess;
} }
public boolean hasPermission(Permission target, RolePermission permission) { public boolean hasPermission(Permission target, RolePermission permission) {
if (target == null) { if (target == null) {
throw new RuntimeException("Empty target"); throw new RuntimeException("Empty target");
......
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package fi.insomnia.bortal.view;
import java.math.BigDecimal;
import java.util.Iterator;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.event.AbortProcessingException;
import javax.faces.event.ActionEvent;
import javax.faces.event.ActionListener;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.beans.BillBeanLocal;
import fi.insomnia.bortal.beans.EventBeanLocal;
import fi.insomnia.bortal.beans.ProductBeanLocal;
import fi.insomnia.bortal.beans.UserBeanLocal;
import fi.insomnia.bortal.exceptions.EjbPermissionDeniedException;
import fi.insomnia.bortal.exceptions.PermissionDeniedException;
import fi.insomnia.bortal.model.Bill;
import fi.insomnia.bortal.model.Product;
import fi.insomnia.bortal.model.User;
import fi.insomnia.bortal.view.helpers.ProductShopItem;
@ManagedBean(name = "productShopView")
@SessionScoped
public class ProductShopView {
private static final Logger logger = LoggerFactory.getLogger(ProductShopView.class);
@EJB
private ProductBeanLocal productBean;
@EJB
private BillBeanLocal billBean;
@EJB
private EventBeanLocal eventBean;
@EJB
private UserBeanLocal userBean;
private ListDataModel<ProductShopItem> billCart;
private User shoppingUser;
public DataModel<Product> getUserShoppableProducts() {
ListDataModel<Product> items = new ListDataModel<Product>(productBean.listUserShoppableProducts());
logger.info("Fetching products. Found {}", items.getRowCount());
return items;
}
public ActionListener getBillCommitAL()
{
logger.info("Fetching billCommitAl()");
return new ActionListener(){
@Override
public void processAction(ActionEvent event) throws AbortProcessingException {
logger.info("Executing BillCommit AL");
}};
}
public void commitBillCart() {
logger.debug("Committing billCart");
Iterator<ProductShopItem> cartIter = billCart.iterator();
Bill bill = null;
try {
bill = billBean.createEmptyBill(getShoppingUser());
} catch (EjbPermissionDeniedException e) {
throw new PermissionDeniedException(e);
}
bill.setOurReference(eventBean.getCurrentEvent().getName());
while (cartIter.hasNext()) {
ProductShopItem shopitem = cartIter.next();
if (shopitem.getCount().compareTo(BigDecimal.ZERO) > 0) {
billBean.addProductToBill(bill, shopitem.getProduct(), shopitem.getCount());
}
}
}
public DataModel<ProductShopItem> getBillCart() {
billCart = new ListDataModel<ProductShopItem>(ProductShopItem.productList(productBean.listUserShoppableProducts()));
return billCart;
}
public void setShoppingUser(User shoppingUser) {
this.shoppingUser = shoppingUser;
}
public User getShoppingUser() {
if (shoppingUser == null) {
userBean.getCurrentUser();
}
return shoppingUser;
}
}
...@@ -4,21 +4,26 @@ ...@@ -4,21 +4,26 @@
*/ */
package fi.insomnia.bortal.view; package fi.insomnia.bortal.view;
import fi.insomnia.bortal.beans.ProductBeanLocal; import java.math.BigDecimal;
import fi.insomnia.bortal.beans.SecurityBeanLocal; import java.util.Iterator;
import fi.insomnia.bortal.model.EventMap;
import fi.insomnia.bortal.model.Product;
import java.util.Map;
import javax.ejb.EJB; import javax.ejb.EJB;
import javax.faces.bean.ManagedBean; import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped; import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.faces.model.DataModel; import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel; import javax.faces.model.ListDataModel;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.beans.BillBeanLocal;
import fi.insomnia.bortal.beans.ProductBeanLocal;
import fi.insomnia.bortal.model.Bill;
import fi.insomnia.bortal.model.BillLine;
import fi.insomnia.bortal.model.EventMap;
import fi.insomnia.bortal.model.Product;
import fi.insomnia.bortal.view.helpers.ProductShopItem;
/** /**
* *
* @author jkj * @author jkj
...@@ -26,22 +31,44 @@ import org.slf4j.LoggerFactory; ...@@ -26,22 +31,44 @@ import org.slf4j.LoggerFactory;
@ManagedBean(name = "productView") @ManagedBean(name = "productView")
@SessionScoped @SessionScoped
public class ProductView { public class ProductView {
private static final Logger logger = LoggerFactory.getLogger(ProductView.class);
@EJB @EJB
private ProductBeanLocal productBean; private ProductBeanLocal productBean;
private static final Logger logger = LoggerFactory.getLogger(ProductView.class);
@EJB @EJB
private SecurityBeanLocal securitybean; private BillBeanLocal billBean;
private String productname = "";
private BigDecimal productprice = BigDecimal.ZERO;
private EventMap activeMap = null; private EventMap activeMap = null;
private ListDataModel<ProductShopItem> billCart;
private Product product;
private ListDataModel<Product> products;
public DataModel<Product> getProducts() {
products = new ListDataModel<Product>(productBean.getProducts());
return products;
}
public String createProduct() {
setProduct(productBean.createProduct(productname, productprice));
productprice = BigDecimal.ZERO;
productname = "";
public DataModel<Product> getUserShoppableProducts() { return "edit";
ListDataModel<Product> items = new ListDataModel<Product>(productBean.listUserShoppableProducts()); }
logger.info("Fetching products. Found {}", items.getRowCount());
public String edit() {
product = products.getRowData();
return "edit";
}
return items; public String saveProduct() {
productBean.mergeChanges(product);
return "list";
} }
/** /**
...@@ -52,32 +79,56 @@ public class ProductView { ...@@ -52,32 +79,56 @@ public class ProductView {
} }
/** /**
* @param activeMap the activeMap to set * @param activeMap
* the activeMap to set
*/ */
public void setActiveMap(EventMap activeMap) { public void setActiveMap(EventMap activeMap) {
this.activeMap = activeMap; this.activeMap = activeMap;
} }
public void setProductname(String productname) {
this.productname = productname;
}
/* public String getProductname() {
public String placeMapActionListener(ActionEvent e) { return productname;
}
if(activeMap == null)
throw new UnsupportedOperationException("TODO error message");
public void setProductprice(BigDecimal productprice) {
this.productprice = productprice;
}
public BigDecimal getProductprice() {
return productprice;
}
FacesContext context = FacesContext.getCurrentInstance(); public void setProduct(Product product) {
String clientId = e.getComponent().getClientId(context); this.product = product;
Map requestParams = context.getExternalContext().getRequestParameterMap(); }
int x = new Integer((String) requestParams.get(clientId + ".x")).intValue();
int y = new Integer((String) requestParams.get(clientId + ".y")).intValue();
System.out.println("x: " + x + ", y:" + y); public Product getProduct() {
return product;
}
throw new UnsupportedOperationException(); /*
}*/ * public String placeMapActionListener(ActionEvent e) {
*
* if(activeMap == null) throw new
* UnsupportedOperationException("TODO error message");
*
*
*
*
*
*
* FacesContext context = FacesContext.getCurrentInstance(); String clientId
* = e.getComponent().getClientId(context); Map requestParams =
* context.getExternalContext().getRequestParameterMap(); int x = new
* Integer((String) requestParams.get(clientId + ".x")).intValue(); int y =
* new Integer((String) requestParams.get(clientId + ".y")).intValue();
*
* System.out.println("x: " + x + ", y:" + y);
*
* throw new UnsupportedOperationException(); }
*/
} }
...@@ -49,9 +49,7 @@ public class UserView { ...@@ -49,9 +49,7 @@ public class UserView {
return "userEdit"; return "userEdit";
} }
public String getLocale() {
return "en_ST_v7";
}
public String createUser() { public String createUser() {
if (!getSessionhandler().canWrite(Permission.USER_MANAGEMENT)) { if (!getSessionhandler().canWrite(Permission.USER_MANAGEMENT)) {
......
package fi.insomnia.bortal.view.helpers;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import fi.insomnia.bortal.model.Product;
public class ProductShopItem {
private Product product;
private BigDecimal count = BigDecimal.ZERO;
public ProductShopItem(Product prod) {
this.product = prod;
}
public static List<ProductShopItem> productList(List<Product> products) {
List<ProductShopItem> ret = new ArrayList<ProductShopItem>();
for (Product prod : products) {
ret.add(new ProductShopItem(prod));
}
return ret;
}
public Product getProduct() {
return this.product;
}
public void setCount(BigDecimal count) {
this.count = count;
}
public BigDecimal getCount() {
return count;
}
}
user.username=K\u00E4ytt\u00E4j\u00E4tunnus user.username=K\u00E4ytt\u00E4j\u00E4tunnus
user.realname=Nimi user.realname=Name
user.password=Salasana user.password=Password
user.email=S\u00E4hk\u00E4postiosoite user.email=Email address
user.phone=Puhelinnumero user.phone=Phone
user.bankaccount=Tilinumero user.bankaccount=Bank account
user.bank=Pankki user.bank=Bank
save=Tallenna save=Save
cancel=Peruuta cancel=Cancel
login.username=K\u00E4ytt\u00E4j\u00E4tunnus: login.username=User
login.password=Salasana: login.password=Password
login.submit=Kirjaudu sis\u00E4\u00E4n login.submit=Login
user.validate.notUniqueUsername=i18n K\u00E4ytt\u00E4j\u00E4tunnus on jo olemassa. Ole hyv\u00E4 ja valitse toinen tunnus. topmenu.frontpage=Frontpage
topmenu.usersPreferences=Preferences
topmenu.shoppings=Shop
topmenu.adminfront=Adminstuff
user.validate.notUniqueUsername=Username already exists. Please select another.
fallbackstr="fallback default" fallbackstr="fallback default"
teststr=default locale test teststr=default local
defaultstr="Something default..." defaultstr="Something default..."
logout=H\u00E4ivy logout=Logout
nasty.user=paha k\u00E4ytt\u00E4j\u00E4 ei yrit\u00E4 haxoroida meid\u00E4n softaa. Kts. nasty.user=Hax attempt! Go away!
global.sex.UNDEFINED=Undefined global.sex.UNDEFINED=Undefined
......
user.username=K\u00E4ytt\u00E4j\u00E4tunnus global.infomail=info@streamparty.org
user.realname=Nimi global.webpage=http://www.streamparty.org
user.password=Salasana \ No newline at end of file
user.email=S\u00E4hk\u00F6postiosoite
user.phone=Puhelinnumero
user.bankaccount=Tilinumero
user.bank=Pankki
save=Tallenna
cancel=Peruuta
login.username=K\u00E4ytt\u00E4j\u00E4tunnus:
login.password=Salasana:
login.submit=Kirjaudu sis\u00E4\u00E4n
user.validate.notUniqueUsername=i18n K\u00E4ytt\u00E4j\u00E4tunnus on jo olemassa. Ole hyv\u00E4 ja valitse toinen tunnus.
fallbackstr="fallback default"
teststr=default locale test
defaultstr="Something default..."
logout=H\u00E4ivy
nasty.user=paha k\u00E4ytt\u00E4j\u00E4 ei yrit\u00E4 haxoroida meid\u00E4n softaa. Kts.
user.username=K\u00E4ytt\u00E4j\u00E4tunnus global.eventname=Stream seven
user.realname=Nimi
user.password=Salasana
user.email=S\u00E4hk\u00F6postiosoite
user.phone=Puhelinnumero
user.bankaccount=Tilinumero
user.bank=Pankki
save=Tallenna
cancel=Peruuta
login.username=K\u00E4ytt\u00E4j\u00E4tunnus:
login.password=Salasana:
login.submit=Kirjaudu sis\u00E4\u00E4n
user.validate.notUniqueUsername=i18n K\u00E4ytt\u00E4j\u00E4tunnus on jo olemassa. Ole hyv\u00E4 ja valitse toinen tunnus.
fallbackstr="fallback default"
teststr=default locale test
defaultstr="Something default..."
logout=H\u00E4ivy
nasty.user=paha k\u00E4ytt\u00E4j\u00E4 ei yrit\u00E4 haxoroida meid\u00E4n softaa. Kts.
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!