// Check number of entries already submitted
func count(w http.ResponseWriter, r *http.Request) {
	if r.Method != "GET" {
		w.WriteHeader(http.StatusMethodNotAllowed)
		return
	}

	w.Header().Set("Access-Control-Allow-Origin", "http://www.malaysia-ikea.com")

	if n, err := store.CountEntries(); err != nil {
		w.WriteHeader(http.StatusInternalServerError)
	} else {
		w.Write([]byte(fmt.Sprintf("%d", n)))
	}
}
func submit(w http.ResponseWriter, r *http.Request) {
	if r.Method != "POST" {
		w.WriteHeader(http.StatusMethodNotAllowed)
		return
	}

	w.Header().Set("Access-Control-Allow-Origin", "http://www.malaysia-ikea.com")

	// Name
	name := r.FormValue("name")
	if len(name) == 0 {
		w.WriteHeader(http.StatusBadRequest)
		w.Write([]byte("Name is empty"))
		return
	}

	// Address 1
	address1 := r.FormValue("address1")
	if len(address1) == 0 {
		w.WriteHeader(http.StatusBadRequest)
		w.Write([]byte("Address 1 is empty"))
		return
	}

	// Address 2
	address2 := r.FormValue("address2")

	// Postal Code
	postalCode := r.FormValue("postal_code")
	if len(postalCode) != 5 {
		w.WriteHeader(http.StatusBadRequest)
		w.Write([]byte("Postal code length must be " + itoa(PostalCodeLength) + " digits long"))
		return
	}

	// City
	city := r.FormValue("city")
	if len(city) == 0 {
		w.WriteHeader(http.StatusBadRequest)
		w.Write([]byte("City is empty"))
		return
	}

	// State
	state := r.FormValue("state")
	if len(state) == 0 {
		w.WriteHeader(http.StatusBadRequest)
		w.Write([]byte("State is empty"))
		return
	}

	// Country
	country := r.FormValue("country")
	if country != "Malaysia" {
		w.WriteHeader(http.StatusBadRequest)
		w.Write([]byte("Country name is invalid"))
		return
	}

	// Email
	email := r.FormValue("email")
	if len(email) == 0 {
		w.WriteHeader(http.StatusBadRequest)
		w.Write([]byte("Email is empty"))
		return
	}

	// Check number of entries already submitted
	if n, err := store.CountEntries(); err != nil {
		w.WriteHeader(http.StatusInternalServerError)
		return
	} else if n >= MaxEntries {
		w.WriteHeader(http.StatusBadRequest)
		w.Write([]byte("out of stock"))
		return
	}

	// Insert to database
	if err := store.InsertEntry(name, address1, address2, city, state, country, postalCode, email); err != nil {
		e, ok := err.(*pq.Error)
		if ok && e.Code == "23505" { // unique violation
			w.WriteHeader(http.StatusBadRequest)
			w.Write([]byte("duplicate"))
			return
		} else {
			debug.Warn(err)
			w.WriteHeader(http.StatusInternalServerError)
			return
		}
	}

	w.WriteHeader(http.StatusOK)
}