/* Data */

var image_path = "/img/";
var images_to_preload = new Array(12);
images_to_preload[0] = "tab-left-current.png";
images_to_preload[1] = "tab-left-current-learn.png";
images_to_preload[2] = "tab-left.png";
images_to_preload[3] = "tab-left-hover.png";
images_to_preload[4] = "tab-right-current.png";
images_to_preload[5] = "tab-right-current-learn.png";
images_to_preload[6] = "tab-right.png";
images_to_preload[7] = "tab-right-hover.png";
images_to_preload[8] = "arrow-right-lightblue.png";
images_to_preload[9] = "arrow-right-darkblue.png";
images_to_preload[10] = "arrow-down-lightblue.png";
images_to_preload[11] = "arrow-down-darkblue.png";
images_to_preload[11] = "go_arrow_hover.png";

/* Main */

addEvent(window, "load", round_corners);
addEvent(window, "load", check_level_cookie);
addEvent(window, "load", track);
preload_images(images_to_preload);


/* Functions */

function $() {
    var elements = new Array();
    for (var i = 0; i < arguments.length; i++) {
        var element = arguments[i];
        if (typeof element == 'string')
            element = document.getElementById(element);
            if (!element) {
            	element = document.getElementsByName(arguments[i])[0];
            }
        if (arguments.length == 1)
            return element;
        elements.push(element);
    }
    return elements;
}

function getElementsByClass(searchClass,node,tag) {
    var classElements = new Array();
    if ( node == null )
        node = document;
    if ( tag == null )
        tag = '*';
    var els = node.getElementsByTagName(tag);
    var elsLen = els.length;
    var pattern = new RegExp("(^|\\s)"+searchClass+"(\\s|$)");
    for (i = 0, j = 0; i < elsLen; i++) {
        if ( pattern.test(els[i].className) ) {
            classElements[j] = els[i];
            j++;
        }
    }
    return classElements;
}

function preload_images(images_to_preload) {
	if (document.images) {
		var x=0;
		for (x=0; x<images_to_preload.length; x++) {
		    pic = new Image(); 
		    pic.src = image_path + images_to_preload[x];
		}
	}
}

function round_corners() {
    if(!NiftyCheck())
        return;
    Rounded("div.round_all","all","#FFF","transparent","smooth");
    Rounded("div.round_top","top","#FFF","transparent","smooth");
    Rounded("div.round_bottom","bottom","#FFF","transparent","smooth");
}

function trim(str) {
    str = str.replace(/^\s*/, "");
    return str.replace(/\s*$/, "");
}

function toggle_class(link, class_name) {
    var myEls = getElementsByClass(class_name);
    for ( i=0;i<myEls.length;i++ ) { 
    	if (i==myEls.length-1) {
	        toggle_custom(link, myEls[i], false);
    	} else {
	        toggle_custom('', myEls[i], false);
        }
    }
}

function toggle(link, obj_id) {
    return toggle_custom(link, obj_id, false);
}

function checkbox_toggle(checkbox, obj_id) {
	if (checkbox.checked) {
	    $(obj_id).style.display = 'block';
	} else {
	    $(obj_id).style.display = 'none';	
	}
}

function toggle_inline(obj_id) {
    var obj = $(obj_id);
    if (obj.style.display == '') {
        obj.style.display = 'inline';
    } else {
        obj.style.display = '';
        }
    return false;
}

function toggle_custom(link, obj_id, with_corners) {
    var obj = $(obj_id);
    if ((obj.style.display == '') || (obj.style.display == 'none')) {
        if (link) {
		    link.className=link.className.replace('toggle','toggle_open'); 
	    }
        obj.style.display = 'block';
        if (with_corners) {
            round_corners(); }
        }
    else {
    	if (link) {
		    link.className=link.className.replace('toggle_open','toggle'); 
	    }
        obj.style.display = 'none';
        }
    return false;
}

function change_content_base(xml_response, obj_id) {
    return change_content_custom(xml_response, obj_id, false);
}

function change_content_corners(xml_response, obj_id) {
    return change_content_custom(xml_response, obj_id, true);
}

function change_content(xml_response, obj_id) {
    return change_content_custom(xml_response, obj_id, false);
}

function change_content_custom(xml_response, obj_id, with_corners) {
    $(obj_id).innerHTML = xml_response;
    if (with_corners) {
        round_corners(); }
}

