﻿function g(a) {return document.getElementById(a);}
Array.prototype.swap = function(a, b) {
  var tmp = this[a];
  this[a] = this[b];
  this[b] = tmp;
};

/*** Current File ***/
var cFile={
  k:1, // # of courses in this schedule
  
  courseName:[],
  instructor:[],
  roomNumber:[],
  startTime:[],
  endTime:[],
  days:[[]],
  credits:[],
  
  // New Course
  newCourse:function() {
    g('courseNames').selectedIndex = 0;
    this.changeCourse();
    this.addCourse();
  },
  
  // Add new course to this schedule
  addCourse:function() {
    g('courseNamesOpt').innerHTML += "<option><\/option>";
    g('classSelect').getElementsByTagName('optgroup')[0].innerHTML = g('courseNamesOpt').innerHTML; // Copy new data to sorter
    g('addSave').getElementsByTagName('input')[0].disabled = false; // Ready the delete button
    this.k++;
    g('courseNames').selectedIndex = this.k;
    this.saveCourse(this.k);
  },
  
  // Saves changes to an existing course
  saveCourse:function(j) {
    if (j<=0) {
      this.addCourse();
      return; // No course selected
    }
    
    g('courseNames').getElementsByTagName('option')[j].text = g('cName').value;
    j--;
    g('classSelect').getElementsByTagName('option')[j].text = g('cName').value;

    
    this.courseName[j] = g('cName').value;
    this.instructor[j] = g('cInst').value;
    this.roomNumber[j] = g('cRoom').value;
    this.startTime[j] = g('sTime').value;
    this.endTime[j] = g('eTime').value;
    this.credits[j] = g('cCred').value;
    this.days[j] = [g('day0').checked, g('day1').checked, g('day2').checked, g('day3').checked, g('day4').checked, g('day5').checked, g('day6').checked];
  },
  
  // Show different course
  changeCourse:function() {
    var j = g('courseNames').selectedIndex-1;
    // Course exists
    if (j>=0) {
      g('cName').value = this.courseName[j];
      g('cInst').value = this.instructor[j];
      g('cRoom').value = this.roomNumber[j];
      g('sTime').value = this.startTime[j];
      g('eTime').value = this.endTime[j];
      g('cCred').value = this.credits[j];
      for (var i=0; i<7; i++) {
        g('day'+i).checked = this.days[j][i];
      }
    }
    // Default values
    else {
      g('cName').value = lang[langObj.currentLanguage][10][0];
      g('cInst').value = "";
      g('cRoom').value = "";
      g('sTime').value = "00:00";
      g('eTime').value = "00:00";
      g('cCred').value = 1;
      for (var k=0; k<7; k++) {
        g('day'+k).checked = false;
      }
    }
    g('addSave').getElementsByTagName('input')[0].disabled = j<0;
  },
  
  // Remove course
  deleteCourse:function() {
    var j = g('courseNames').selectedIndex-1;
    this.courseName.splice(j, 1);
    this.instructor.splice(j, 1);
    this.roomNumber.splice(j, 1);
    this.startTime.splice(j, 1);
    this.endTime.splice(j, 1);
    this.days.splice(j, 1);
    this.credits.splice(j, 1);
    
    var tempOpt = g('courseNamesOpt').getElementsByTagName('option')[j];
    g('courseNamesOpt').removeChild(tempOpt);
    g('courseNames').selectedIndex = j;
    
    tempOpt = g('classSelect').getElementsByTagName('optgroup')[0].getElementsByTagName('option')[j];
    g('classSelect').getElementsByTagName('optgroup')[0].removeChild(tempOpt);
    g('classSelect').selectedIndex = -1;
    
    this.k--;
    this.changeCourse();
  }
};

/*** Tab Control ***/
var tControl={
  cTab:0,  // Current Tab
  pIDs:['mainMenu', 'saveMenu', 'loadMenu', 'manageMenu', 'exportMenu'],  // Togglable file menu IDs
  
  // Show one of the file menu panels
  showPanel:function(pIndex) {
    for (var i=0; i<this.pIDs.length; i++) {
      g(this.pIDs[i]).style.display = 'none';
    }
    g(this.pIDs[pIndex]).style.display = pIndex != 1 ? 'block' : 'inline-block';  // Save menu should be inline-block.
  },

  changeTab:function(nTab) {
    // Update current course
    if (g('courseNames').selectedIndex != 0 || g('courseNames').getElementsByTagName('option').length<2) {
      cFile.saveCourse(g('courseNames').selectedIndex);
    }
    
    g('nav').getElementsByTagName('a')[this.cTab].className = '';
    g('nav').getElementsByTagName('a')[nTab].className = 'activeTab';
    
    this.cTab = nTab;
    
    g('editFields').style.display = "none";
    g('sorter').style.display = "none";
    g('preview').style.display = "none";
    g('fileMenu').style.display = "none";
    
    switch (nTab) {
      // Edit Fields
      case 0: 
        g('editFields').style.display = "block";
        break;
      
      // Sorter
      case 1: 
        g('sorter').style.display = "block";
        break;
      
      // Preview
      case 2: 
        g('tablePlaceHolder').innerHTML = pView.buildPreview();
        g('preview').style.display = "block";
        break;
      
      // File Menu
      case 3: 
        this.showPanel(0);
        g('fileMenu').style.display = "block";
        break;
    }
  }
};

window.onload=function() {

  bEvents.init(); // Button events
  
  var v = g('showFieldsFieldset').getElementsByTagName('input');
  for (var i=0; i<v.length; i++) {
    v[i].onclick = function() {pView.updateShowFields();};
  }
  
  v = g('dAcrContainer').getElementsByTagName('input');
  for (var k=0; k<v.length; k++) {
    v[k].onchange = function() {sorter.updatedAcr();};
  }
  
  // Tab switching behavior
  v = g('nav').getElementsByTagName('a');
  for (var j=0; j<v.length-1; j++) {
    (function(j, navNode) {
      navNode.onclick = function() {
        tControl.changeTab(j);
        return false;
      };
    })(j, v[j]);
  }
  tControl.changeTab(j-1);
  
  // Only have one language so far...
  langObj.changeLang(0);
  /*v = data.get('lang');
  if (v != "") {
    v = parseInt(v);
    langObj.changeLang(v);
    g('langSelect').selectedIndex = v;
  }
  else {
    v = navigator.language.split('-')[0].toLowerCase();
    switch (v) {
      case "en":
        g('langSelect').selectedIndex = 0;
        langObj.changeLang(0);
        break;
    }
  }*/
  
  // Webkit has weird painting order
  if (/webkit/i.test(navigator.userAgent) && /52(3|5)/i.test(navigator.userAgent)) {
    for (var l=0; l < g('nav').getElementsByTagName('a').length; l++) {
      g('nav').getElementsByTagName('a')[l].style.paddingBottom = "1px";
    }
  }
  
};