/**
 *	Element Functions (because IE6 doesn't allow Element.prototype.function)
 */

var Element = {
	cleanWhitespace : function(e){
		var notWhitespace = /\S/;
			for (var x = 0; x < e.childNodes.length; x++) {
		 	var childNode = e.childNodes[x]
		 	if ((childNode.nodeType == 3)&&(!notWhitespace.test(childNode.nodeValue))) {
		   		e.removeChild(e.childNodes[x])
		   		x--;
		 	}
			if (childNode.nodeType == 1)
				this.cleanWhitespace(childNode);
		}		
	}, 
	fade : function(e){
		var origin = e.style.background;
		var b = 115;
		function f() {
			e.style.background = 'rgb(255,255,'+ (b+=8) +')';
		    if (b < 255) {
		    	timer.add({fn: f, interval: 10});
		    }
		    else e.style.background = origin;
		};
		f();		
	}, 
	addClassName : function(e, className){
	 	this.removeClassName(e, className);
	 	e.className = (e.className + " " + className).trim();		
	}, 
	removeClassName : function(e, className){
		e.className = e.className.replace(className, "").trim();			
	}, 
	hasClass : function(e, className){
		var testClass = new RegExp("(^|\\s)" + className + "(\\s|$)");
		if(testClass.test(e.className)){
			return true;
		}
		return false;
	}, 
	toggle : function(e, value){
		switch(value)
		{
			case 1: 
				e.style.display = 'block';
				break;
			case 0:
				e.style.display = 'none';
				break;
			default:
				if(e.style.display == '' || e.style.display =='block')
					e.style.display = 'none';
				else e.style.display = 'block';
		}
	},
	addEvent : function(e,event, fn){
		if(e.addEventListener)
			e.addEventListener(event, fn, false);
		else if(e.attachEvent){
			var r = e.attachEvent('on'+event, fn);
			return r;
		}
	}
};


String.prototype.trim = function() {
    return this.replace( /^\s+|\s+$/, "" );
}

/**
 *	Helper Functions
 */
var $e = function(e){
	return document.getElementById(e);
}
var $C = function (className, tag, elm){
	classNames = className.split(',');
	var tag = tag || "*";
	var elm = elm || document;
	var elements = (tag == "*" && elm.all)? elm.all : elm.getElementsByTagName(tag);
	var returnElements = [];
	var current;
	var length = elements.length;
	for(var i=0; i<length; i++){
		current = elements[i];
		for(var j=0;j<classNames.length;j++){
			if(Element.hasClass(current,classNames[j]))
				returnElements.push(current);
		}
	}
	return returnElements;
}


function globalTimer(){
  var actions = [];

  function doActions(){
    for(var i=0;i<actions.length;i++){
      var event = actions[i];
      if(event.elapsedTime > event.interval){
        setTimeout(event.fn, 1);
        actions.splice(i,1);
      }
      else{
        event.elapsedTime += 10;
      }
    }
    if(actions.length > 0)
      setTimeout(doActions, 10);
  }
  this.add = addAction;
  function addAction(data){
    data.elapsedTime = 0;
    actions.push(data);
    if(actions.length == 1)
      doActions();
  }
}
var timer = new globalTimer();

function buttonfix() {
    var buttons = document.getElementsByTagName('button');
    for (var i=0; i<buttons.length; i++) {
        buttons[i].onclick = function () {
            for(j=0; j<this.form.elements.length; j++)
                if( this.form.elements[j].tagName == 'BUTTON' )
                    this.form.elements[j].disabled = true;
            this.disabled=false;
        }
    }
}

/**
 *	Ajax Request Object
 */
var Ajax = {
	getObject: function(){
		if(window.XMLHttpRequest)
			return new XMLHttpRequest();
		else if (window.ActiveXObject)
			return new ActiveXObject('Microsoft.XMLHTTP');
		else return null;
	},

	get: function(url, payload, callback){
		var req = Ajax.getObject();
		if(req){
			req.onreadystatechange = function(){
				if(req.readyState == 4)
					callback(req);
			};
			req.open((payload) ? "POST" : "GET", url, true);
			req.send(payload);
		}
	},
	sync: function(url, payload){
		var req = Ajax.getObject();
		if(req){
			req.open((payload) ? "POST" : "GET", url, false);
			req.send(payload);
			return req;
		}
	}
}