function make_http_request(url, callback_function, arg, return_xml, query_string, query_method) { 
   var http_request = false; 
   $('ajax_indicator').style.display = 'block';
   
   if (window.XMLHttpRequest) { // Mozilla, Safari,... 
       http_request = new XMLHttpRequest(); 
       if (http_request.overrideMimeType) { 
           if (return_xml) {
               http_request.overrideMimeType('text/xml'); 
           } else {
               http_request.overrideMimeType('text/html'); 
           }
       } 
   } else if (window.ActiveXObject) { // IE 
       try { 
           http_request = new ActiveXObject("Msxml2.XMLHTTP"); 
       } catch (e) { 
           try { 
               http_request = new ActiveXObject("Microsoft.XMLHTTP"); 
           } catch (e) {} 
       } 
   } 

   if (!http_request) { 
       alert('Diese Funktion wird von deinem Browser nicht unterstutzt, sorry.'); 
       return false; 
   } 
   http_request.onreadystatechange = function() { 
       if (http_request.readyState == 4) { 
           $('ajax_indicator').style.display = '';
//		   if (http_request.status==200) {
	           if (return_xml) { 
	               eval(callback_function + '(http_request.responseXML, arg)'); 
	           } else { 
	               if (http_request.responseText.substr(0, 6) == 'redir:') {
	                   window.location = http_request.responseText.substr(6, http_request.responseText.length)
	               } else {
	                   eval(callback_function + '(http_request.responseText, arg)'); 
	               }
	           }
//           } else { 
//               alert('Ein Fehler ist aufgetreten (Code: ' + http_request.status + '). Bitte versuche es in ein paar Sekunden noch einmal.' ); 
//           }
       } 
   } 
   http_request.open(query_method, url, true); 
   http_request.send(query_string.substring(1)); 
}

function build_query_string(theFormName, query_method) {
  theForm = document.forms[theFormName];
  var qs = ''
  for (e=0;e<theForm.elements.length;e++) {
    if (theForm.elements[e].name!='') {
      if ((theForm.elements[e].type!='checkbox') || ((theForm.elements[e].type=='checkbox') && (theForm.elements[e].checked))) {
      	qs += (qs=='')?'?':'&';
     	qs += theForm.elements[e].name+'='+encodeURIComponent(theForm.elements[e].value)
      }
    }
  }
  return qs
}

function quick_reply(link, new_id) {
    reply_form_html = $("bottom_comment_reply").innerHTML;
    reply_form_html = reply_form_html.replace('Kommentar speichern', 'Antwort speichern');
    reply_form_html = trim(reply_form_html);
    if ($(new_id).parentNode.style.display == '') {
        $(new_id).innerHTML = reply_form_html;
        input_fields = $(new_id).getElementsByTagName('input');
        if (input_fields.length) {
	        input_fields[input_fields.length-2].value = new_id;
        }
        $(new_id).parentNode.style.display = 'block';
        textareas = $(new_id).getElementsByTagName('textarea');
        if (textareas.length) {
        	textareas[0].focus();
        }
        link.className = 'toggle_open';
        }
    else {
        $(new_id).parentNode.style.display = '';
        link.className = 'toggle';
        }
    return false;
}

function update_element(from_element_id, to_element_id) {
    if ($(from_element_id).value) {
        $(to_element_id).innerHTML = $(from_element_id).value;
    }
}

function allow_button(checkbox, submit_id) {
    $(submit_id).disabled = !checkbox.checked;
}

function change_disable(obj_id) {
    obj = $(obj_id);
    orig_value = obj.value;
    obj.value = obj.value + ' ...';
    obj.disabled = true;
    setTimeout("obj.disabled = false; obj.value=orig_value;",60000);
}

function change_enable(obj_id) { 
    obj = $(obj_id);
	if (obj.value.substr(obj.value.length-4, 4)==' ...') {
		obj.value = obj.value.substr(0, obj.value.length-4);
		obj.disabled = false;
	}
}


// YellowFade adapted from Garrett Dimon, 
// http://www.yourtotalsite.com/archives/javascript/yellowfade_technique_for/Default.aspx
var FadeInterval = 300;
var StartFadeAt = 7;

var FadeSteps = new Array();
    FadeSteps[1] = "ff";
    FadeSteps[2] = "ee";
    FadeSteps[3] = "dd";
    FadeSteps[4] = "cc";
    FadeSteps[5] = "bb";
    FadeSteps[6] = "aa";
    FadeSteps[7] = "99";

function do_fade(colorId, targetId) {
    if (colorId >= 1) {
        $(targetId).style.backgroundColor = "#ffff" + FadeSteps[colorId];
        
        // If it's the last color, set it to transparent
        if (colorId==1) {
            $(targetId).style.backgroundColor = "transparent";
        } else {
        colorId--;
        // Wait a little bit and fade another shade
        setTimeout("do_fade("+colorId+",'"+targetId+"')", FadeInterval); }
    }
}

function rate(rate_link, input_obj, rating) {
    ratelinks = getElementsByClass('ratelink', input_obj.form);
	var className = "done"
    for (e=0;e<ratelinks.length;e++) {
        ratelinks[e].parentNode.className = className;
        if (ratelinks[e] == rate_link) {
            className = "";
        }
    }
    input_obj.value = rating;
    rate_link.blur();
    return false;
}

function check_range(test_obj_from, test_obj_to, submit_obj, min_page, max_page) {
    if ((parseInt(test_obj_from.value) >= min_page) &&  (parseInt(test_obj_to.value) <= max_page) && (parseInt(test_obj_to.value) > parseInt(test_obj_from.value))) {
        submit_obj.disabled = 0;
    } else {
        submit_obj.disabled = 1;
    }
}

function create_cookie(name,value,days) {
	/* from http://www.quirksmode.org/js/cookies.html */
	if (days) {
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else var expires = "";
	document.cookie = name+"="+value+expires+"; path=/";
}

function erase_cookie(name) {
	create_cookie(name,"",-1);
}

function read_cookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}

