script.js 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222
  1. /**
  2. * Opens a form to add a new offer.
  3. */
  4. function newOffer(){
  5. document.getElementById('screen_cover').style.display = 'block';
  6. document.getElementById('form_new_offer').style.display = 'block';
  7. document.getElementById('screen_cover').style.opacity = '0.6';
  8. document.getElementById('form_new_offer').style.opacity = '1';
  9. }
  10. /**
  11. * Cancels a offer that is being edited, and it is not yet saved.
  12. */
  13. function cancelNewOffer(){
  14. if (confirm("Oferta no agregada. Descartar cambios?")){
  15. closeNewOffer();
  16. }
  17. }
  18. /**
  19. * Closes the new offer form.
  20. */
  21. function closeNewOffer(){
  22. document.getElementById('new_offer_title_es').value = '';
  23. document.getElementById('new_offer_title_en').value = '';
  24. document.getElementById('new_offer_title_eu').value = '';
  25. document.getElementById('new_offer_text_es').value = '';
  26. document.getElementById('new_offer_text_en').value = '';
  27. document.getElementById('new_offer_text_eu').value = '';
  28. document.getElementById('new_offer_days').value = '1';
  29. document.getElementById('new_offer_price').value = '0';
  30. document.getElementById('screen_cover').style.display = 'none';
  31. document.getElementById('form_new_offer').style.display = 'none';
  32. document.getElementById('screen_cover').style.opacity = '0';
  33. document.getElementById('form_new_offer').style.opacity = '0';
  34. }
  35. /**
  36. * Validates and saves a new offer.
  37. * @param year Year for the offer.
  38. */
  39. function saveNewOffer(year){
  40. //Get values
  41. var name_es = document.getElementById('new_offer_title_es').value;
  42. var name_en = document.getElementById('new_offer_title_en').value;
  43. var name_eu = document.getElementById('new_offer_title_eu').value;
  44. var text_es = document.getElementById('new_offer_text_es').value;
  45. var text_en = document.getElementById('new_offer_text_en').value;
  46. var text_eu = document.getElementById('new_offer_text_eu').value;
  47. var days = document.getElementById('new_offer_days').value;
  48. var price = document.getElementById('new_offer_price').value;
  49. //Validate values
  50. if (name_es.length == 0){
  51. alert("Debes introducir el nombre, al menos en castellano.");
  52. document.getElementById('new_offer_title_es').focus();
  53. return;
  54. }
  55. if (text_es.length == 0){
  56. alert("Debes introducir una descripcion, al menos en castellano.");
  57. document.getElementById('new_offer_text_es').focus();
  58. return;
  59. }
  60. if (parseInt(price, 10) <= 0){
  61. alert("Debes introducir un precio valido.");
  62. document.getElementById('new_offer_price').focus();
  63. return;
  64. }
  65. if (parseInt(price, 10) <= 1 || parseInt(price, 10) > 6){
  66. alert("Debes introducir un numer valido de dias.");
  67. document.getElementById('new_offer_days').focus();
  68. return;
  69. }
  70. // Encode required values
  71. name_es = encodeURI(name_es);
  72. name_en = encodeURI(name_en);
  73. name_eu = encodeURI(name_eu);
  74. text_es = encodeURI(text_es);
  75. text_en = encodeURI(text_en);
  76. text_eu = encodeURI(text_eu);
  77. // Get page
  78. if(XMLHttpRequest)
  79. var x = new XMLHttpRequest();
  80. else
  81. var x = new ActiveXObject("Microsoft.XMLHTTP");
  82. x.open("POST", "/lablanca/insertoffer.php", true);
  83. var params = "year=" + year + "&name_es=" + name_es + "&name_en=" + name_en + "&name_eu=" + name_eu + "&text_es=" + text_es + "&text_en=" + text_en + "&text_eu=" + text_eu + "&price=" + price + "&days=" + days;
  84. x.setRequestHeader("Content-type", "application/x-www-form-urlencoded")
  85. x.onreadystatechange = function(){
  86. if(x.readyState == 4){
  87. if(x.status == 200)
  88. closeNewOffer();
  89. calculate('prices');
  90. }
  91. }
  92. x.send(params);
  93. }
  94. /**
  95. * Recalculates the status header for a section.
  96. *
  97. * @param section 'all', 'header', 'prices', 'schedule'.
  98. */
  99. function calculate(section){
  100. switch (section){
  101. case 'all':
  102. calculate('header');
  103. calculate('prices');
  104. calculate('schedule');
  105. break;
  106. case 'header':
  107. setTimeout(function(){
  108. // Get page
  109. if(XMLHttpRequest)
  110. var x = new XMLHttpRequest();
  111. else
  112. var x = new ActiveXObject("Microsoft.XMLHTTP");
  113. x.open("GET", "/lablanca/calculate.php?section=header", true);
  114. x.send();
  115. x.onreadystatechange = function(){
  116. if(x.readyState == 4){
  117. if(x.status == 200)
  118. document.getElementById('status_header').innerHTML = x.responseText;
  119. }
  120. }
  121. }, 500);
  122. break;
  123. case 'prices':
  124. setTimeout(function(){
  125. // Get page
  126. if(XMLHttpRequest)
  127. var x = new XMLHttpRequest();
  128. else
  129. var x = new ActiveXObject("Microsoft.XMLHTTP");
  130. x.open("GET", "/lablanca/calculate.php?section=pricesprogress", true);
  131. x.send();
  132. x.onreadystatechange = function(){
  133. if(x.readyState == 4){
  134. if(x.status == 200)
  135. document.getElementById('status_prices').innerHTML = x.responseText;
  136. }
  137. }
  138. }, 500);
  139. setTimeout(function(){
  140. // Get page
  141. if(XMLHttpRequest)
  142. var x = new XMLHttpRequest();
  143. else
  144. var x = new ActiveXObject("Microsoft.XMLHTTP");
  145. x.open("GET", "/lablanca/calculate.php?section=pricesoffers", true);
  146. x.send();
  147. x.onreadystatechange = function(){
  148. if(x.readyState == 4){
  149. if(x.status == 200)
  150. document.getElementById('prices_offers').innerHTML = x.responseText;
  151. }
  152. }
  153. }, 700);
  154. break;
  155. case 'schedule':
  156. console.log('Recalculating schedule...');
  157. break;
  158. }
  159. }
  160. /**
  161. * Updates an entry in the database.
  162. *
  163. * @param table Name of the table
  164. * @param field Name of the column
  165. * @param value New value
  166. * @param id Identifier of the entry
  167. * @param type Type of the value
  168. * @param canBeNull Indicates nullable values.
  169. */
  170. function updateField(table, field, value, id, type = 'text', canBeNull = true){
  171. // Get page
  172. if(XMLHttpRequest)
  173. var x = new XMLHttpRequest();
  174. else
  175. var x = new ActiveXObject("Microsoft.XMLHTTP");
  176. x.open("POST", "/lablanca/execute.php", true);
  177. var params = "action=update&table=" + table + "&field=" + field + "&value=" + encodeURI(value) + "&id=" + id + "&type=" + type;
  178. x.setRequestHeader("Content-type", "application/x-www-form-urlencoded")
  179. x.onreadystatechange = function(){
  180. if(x.readyState == 4){
  181. if(x.status == 200)
  182. return true;
  183. }
  184. }
  185. x.send(params);
  186. }
  187. /**
  188. * Deletes an offer from the database.
  189. *
  190. * @param id Offer ID.
  191. */
  192. function deleteOffer(id){
  193. // Get page
  194. if(XMLHttpRequest)
  195. var x = new XMLHttpRequest();
  196. else
  197. var x = new ActiveXObject("Microsoft.XMLHTTP");
  198. x.open("POST", "/lablanca/execute.php", true);
  199. var params = "action=delete&table=festival_offer&id=" + id;
  200. x.setRequestHeader("Content-type", "application/x-www-form-urlencoded")
  201. x.onreadystatechange = function(){
  202. if(x.readyState == 4){
  203. if(x.status == 200)
  204. calculate('prices');
  205. }
  206. }
  207. x.send(params);
  208. }