/**
 *	Open rel='external' in new window
 */

function externalLinks() {
 if (!document.getElementsByTagName) return;
 var anchors = document.getElementsByTagName("a");
 for (var i=0; i<anchors.length; i++) {
   var anchor = anchors[i];
   if (anchor.getAttribute("href") && anchor.getAttribute("rel") && anchor.getAttribute("rel").search(/external/) != -1)
     anchor.target = "_blank";
 }
}
window.onload = externalLinks;

/**
 *	JSON Parser (run all json through this to be safe)
 */
var JSON = {
	parse: function(text){
		if(text){
	        if (/^[\],:{}\s]*$/.test(text.replace(/\\./g, '@').replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']').replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) {
	            j = eval('(' + text + ')');
	            return j;
	        }
		}
        throw new SyntaxError('parseJSON');
    }
};


/**
 * Text Counter
 */
function textareaObject(){
	var field = '';
	var limit = '';
	var totalField = '';
	this.extend = extend;
	function extend(field, options){
		this.field = $e(field);
		if(options.textLimit){
			this.limit = options.textLimit;
			this.totalField = $e(field + '_text_count');
			var self = this;
			Element.addEvent(this.field,'focus',function(){
        		self.interval = window.setInterval(function(){self.testLength()}, 400);				
			});
			Element.addEvent(this.field,'blur',function(){
				var self = this;
        		clearInterval(this.interval);
			});	
			this.testLength();		
		}
	}
	this.testLength = testLength;
	function testLength(){		
		if(this.field.value.length > this.limit){
			this.field.value = this.field.value.substring(0,this.limit);
			Element.fade(this.totalField);
		}
		this.totalField.innerHTML = this.field.value.length;
	}
}

/**
 * POST object
 */
