//<script type="text/javascript" src="http://veds/ss/template/ver1-0/js/fckeditor/editor/js/fckeditorcode_gecko.js"></script>

var QuoteParser = function(instance){
	this.instance = instance; //editorin instanssi talteen jatkoa varten

	this.AttachEvents(); //asetetaan eventin käsittelijät näppäimistön painalluksia varten
}

QuoteParser.prototype.LoadScript = function(url) {
	document.write( '<scr' + 'ipt type="text/javascript" src="' + url + '"><\/scr' + 'ipt>' ) ;
}

QuoteParser.prototype.AttachEvents = function(){
	this.instance.Events.AttachEvent('OnAfterSetHTML',this.HtmlSet);
	this.instance.Events.AttachEvent('OnSelectionChange',this.UpdateToolbarStatus);
	this.SetKeyPressed(this.instance);
}

QuoteParser.prototype.HtmlSet = function(instance){
	//Asettaa käsittelijät näppäimitön painalluksille kun editori on luotu
	if(instance && instance.EditorDocument){
		var win = instance.EditorDocument;
		if(win.addEventListener)
			win.addEventListener('keypress',keyPressed,false);
		else
			win.attachEvent('onkeypress',keyPressed);
	}
}

QuoteParser.prototype.UpdateToolbarStatus = function(instance){
	//Päivittää editorin työkalupalkin painikkeita kursorin sijainnin mukaan.
	var elem = instance.Selection.GetParentElement();
	if(elem == null)
		elem = instance.EditorDocument.selection.createRange().parentElement();

	var quoteNode = GetQuoteParent(elem);

	if(quoteNode != null){
		var tsName = instance.ToolbarSet.Name;
		var ts = instance.EditorWindow.parent.FCKConfig.ToolbarSets[tsName];

		for(var i=0;i<ts.length;i++){
			if(ts[i] != '/')
				for(var j=0;j<ts[i].length;j++){
					if(ts[i][j] != '-'){
						if(ts[i][j] != 'About') //Ohje näkyy aina aktiivisena
							instance.EditorWindow.parent.FCKToolbarItems.LoadedItems[ts[i][j]].Disable();
					}
				}
		}
	}
}

QuoteParser.prototype.SetKeyPressed = function(instance){
	//Asettaa käsittelijät näppäimistön painalluksille
	if(instance && instance.EditorDocument){
		var win = instance.EditorDocument;
		if(win.addEventListener)
			win.addEventListener('keypress',keyPressed,false);
		else
			win.attachEvent('onkeypress',keyPressed);
	}
}

