var lang_map = {
	1:			"cpp",			// C++
	27:			"cpp",			// C#
	10:			"java",			// Java
	11:			"c",			// C
	34:			"c",			// C99 strict
	29:			"php",			// PHP
	4:			"python",		// Python
	2:			"pas",			// Pascal
	22:			"pas",			// Pascal
	17:			"ruby",			// Ruby
	3:			"perl",			// Perl
	12:			"brainfuck",	// Brainf**k
	40:			"sql"			// SQL
};


var queueApplManager = $.manageAjax.create('queueApplManager', {queue: true});
var statusCodes = {};

var loader_img = '<img src="/gfx/loader.gif"/>';
var ok_img = '<img src="/gfx/ok.png" style="height: 10px;" />';

function alertIdeoneGeneratedError(data) {
	alert("Error occurred.\n" + "Error code: " + data.error_code + "\n" + "Error description: " + data.description);
}

function masstestGetStatus(id) {
	queueApplManager.add({
        url: "/masstest/status/" + id + "/",
        dataType: 'html',
        success: function(data) {
			$('#solutions').html(data);
			bindHighLightRows();
			bindClickableRows();
			setTimeout("masstestGetStatus(" + id + ")", 4000);
        }
	});
}

function loadEditor(){
	var site = $("#site").val();
	var lang_id = 1;
	if(site == "index"){
		lang_id = $("#lang").val();
	} else { // view
		lang_id = $("#compiler").val();
	}
	var syn = "basic";

	if( lang_map[lang_id] != undefined ){
		syn = lang_map[lang_id];
	}
	
	if(site == "index"){
		editAreaLoader.init({
	        id: "file" // id of the textarea to transform              
	        ,start_highlight: true  // if start with highlight
	        ,allow_resize: "both"
	        ,allow_toggle: false
	        //,word_wrap: true
	        ,language: "en"
	        ,syntax: syn 
			,font_size: "8"
	        ,syntax_selection_allow: "basic,brainfuck,c,cpp,java,pas,perl,php,python,ruby,sql"
	        ,toolbar: " ideone_send, search, go_to_line, fullscreen, |, undo, redo, |, select_font, syntax_selection,|, change_smooth_selection, highlight, reset_highlight, word_wrap, |, help"
	        ,plugins: "ideone"
		});
	} else { // view
		if( $("#view_edit_box").css('display') != 'none' ) { // ladujemy tylko jak jest widoczny bo inaczej bedzie kaszana
			editAreaLoader.init({
		        id: "view_edit_file" // id of the textarea to transform              
		        ,start_highlight: true  // if start with highlight
		        ,allow_resize: "both"
		        ,allow_toggle: false
		        //,word_wrap: true
		        ,language: "en"
		        ,syntax: syn 
				,font_size: "8"
				,syntax_selection_allow: "basic,brainfuck,c,cpp,java,pas,perl,php,python,ruby,sql"
		        ,toolbar: "search, go_to_line, fullscreen, |, undo, redo, |, select_font, syntax_selection, |, change_smooth_selection, highlight, reset_highlight, word_wrap, |, help"
			});
		}
	}
	
	// $("#syntax").attr('checked', true);
}


function unloadEditor(){
	var site = $("#site").val();
	var id = "";
	if(site == "index"){
		id = "file";
	} else { // view
		id = "view_edit_file";
	}
	
	if(site == "index") {
		editAreaLoader.delete_instance(id);
	} else { //view
		if( $("#view_edit_box").css('display') != 'none' ) {
			editAreaLoader.delete_instance(id);
		}
	}
	
	//$("#syntax").attr('checked', false);
	//$("#file").indent();
}


