// Place your application-specific JavaScript functions and classes here
// This file is automatically included by javascript_include_tag :defaults

jQuery.ajaxSetup({  
    'beforeSend': function (xhr) {xhr.setRequestHeader("Accept", "text/javascript")}  
});

function update_answer_choice(char_num) {

	var char1 = $("input[@name='grid_in_0']:checked").val();
	if (!char1) { char1 = ""; }
	var char2 = $("input[@name='grid_in_1']:checked").val();
	if (!char2) { char2 = ""; }
	var char3 = $("input[@name='grid_in_2']:checked").val();
	if (!char3) { char3 = ""; }
	var char4 = $("input[@name='grid_in_3']:checked").val();
	if (!char4) { char4 = ""; }

	eval("$('#char"+char_num+"').html(char"+char_num+")");


}

function grid_in_init(answer) {
	// do some initializing to set grid_in values
	var answer_text = answer;
	// if this answer_text does not have [,<>] then it is a straight up grid-in value
	if ((answer_text.indexOf(',') == -1 || answer_text.indexOf('<') == -1 || answer_text.indexOf('>') == -1) && answer_text.length == 4) {
		answer_char = answer_text[0];
		for (var i = 0; i < 4; i++) {
			answer_char = answer_text[i];
			if (answer_char == "/") {
				answer_char = "slash";
			} else if (answer_char == ".") {
				answer_char = "period";
			} else if (answer_char == " ") {
				answer_char = "space";
			}
			eval("$('#grid_in_"+i+"_"+answer_char+"').attr('checked', 'checked');")
			eval("$('#char"+(i+1)+"').html(answer_text["+i+"])");
		}

	}
}

function update_hidden_dates(id, prefix) {
	var date_string = $('#'+id).val();
	var date_arr = date_string.split('/');
	var year = date_arr[0];
	var month = date_arr[1];
	var day = date_arr[2];
	if (parseFloat(year) < 100) {
		year = parseFloat(year) + 2000;
	}
	$('#'+prefix+'_'+id+'_1i').val(year);
	$('#'+prefix+'_'+id+'_2i').val(month);
	$('#'+prefix+'_'+id+'_3i').val(day);
	//alert($('#'+prefix+'_'+id+'_1i').val() + "-" + $('#'+prefix+'_'+id+'_2i').val() + "-" + $('#'+prefix+'_'+id+'_3i').val())

}

function toggleTime() {
	if ($(".time_target").attr("disabled") == true) {
		$(".time_target").removeAttr("disabled");
	} else {
		$(".time_target").attr("disabled", "disabled");
	}
}

function toggleCategory() {
	if ($(".category_select").attr("disabled") == true) {
		$(".category_select").removeAttr("disabled");
	} else {
		$(".category_select").attr("disabled", "disabled");
	}
}

function toggleTab(tab_name) {
	$('div.online_tab').removeClass('online_course_tab_active');
	$('div.online_tab').addClass('online_course_tab_inactive');
	$('div.online_tab#'+tab_name+'_tab').removeClass('online_course_tab_inactive').addClass('online_course_tab_active');
}

function toggle_tabs(id) {
	$('div.tab_content').hide();
	$('#'+id).show();
	$('.tab').removeClass('tab_current');
	$('#'+id+'_tab').addClass('tab_current');
	return false;
}

function toggleMove(section_id) {
	if ($(".move_target_"+section_id).attr("disabled") == true) {
		$(".move_target_"+section_id).removeAttr("disabled");
	} else {
		$(".move_target_"+section_id).attr("disabled", "disabled");
	}
}

function pageScroll() {
	window.scroll(0,0);
}


function togglePassword(teacher_id) {
	if ($(".edit_password_"+teacher_id).attr("disabled") == true) {
		$(".edit_password_"+teacher_id).removeAttr("disabled").removeClass('disabled_text');
	} else {
		$(".edit_password_"+teacher_id).attr("disabled", "disabled").addClass('disabled_text');

	}
}

function setup_menu() {
	$('.fg_menu').each(
		function() {
			$(this).menu({content: $(this).next().html(), flyOut: true});
		}
	);
}