var post = {
	hash : document.location.hash,
	checkJustRepliedTo : function(){
		var id;
		var e;
		var displayJustReplied = function(r){
			var data = JSON.parse(r.responseText);
			var msg = document.createElement('div');
			if(data)
			{
				msg.innerHTML = "<strong>Your reply has been posted. [<a href='" + data.url + "'>view</a>]</strong>";
				e.insertBefore(msg, e.childNodes[1]);
				Element.fade(msg);
			}
		};
		if(this.hash)
		{
			var pieces = this.hash.split('-');
			if(pieces.length == 2)
			{
				id = pieces[1];
				e = $e('post-' + id);
				if(Element.hasClass(e,'collapsedToolbar'))
				{
					Element.fade(e);
				}
				else
				{
					Element.cleanWhitespace(e);
					var nextChild = e.childNodes[1];
					Ajax.get('/rpc/topic/postJustRepliedTo/?postId=' + id,null, displayJustReplied);
				}
			}
		}
	},
	getReplies : function(e){
		var ul;
		var span;
		var displayReplies = function(r){
			ul.innerHTML = "";
			if(r.responseText){
				var data = JSON.parse(r.responseText);
				for(row in data){
					var link = document.createElement('li');


					link.innerHTML = "<a href='" + data[row].url + "'>" + data[row].name + " - "  + data[row].time + "<span class='preview'>" + data[row].text +"</span></a>";
					ul.appendChild(link);
				}
				e.innerHTML = "Close Replies";
				e.style.display = "";
				e.parentNode.removeChild(span);
				
			}
			else{
				var link = document.createElement('li');
				link.innerHTML = "This post has not been replied to.";
				ul.appendChild(link);
			}
			Element.fade(ul);
		}
		pieces = e.parentNode.parentNode.id.split('-');
		if(pieces.length == 2)
		{
			Element.cleanWhitespace(e.parentNode);
			var id = pieces[1];
			var nextNode = e.nextSibling;
			if(nextNode.tagName == 'UL'){
				e.innerHTML = e.alt;
				e.alt = '';
				e.parentNode.removeChild(nextNode);
			}
			else{
				ul = document.createElement('ul');
				e.parentNode.insertBefore(ul, nextNode);
				
				span = document.createElement('span');
				span.innerHTML = 'Loading Replies...';
				e.parentNode.insertBefore(span, e);
				
				e.alt = e.innerHTML;
				e.style.display = 'none';
				Ajax.get('/rpc/topic/postReplies/?postId=' + id,null, displayReplies);
			}
		}
	},
	report : function(e, value){
		var getResult = function(r){
			if(r.responseText){
				res = JSON.parse(r.responseText);
				if(res.success)
				{
					var updateElem = $C('postScore', 'span', e.parentNode);
					updateElem[0].innerHTML =res.total;
					Element.fade(updateElem[0]);
					post.hide(target, id, res.report);					
				}
			}
		}
		var target = e.parentNode.parentNode;
		var id = target.id.substring(target.id.lastIndexOf('-')+1);
		
		Ajax.get('/rpc/topic/report/?postId=' + id, null, getResult);		
	},
	vote : function(e, value){
		var getResult = function(r){
			if(r.responseText){
				res = JSON.parse(r.responseText);
				if(res.success)
				{
					var updateElem = $C('postScore', 'span', e.parentNode);
					var newNum = parseInt(updateElem[0].innerHTML) + value;
					updateElem[0].innerHTML = newNum;
					if(value == -1)
						post.hide(target, id, res.message);					
				}
				else 
				{
					window.location = res.url;
				}
			}
			return false;
		}
		var target = e.parentNode.parentNode.parentNode;
		var id = target.id.substring(target.id.lastIndexOf('-')+1);
		
		Ajax.get('/rpc/topic/vote/?postId=' + id + '&value=' + value, null, getResult);

	},
	hide : function(post, id, msg){
		if(!Element.hasClass(post,'firstPostWrapper'))
		{		

			Element.addClassName(post,'collapsed');

			var toolbar = document.createElement('div');
			toolbar.innerHTML = msg;
			toolbar.id = "post-" +id;
			toolbar.className = "collapsedToolbar smalltxt";
			post.parentNode.insertBefore(toolbar, post);
			Element.fade(toolbar);

			var els = $C('open', 'span', toolbar);
			for(var i=0;i<els.length;i++){
				els[i].onclick = function(){
					var postId = this.parentNode.id;
					this.parentNode.nextSibling.id = postId;
					Element.removeClassName(this.parentNode.nextSibling,'collapsed');
					this.parentNode.parentNode.removeChild(this.parentNode);
				}
			}

			post.id = post.id + "_collapsed";

		}
	}	
	
};

/**
 * TOPIC object
 */
var topic = {
	currentElement : '',
	vote : function(e, value){
		var getResult = function(r){
			if(r.responseText){
				res = JSON.parse(r.responseText);
				if(res.success)
				{
					if(value > 0){	
						e.className = 'thumbUpVoted';
						var el = $C('thumbDownVoted', 'span', e.parentNode)[0];
						if(el)
							el.className = 'thumbDown';
					}
					else {
						e.className = 'thumbDownVoted';
						var el = $C('thumbUpVoted', 'span', e.parentNode)[0];
						if(el)
							el.className = 'thumbUp';
					}
										
					var updateElem = $C('postScore', 'span', e.parentNode.parentNode);
					var newNum = parseInt(updateElem[0].innerHTML) + value;
					if(newNum >= 0)
						updateElem[0].innerHTML = newNum;					
				
					if(value == -1)
						topic.hide(target, res.message);
				}
				else
				{
					window.location = res.url;
					return false;
				}
			}
		}
		var target = e.parentNode.parentNode.parentNode;
		var id = target.id.substring(target.id.lastIndexOf('-')+1);
		this.currentElement = e;
		Ajax.get('/rpc/topic/vote/?postId=' + id + '&value=' + value, null, getResult);
	},
	hide : function(topic, msg){

		Element.removeClassName(topic.parentNode,'open');
		Element.addClassName(topic.parentNode,'collapsed');
		
		if(!topic.previousSibling || !Element.hasClass(topic.previousSibling, 'toolbar'))
		{
			var toolbar = document.createElement('div');
			toolbar.innerHTML = msg;
			toolbar.className = "toolbar smalltxt";

			topic.parentNode.insertBefore(toolbar, topic);
			
			Element.fade(toolbar);
	
			var els = $C('open', 'span', toolbar);
			for(var i=0;i<els.length;i++){
				els[i].onclick = function(){
					Element.removeClassName(this.parentNode.parentNode,'collapsed');
					this.parentNode.parentNode.removeChild(this.parentNode);
				}
			}				
		}
	}	
};
/**
 *	Topic Page
 */
