model
{
  #draw idiosyncratic dimension importance; nResp - number of respondents; r and l - parameters of the gamma dist.
  for (i in 1 : nResp){
    moResp[i] ~ dgamma(r[1],l[1])
    scResp[i] ~ dgamma(r[2],l[2])
    uaResp[i] ~ dgamma(r[3],l[3])
    pdResp[i] ~ dgamma(r[4],l[4])
    adResp[i] ~ dgamma(r[5],l[5])
  }

  #################################################
  #modelling the TTO part; relTTO - scaling due to religiosity; avg - theoretical value; disUcens - observed, censored disutility
  for (i in 1 : nTTO){
    relTTO[i] <- pow(rTTO,beliefTTO[i])

    avg[i] <- (moResp[respTTO[i]]*lev.mo[mo[i]] + scResp[respTTO[i]]*lev.sc[sc[i]] + uaResp[respTTO[i]]*lev.ua[ua[i]] + pdResp[respTTO[i]]*lev.pd[pd[i]] + adResp[respTTO[i]]*lev.ad[ad[i]]) * relTTO[i]

    disUcens[i] ~ dt(avg[i], tauUdis * pow(.01 + theta + avg[i],-2), df)
    is.censored[i] ~ dinterval(disUcens[i],1.975)
 }

  #modelling the DCE part; states disutilities, difference, probability of choosing the first state, the observed choice
  for (i in 1 : nDCE){
    disUA[i] <- (moResp[respDCE[i]]*lev.mo[moA[i]] + scResp[respDCE[i]]*lev.sc[scA[i]] + uaResp[respDCE[i]]*lev.ua[uaA[i]] + pdResp[respDCE[i]]*lev.pd[pdA[i]] + adResp[respDCE[i]]*lev.ad[adA[i]])
    
    disUB[i] <- (moResp[respDCE[i]]*lev.mo[moB[i]] + scResp[respDCE[i]]*lev.sc[scB[i]] + uaResp[respDCE[i]]*lev.ua[uaB[i]] + pdResp[respDCE[i]]*lev.pd[pdB[i]] + adResp[respDCE[i]]*lev.ad[adB[i]])
    
    disDif[i] <- disUB[i] - disUA[i]
    
    prob[i] <-  atan(rho * disDif[i])/3.14159 + 1/2
    
    choice[i] ~ dbern(prob[i])
  }

  #################################################
  #relative level values, 0 and 1 for levels 1 and 5, respectively
  lev.mo[1] <- 0
  lev.sc[1] <- 0
  lev.ua[1] <- 0
  lev.pd[1] <- 0
  lev.ad[1] <- 0
  
  lev.mo[5] <- 1
  lev.sc[5] <- 1
  lev.ua[5] <- 1
  lev.pd[5] <- 1
  lev.ad[5] <- 1

  #calculating the parameters of the gamma distribution, based on mean and sd in population
  for (i in 1:5){ 
  	r[i] <- pow(m[i],2)/pow(sd[i],2)
    l[i] <- m[i]/pow(sd[i],2)
  }
  
  #################################################
  #priors for the means and sd of gamma distributions (the priors are beta-distributed)
  for (i in 1:5){ 
  	m[i] ~ dbeta(1,1)
    sd[i] ~ dbeta(1,1)
  }

  #priors for the relative level importance, no ordering forced
  for (i in 2:4){
    lev.mo[i] ~ dbeta(1,1)
    lev.sc[i] ~ dbeta(1,1)
    lev.ua[i] ~ dbeta(1,1)
    lev.pd[i] ~ dbeta(1,1)
    lev.ad[i] ~ dbeta(1,1) 
  }
 
  #other priors
  tauUdis ~ dgamma(.001,.001)
  rho ~ dgamma(.001,.001)
  theta ~ dgamma(.01, .01)
  df <- dfM1 + 1
  dfM1 ~ dexp(1/29)
  rTTO ~ dgamma(.01,.01)
  
  #output parameters
  sdMO <- sd[1]
  sdSC <- sd[2]
  sdUA <- sd[3]
  sdPD <- sd[4]
  sdAD <- sd[5]
  sdUdis <- 1.0/sqrt(tauUdis)

  #the most important output parameters, mean disutilities for dimensions/levels
  MO2 <- m[1] * lev.mo[2]
  MO3 <- m[1] * lev.mo[3]
  MO4 <- m[1] * lev.mo[4]
  MO5 <- m[1] * lev.mo[5]
  SC2 <- m[2] * lev.sc[2]
  SC3 <- m[2] * lev.sc[3]
  SC4 <- m[2] * lev.sc[4]
  SC5 <- m[2] * lev.sc[5]
  UA2 <- m[3] * lev.ua[2]
  UA3 <- m[3] * lev.ua[3]
  UA4 <- m[3] * lev.ua[4]
  UA5 <- m[3] * lev.ua[5]
  PD2 <- m[4] * lev.pd[2]
  PD3 <- m[4] * lev.pd[3]
  PD4 <- m[4] * lev.pd[4]
  PD5 <- m[4] * lev.pd[5]
  AD2 <- m[5] * lev.ad[2]
  AD3 <- m[5] * lev.ad[3]
  AD4 <- m[5] * lev.ad[4]
  AD5 <- m[5] * lev.ad[5]

  #################################################
  # the technical block, defining data and monitors

  # data # nResp, nTTO, nDCE, respTTO, respDCE
  # data # mo, sc, ua, pd, ad
  # data # moA, moB, scA, scB, uaA, uaB, pdA, pdB, adA, adB
  # data # choice, is.censored, disUcens  
  # data # beliefTTO
  # monitor # MO2, MO3, MO4, MO5, SC2, SC3, SC4, SC5, UA2, UA3, UA4, UA5, PD2, PD3, PD4, PD5, AD2, AD3, AD4, AD5
  # monitor # sdMO, sdSC, sdUA, sdPD, sdAD
  # monitor # sdUdis, tauUdis, df, theta, rTTO, rho
  # monitor # lev.mo, lev.sc, lev.ua, lev.pd, lev.ad
  # monitor # deviance
}