function sprintf()
{
   if (!arguments || arguments.length < 1 || !RegExp)
   {
      return;
   }
   var str = arguments[0];
   var re = /([^%]*)%('.|0|\x20)?(-)?(\d+)?(\.\d+)?(%|b|c|d|u|f|o|s|x|X)(.*)/;
   var a = b = [], numSubstitutions = 0, numMatches = 0;
   while (a = re.exec(str))
   {
      var leftpart = a[1], pPad = a[2], pJustify = a[3], pMinLength = a[4];
      var pPrecision = a[5], pType = a[6], rightPart = a[7];

      numMatches++;
      if (pType == '%')
      {
         subst = '%';
      }
      else
      {
         numSubstitutions++;
         if (numSubstitutions >= arguments.length)
         {
            alert('Error! Not enough function arguments (' + (arguments.length - 1)
               + ', excluding the string)\n'
               + 'for the number of substitution parameters in string ('
               + numSubstitutions + ' so far).');
         }
         var param = arguments[numSubstitutions];
         var pad = '';
                if (pPad && pPad.substr(0,1) == "'") pad = leftpart.substr(1,1);
           else if (pPad) pad = pPad;
         var justifyRight = true;
                if (pJustify && pJustify === "-") justifyRight = false;
         var minLength = -1;
                if (pMinLength) minLength = parseInt(pMinLength);
         var precision = -1;
                if (pPrecision && pType == 'f')
                   precision = parseInt(pPrecision.substring(1));
         var subst = param;
         switch (pType)
         {
         case 'b':
            subst = parseInt(param).toString(2);
            break;
         case 'c':
            subst = String.fromCharCode(parseInt(param));
            break;
         case 'd':
            subst = parseInt(param) ? parseInt(param) : 0;
            break;
         case 'u':
            subst = Math.abs(param);
            break;
         case 'f':
            subst = (precision > -1) ? Math.round(parseFloat(param) * Math.pow(10, precision))/ Math.pow(10, precision) : parseFloat(param);
            break;
         case 'o':
            subst = parseInt(param).toString(8);
            break;
         case 's':
            subst = param;
            break;
         case 'x':
            subst = ('' + parseInt(param).toString(16)).toLowerCase();
            break;
         case 'X':
            subst = ('' + parseInt(param).toString(16)).toUpperCase();
            break;
         }
         var padLeft = minLength - subst.toString().length;
         if (padLeft > 0)
         {
            var arrTmp = new Array(padLeft+1);
            var padding = arrTmp.join(pad?pad:" ");
         }
         else
         {
            var padding = "";
         }
      }
      str = leftpart + padding + subst + rightPart;
   }
   return str;
}

// COUNTDOWN TIMER, countdown_timer.init(id, duration_in_milliseconds, [allow_manual_manipulation] [timer_formatting_string], [callback])
var countdown_timer = function() { // REVEALING MODULE PATTERN
  var global = {
    id: null,
    initialized: false,
    running: false,
    duration: 0,
    running_duration: null,
    end_time: null,
    format: "%d:%02d",
    callback: null,
    pause_time: null
  }
  
  var is_running = function() {
    return global.running
  }
  
  var start = function() {
    if(!global.running) {
      var duration;
      if(global.running_duration) { duration = global.running_duration } else { duration = global.duration }
      global.end_time = (new Date()).getTime() + duration;
      update();
    }
  }
  
  var pause = function() {
    if(global.allow_manipulation && global.running) {
      global.running_duration = global.end_time - (new Date()).getTime();
      global.end_time = (new Date()).getTime();
    }
  }
  
  var stop = function() {
    if(global.allow_manipulation) {
      global.end_time = (new Date()).getTime();
      global.running_duration = 0;
      update();
    }
  }
  
  var restart = function() {
    stop();
    start();
  }
  
  var update = function() {
    var now = (new Date()).getTime(),
        time_left = global.end_time - now,
        minutes_left, seconds_left;
    if(time_left > 0) {
      global.running = true;
      minutes_left = time_left/60000;
      seconds_left = (time_left/1000)%60;
      $(global.id).html(sprintf(global.format,minutes_left,seconds_left));
      setTimeout("countdown_timer.update()",100);
    } else {
      global.running = false;
      if(global.running_duration == 0) { $(global.id).html(sprintf(global.format,0,0)); }
      if(global.callback) { global.callback(); }
    }
  }
  
  var init = function(id, duration, format, allow_manipulation, callback) {
    var minutes_left = 0, seconds_left = 0;
    if(!global.initialized) {
      if(/^#/.test(id)) { global.id = id } else { global.id = "#" + id }
      global.duration = duration;
      if(format) { global.format = format; }
      if(callback) { global.callback = callback; }
      if(allow_manipulation) { global.allow_manipulation = allow_manipulation; }
      minutes_left = global.duration/60000;
      seconds_left = (global.duration/1000)%60;
      $(global.id).html(sprintf(global.format,minutes_left,seconds_left));
    }
    global.initialized = true;
  }
  
  return {
    init: init,
    start: start,
    stop: stop,
    update: update,
    pause: pause,
    restart: restart,
    is_running: is_running
  }
}();

// TIMER counts up from 0, performing a function at a given interval of milliseconds
var timed_event = function() {
  
  var global = {
    start_time: null,
    event_count: 1,
    interval: null,
    callback: null
  }
  
  var event_loop = function() {
    time_since = (new Date()).getTime() - global.start_time;
    if(time_since >= (global.interval * global.event_count)) {
      global.event_count += 1;
      global.callback();
    }
    setTimeout("timed_event.event_loop();", 100);
  }
  
  var init = function(interval, callback) {
    if(interval){ global.interval = interval }
    if(callback){ global.callback = callback }
    global.event_count = 1;
    global.start_time = (new Date()).getTime();
    event_loop();
  }
  
  return {
    init: init,
    event_loop: event_loop
  }
  
}();