var topicPage = {
	init : function(){
		//Element.cleanWhitespace($e('mainContent'));
		var elems = $C('replyBoxLink','a');
		for(i=0;i<elems.length;i++){
			elems[i].onclick = function(){
				post.getReplies(this)
			};
		}
        
		var elems = $C('postReply','span');
		for(i=0;i<elems.length;i++)

		{

                    elems[i].onclick = function(){
                        window.location = '/reply/post-' + this.id.substring(10);

                    };

		}

		var elems = $C('reportPost','span');
		for(i=0;i<elems.length;i++){
			elems[i].onclick = function(){
				post.report(this);
				var e  = $C('thumbDown', 'span', this.parentNode)[0];
				if(e)
					e.className = 'thumbDownVoted';
				var e = $C('thumbUpVoted', 'span', this.parentNode)[0];
				if(e)
					e.className = 'thumbUp';
			};
		}
		
		var elems = $C('postVotes');
		for(i=0;i<elems.length;i++){		
			var triggers = $C('thumbDown,thumbDownVoted','span',elems[i]);
			for(j=0;j<triggers.length;j++){
				triggers[j].onclick = function(){
					post.vote(this,-1)
					this.className = 'thumbDownVoted';
					var e = $C('thumbUpVoted', 'span', this.parentNode)[0];
					if(e)
						e.className = 'thumbUp';
				};
			}
			var triggers = $C('thumbUp,thumbUpVoted','span',elems[i]);
			for(j=0;j<triggers.length;j++){
				triggers[j].onclick = function(){
					post.vote(this,1)
					this.className = 'thumbUpVoted';				
					var e = $C('thumbDownVoted', 'span', this.parentNode)[0];
					if(e)
						e.className = 'thumbDown';
				};
			}					
		}
		var elems = $C('popularityBadge');
		for(i=0;i<elems.length;i++){		
			var triggers = $C('thumbDown,thumbDownVoted','span',elems[i]);
			for(j=0;j<triggers.length;j++){
				triggers[j].onclick = function(){
					topicPage.vote(this,-1)
					this.className = 'thumbDownVoted';
					var e = $C('thumbUpVoted', 'span', this.parentNode)[0];
					if(e)
						e.className = 'thumbUp';
				};
			}
			var triggers = $C('thumbUp,thumbUpVoted','span',elems[i]);
			for(j=0;j<triggers.length;j++){
				triggers[j].onclick = function(){
					topicPage.vote(this,1)
					this.className = 'thumbUpVoted';				
					var e = $C('thumbDownVoted', 'span', this.parentNode)[0];
					if(e)
						e.className = 'thumbDown';
				};
			}					
		}		
			
		post.checkJustRepliedTo();

		var els = $C('open', 'span', $e('mainContent'));
		for(var i=0;i<els.length;i++){
			Element.cleanWhitespace(els[i].parentNode.parentNode);
			els[i].onclick = function(){
				var postId = this.parentNode.id;
				this.parentNode.nextSibling.id = postId;
				Element.removeClassName(this.parentNode.nextSibling,'collapsed');
				Element.fade(this.parentNode.nextSibling);
				this.parentNode.parentNode.removeChild(this.parentNode);
			}
		}	

		var els = $C('expandPost', 'span', $e('mainContent'));
		for(var i=0;i<els.length;i++){
			els[i].onclick = function(){
				var parent = this.parentNode.parentNode;
				var body = $C('postBody', 'div', parent)[0];
				if(body){
					body.className = 'expandedPostBody';
				}
			}
		}
		
		var els = $C('removeTagIcon', 'span', $e('myTagsBox'));
		var topicId = $e('topicId').value;
		for(var i=0;i<els.length;i++){
			els[i].onclick = function(e){
				Ajax.get('/rpc/tag/remove/?topicId=' + topicId + '&tagId=' + this.id ,null, topicPage.removeTag);
			}
		}
		
		var el = $e('tagTopicTrigger');
		if(el){
			el.onclick = function(e){
				$e('tagTopic').style.display = 'block';
				$e('tagList').focus();
			}
		}
		
		var el = $e('subscriptionLink');
		if(el)
			el.onclick = function(){
				Ajax.get('/rpc/topic/subscribe/?topicId=' + topicId + '&action=' + this.innerHTML ,null, topicPage.toggleSubscribe);			
			}		
	},
	removeTag : function(r){
		var data = JSON.parse(r.responseText);
		if(data.isSuccessful){
			var e = $e(data.id);
			e.parentNode.parentNode.removeChild(e.parentNode);
		}		
	},
	toggleSubscribe : function(r){
		var data = JSON.parse(r.responseText);
		if(data.success){
			$e('subscriptionLink').innerHTML = data.status;
		}
	},
  vote : function(e, value){
  		var getResult = function(r){
  			if(r.responseText){
  				res = JSON.parse(r.responseText);
  				if(res.success)
  				{
  					if(value > 0){	
  						e.className = 'thumbUpVoted';
  						var el = $C('thumbDownVoted', 'span', e.parentNode)[0];
  						if(el)
  							el.className = 'thumbDown';
  					}
  					else {
  						e.className = 'thumbDownVoted';
  						var el = $C('thumbUpVoted', 'span', e.parentNode)[0];
  						if(el)
  							el.className = 'thumbUp';
  					}
  										
  					var updateElem = $C('postScore', 'span', e.parentNode.parentNode);
  					var newNum = parseInt(updateElem[0].innerHTML) + value;
  					if(newNum >= 0)
  						updateElem[0].innerHTML = newNum;					
  				}
  				else
  				{
  					window.location = res.url;
  					return false;
  				}
  			}
  		}
  		var target = e.parentNode.parentNode.parentNode;
  		var id = target.id.substring(target.id.lastIndexOf('-')+1);
  		this.currentElement = e;
  		Ajax.get('/rpc/topic/vote/?postId=' + id + '&value=' + value, null, getResult);
  	}
}

