data {
	pi <- 3.141592653589

	Omega[1,1] <- 1
	Omega[1,2] <- 0
	Omega[2,1] <- 0
	Omega[2,2] <- 1
	
	first.loc[1] <- y[1,1]
	first.loc[2] <- y[1,2]
	}
model
{

## priors on process uncertainty
iSigma[1:2,1:2] ~ dwish(Omega[,], 2)	
Sigma[1:2,1:2] <- inverse(iSigma[,])

tmp[1] ~ dbeta(20, 20)
tmp[2] ~ dbeta(1, 1)
tmp[3] ~ dbeta(1, 1)

theta[1] <- (2 * tmp[1] - 1) * pi
theta[2] <- tmp[2] * pi * 2
theta[3] <- tmp[3] * pi * 2

gamma[1] ~ dbeta(2, 1.5) 	## prior for gamma in b=1
dev1 ~ dbeta(1, 1)			## rnd deviate to ensure gamma[2] > gamma[1]
dev2 ~ dbeta(1, 1)
gamma[2] <- gamma[1] * dev1
gamma[3] <- gamma[2] * dev2

# Priors for prob of switching into state 1 from any state
alpha1[1] ~ dbeta(1, 1)		
alpha1[2] ~ dbeta(1, 1)		
alpha1[3] ~ dbeta(1, 1)
alpha2[1] ~ dbeta(1, 1)		
alpha2[2] ~ dbeta(1, 1)
alpha2[3] ~ dbeta(1, 1)		

lambda[1] ~ dunif(0, 1)
lambda1 ~ dunif(0, 1)
lambda[2] <- (1 - lambda[1]) * lambda1
lambda[3] <- (1 - lambda[1]) * (1 - lambda1)
b[1] ~ dcat(lambda[]) ## assign b for first obs

logpsi ~ dunif(-10, 10)		## inflation/deflation factor for estimation error
psi <- exp(logpsi)

## Priors for first location
for(k in 1:2){
	x[1,k] ~ dt(first.loc[k], itau2[1,k] * psi, nu[1,k])
	}

## Assume simple random walk to estimate 2nd regular position
x[2,1:2] ~ dmnorm(x[1,], iSigma[,])

## Transition equation
for(t in 2:(Nx-1)){

	phi[t,1] <- alpha1[b[t-1]]
	phi[t,2] <- (1 - alpha1[b[t-1]]) * alpha2[b[t-1]]
	phi[t,3] <- (1 - alpha1[b[t-1]]) * (1 - alpha2[b[t-1]])
	b[t] ~ dcat(phi[t,])
	
  Tdx[t,1] <- cos(theta[b[t]]) * (x[t,1] - x[t-1,1]) + sin(theta[b[t]]) * (x[t,2] - x[t-1,2])      
  x.mn[t,1] <- x[t,1] +  Tdx[t,1] * gamma[b[t]]

  Tdx[t,2] <- -sin(theta[b[t]]) * (x[t,1] - x[t-1,1]) + cos(theta[b[t]]) * (x[t,2] - x[t-1,2])      
  x.mn[t,2] <- x[t,2] +  Tdx[t,2] * gamma[b[t]]

  x[t+1,1:2] ~ dmnorm(x.mn[t,], iSigma[,])	## estimate next location (with error)
	}

## estimate final b 
zeta[1] <- alpha1[b[Nx-1]]
zeta[2] <- (1 - alpha1[b[Nx-1]]) * alpha2[b[Nx-1]]
zeta[3] <- (1 - alpha1[b[Nx-1]]) * (1 - alpha2[b[Nx-1]])
b[Nx] ~ dcat(zeta[])

##	Measurement equation
for(i in 1:(Ny-1)) {	
  for(j in 1:2) {
    yhat[i,j] <- w[i] * x[idx[i],j] + (1 - w[i]) * x[idx[i+1],j]
       y[i,j] ~  dt(yhat[i,j], itau2[i,j] * psi, nu[i,j])
    }
  }	
} #end