// sprawdzanie statusu zgłoszenia zgłoszonego ze strony view
// jesli edit = true, tzn. ze chodzi o edycje
function load2(solution_link, lp, edit){
    var status_code = statusCodes[solution_link]; //$('#status_code').val();
    if( status_code == undefined ){
    	return;
    }
	if( status_code == 0 ){
		return;
	}
	
	$("#li_"+solution_link).html(loader_img + ' Loading...');
    
    
	queueApplManager.add({
            type: "POST",
            url: "/ideone/Index/view/id/"+solution_link+"/ajax/1/lp/"+lp,
            dataType: 'json',
            success: function(data){
    				if( data.status == 0 ){
    					$("#li_"+solution_link).html(data.inouterr);
    					bindInOutErrLinks();
    					if(!edit) { // jesli nie edit (nowy input) to dodajemy nowy link-numerek
	    					$("#view_numbers").html(
	    						"<a class=\"inouterr_number_link\" href=\"#li_"
	    						+ solution_link + "\">#<span style=\"font-size:6px;\"> </span>"
	    						+ lp + "</a> "
	    						+ $("#view_numbers").html()
	    					);
	    					$("#view_numbers").show('fast');
	    					bindClickNumberLinks();
    					}	
    					if( data.result > 8 && data.result != 12 && data.result != 13 && data.result != 15 && data.result != 17 ){
    						$("#new_item").hide('fast');
    						$(".inouterr_input_button_span").hide();
    					} else {
    						$("#new_item").show('fast');
    						$(".inouterr_input_button_span").show();
    					}
    					if( data.any_cmperr ){
    						//$("#err>pre").html(data.cmperr); // (wiele:) tę linijkę zamieniłem na dwie poniższe z powodu IE8 (po stronie serwera też się trochę zmieniło (obsługa za pomocą ideone/view_cmperr.html))
    						$("#err").html("");	// (wiele:) bez tej linijki IE8 będzie miał problemy
    						$("#err").html(data.cmperr);
    						$("#err").show('fast');
    					} else {
    						$("#err").hide('fast');
    					}
    					$("#li_"+solution_link+" a.inout_link").click(); // pokazanie bloku
    					if(edit){
    						$("#view_edit_still_running_msg").hide();
    					}
    					// --- begin of aktualizacja dat
        				var link = "";
    					// aktualizacja dat zgłoszeń potomnych
    					for(link in data.dates) {
    						$("#li_" + link + " span.date_span").html( data.dates[link] );
    					}
    					// aktualizacja daty zgłoszenia głównego (na dole)
    					$("#li_" + $('#solution_link').val() + " span.date_span").html( data.parent_date );
    					// aktualizacja daty zgłoszenia głównego (u góry)
    					$("#solution_date").html( data.parent_date );
    					// --- end of aktualizacja dat
    				} else {
    					$("#li_"+solution_link).html( $("#li_"+solution_link).html()+data.html );
    				}
    				statusCodes[solution_link] = data.status;
    				handlePoolData(data.pools);
					setTimeout("load2('"+solution_link+"',"+lp+","+edit+");", 1000);
            },
            error: function(err,a,b){
            		$("#li_"+solution_link).html('Error, please refresh the page');
            		$("#new_item").show('fast');
            }
    });
}


// standardowe sprawdzanie statusu po wejściu na stronę zgłoszenia
function load(){

    var solution_link = $('#solution_link').val();
    var status_code = $('#status_code').val();
    
    if( status_code == undefined ){
    	return;
    }
	if( status_code == 0 ){
		return;
	}
	
	$("#li_"+solution_link).html('<img src="/gfx/loader.gif"/> Loading... ');
    
	queueApplManager.add({
            type: "POST",
            url: "/ideone/Index/view/id/"+solution_link+"/ajax/1/lp/1",
            dataType: 'json',
            success: function(data){
    				if( data.status == 0 ){
    					$("#li_"+solution_link).html(data.inouterr);
    					bindInOutErrLinks();
    					if( data.result == 12 || data.result == 13 || data.result == 15 || data.result == 17 ){
    						$("#new_item").show('fast');
    					}
    					if( data.any_cmperr ){
    						//$("#err>pre").html(data.cmperr); // (wiele:) tę linijkę zamieniłem na dwie poniższe z powodu IE8 (po stronie serwera też się trochę zmieniło (obsługa za pomocą ideone/view_cmperr.html))
    						$("#err").html("");	// (wiele:) bez tej linijki IE8 będzie miał problemy
    						$("#err").html(data.cmperr);
    						$("#err").show('fast');
    					}
    					$("#li_"+solution_link+" a.inout_link").click(); // pokazanie bloku
    				}
    				else {
	    				$("#li_"+solution_link).html( $("#li_"+solution_link).html() + data.html);
    				}
    				$('#status_code').attr('value', data.status);
    				handlePoolData(data.pools);
					setTimeout(load, 1000);
            },
            error: function(err,a,b){
            		$("#status_desc_1").html('ER');
            }
    });
}

