// requires jquery,browserDetector (for ie variable (ie is true if the browser is internet explorer))


// future work: make all functions non-ie (ff,ch,op etc) compatible also

var tabChar='    ';

// ff ie ch compatible:
function insertBeforeCursor(str,myField /*myField parameter not required for internet explorer*/){
  //IE support
  if (ie) {    
    sel = document.selection.createRange();
    sel.text = str;
	sel.select();
  }
  //MOZILLA/NETSCAPE support
  else if (myField.selectionStart || myField.selectionStart == '0') {
    var startPos = myField.selectionStart;
    var endPos = myField.selectionEnd;
    myField.value = myField.value.substring(0, startPos)
                  + str
                  + myField.value.substring(endPos, myField.value.length);
	myField.setSelectionRange(startPos+str.length,startPos+str.length);	
  }
}


function insertAfterCursor(str,myField /*myField parameter not required for internet explorer*/) {
  //IE support
  if (ie) {	
    sel = document.selection.createRange();
	sel2 = document.selection.createRange();
    sel.text = str;
	sel2.select();	
  }
  //MOZILLA/NETSCAPE support
  else if (myField.selectionStart || myField.selectionStart == '0') {
    var startPos = myField.selectionStart;
    var endPos = myField.selectionEnd;	
    myField.value = myField.value.substring(0, startPos)
                  + str
                  + myField.value.substring(endPos, myField.value.length);	
	myField.setSelectionRange(startPos,startPos);
  }
}

function lineBeforeCursor(myField /*myField parameter not required for internet explorer*/){
	//IE support
	if (ie) {
		var oRange = document.selection.createRange();
		oRange.moveStart('character',-10000000);
		var textBeforeCursor = oRange.text;
		var lastLine = textBeforeCursor.split("\n").pop();		
		return lastLine;
	}
	//MOZILLA/NETSCAPE support
	else if (myField.selectionStart || myField.selectionStart == '0') {		
		var endPos = myField.selectionEnd;
		var textBeforeCursor = myField.value.substring(0,endPos);
		var lastLine = textBeforeCursor.split("\n").pop();
		return lastLine;		
	}
}


function wordBeforeCursor(myField /*myField parameter not required for internet explorer ?? */){
	var text = lineBeforeCursor(myField); // might cause problem if parameter not given?
	text = text.replace(/^.*?(\w*)$/,'$1');
	return text;
}
		
// use: getStringNearCursor(field,-2,3) for hellow|orldwide gets oworl where | is the cursor
function getStringNearCursor(start,end,myField /*myField parameter not required for internet explorer*/){ 
	//IE support
	if (ie) {
		try{ // if there is no focus, this creates problem, so do it inside try-catch
			var oRange=document.selection.createRange();
			oRange.moveStart('character',start);
			oRange.moveEnd('character',end);
			return oRange.text;
		}
		catch(err){
			return '';
		}
	}
	//MOZILLA/NETSCAPE support
	else if (myField.selectionStart || myField.selectionStart == '0'){
		var startPos = myField.selectionStart;
		var endPos = myField.selectionEnd;
		startPos+=start;
		endPos+=end;
		return myField.value.substring(startPos,endPos);
	}
}

// deletes string near cursor between given start end values
// returns deleted text
// ie  start:-2 end:5 will delete 2 chars before and 5 chars after the cursor
// (or the selected text if any)
function deleteStringNearCursor(start,end,myField /*myField parameter not required for internet explorer*/){
	//IE support
	if (ie) {	
		var oRange=document.selection.createRange();
		oRange.moveStart('character',start);
		oRange.moveEnd('character',end);
		//var deletedText = oRange.text;
		oRange.text='';
		//return deletedText;
	}
	//MOZILLA/NETSCAPE support
	else if (myField.selectionStart || myField.selectionStart == '0'){	
		var startPos = myField.selectionStart;
		var endPos = myField.selectionEnd;
		deleteStartPos=startPos+start;
		deleteEndPos=endPos+end;		
		var myField_value = myField.value;
		//var deletedText = myField_value.substring(deleteStartPos,deleteEndPos);
		myField.value=myField_value.substring(0,deleteStartPos)
					 +myField_value.substring(deleteEndPos,myField_value.length);
		myField.setSelectionRange(deleteStartPos,deleteStartPos);
		//return deletedText;// TODO: test
	}
}

		
		

// only ie compatible functions (fix them later!!!)
function moveCursor(chars){
	var oRange=document.selection.createRange();
	oRange.moveEnd('character',chars);
	oRange.moveStart('character',chars);
	oRange.select();
}

// START: used in indenter (both functions not non-ie compatible, fix)
function indentSelectedText(myField /*myField parameter not required for internet explorer*/){
	var oRange=document.selection.createRange(); 
	var text = oRange.text;
	text = tabChar+text.replace(/\r\n/g,"\r\n"+tabChar);
	//get('debug').value = text;
	oRange.text=text;
}

function deindentSelectedText(myField /*myField parameter not required for internet explorer*/){
	var oRange=document.selection.createRange(); 
	var text = oRange.text;
	text = text.replace(/^    /,""); // tabChar
	text = text.replace(/\n    /g,"\n"); // tabChar
	oRange.text=text;
}
// END: used in indenter


// will they work??: 
// only ie compatible functions (fix them later!!!)
		
var cursorPositionObj=null;

function saveCursor(){
	cursorPositionObj=getCursorPositionObj();
}

function loadCursor(){
	loadCursorPositionObj(cursorPositionObj);
}

// focus yoksa hata veriyor!!!
function getCursorPositionObj(myField/*myField parameter not required for internet explorer*/){
	var cursorPositionObj = new Object();
	try{
		var oRange = document.selection.createRange();
		cursorPositionObj.cursorLeft=oRange.offsetLeft;
		cursorPositionObj.cursorTop=oRange.offsetTop;
		cursorPositionObj.body_scrollTop = document.body.scrollTop;
		cursorPositionObj.body_scrollLeft = document.body.scrollLeft;		
	}
	catch(err){
		// when there is no focus on any field, above code gives error.
		// this is a dirty trick to prevent that error:
		cursorPositionObj.cursorLeft=0;
		cursorPositionObj.cursorTop=0;
		cursorPositionObj.body_scrollTop = document.body.scrollTop;
		cursorPositionObj.body_scrollLeft = document.body.scrollLeft;
	}
	return cursorPositionObj;
}


// not ff compatible, fix
function loadCursorPositionObj(cursorPositionObj,myField/*myField parameter not required for internet explorer*/){
	var range = document.selection.createRange();
	body_scrollTop = document.body.scrollTop;
	body_scrollLeft = document.body.scrollLeft;
	body_scrollTop_difference=body_scrollTop-cursorPositionObj.body_scrollTop;
	body_scrollLeft_difference=body_scrollLeft-cursorPositionObj.body_scrollLeft;
	range.moveToPoint(cursorPositionObj.cursorLeft-body_scrollLeft_difference,cursorPositionObj.cursorTop-body_scrollTop_difference);
	range.select();
}
		

