/* JavaScript Document : Ludger Müller
* 0209 */

var hsWeeksCount =  hsAccoWeeksCount = 0;
// Rechen- und Datumsarrays initialisieren
var statingDatesCalc = new Array(startingDates.length) ; //DatenArray zur Berechung mit Startdaten
var countDates = startingDates.length;
var startingDatesBeginnersCalc = new Array(); //DatenArray zur Berechung mit Anfängerdaten
var surfDatesCalc = new Array(); //DatenArray zur Berechung
var surfDatesBeginnersCalc = new Array(); //DatenArray zur Berechung mit Anfängerdaten
var counter = addinfoTxt.length;
var masterDates = new Array();
var DELEDates = new Array();
var datesCode = beginnersDatesCode = surfDatesCode = courseWeeksCode = addinfoCode = masterDatesCode = DELEDatesCode = surfDatesBeginnersCode = "";
var addweeksoptions;

// Starting Dates in Rechenarray
for (i=0; i<countDates; i++) //das Array durchlaufen
{statingDatesCalc[i] =Number( startingDates[i][0].slice(8)+ startingDates[i][0].slice(3,5) +startingDates[i][0].slice(0,2));
if( highseasonEnd == statingDatesCalc[i])// Enddatum der Highseason als Arrayposition ausgeben
{ highseasonEnd = i;}
if( accoHighSeasonEnd == statingDatesCalc[i])// Enddatum der Acco Highseason als Arrayposition ausgeben
{ accoHighSeasonEnd = i;}

if(startingDates[i][1]== 1)//beginner  yes
{
  newElement = startingDatesBeginnersCalc.push([statingDatesCalc[i],i]);
  beginnersDatesCode +="<option value=\"" + startingDates[i][0] + "\">" + startingDates[i][0] + "</option>"  ;
}
if(startingDates[i][3]== 1)//surf yes
{
  newElement = surfDatesCalc.push([statingDatesCalc[i],i]);
  surfDatesCode +="<option value=\"" + startingDates[i][0] + "\">" + startingDates[i][0] + "</option>"  ;
}
if(startingDates[i][1]== 1 && startingDates[i][3]== 1)// Beginner yes  && surf yes
{
  newElement = surfDatesBeginnersCalc.push([statingDatesCalc[i],i]);
  surfDatesBeginnersCode +="<option value=\"" + startingDates[i][0] + "\">" + startingDates[i][0] + "</option>"  ;
}
if(startingDates[i][5]== 1)//DELE yes
{
  newElement = DELEDates.push([statingDatesCalc[i],i]);
  DELEDatesCode +="<option value=\"" + startingDates[i][0] + "\">" + startingDates[i][0] + "</option>"  ;
}
if(startingDates[i][6]== 1)//master yes
{
  newElement = masterDates.push([statingDatesCalc[i],i]);
  masterDatesCode +="<option value=\"" + startingDates[i][0] + "\">" + startingDates[i][0] + "</option>"  ;
}
datesCode +="<option value=\"" + startingDates[i][0] + "\">" + startingDates[i][0] + "</option>" //pulldowns aus Arrays anlegen für startdaten
}

// Addinfo pulldown anlegen
for (i =0; i<counter; i++)
{
  addinfoCode  +="<option value=\"" + addinfoTxt[i] + "\">" + addinfoTxt[i] + "</option>";
}

/*var actDate = new Date;
var actDateCalc;
actDateCalc = calcDate(actDate); // function call for converting date to Number for calculation

function calcDate(Dateobject) // convert date to number for calculation
{
  var year = Dateobject.getFullYear(  );
  year = year.toString().slice(-2); //09
  var month = Dateobject.getMonth(  );
  var month = month + 1;
  if (month < 10) {
    month = '0' + month;
  }
   var day = Dateobject.getDate(  );
  if (day < 10) {
    day = '0' + day;
  }
  combine =Number(  year + month + day);
  return combine;
} */


// set up Course Weeks select
 for( i=0; i<24; i++)
 {
   courseWeeksCode +="<option value=\"" + (i+1) + "\">" + (i+1) + "</option>"
 }