function bindInOutErrLinks(){
	// show / hide
	$(".inout_link").unbind('click');
	$(".inout_link").bind('click', function(){
		setInOutErrVisibility($(this), 'toggle');
		return false;
	});
	// edit
	$(".inouterr_edit_button").unbind('click');
	$(".inouterr_edit_button").bind('click', function(){
		return viewEditButtonInputAction($(this));
	});
	// input
	$(".inouterr_input_button").unbind('click');
	$(".inouterr_input_button").bind('click', function(){
		return viewInputButtonInputAction($(this));
	});
	// === begin of delete ===
	/*
	 * niepotrzebne po tym jak przycisk [x] jest widoczny na stałe
	// show delete section
	$(".li_inouterr").unbind('mouseover');
	$(".li_inouterr").bind('mouseover', function(){
		if( $(this).attr('id') != "new_item" ){
			$(this).find(".delete_section").show();
		}
	});
	// hide delete section
	$(".li_inouterr").unbind('mouseout');
	$(".li_inouterr").bind('mouseout', function(){
		if( $(this).attr('id') != "new_item" ){
			$(this).find(".delete_section").hide();
		}
	});
	*/
	// show delete question
	$(".delete_section_delete").unbind('click');
	$(".delete_section_delete").bind('click', function() {
		var $del = $(this);
		$del.hide();
		var $div = $del.siblings('.delete_section_confirm');
		$div.show();
		var $yes = $div.find(".inouterr_delete_yes");
		var $no = $div.find(".inouterr_delete_no");
		var no_function = function() {
			$div.hide();
			$del.show();
			return false;
		};
		$no.unbind('click');
		$no.click(no_function);
		//$div.unbind('mouseout');
		//$div.mouseout(no_function);
		$yes.unbind('click');
		$yes.bind('click', function() {
			doDeleteSingleSubmission($(this));
			return false;
		});
		return false;
	});
	// === end of delete ===
}

/**
 * @param link: hide link
 * @return
 */
function doHide(link){
	$(link).parent().addClass('private');
	$(link).parent().children('span.private').show('slow');
	return false;
}

/**
 * @param what: toggle | show | hide
 */
function setInOutErrVisibility($link, what) {

	var id = $link.attr('inouterr_id');
	if(what == 'toggle') {
		if( $("#info_" + id ).css('display') == 'block' ){
			//$(this).removeClass('inout_link_enabled');
			$("#viewhide_show_"+id).show();
			$("#viewhide_hide_"+id).hide();
		} else {
			//$(this).addClass('inout_link_enabled');
			$("#viewhide_show_"+id).hide();
			$("#viewhide_hide_"+id).show();
		}
		$("#in_" + id).toggle();
		$("#out_" + id).toggle();
		$("#err_" + id).toggle();
		$("#info_" + id).toggle();
		$("#inouterr_status_" + id).toggle();
	}
	else if(what == 'show') {
		$("#viewhide_show_"+id).hide();
		$("#viewhide_hide_"+id).show();
		$("#in_" + id).show();
		$("#out_" + id).show();
		$("#err_" + id).show();
		$("#info_" + id).show();
		$("#inouterr_status_" + id).hide();
	}
	else if(what == 'hide') {
		$("#viewhide_show_"+id).show();
		$("#viewhide_hide_"+id).hide();
		$("#in_" + id).hide();
		$("#out_" + id).hide();
		$("#err_" + id).hide();
		$("#info_" + id).hide();
		$("#inouterr_status_" + id).show();
	}
	
	return false;
}


function bindClickNumberLinks() {
	$(".inouterr_number_link").unbind("click");
	$(".inouterr_number_link").bind("click", function() {
		var id = $(this).attr('href');
		setInOutErrVisibility($(id + " a.inout_link"), 'show');
		return true;
	});
}


function insertTemplateOrSample(what) {
	
	var langId = $('#lang').val();
	var solId = 0;
	
	if(what == 'template') {
		solId = langs_properties[langId]['template_sol_id'];
	}
	else if(what == 'sample') {
		solId = langs_properties[langId]['sample_sol_id'];
	}
	else if(what == 'userstemplate') {
		solId = langs_properties[langId]['users_template_sol_id'];
	}
	
	if(solId == 0) {
		return;
	}
	
	$('#insert-loader').show();
	queueApplManager.add({
            type: 'POST',
            url: '/insert/' + what + '/' + solId + '/',
            dataType: 'json',
            success: function(data){;
					var isEditorOn = $('#syntax').attr('checked');
					// poniższe zakomentowane, bo przy wyświetlaniu sample Brainfucka edytor powoduje błędy
					/*if(isEditorOn) {
						editAreaLoader.setValue('file', '');
						editAreaLoader.setValue('file', data.source);
					}
					else {
						$('#file').val(data.source);
					}*/
					if(isEditorOn) {
						unloadEditor();
					}
					$('#file').val(data.source);
					if(isEditorOn) {
						loadEditor();
					}
					if(what == 'sample' || what == 'userstemplate') {
						var isInputVisible = $('#input_box').is(':visible');
						if(!isInputVisible) {
							$('#input_link').click();
						}
						$('#input').val(data.input);
					}
					else {
						$('#input').val('');
					}
					$('#insert-loader').hide();
            },
            error: function(err,a,b){
            		alert("Error occured");
            }
    });
}