/**
 *	Topic Grid
 */
var topicGrid = {
	init : function(){
		var els = $C('open', 'span', $e('mainContent'));
		for(var i=0;i<els.length;i++){
			els[i].onclick = function(){
				var p = this.parentNode.parentNode;
				{
					Element.removeClassName(p,'collapsed');					
					var e = $C('item', 'div', p);
					p.removeChild(this.parentNode);
					Element.fade(e[0]);
					
				}
			}
		}
		var elems = $C('thumbDown,thumbDownVoted','span');
		for(i=0;i<elems.length;i++){
			elems[i].onclick = function(){
				topic.vote(this,-1);
			};
		}

		var elems = $C('thumbUp,thumbUpVoted','span');
		for(i=0;i<elems.length;i++)
		{
			elems[i].onclick = function(){
				topic.vote(this,1);
			};
		}

	}
}

/**
 *	Profile Recent Posts
 */
var recentPosts = {
		
	init : function(){
		recentPosts.grid = $e('recentPosts');
		recentPosts.nextLink1 = $e('nextLink1');
		recentPosts.nextLink2 = $e('nextLink2');
		recentPosts.currentPage = 1;
		recentPosts.member = $e('memberId').value;
		if(recentPosts.nextLink1){
			recentPosts.nextLink1.onclick = function(e){
				Ajax.get('/rpc/user/posts/?member=' + recentPosts.member + '&page=' + (parseInt(recentPosts.currentPage, 10) + 1),null, recentPosts.updatePosts);			
			}
		}
		if(recentPosts.nextLink2){
			recentPosts.nextLink2.onclick = function(e){
				Ajax.get('/rpc/user/posts/?member=' + recentPosts.member + '&page=' + (parseInt(recentPosts.currentPage, 10) + 1),null, recentPosts.updatePosts);			
			}
		}	
	},
	updatePosts : function(r){
		var data = JSON.parse(r.responseText);
		if(data.html){
			recentPosts.grid.innerHTML = data.html;
		}
		recentPosts.currentPage = data.currentPage;
		recentPosts.reInit();
	},
	reInit : function(){
		recentPosts.nextLink1 = $e('nextLink1');
		recentPosts.nextLink2 = $e('nextLink2');
		recentPosts.prevLink1 = $e('prevLink1');
		recentPosts.prevLink2 = $e('prevLink2');
		if(recentPosts.nextLink1){
			recentPosts.nextLink1.onclick = function(e){
				Ajax.get('/rpc/user/posts/?member=' + recentPosts.member + '&page=' + (parseInt(recentPosts.currentPage, 10) + 1),null, recentPosts.updatePosts);			
			}
		}
		if(recentPosts.prevLink1){
			recentPosts.prevLink1.onclick = function(e){
				Ajax.get('/rpc/user/posts/?member=' + recentPosts.member + '&page=' + (parseInt(recentPosts.currentPage, 10) - 1),null, recentPosts.updatePosts);			
			}
		}	
		if(recentPosts.nextLink2){
			recentPosts.nextLink2.onclick = function(e){
				Ajax.get('/rpc/user/posts/?member=' + recentPosts.member + '&page=' + (parseInt(recentPosts.currentPage, 10) + 1),null, recentPosts.updatePosts);			
			}
		}
		if(recentPosts.prevLink2){
			recentPosts.prevLink2.onclick = function(e){
				Ajax.get('/rpc/user/posts/?member=' + recentPosts.member + '&page=' + (parseInt(recentPosts.currentPage, 10) - 1),null, recentPosts.updatePosts);			
			}
		}
	}
}
	