/* ++++++++++++++++++++++ DOM Ready here *********************************************************** */
  $(document).ready(function(){
  $('#surfcourse_weeks').html(courseWeeksCode);
      $('#delecourse_date').html(DELEDatesCode);
var startingDatesState = 0;  
var  selectedCourse, selectedDate, selectedWeekNumber, coursePrice, totalCoursePrice,selectedAcco,selectedAccoRoom, accoPrice, totalPrice,selectedSurfWeeks;
var matricula = $("#matricula");
$("#startingDatesBox,#knowledgeBox,#courseWeeksBox,#addinfoBox,#doubleroom,#conditions").hide();

// bind conditions link to click event
$("#condslink").click(function(e){
   $("#conditions").toggle("normal");
   e.preventDefault();
   });  

$("#addinfo").html(addinfoCode);
$("#addinfoBox").after("<div id=\"messagesTxtBox\"></div>");
var msgboxvar = $("#messagesTxtBox");

/* bind course and beginners checkbox to change event *
** bind startingDates and courseweeks to change event */
$("#course,#knowledge").change(function (e) {
 hsWeeksCount =0;
 selectedCourse = $("#course")[0].selectedIndex;  
 selectedDate = $("#startingDates")[0].selectedIndex;  
 selectedWeekNumber = ($("#course_weeks")[0].selectedIndex)+1;  //at least one week
 selectedAcco = $("#accommodation")[0].selectedIndex;
 selectedAccoRoom = $("#accommodation_detail")[0].selectedIndex;
 selectedSurfWeeks = $("#surfcourse_weeks")[0].selectedIndex;
 setWeeksNumber(selectedCourse);
 if(selectedCourse == 1){ // Intensive Course -> Surfcourse bookable
    $('#surfcourse, #surfcourse_weeks, #delecourse, #delecourse_date').attr('disabled','');
 }else{
     $('#surfcourse,#surfcourse_weeks, #delecourse, #delecourse_date').attr({disabled:'disabled',checked:''});
 }
switch (selectedCourse) {
  case 0:// no course selected
   deleteOptions();
   changeWeeks(0);
   calcCoursePrice(0);
   effects([0,0,0,0]); //call effects
    break;
    case 1: //Intensive course
  checkboxCheck();
  changeWeeks(1);
  calcHighSeasonWeeks(selectedDate,selectedWeekNumber);
  calcCoursePrice(1);
  effects([0,1,1,1]); //call effects for #addinfoBox, #knowledgeBox, #startingDatesBox, #courseWeeksBox
    break;
  case 2: //Superintensive
   uncheckCheckbox();
   checkboxCheck();
     changeWeeks(1);
  calcHighSeasonWeeks(selectedDate,selectedWeekNumber);
  calcCoursePrice(2);
  effects([0,0,1,1]); 
    break;
  case 3: //Intensive plus
   checkboxCheck();
   changeWeeks(1);
   calcHighSeasonWeeks(selectedDate,selectedWeekNumber);
   calcCoursePrice(3);
   effects([0,1,1,1]);
    break;
  case 4: // One to One
  uncheckCheckbox();
  checkboxCheck();
  changeWeeks(1);
   calcCoursePrice(4);
   effects([1,0,1,1]);
   break;
  case 5: // Cultural
    uncheckCheckbox();
   writeOptions(masterDatesCode,0);
   changeWeeks(0);
   calcCoursePrice(5);
   effects([0,0,1,0]);
    break;
    case 6: // Minigroups
    uncheckCheckbox();
    deleteOptions();
   changeWeeks(0);
     calcCoursePrice(0);
   effects([0,0,0,0]);
    break;
  default:
     uncheckCheckbox();
     deleteOptions();
   changeWeeks(0);
   effects([0,0,0,0]);
    break;
} 


});

// bind starting Date and weeks select to change event 
$("#startingDates,#course_weeks, #addinfo").change(function (e) {
                     
 hsWeeksCount = hsAccoWeeksCount = 0;
 selectedCourse = $("#course")[0].selectedIndex;  
 selectedDate = $("#startingDates")[0].selectedIndex;  
 selectedWeekNumber = ($("#course_weeks")[0].selectedIndex)+1;  //at least one week
 selectedAcco = $("#accommodation")[0].selectedIndex;
 selectedAccoRoom = $("#accommodation_detail")[0].selectedIndex;
 selectedSurfWeeks = $("#surfcourse_weeks")[0].selectedIndex;
 setWeeksNumber(selectedCourse);
 if(e.target.id == "addinfo")
 {
   calcCoursePrice(selectedCourse);
 }
 else{
calcHighSeasonWeeks(selectedDate,selectedWeekNumber);
calcCoursePrice(selectedCourse);
 }});

// bind surfcourse and delecourse to change event
      $('#surfcourse, #surfcourse_weeks, #delecourse').change(function(e){
 selectedCourse = $("#course")[0].selectedIndex;
 selectedDate = $("#startingDates")[0].selectedIndex;
 selectedWeekNumber = ($("#course_weeks")[0].selectedIndex)+1;  //at least one week
 selectedAcco = $("#accommodation")[0].selectedIndex;
 selectedAccoRoom = $("#accommodation_detail")[0].selectedIndex;
selectedSurfWeeks = $("#surfcourse_weeks")[0].selectedIndex;
 setWeeksNumber(selectedCourse);
        showcoursemessage($(this).attr('id'));
          calcCoursePrice(1);
      });
// bind starting Accommodation and Acco Details to change event 
$("#accommodation,#accommodation_detail").change(function (e) {
                     
 selectedCourse = $("#course")[0].selectedIndex;  
 selectedWeekNumber = ($("#course_weeks")[0].selectedIndex)+1;  //at least one week
 selectedAcco = $("#accommodation")[0].selectedIndex;
 selectedAccoRoom = $("#accommodation_detail")[0].selectedIndex;
    selectedSurfWeeks = $("#surfcourse_weeks")[0].selectedIndex;
 setWeeksNumber(selectedCourse);
roommate(selectedAccoRoom);
 calcAccoPrice(); //calculate Accommodation Price

});

// set selected week Number for special Programmes 
function setWeeksNumber(s){
  if(s==5){
    selectedWeekNumber = 4;
  }
  if(s==6){
    selectedWeekNumber = 1;
  }
  
}
/* Functions for changing the  Starting Dates select *****************
// check if beginners checkbox is set and change starting dates */
function checkboxCheck() {
   
  if($("#knowledge")[0].checked == true){
    if(startingDatesState != 2){
   writeOptions(beginnersDatesCode,2);
   selectedDate = $("#startingDates")[0].selectedIndex;  //read datesselect again
  } }
  else { if(startingDatesState != 1)
    { writeOptions(datesCode,1);
      }}
   
            }
  
//checkbocCheck end
// uncheck checkbox for other course types
function uncheckCheckbox()
{
  $("#knowledge")[0].checked = false;
}
// write or delete Starting Dates
function writeOptions(variables,stvar){  
  $("#startingDates").html(variables);
  }
function deleteOptions(){
  $("#startingDates").html("<option>----</option>");
  startingDatesState = 0;
}

// change Starting Dates end
/* Functions for changing weeks select ******************************** */
//change weeks standard 1-24 or according to coursweeks array
function changeWeeks(v){
var courseWeeksIndex = $("#course_weeks")[0].selectedIndex;
  if (v == 1 ) 
  {if(courseWeeksIndex == 0 ){ // Woche noch nicht gewählt 
  $("#course_weeks").html(courseWeeksCode);
           }
    } else {
  $("#course_weeks").html("<option>----</option>")
  }
}// change weeks end

/* *************** Functions for calculating of weeks in high season ***** */
function calcHighSeasonWeeks(stDate,weeknumbers)
{
  
  if($("#knowledge")[0].checked == true)
  {
    stDate = startingDatesBeginnersCalc[selectedDate][1]
  }
  if(selectedCourse == 7)
  {
    stDate = surfDatesCalc[selectedDate][1]
  }
/* Not needed any more because alls acco types all year long: check if Accommodation Highseason -> then one more acco-option 
if(startingDates[stDate][4]==1 && startingDates[stDate + selectedWeekNumber-1][4]==1){ //if booked period in Acco high season add third option

    changeAccoOptions(1);
     }
     else{changeAccoOptions(0)};
      */
  for (i=stDate; i<(stDate + weeknumbers);i++)
  {if(stDate <= highseasonEnd && startingDates[i][2]==1 ) // count high season weeks
    {
    hsWeeksCount++;
    }
  if(stDate <= accoHighSeasonEnd && startingDates[i][4]==1 ) //count acco high season weeks
    {
    hsAccoWeeksCount++;
    }
  }}//calcHighSeasonWeeks end


/* Calculate Course Prices  ************************************************** */  
  function calcCoursePrice(s) //calculate Course Prices
  {if(s==0){
    coursePrice=0;
    $("#accommodation")[0].selectedIndex =0;
  }
    if(s == 1 ) // Intensive Courses
    {
      if(selectedWeekNumber <8)
          {  calcreg(s)}

      else{
        coursePrice = longTermPrice[0] +(selectedWeekNumber-8)*longTermPrice[1];
        coursePrice += (hsWeeksCount * hsCourseSupl);
        }
}
    if( s == 2 || s == 3 ) // Superintensive und Intensive plus  
    {calcreg(s)}
    
    if(s == 4) // one to one
    {var selectedaddinfo = $("#addinfo")[0].selectedIndex;  
      coursePrice = (selectedaddinfo + 2) * selectedWeekNumber * coursePrices[s-1][0];
      }
      
    if(s== 5)//  Cutural
    {coursePrice = coursePrices[s-1][0];
        }
      
    if(s == 6){ //Minigroup only hint
      hsWeeksCount = 0;
      
    }
    
        
//  ************************************************ 
    function calcreg(s) //calculate Course Price for standardcourses
    {
      if(selectedWeekNumber < 3) //Price for one or two weeks
    {
      coursePrice = selectedWeekNumber * coursePrices[s-1][0];
          }
      if(selectedWeekNumber >= 3) //Price for more than two weeks = two weeks + addweek
    {
      coursePrice = (2 * coursePrices[s-1][0])+ (selectedWeekNumber-2)*coursePrices[s-1][1];
          }
  coursePrice += (hsWeeksCount * hsCourseSupl) // add High season supplement
    } //calcreg end
    
  if($('#surfcourse').attr('checked')== true){
        
        selectedSurfWeeks +=1;
            if(selectedSurfWeeks   > selectedWeekNumber){
                selectedSurfWeeks = selectedWeekNumber ;
                $('#surfcourse_weeks option').eq(selectedSurfWeeks-1).attr('selected', 'selected');

            }
coursePrice += selectedSurfWeeks * surfPrice;
            
        }
        if($('#delecourse').attr('checked')== true){
            coursePrice += delePrice;
                    }
$("#courseFee").val(coursePrice);
if(coursePrice>0){
    matricula.val(enrollmentFee);
totalCoursePrice = coursePrice + enrollmentFee;
}else{totalCoursePrice = coursePrice;
    matricula.val(0);
}
$("#totalCourse").val(totalCoursePrice);
calcAccoPrice();// calc acco Price
} // calcCoursePrice end

// ************************ Accomodation functions ***************
/* not needed anymore because all accooptions all year long
function changeAccoOptions(v){// add or remove option to Accommodation select

  if(v == 1 && $("#accommodation")[0].length < 4 ){
  $("#accommodation").append("<option value=\"" + accoAppTxt + "\">" + accoAppTxt + "</option>");
  }else{ if($(v == 0 && "#accommodation")[0].length >= 4){
    $("#accommodation :last-child").remove();
  }}
} //changeAccoOptions end*/
//********************************** Calc Acco
function calcAccoPrice(){
  if(selectedAcco > 0 && selectedCourse>0){
  if(selectedWeekNumber == 1) //Price for one weeks
    {
      accoPrice= accoPrices[selectedAcco -1][selectedAccoRoom *3];
          }
    if(selectedWeekNumber == 2) //Price for two weeks
    {
      accoPrice= (accoPrices[selectedAcco -1][selectedAccoRoom *3])+ accoPrices[selectedAcco -1][selectedAccoRoom *3 +1];
          }
    if(selectedWeekNumber >2) //Price for more than two weeks = two weeks + addweek
    {
      accoPrice = ((accoPrices[selectedAcco -1][selectedAccoRoom *3])+ accoPrices[selectedAcco -1][selectedAccoRoom *3 +1]) + (selectedWeekNumber-2)* accoPrices[selectedAcco -1][selectedAccoRoom *3 +2];
          }
  if(selectedAcco == 1 || selectedAcco == 3 ){
     if(selectedWeekNumber == 1){
         accoPrice += (hsAccoWeeksCount * hsAccoSupplSingleWeek[selectedAccoRoom]) // add High season supplement for one week
     }else{
  accoPrice += (hsAccoWeeksCount * hsAccoSuppl[selectedAccoRoom]) // add High season supplement
  }}
  }else {
    accoPrice = 0
  }
 $("#accommodation_fee").val(accoPrice);
  $("#fee").val(totalCoursePrice + accoPrice);
}
  
/* Effects showing and hiding boxes ****************************************************/
function effects(boxes)
{
var boxesIDs = ["#addinfoBox","#knowledgeBox","#startingDatesBox","#courseWeeksBox"];
  for (i=0; i < boxes.length; i++)
{
  var box = boxesIDs[i];
  if (boxes[i] == 0)
  {
    $(box).hide('slow');
  }
else {
  $(box).show('slow');
}}
if(selectedCourse == 0 )
{
  msgboxvar.html("");
  }
else {
  msgboxvar.html("<p>" + messagesTxt[selectedCourse-1] + "</p>");
}
} //effects end
      // show additional course message
function showcoursemessage(){

       if($('#surfcourse').attr('checked')== true){
         $('#surfcoursemessage').html('<p class="messagetext">' + addcourseTxt[0]+'<\/p>');
       }else{$('#surfcoursemessage').html("")}


       if($('#delecourse').attr('checked')== true){
         $('#delecoursemessage').html('<p class="messagetext">' + addcourseTxt[1]+'<\/p>');
       }else{$('#delecoursemessage').html("")}
    
}
// show Roommate input for doubleroom only
  function roommate(v){
    if(v==1){
      $("#doubleroom").show('slow');
    }else{
      $("#doubleroom").hide('slow');
      $("#roommate").val("");

    }
  }

  });//ready end