function bindHighLightRows() {

	// podświetlanie wierszy w manage samples i w masstest
	$('.manage-samples-table tr.highlight-row, .masstest-table tr.highlight-row').bind('mouseover', function() {
		$(this).addClass('highlighted-row');
	});
	$('.manage-samples-table tr.highlight-row, .masstest-table tr.highlight-row').bind('mouseout', function() {
		$(this).removeClass('highlighted-row');
	});
}

function bindClickableRows() {
	$('.masstest-table tr.clickable-row').bind('click', function() {
		window.open($(this).attr('href'));
	});
}

function openNewMasstest() {
	var chkgrp = $("#chkgrp").val();
	window.open("/masstest/execute/chkgrp/" + chkgrp + "/");
}

function set_user_settings_cookie(name, val) {
	$.cookie(name, val, { expires: 180 } );
}

function setPoolMsgsStates(warn_msg, nomore_msg, button) {
	
	if(warn_msg) {
		$('#view-pool-credit-warning').show();
		$('#view-pool-credit-warning-edit').show();
	} else {
		$('#view-pool-credit-warning').hide();
		$('#view-pool-credit-warning-edit').hide();
	}
	
	if(nomore_msg) {
		$('#view-pool-cannot-submit').show();
		$('#view-pool-cannot-submit-edit').show();
	} else {
		$('#view-pool-cannot-submit').hide();
		$('#view-pool-cannot-submit-edit').hide();
	}
	
	if(button) {
		$('#new_submit').show();
		$('#view_edit_submit').show();
	} else {
		$('#new_submit').hide();
		$('#view_edit_submit').hide();
	}
}

function handlePoolData(pools) {
	if(!pools.allow_to_submit) {
		setPoolMsgsStates(false, true, false);
	}
	else {
		if(pools.warn_about_credit)
			setPoolMsgsStates(true, false, true);
		else
			setPoolMsgsStates(false, false, true);
	}
}

/**
 * Wywoływana po naciśnięciu któregoś edit na stronie view.
 */
function viewEditButtonAction(action) {
	var $view_edit_box = $("#view_edit_box"); 
	if(action == 'show') {
		$("#view_edit_box_editing_number").text( $("#edit_solution_number").val() );
		unload_editor = true;
		if( $view_edit_box.css('display') == 'none' ){
			$view_edit_box.show();
			// nie ladujemy edytora bo zrobi to loadViewEditData() po załadowaniu danych
			// if( $("#syntax").attr('checked') ){
			// 	loadEditor();
			// }
			unload_editor = false;
		}
		loadViewEditData(unload_editor);
		return true;
	} else {
		if( $("#syntax").attr('checked') ){
			unloadEditor();
		}
		$view_edit_box.hide();
		return false;
	}
}


/**
 * Edycja kodu po kliknięciu przycisku edit z inputu
 */
function viewEditButtonInputAction($edit_button) {
	$("#edit_solution_link").val( $edit_button.attr("sol_link") );
	$("#edit_solution_number").val( $edit_button.attr("sol_number") );
	return viewEditButtonAction('show');
}


/**
 * Edycja kodu po kliknięciu przycisku edit nad/pod source.
 */
function viewEditButtonSourceAction() {
	$("#edit_solution_link").val( $("#max_link").val() );
	$("#edit_solution_number").val( $("#max_number").val() );
	return viewEditButtonAction('show');
}


/**
 * Nowy input na podstawie inputu
 */
function viewInputButtonInputAction($input_button) {
	var link = $input_button.attr("sol_link");
	$("#new_item_in").show();
	loadNewInputData(link);
	return true;
}

/**
 * Ładowanie danych na stronie view do edycji zgłoszenia.
 */
function loadViewEditData(unload_editor) {
	var link = $("#edit_solution_link").val();
	var $loader = $("#view-edit-insert-loader");
	$loader.show();
	queueApplManager.add({
        url: "/geteditdata/" + link + "/",
        dataType: 'json',
        success: function(data) {
        	if(data.status == "ok"){
        		var isEditorOn = $('#syntax').attr('checked');
				if(isEditorOn && unload_editor) {
					unloadEditor();
				}
				$('#view_edit_file').val(data['source']);
				if(isEditorOn) {
					loadEditor();
				}
				$('#view_edit_input').val(data['input']);
        	} else {
        		alertIdeoneGeneratedError(data);
        	}
        	$loader.hide();
        }
	});
}