/**
 *	Tag Search
 */
var tagSearch = {
	init : function(){
		tagSearch.e = $e('tagSearch');
		tagSearch.resultBox = $e('tagSearchResults');
		tagSearch.original = tagSearch.resultBox.innerHTML;
		tagSearch.e.onkeyup = function(e){
			if(tagSearch.e.value != tagSearch.lastValue){
				tagSearch.lastValue = tagSearch.e.value;
				if(tagSearch.e.value.length > 1)
					Ajax.get('/rpc/tag/search/?s=' + tagSearch.lastValue, null, tagSearch.update);
				else if(tagSearch.e.value.length == 0)
					tagSearch.resultBox.innerHTML = tagSearch.original;				
			}
		}
	}, 
	update : function(r){
		var data = JSON.parse(r.responseText);
		if(data.html){
			tagSearch.resultBox.innerHTML = data.html;
		}
	}
	
}

/**
 *	Tab Strip
 */
var tabStrip = {
	elems : '',
	targets : '',
	i : '',
	current : '',
	init: function(parent){
		var ul = $C('ajaxTabs', null, parent)[0];
		if(ul){		
			tabStrip.elems = ul.getElementsByTagName('li');
			tabStrip.targets = $C('ajaxTabContent', null, parent);
	
			for(tabStrip.i=0;tabStrip.i<tabStrip.elems.length;tabStrip.i++){
				curr = tabStrip.i;	
				if(Element.hasClass(tabStrip.elems[curr],'selected'))
					tabStrip.current = curr;
				tabStrip.elems[curr].onclick = function(value){
		            return function() {
						Element.removeClassName(tabStrip.targets[tabStrip.current],'selected');
						Element.removeClassName(tabStrip.elems[tabStrip.current],'selected');
						
										
						Element.addClassName(tabStrip.targets[value],'selected');
						Element.addClassName(this,'selected');
						
						tabStrip.current = value;
		            }				
				}(curr);		
			}
		}
	}
	
}



/**
 *	copy/paste
 */