function check_level_cookie() {
	var level_cookie = read_cookie('mindpicnic_level');
	if ($('level_indicator')) {
		if (level_cookie == '1') {
			$('level_indicator').style.display = 'block';
			$('level_indicator').innerHTML = '+++';
			fade_text('level_indicator', 0, 2);
		}
		if (level_cookie == '-1') {
			$('level_indicator').style.display = 'block';
			$('level_indicator').innerHTML = '---';
			fade_text('level_indicator', 0, 1);
		}
		erase_cookie('mindpicnic_level');
	}
}

function fade_text(element_id, hex, keep){ 
	if (hex < 255) {
		hex += 3;
		if (keep == 1) {
			$(element_id).style.color = "rgb(255," + hex + "," + hex + ")";
		}
		if (keep == 2) {
			$(element_id).style.color = "rgb(" + hex + ",255 ," + hex + ")";
		}
		if (keep == 3) {
			$(element_id).style.color = "rgb(" + hex + "," + hex + ", 255)";
		}
		$(element_id).style.top = hex/255*3 + 'em';
		var function_string = "fade_text('" + element_id + "'," + hex + "," + keep + ")";
		setTimeout(function_string, 20); 
	} else {
		$(element_id).style.display = '';
	}
}


function check_link(course) {
	url = $('id_url').value;
	if (url.substr(0, 4) != 'http') {
		url = 'http://' + url;
		$('id_url').value = url;
	}
    $('id_link_check').disabled = 1;
    $('id_link_check').value = "Link wird uberpruft ...";
    make_http_request('/inline/create/link/?course=' + course + '&url=' + url, 'change_link', 'id_link_form_2', false, '', 'GET');
}

function change_link(xml_response, objID) {
    $('id_link_check').disabled = 0;
    $('id_link_check').value = "Link uberprufen";
    $(objID).style.display = "block";
    change_content(xml_response, objID);
}

function hide(obj_id) {
    $(obj_id).style.display = "none";
}

function add_tag(textbox_id, item, type) {
    tag = $(textbox_id).value;
    if (tag) {    
	    /* Save tag to server */
	    make_http_request('/inline/'+type+'/'+item+'/tag/', 'show_tag', 'user_tag_form', false, build_query_string('user_tag_form', 'POST'), 'POST');
	    /* Empty textbox */
	    $(textbox_id).value = ""; 
    }
}

function show_tag(xml_response, obj_id) {
	/* Show tag on page */
	$('tags').innerHTML = $('tags').innerHTML + xml_response + ", ";
}

function update_threshold(textbox) {
	percentage = textbox.value;
	if ((percentage<1.0) && (percentage>0.0)) {
		$('id_learn_threshold').style.backgroundColor = "#FFFFFF";
		$('threshold_text').innerHTML = Math.round(percentage*100*100)/100;
	} else {
		$('id_learn_threshold').style.backgroundColor = "#FFBF00";
		$('threshold_text').innerHTML = "(Fehler)";	
	}
}

function set_focus_on_load(object_id) {
    if ($(object_id)) {
        if ($(object_id).focus) {
            $(object_id).focus();
        }
    } else {
        setTimeout("set_focus_on_load('" + object_id + "');", 100);
    }
}

function change_card_content(xml_response, obj_id) {
    change_content_custom(xml_response, obj_id, false);
    set_focus_on_load('id_question');
    $('id_question').focus();
}

function check_changed(obj) {
	if (obj.value != obj.defaultValue) { 
		$('changed').value = "1"; 
	}
}

function check_last(obj) {
	$('last_obj').value = obj.id;
}

function track() {
    var urchinElement = document.createElement("script");
    urchinElement.type="text/javascript";
    urchinElement.src = "http://www.google-analytics.com/urchin.js";
    urchinElement = $('footer').appendChild(urchinElement);
    call_tracker()
}

function call_tracker() {
    if (self.urchinTracker) {
        _uacct = "UA-1594968-1";
        urchinTracker();
    } else {
        setTimeout("call_tracker()", 100);
    }
}

/* from http://www.alexking.org/blog/2003/06/02/inserting-at-the-cursor-using-javascript/# (LGPL) */

function insert_at_cursor(myField, myValue) {
	//IE support
	if (document.selection) {
		myField.focus();
		sel = document.selection.createRange();
		sel.text = myValue;
		myField.focus();
	}
	//MOZILLA/NETSCAPE support
	else if (myField.selectionStart || myField.selectionStart == '0') {
		var startPos = myField.selectionStart;
		var endPos = myField.selectionEnd;
		var scrollTop = myField.scrollTop;
		myField.value = myField.value.substring(0, startPos)
		              + myValue 
                      + myField.value.substring(endPos, myField.value.length);
		myField.focus();
		myField.selectionStart = startPos + myValue.length;
		myField.selectionEnd = startPos + myValue.length;
		myField.scrollTop = scrollTop;
	} else {
		myField.value += myValue;
		myField.focus();
	}
}

function ic(achar) {
	return insert_at_cursor($($('last_obj').value), achar);
}