/**
 * Ładowanie danych dla new input.
 */
function loadNewInputData(link) {
	var $loader = $("#new-input-insert-loader");
	$loader.show();
	queueApplManager.add({
        url: "/getnewinputdata/" + link,
        dataType: 'json',
        success: function(data) {
        	if(data.status == "ok"){
				$('#in_new').val(data['input']);
        	} else {
        		alertIdeoneGeneratedError(data);
        	}
        	$loader.hide();
        }
	});
}

/**
 * Edycja zgłoszenia ze strony view.
 */
function viewEditExecute() {
	
	var isEditorOn = $('#syntax').attr('checked');
	var source = "";
	// wlaczamy i wylaczamy edytor zeby pobrac aktualne dane (bug edytora)
	if(isEditorOn) {
		unloadEditor();
	}
	source = $("#view_edit_file").val();
	if(isEditorOn) {
		loadEditor();
	}
	
	var input = $("#view_edit_input").val();
	var link = $("#edit_solution_link").val();
	var lp = $("#edit_solution_number").val();
	
	// pokazanie loadera
	var $loader = $("#view-edit-submit-loader");
	$loader.show();
	// ukrycie zmienianego in/out/err
	setInOutErrVisibility($("#li_" + link + " a.inout_link"), 'hide');
	
	queueApplManager.add({
    	type: "POST",
        url: "/submitedit",
        data: {'input': input, 'source': source, 'link': link},
        dataType: 'json',
        success: function(data){
        	if(data.status == "ok"){
        		$("#source").html( data['code'] );
	        	statusCodes[link] = -1;
        		$("#li_" + link).html("Loading...");
        		load2(link, lp, true);
        	} else if( data.status == 'error' && data.error_code == 'still_running' ){
        		$("#view_edit_still_running_msg").show();
        	} else if( data.status == 'error' && data.error_code == 'pool_cannot_submit_anymore' ){
    			setPoolMsgsStates(false, true, false);
        	} else {
        		alertIdeoneGeneratedError(data);
        	}
        	$loader.hide();
    	},
        error: function(err,a,b){
        }
    });
}


/**
 * Usuwa całą stronę (zgłoszenie rodzic i wszystkie potomne).
 */
function doDeleteSubmission($button) {
	var should_confirm = $button.attr("confirm");
	if(should_confirm == "true") {
		if(!confirm( $button.attr("confirm_msg") )){
			return;
		}
	}
	$loader = $( "#" + $button.attr("loader_id") );
	$loader.show();
	var link = $button.attr("link");
	var childLink = $button.attr("childlink");
	queueApplManager.add({
		type: "POST",
        url: "/deletesubmission",
        data: {'link': link, 'childlink': childLink},
        dataType: 'json',
        success: function(data){
        	if(data.status == "ok"){
	        	$loader.hide();
	        	window.location = data.redirect;
        	} else {
        		alertIdeoneGeneratedError(data);
        	}
    	},
        error: function(err,a,b){
        }
	});
}


/**
 * Ustawia widoczność zgłoszenia.
 */
function doSetVisibility($button) {
	$loader = $( "#" + $button.attr("loader_id") );
	$loader.show();
	var link = $button.attr("link");
	var childLink = $button.attr("childlink");
	var what = $button.attr("what");
	queueApplManager.add({
		type: "POST",
        url: "/setvisibility",
        data: {'link': link, 'childlink': childLink, 'what': what},
        dataType: 'json',
        success: function(data){
        	if(data.status == "ok"){
	        	$loader.hide();
	        	window.location = data.redirect;
        	} else {
        		alertIdeoneGeneratedError(data);
        	}
    	},
        error: function(err,a,b){
        }
	});
}


/**
 * Usuwa pojedynczy input. Jeśli usuwany input jest zgłoszeniem-rodzicem, to usuwana jest cała strona.
 * @param $button
 */
function doDeleteSingleSubmission($button) {
	$loader = $( "#" + $button.attr("loader_id") );
	$loader.show();
	var link = $button.attr("link");
	queueApplManager.add({
		type: "POST",
        url: "/deletesinglesubmission",
        data: {'link': link},
        dataType: 'json',
        success: function(data){
        	if(data.status == "ok"){
	        	$loader.hide();
	        	window.location = data.redirect;
        	} else {
        		alertIdeoneGeneratedError(data);
        	}
    	},
        error: function(err,a,b){
        }
	});
}