function CopyPaste()
{var text='';var is_onmouseup=false;var is_ctrl=false;this.Init=Init;this.ChangeTextInSelection=ChangeTextInSelection;this.EventHandler=EventHandler;function Init(init_text)
{text=init_text;if(window.addEventListener)
{if(window.navigator.userAgent.match('Firefox'))
{switch(window.navigator.userAgent.match(/Firefox\/\d/).toString())
{case'Firefox/1':case'Firefox/2':document.addEventListener('mouseup',this.EventHandler,false);is_onmouseup=true;document.addEventListener('keyup',function(e)
{if(e.which==17)is_ctrl=false;},false);document.addEventListener('keydown',function(e)
{if(e.which==17)is_ctrl=true;if(e.which==67&&is_ctrl==true)EventHandler();},false);break;default:document.getElementsByTagName('body')[0].addEventListener('copy',this.EventHandler,false);}}
else
{document.getElementsByTagName('body')[0].addEventListener('copy',this.EventHandler,false);}}
else
{document.getElementsByTagName('body')[0].attachEvent('oncopy',this.EventHandler);}};function ChangeTextInSelection(text)
{var body_element=document.getElementsByTagName('body')[0];var new_selection_block=document.createElement('div');new_selection_block.style.overflow='hidden';new_selection_block.style.color='#000000';new_selection_block.style.backgroundColor='transparent';new_selection_block.style.textAlign='left';new_selection_block.style.textDecoration='none';new_selection_block.style.border='none';new_selection_block.id='new_selection_block'+Math.random().toString();if(typeof window.getSelection!='undefined')
{var current_selection=window.getSelection();if(current_selection.toString())
{if(typeof current_selection.setBaseAndExtent!='undefined')
{var current_range=current_selection.getRangeAt(0);new_selection_block.style.width=0.1;new_selection_block.style.height=0.1;new_selection_block.appendChild(current_range.cloneContents());var new_text_block=document.createElement('div');new_text_block.innerHTML=text;new_selection_block.appendChild(new_text_block);body_element.appendChild(new_selection_block);current_selection.selectAllChildren(new_selection_block);window.setTimeout(function()
{new_selection_block.parentNode.removeChild(new_selection_block);window.getSelection().setBaseAndExtent(current_range.startContainer,current_range.startOffset,current_range.endContainer,current_range.endOffset);},0);}
else
{var current_text_lower=text.replace(/<.*?>/gi,'');if(current_selection.toString().indexOf(current_text_lower)==-1)
{var new_text_block=document.createElement('div');new_text_block.style.position='fixed';body_element.appendChild(new_text_block);new_selection_block.innerHTML=text;new_text_block.appendChild(new_selection_block);var new_range=document.createRange();new_range.selectNode(new_text_block);current_selection.addRange(new_range);window.setTimeout(function()
{new_text_block.parentNode.removeChild(new_text_block);},(is_onmouseup)?3000:0);}}}}
else
{var range=document.selection.createRange();new_selection_block.style.width=0;new_selection_block.style.height=0;var current_range_text_lower=range.text.toString().toLowerCase();var current_text_lower=text.toLowerCase().replace(/<.*?>/gi,'');if(current_range_text_lower.indexOf(current_text_lower)==-1)
{new_selection_block.innerHTML=range.htmlText+text;}
else
{new_selection_block.innerHTML=range.htmlText}
body_element.appendChild(new_selection_block);var new_text_range=body_element.createTextRange();new_text_range.moveToElementText(new_selection_block);new_text_range.select();window.setTimeout(function()
{new_selection_block.parentNode.removeChild(new_selection_block);if(range.text!='')
{range.select();}},0);}};function EventHandler(e)
{ChangeTextInSelection(text);};}
if(window.attachEvent)
{window.attachEvent('onload',init);}
else if(window.addEventListener)
{window.addEventListener('load',init,false);}
else
{window.onload=init;}
function init()
{var copy_paste=new CopyPaste();var share_url=document.location.href;copy_paste.Init(' <br> <br>  URL: <a href="'+share_url+'" target="_blank_">'+share_url+'</a>',true);}

