Taking a step back, a standard image $I$ is composed of pixels. They are defined by a location (spatial coordinates, here denoted by $p$), and a "value", denoted by $I_p$. Smoothing or enhancing an image, in a large sense, consists in replacing each $I_p$ by $\hat{I}_p$, a value that would be: more probable, more consistent, more visually pleasant (choose your favorite).
This job can be performed using pixels, models and functions to combine them. And assumptions on what you deem probable, consistent, pleasant... A classical assumption is that a noisy or erroneous pixel value could be replaced by combinations of other pixel values. Which pixels is the central question? Two answers are standard:
- pixels close in location to $p$, giving most local filters, often with finite support,
- pixels close in intensity, giving non-local filters (like Non-Local NL-means).
with a weight to modify each pixel's influence in the result. To simplify the discussion, let us assume that the combination of pixel values is a weighed mean (but it could be any generalized mean, median, etc.). Generally, the closer the value, the higher the weight. The bilateral filter combines these two options. A smoothing weight is generally chosen so that the sum of weights is one (Question 3). Thus, a constant image is invariant to smoothing. This settle the question on $W_p$.
Then, given a pixel location $p$, one can choose how the selected pixels $q\in S$ are picked, in the set $S$: which regions, etc. You can choose to have only pixels in the corners, on the borders etc. if you want. You can choose only left-right-top-bottom pixels, or diagonal, as you want (Question 2).
This depends on the prior you have on their validity. On top of that, you can choose how those pixels act, on their position $q$ relative to $p$. This is driven by $\|p-q\|$, where you can choose a suitable norm. With $G_{\sigma_S}(\|p-q\|)$, the term $\sigma_S$ sets a decaying Gaussian function around $p$, providing an implicit neighbor size, depending on the norm choice for $\|\cdot\|$ and $\sigma_S$. So far, this is a traditional linear Gaussian image filtering. The bilateral filter adds a non linearity, as $|I_p-I_q|$ depends on image values. It tells you: how do intensities of pixels, already in the neighborhood of $p$, further contribute to the average (Question 3). This ingredient is useful to preserve edges. For instance, take an edge separating a white and a black region. Take a black pixel near to the edge. A black pixel in its neighborhood will have more weight than a white one, because of $|I_p-I_q|$, which is not the case in standard linear filtering.
For Question 1, the choice really depends on the scale of objects ($\sigma_S$) and the range of intensities ($\sigma_r$) you want to preserve, and this is domain dependent. For natural images, there must be parameters given in papers linked to by Royi.