$(document).ready(function(){
	
	$("#js_required").hide();
	$("#main_form").attr("action", "/ideone/Index/submit/");
	$("#Run").bind('click', function(){
		$("#main_form").attr("action", "/ideone/Interactive/submit/");
		return true;
	});
	
	$("a[rel^='prettyPhoto']").prettyPhoto({
		default_height: 600
	});
	
	// IE: http://freecode-freecode.blogspot.com/2007/06/how-to-catch-tab-key-press-with.html
	// pozwala pisac taby do textarea
	// teraz mamy wtyczkę tabby
	/* $('#file').keypress(function (e) {
	    if (e.keyCode == 9) {
	    	var myValue = "\t";
	    	var startPos = this.selectionStart;
	    	var endPos = this.selectionEnd;
	    	var scrollTop = this.scrollTop;
	    	this.value = this.value.substring(0, startPos) + myValue + this.value.substring(endPos,this.value.length);
	    	this.focus();
	    	this.selectionStart = startPos + myValue.length;
	    	this.selectionEnd = startPos + myValue.length;
	    	this.scrollTop = scrollTop;
	    	e.preventDefault();
	    }
	}); */

	// input link na stronie głównej
	$("#input_link").bind('click', function(){
		// pasuje fold
		$("#input_box").toggle('fold');
		$("#welcome_message").toggle('fold');
		return false;
	});
	// new input na stronie zgłoszenia
	$("#new_input").bind('click', function(){
		$("#new_item_in").toggle();
		return false;
	});
	$("#select_all_langs").bind('click', function(){
		var i = 1;
		$(".lang_item").each(function(i, el){
			el.checked = !el.checked;
		});
		return false;
	});
	// wysłanie nowego zgłoszenia ze strony starego zgłoszenia
	$("#new_submit").bind('click', function(){
		var lp = 1+parseInt($("#max_number").attr('value'));
		$("#max_number").attr('value', lp);
		queueApplManager.add({
        	type: "POST",
            url: $("#new_item_form").attr('value'),
            data: {'input': $("#in_new").val()},
            dataType: 'json',
            success: function(data){
        		if( data['status'] == 'ok' ){
        			$('#new_item').after("<li id='li_"+data.link+"' class='li_inouterr'>New submission...</li>");
					$('#new_item_in').toggle('fast');
					$("#in_new").attr('value', '');
					statusCodes[data.link] = -1;
					$("#max_link").val(data.link);
					load2(data.link, lp, false);
        		} else if( data['status'] == 'error' && data['error_code'] == 'pool_cannot_submit_anymore' ) {
        			setPoolMsgsStates(false, true, false);
        		} else {
        			alertIdeoneGeneratedError(data);
        			$("#new_item").show('fast');
        		}
        	},
            error: function(err,a,b){
				alert("Communication error.");
				$("#new_item").show('fast');
            }
        });
		
		return false;
	});
	$("#new_hide").bind('click', function() {
		$("#new_item_in").toggle();
	});
	
	// obsługa pokazywania in/out/err na stronie zgłoszenia
	bindInOutErrLinks();
	
	// prezentacja linku na stronie view
	$("#link_presentation").bind("focus", function() {
		this.select();
	});
	$("#link_presentation").bind("click", function() {
		this.select();
	});
	

	
	$("#syntax").bind('click', function(){
		if( $("#syntax").attr('checked') ){
			loadEditor();
		} else {
			unloadEditor();
		}
		return true;
	});
	
	if( $("#syntax").attr('checked') ) {
		loadEditor();
	}
	
	// tabulator
	if( "index" == $("#site").val() ){
		$("#file").tabby();
	} else if ( "view" == $("#site").val() ){
		$("#view_edit_file").tabby();
	}
	
	$("#lang").bind('change', function(){
		var lang_id = $("#lang").val();
		// obsługa edytora
		if (typeof lang_map[lang_id] != "undefined") {
			if( window.frames['frame_file'] != undefined ){
				window.frames['frame_file'].document.getElementById('syntax_selection').value = lang_map[lang_id];
				window.frames['frame_file'].editArea.execCommand('change_syntax', lang_map[lang_id]);
			}
		} else {
			if( window.frames['frame_file'] != undefined ){
				window.frames['frame_file'].document.getElementById('syntax_selection').value = "basic";
				window.frames['frame_file'].editArea.execCommand('change_syntax', lang_map[lang_id]);
			}
		}
		
		// włączanie / wyłączanie przycisku	"run code"
		if(langs_properties[lang_id]["runnable"] == 1) {
			$("#run_div").show();
		}
		else {
			$("#run_div").hide();
		}
		
		// włączanie / wyłączanie wstawiania przykładów / wzorców
		var template_sol_id = langs_properties[lang_id]["template_sol_id"];
		var sample_sol_id = langs_properties[lang_id]["sample_sol_id"];
		var users_template_sol_id = langs_properties[lang_id]["users_template_sol_id"];
		
		if(template_sol_id > 0 || sample_sol_id > 0 || users_template_sol_id > 0) {
			$("#insert-part-or").css('display', 'inline');
			$("#insert-part-insert").css('display', 'inline');
			if(template_sol_id > 0)
				$("#insert-part-template").css('display', 'inline');
			else
				$("#insert-part-template").css('display', 'none');
			
			if(template_sol_id > 0 && sample_sol_id > 0)
				$("#insert-part-or2").css('display', 'inline');
			else
				$("#insert-part-or2").css('display', 'none');
			
			if(sample_sol_id > 0)
				$("#insert-part-sample").css('display', 'inline');
			else
				$("#insert-part-sample").css('display', 'none');
			
			if(users_template_sol_id > 0) {
				if(template_sol_id > 0 || sample_sol_id > 0)
					$("#insert-part-or3").css('display', 'inline');
				else
					$("#insert-part-or3").css('display', 'none');
				
				$("#insert-part-users-template").css('display', 'inline');
			}
			else {
				$("#insert-part-or3").css('display', 'none');
				$("#insert-part-users-template").css('display', 'none');
			}
		}
		else {
			$("#insert-part-or").css('display', 'none');
			$("#insert-part-insert").css('display', 'none');
			$("#insert-part-template").css('display', 'none');
			$("#insert-part-or2").css('display', 'none');
			$("#insert-part-sample").css('display', 'none');
			$("#insert-part-or3").css('display', 'none');
			$("#insert-part-users-template").css('display', 'none');
		}
	});
	
	// wywołujemy zdarzenie zmiany, żeby m.in. pole "run code" zostało ukryte jeśli trzeba
	$("#lang").change();
	
	$("#view_showall").bind("click", function() {
		$(".inout_link").each(function() {
			setInOutErrVisibility($(this), 'show');
		});
		return false;
	});
	
	$("#view_hideall").bind("click", function() {
		$(".inout_link").each(function() {
			setInOutErrVisibility($(this), 'hide');
		});
		return false;
	});
	
	$(".sample_langs_link").bind("click", function() {
		$($(this).attr('href')).effect('highlight', {color: '#83B943'}, 'slow');
		return true;
	});
	
	bindClickNumberLinks();
	
	load();
	
	
	// obsluga linków ajaxowych
	function ajax_link_function(){
		var url = this.href;
		var link = this;
		$(link).html('loading... ' + loader_img);
		
		queueApplManager.add({
        	type: "GET",
            url: url,
            //dataType: 'json',
            success: function(data){
        		if( data == 'ok' ){
        			$(link).hide('fast');
        			if( $(link).hasClass('doHide') ){
        				doHide(link);
        			}
        		} else {
        			this.error(data,1,1);
        		}
        	},
            error: function(err,a,b){
        		alert('error occured: \n' + err);
				$(link).html('action failed');
            }
        });
		
		return false;
	};
	$('.ajax_link').bind('click', ajax_link_function); 
	
	function simple_ajax_link_function(){
		var url = this.href;
		var link = this;
		var label = $(link).html();
		$(link).html('hide ' + loader_img);
		
		queueApplManager.add({
        	type: "GET",
            url: url,
            success: function(data){
        		if( data == 'ok' ){
        			$(link).html(label+' ' + ok_img);
        		} else {
        			this.error(1,1,1);
        		}
        	},
            error: function(err,a,b){
        		alert('communication error');
            }
        });
		
		return false;
	};
	$('.simple_ajax_link').bind('click', simple_ajax_link_function); 
	
	// zmiana jezyka
	//$("#language_box").bind('click', function(){
	//	$.facebox('something cool');
	//	return false;
	//});
	$("a[rel*=facebox]").facebox(); 
	
	$("#toggle_adv_search").bind('click', function(){
		$("#adv_search").toggle('fast');
		return false;
	});
	
	$("#insert-template-link").bind('click', function() {
		insertTemplateOrSample('template');
		return false;
	});
	
	$("#insert-sample-link").bind('click', function() {
		insertTemplateOrSample('sample');
		return false;
	});
	
	$("#insert-users-template-link").bind('click', function() {
		insertTemplateOrSample('userstemplate');
		return false;
	});
	
	$("#new-masstest-link").bind('click', function() {
		openNewMasstest();
		return false;
	});
	
	$("#index_chk_visibility_private").bind('click', function() {
		if( $(this).attr('checked') ) {
			$("#index_hidden_visibility_public").val(0);
		}
		else {
			$("#index_hidden_visibility_public").val(1);
		}
	});
	
	$("#label_new_text").bind('focus', function(){
		if( $(this).hasClass('empty') ){
			$(this).removeClass('empty');
			$(this).removeClass('gray');
			$(this).val('');
		}
	});
	$("#label_new_text").bind('focusout', function(){
		if( $(this).val() == "" ){
			$(this).addClass('empty');
			$(this).addClass('gray');
			$(this).val($(this).attr('locale'));
		}
	});
	$("#label_new_text").bind('keyup', function(){
		if($(this).val() == "" ){
			$("#label_new").removeAttr('checked');
		} else {
			$("#label_new").attr('checked', true);
		}	
	});
	
	$("#view_edit_button_1, #view_edit_button_2").bind('click', function() {
		return viewEditButtonSourceAction();
	});
	
	$("#view_edit_submit").bind('click', function() {
		viewEditExecute();
		return false;
	});
	
	$("#view_edit_hide").bind('click', function() {
		return viewEditButtonAction('hide');
	});
	
	bindHighLightRows();
	
	// uruchamianie edycji zgłoszenia na stronie zgłoszenia jeśli jest taka potrzeba
	if( "view" == $("#site").val() && window.location.hash == "#view_edit_box" ){
		// edytujemy ten sam input który jest rozwijany
		// (jesli ktos nie ma uprawnien to przycisk nie istnieje i nic sie nie stanie)
		$("#inouterr_edit_button_" + $("#inouterrToShow").val()).click();
	}
	
	// usuwanie / ustawianie widoczności zgłoszeń
	$(".view_set_visibility_link").click(function(){
		var action = $(this).attr("theaction");
		if(action == "deletesubmission"){
			doDeleteSubmission($(this));
		} else if(action == "setvisibility"){
			doSetVisibility($(this));
		}
		return false;
	});
	
	$(".login_required").click(function(){
		alert('You have to be logged in to use this function.');
		return false;
	});
});