QuoteParser.prototype.CopyMessage = function(targetFieldId,parserFunction){
	//Kopioi editorin sisällön johonkin formin toiseen kenttään ja tekee tarvittavat
	//html tagien korvaukset.
	var text = this.instance.GetXHTML();

	if(parserFunction)
		parserFunction();

	text = text.replace(/'/g,'&#39;');
	text = text.replace(/<div class="quote">/g,'[quote]').replace(/<\/div>/g,'[/quote]');
	text = text.replace(/<br>/g,'[br]').replace(/<br \/>/,'[br /]');
	text = text.replace(/<p>/g,'[p]').replace(/<\/p>/g,'[/p]');
	text = text.replace(/<b>/g,'[b]').replace(/<\/b>/g,'[/b]');
	text = text.replace(/<strong>/g,'[b]').replace(/<\/strong>/g,'[/b]');
	text = text.replace(/<i>/g,'[i]').replace(/<\/i>/g,'[/i]');
	text = text.replace(/<em>/g,'[i]').replace(/<\/em>/g,'[/i]');
	text = text.replace(/<u>/g,'[u]').replace(/<\/u>/g,'[/u]');
	text = text.replace(/&lt;span(.*?)&gt;/g, '').replace(/&lt;\/span[^&]*&gt;/g, '');
	text = text.replace(/<a href([^>]*)>/g,'[a href$1 rel="nofollow" target="_blank"]').replace(/<a target([^>]*)>/g,'[a target$1]').replace(/<\/a>/g,'[/a]');
	text = text.replace(/<img alt([^>]*)>/g,'[img alt$1]');
	text = text.replace(/<img src([^>]*)>/g,'[img src$1]');

	document.getElementById(targetFieldId).value = text;
}

QuoteParser.prototype.PreviewBlog = function(targetDivId){
	var div = document.getElementById(targetDivId);

	div.style.visibility='visible';
	div.style.display = 'block';

	var text = '<div align="right"><span>Esikatselu</span><a style="cursor:pointer;margin-right:10px;padding-top:5px;" onclick="javascript:var div = document.getElementById(\'' + targetDivId + '\'); div.style.visibility=\'hidden\'; div.style.display=\'none\';">Sulje esikatselu</a></div>';
	text = text + '<div id="blogcontent_comment">';
	text = text + '<div class="post_comment">';
	text = text + '<div class="blogbodyContainer_comment">';
	text = text + '<div class="header_comment">';
	text = text + '<div class="body_comment">';
	text = text + '<div class="message_comment">';
	text = text + this.instance.GetXHTML();
	text = text + '</div>';
	text = text + '</div>';
	text = text + '</div>';
	text = text + '</div>';
	text = text + '</div>';
	text = text + '</div>';


	div.innerHTML = text;
}

QuoteParser.prototype.PreviewForum = function(targetDivId,fullLength){
	var div = document.getElementById(targetDivId);

	div.style.visibility='visible';
	div.style.display = 'block';

	var text = '<div align="right"><span>Esikatselu</span><a style="cursor:pointer;margin-right:10px;" onclick="javascript:var div = document.getElementById(\'' + targetDivId + '\'); div.style.visibility=\'hidden\'; div.style.display=\'none\';">Sulje esikatselu</a></div>';
	text = text + '<div class="post">';
	text = text + '<div class="bodyContainer">';
	text = text + '<div class="body">';
	text = text + '<div class="message">';
	text = text + this.instance.GetXHTML();
	text = text + '</div>';
	text = text + '</div>';
	text = text + '</div>';
	text = text + '</div>';

	div.innerHTML = text;
}

function getScrollXY() {
  var scrOfX = 0, scrOfY = 0;
  if( typeof( window.pageYOffset ) == 'number' ) {
    //Netscape compliant
    scrOfY = window.pageYOffset;
    scrOfX = window.pageXOffset;
  } else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) {
    //DOM compliant
    scrOfY = document.body.scrollTop;
    scrOfX = document.body.scrollLeft;
  } else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) ) {
    //IE6 standards compliant mode
    scrOfY = document.documentElement.scrollTop;
    scrOfX = document.documentElement.scrollLeft;
  }
  return [ scrOfX, scrOfY ];
}

function GetWindowSize() {
  var myWidth = 0, myHeight = 0;
  if( typeof( window.innerWidth ) == 'number' ) {
    //Non-IE
    myWidth = window.innerWidth;
    myHeight = window.innerHeight;
  } else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
    //IE 6+ in 'standards compliant mode'
    myWidth = document.documentElement.clientWidth;
    myHeight = document.documentElement.clientHeight;
  } else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
    //IE 4 compatible
    myWidth = document.body.clientWidth;
    myHeight = document.body.clientHeight;
  }
  return [ myWidth, myHeight ];
}

function GetQuoteParent(node){
	//Etsi tämän hetkisen noden parenteista quote-tyyppistä luokkaa
	var nd = node;
	while(nd != null){
		if(nd.className == "quote")
			return nd;
		nd = nd.parentNode;
	}
	return null;
}

