// requires jquery
// expects student_no,source_files_folder variables


var editorTemplate = am.getUrl('../RichCodeEditor/editorTemplate.html');

var codeDynamicCount=0;
// convert pre's to richCodeEditors:
/* expects student_no to be defined globally */
$(document).ready(
	function(){
		$('.codeDynamic').each(
			function(){
				//alert('hi');
				if(is_hidden(this)) return;
				convertPreToRichCodeEditor(this,student_no );
				codeDynamicCount++;
			}
		);
		
		// if there is only one code editor on page, make its buttons auto-scrolling which follows the page scroll:
		// tek örnekli ders kodlarinda biraz sorunlu, baska turlu hallet??
		if(codeDynamicCount==1){
			// when you make buttons follow page scroll with absolute positioning, code moves left, under buttons
			// in order to prevent that, put a spacer div there:
			$('.editorButtons').before('<div style="width:120px;">&nbsp;</div>')
			$('.editorButtons').css('position','absolute');
			$(window).scroll(
				function(){					
					$('.editorButtons').css('top',$(this).scrollTop()+75).css('left','10px');					
				}
			)
		}
	}
);


function escapeCodeForDiv(student_code){
	// pure text
	student_code = student_code.replace(/&/g,"&amp;");
	student_code = student_code.replace(/</g,"&lt;");
	student_code = student_code.replace(/>/g,"&gt;");
	// rich text editing extras:
	student_code = student_code.replace(/\t/g,"    ");
	student_code = student_code.replace(/ /g,"&nbsp;");
	student_code = "<P>"+student_code.replace(/(\r?\n)/g,"</P><P>")+"</P>";
	student_code = student_code.replace(/<P><\/P>/g,"<P>&nbsp;</P>"); // bos satirlar yutulmasin diye
	//student_code = student_code.replace("/\\r\\n/","<BR>\r\n",$student_code); // bi ara denedim ama br p gibi degil, problemli
	return student_code;
}

function unescapeCodeFromPre(pre_innerHTML){
	pre_innerHTML = pre_innerHTML.replace(/&amp;/g,'&');
	pre_innerHTML = pre_innerHTML.replace(/&lt;/g,'<');
	pre_innerHTML = pre_innerHTML.replace(/&gt;/g,'>');
	return pre_innerHTML;
}

// TODO: eger pre'nin class'larinda exam var ise, header trailer kodlari da yukleyip ona gore davran!!!
function convertPreToRichCodeEditor(pre,student_no){		
	var divObj = document.createElement('div');
	var default_code = unescapeCodeFromPre(pre.innerHTML);		
	var templated = $(pre).hasClass('templated'); // currently templated code is used for exam part, it has header and trailer codes
	var student_code = am.getUrl('loadStudentCode.php?fileName='+pre.id+(templated?' student':'')+'&noCacheTime='+(new Date()));
	if(!student_code || student_code=='') student_code = default_code;
	
	
	var editorCode = editorTemplate;	
	//
	editorCode = editorCode.replace(/student_file_name_without_extension/g,pre.id);
	editorCode = editorCode.replace(/student_file_extension/g,'c'); // TODO: not flexible, fix this later!!!
	editorCode = editorCode.replace(/STUDENT_SOURCE_CODE/g,escapeCodeForDiv(student_code));
	editorCode = editorCode.replace(/DEFAULT_CODE/g,escapeCodeForDiv(default_code));
	// for exe link of run button:
	editorCode = editorCode.replace(/SOURCE_FILES_FOLDER/g,source_files_folder);
	
	
	var header_code='';
	var trailer_code='';
	if(templated){
		header_code = am.getUrl('loadStudentCode.php?fileType=header&question='+pre.id+'&noCacheTime='+(new Date()));
		trailer_code = am.getUrl('loadStudentCode.php?fileType=trailer&question='+pre.id+'&noCacheTime='+(new Date()));
		editorCode = editorCode.replace(/HEADER_CODE/g,escapeCodeForDiv(header_code));
		editorCode = editorCode.replace(/TRAILER_CODE/g,escapeCodeForDiv(trailer_code));
	}
	else{
		editorCode = editorCode.replace(/HEADER_CODE/g,'');
		editorCode = editorCode.replace(/TRAILER_CODE/g,'');
	}	
	
	divObj.innerHTML = editorCode;	
	$(pre).before(divObj);
	hide(pre);
}