/**
 * jQuery.placeholder - Placeholder plugin for input fields
 * Written by Blair Mitchelmore (blair DOT mitchelmore AT gmail DOT com)
 * Licensed under the WTFPL (http://sam.zoy.org/wtfpl/).
 * Date: 2008/10/14
 *
 * @author Blair Mitchelmore
 * @version 1.0.1
 *
 **/
new function($) {
    $.fn.placeholder = function(settings) {
        settings = settings || {};
        var key = settings.dataKey || "placeholderValue";
        var attr = settings.attr || "placeholder";
        var className = settings.className || "placeholder";
        var values = settings.values || [];
        var block = settings.blockSubmit || false;
        var blank = settings.blankSubmit || false;
        var submit = settings.onSubmit || false;
        var value = settings.value || "";
        var position = settings.cursor_position || 0;

        
        return this.filter(":input").each(function(index) { 
            $.data(this, key, values[index] || $(this).attr(attr)); 
        }).each(function() {
            if ($.trim($(this).val()) === "")
                $(this).addClass(className).val($.data(this, key));
        }).focus(function() {
            if ($.trim($(this).val()) === $.data(this, key)) 
                $(this).removeClass(className).val(value)
                if ($.fn.setCursorPosition) {
                  $(this).setCursorPosition(position);
                }
        }).blur(function() {
            if ($.trim($(this).val()) === value)
                $(this).addClass(className).val($.data(this, key));
        }).each(function(index, elem) {
            if (block)
                new function(e) {
                    $(e.form).submit(function() {
                        return $.trim($(e).val()) != $.data(e, key)
                    });
                }(elem);
            else if (blank)
                new function(e) {
                    $(e.form).submit(function() {
                        if ($.trim($(e).val()) == $.data(e, key)) 
                            $(e).removeClass(className).val("");
                        return true;
                    });
                }(elem);
            else if (submit)
                new function(e) { $(e.form).submit(submit); }(elem);
        });
    };
}(jQuery);