function keyPressed(obj){
	//Näppäimen painalluksen käsittelijä
	var keyCode;
	var shiftPressed;
	var ctrlPressed;
	var altPressed;
	var allowedKeys = new Array(8,46,37,38,39,40); //Sallitut näppäinkoodit quote:n sisällä

	keyCode = (obj.keyCode) ? obj.keyCode : obj.which; //Painettu näppäin
	//Delete fix for Safari
	if(obj.keyIdentifier && obj.keyIdentifier == 'U+007F')
		keyCode = 46;

	var evt = (obj) ? obj : event;

	if (navigator.appName=="Netscape" && parseInt(navigator.appVersion)==4) {
	   // NETSCAPE 4 CODE
	   var mString =(obj.modifiers+32).toString(2).substring(3,6);
	   shiftPressed=(mString.charAt(0)=="1");
	   ctrlPressed =(mString.charAt(1)=="1");
	   altPressed  =(mString.charAt(2)=="1");
	  }
	else {
	   // NEWER BROWSERS [CROSS-PLATFORM]
	   shiftPressed = evt.shiftKey;
	   altPressed  = evt.altKey;
	   ctrlPressed = evt.ctrlKey;
	}

	var oEditor = qParser.instance;
	//var oEditor = FCKeditorAPI.GetInstance('editor1');

	var elem = oEditor.Selection.GetParentElement();
	if(elem == null)
		elem = oEditor.EditorDocument.selection.createRange().parentElement();

	var quoteNode = GetQuoteParent(elem);

	//Tutkitaan onko painettu näppäin sallittujen listalla tämän hetkisen kursorin sijainnin kohdalla.
	if(quoteNode != null){
		var allowed = false;
		for(var i=0;i<allowedKeys.length;i++){
			if(allowedKeys[i] == keyCode && shiftPressed == false && ctrlPressed == false && altPressed == false){
				allowed = true;
				break;
			}
		}

		if(allowed == false){
			//Jos näppäin ei ole sallittu, poistetaan näppäimen painallus suoritusjonosta.
			if(keyCode != 13)
				if(obj.preventDefault)
					obj.preventDefault();
				else
					obj.returnValue = false;
			else{
				//Näppäin on enter
				var replacement = "";
				var node = null;
				var quoteCount = 0;

				node = elem;

				var writers = new Array();
				//Lasketaan montako sisäkkäistä lainausta kursorin kohdalla on.
				//Kerätään myös lainausten alkuperäiset kirjoittajat listaan.
				while(node != undefined){
					if(node.nodeName == 'DIV'){
						if(node.className == 'quote'){
							quoteCount = quoteCount + 1;

							var ndValue = GetNodeValue(node);
							//alert(ndValue);
							if(ndValue != null){
								var wStart = RegexpLastIndex(ndValue,/\([^)]* \d\d.\d\d.\d\d\d\d \d\d:\d\d\)/);
								var wEnd = ndValue.indexOf(")",wStart);
								var writer = ndValue.substring(wStart,wEnd+1);
								//alert(writer);
								writers.push(writer);
							}
							else
								writers.push(null);
						} //If quote
					}//If DIV
					node = node.parentNode;
				} //while

				oEditor.InsertHtml('XXfooReplacementXX'); //Tähän kohtaan korvataan lopullinen teksti.
				var text = oEditor.GetHTML();

				//Jaetaan kaikki lainaukset kursorin kohdalta poikki.
				var start="",end="";
				for(var i=0; i< quoteCount; i++){
					start = start + '</div>';

					end = end + '<div class="quote">';
				}

				replacement = start + "<p>&nbsp;</p>" + end; //Lisätään välilyönti lainausten väliin

				text = text.replace(/XXfooReplacementXX/g,replacement);
				text = text.replace(/<div class="quote"><\/div>/g,"");

				//oEditor.SetHTML(text);
				oEditor.EditorDocument.body.innerHTML = text; //Changed for Opara browser
				if(obj.preventDefault) //Estetään vielä enterin painallusta jatkamasta editorin oletuskäsittelijään
					obj.preventDefault();
				else
					obj.returnValue = false;
			} //allowed == false
		} //quoteNode != null
		//return false;
	}//Inside quote
}

function RegexpLastIndex(strValue,regValue){
	//Laskee regular expression lausekkeen viimeisen esiintymän merkkijonossa.
	var str = strValue;
	var ret = -1;
	var origLen = strValue.length;

	var pos = str.search(regValue);
	if(pos > -1)
		ret = pos;
	while(pos != -1){
		str = str.replace(regValue,"");
		newLen = str.length;
		//alert("new:"+str);
		pos = str.search(regValue);
		if(pos > -1)
			ret = pos + (origLen - newLen);
	}
//alert(ret);
	return ret;
}

function GetNodeValue(node){
	//Palautta parametrina annetun noden arvon.
	//Jos kyseisellä nodella ei ole arvoa, haetaan sitä childNodeilta
	var nd = node;
	var ret1 = "",ret2 = "",ret = "";

		var nodes = nd.childNodes;
		for(var i=0; i< nodes.length; i++){
			if(nodes[i].nodeType == 3){
				ret = ret + nodes[i].nodeValue;
			}
			else if(nodes[i].nodeType == 1){
				if(nodes[i].firstChild)
					ret = ret + nodes[i].firstChild.nodeValue;
				//alert(nodes[i].childNodes.length);
			}
		}

	if(ret1 == "")
		ret1 = null;
	if(ret2 == "")
		ret2 = null;
	if(ret == "")
		ret = null;

	return ret;
}
