/*
	
	
	Table of Contents
	-----------------
	Configuration
	
	Functions
	- getPageScroll()
	- getPageSize()
	- pause()
	- getKey()
	- listenKey()
	- showLightbox()
	- hideLightbox()
	- initLightbox()
	- addLoadEvent()
	
	Function Calls
	- addLoadEvent(initLightbox)

*/



//
// Configuration
//

// If you would like to use a custom loading image or close button reference them in the next two lines.
var loadingImage = 'loading.gif';		
var closeButton = 'close.gif';		

//
// getPageScroll()
// Returns array with x,y page scroll values.
// Core code from - quirksmode.org
//
function getPageScroll(){

	var yScroll;

	if (self.pageYOffset) {
		yScroll = self.pageYOffset;
	} else if (document.documentElement && document.documentElement.scrollTop){	 // Explorer 6 Strict
		yScroll = document.documentElement.scrollTop;
	} else if (document.body) {// all other Explorers
		yScroll = document.body.scrollTop;
	}

	arrayPageScroll = new Array('',yScroll) 
	return arrayPageScroll;
}



//
// getPageSize()
// Returns array with page width, height and window width, height
// Core code from - quirksmode.org
// Edit for Firefox by pHaez
//
function getPageSize(){
	
	var xScroll, yScroll;
	
	if (window.innerHeight && window.scrollMaxY) {	
		xScroll = document.body.scrollWidth;
		yScroll = window.innerHeight + window.scrollMaxY;
	} else if (document.body.scrollHeight > document.body.offsetHeight){ // all but Explorer Mac
		xScroll = document.body.scrollWidth;
		yScroll = document.body.scrollHeight;
	} else { // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari
		xScroll = document.body.offsetWidth;
		yScroll = document.body.offsetHeight;
	}
	
	var windowWidth, windowHeight;
	if (self.innerHeight) {	// all except Explorer
		windowWidth = self.innerWidth;
		windowHeight = self.innerHeight;
	} else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode
		windowWidth = document.documentElement.clientWidth;
		windowHeight = document.documentElement.clientHeight;
	} else if (document.body) { // other Explorers
		windowWidth = document.body.clientWidth;
		windowHeight = document.body.clientHeight;
	}	
	
	// for small pages with total height less then height of the viewport
	if(yScroll < windowHeight){
		pageHeight = windowHeight;
	} else { 
		pageHeight = yScroll;
	}

	// for small pages with total width less then width of the viewport
	if(xScroll < windowWidth){	
		pageWidth = windowWidth;
	} else {
		pageWidth = xScroll;
	}


	arrayPageSize = new Array(pageWidth,pageHeight,windowWidth,windowHeight) 
	return arrayPageSize;
}


//
// pause(numberMillis)
// Pauses code execution for specified time. Uses busy code, not good.
// Code from http://www.faqts.com/knowledge_base/view.phtml/aid/1602
//
function pause(numberMillis) {
	var now = new Date();
	var exitTime = now.getTime() + numberMillis;
	while (true) {
		now = new Date();
		if (now.getTime() > exitTime)
			return;
	}
}

//
// getKey(key)
// Gets keycode. If 'x' is pressed then it hides the lightbox.
//

function getKey(e){
	if (e == null) { // ie
		keycode = event.keyCode;
	} else { // mozilla
		keycode = e.which;
	}
	key = String.fromCharCode(keycode).toLowerCase();
	
	if(key == 'x'){ hideLightbox(); }
}


//
// listenKey()
//
function listenKey () {	document.onkeypress = getKey; }
	

//
// showLightbox()
// Preloads images. Pleaces new image in lightbox then centers and displays.
//
function showLightbox(objLink)
{
	// prep objects
	var objOverlay = document.getElementById('overlay');
	var objLightbox = document.getElementById('lightbox');
	var objCaption = document.getElementById('lightboxCaption');
	var objImage = document.getElementById('lightboxImage');
	var objLoadingImage = document.getElementById('loadingImage');
	var objLightboxDetails = document.getElementById('lightboxDetails');

	
	var arrayPageSize = getPageSize();
	var arrayPageScroll = getPageScroll();

	// center loadingImage if it exists
	if (objLoadingImage) {
		objLoadingImage.style.top = (arrayPageScroll[1] + ((arrayPageSize[3] - 35 - objLoadingImage.height) / 2) + 'px');
		objLoadingImage.style.left = (((arrayPageSize[0] - 20 - objLoadingImage.width) / 2) + 'px');
		objLoadingImage.style.display = 'block';
	}

	// set height of Overlay to take up whole page and show
	objOverlay.style.height = (arrayPageSize[1] + 'px');
	objOverlay.style.display = 'block';

	// preload image
	imgPreload = new Image();

	imgPreload.onload=function(){
		objImage.src = objLink.href;

		// center lightbox and make sure that the top and left values are not negative
		// and the image placed outside the viewport
		var lightboxTop = arrayPageScroll[1] + ((arrayPageSize[3] - 35 - imgPreload.height) / 2);
		var lightboxLeft = ((arrayPageSize[0] - 20 - imgPreload.width) / 2);
		
		objLightbox.style.top = (lightboxTop < 0) ? "0px" : lightboxTop + "px";
		objLightbox.style.left = (lightboxLeft < 0) ? "0px" : lightboxLeft + "px";


		objLightboxDetails.style.width = imgPreload.width + 'px';
		
		if(objLink.getAttribute('title')){
			objCaption.style.display = 'block';
			//objCaption.style.width = imgPreload.width + 'px';
			objCaption.innerHTML = objLink.getAttribute('title');
		} else {
			objCaption.style.display = 'none';
		}
		
		// A small pause between the image loading and displaying is required with IE,
		// this prevents the previous image displaying for a short burst causing flicker.
		if (navigator.appVersion.indexOf("MSIE")!=-1){
			pause(250);
		} 

		if (objLoadingImage) {	objLoadingImage.style.display = 'none'; }
		objLightbox.style.display = 'block';

		// After image is loaded, update the overlay height as the new image might have
		// increased the overall page height.
		arrayPageSize = getPageSize();
		objOverlay.style.height = (arrayPageSize[1] + 'px');
		
		// Check for 'x' keypress
		listenKey();

		return false;
	}

	imgPreload.src = objLink.href;
	
}





//
// hideLightbox()
//
function hideLightbox()
{
	// get objects
	objOverlay = document.getElementById('overlay');
	objLightbox = document.getElementById('lightbox');

	// hide lightbox and overlay
	objOverlay.style.display = 'none';
	objLightbox.style.display = 'none';
	
	// disable keypress listener
	document.onkeypress = '';
}




//
// initLightbox()
// Function runs on window load, going through link tags looking for rel="lightbox".
// These links receive onclick events that enable the lightbox display for their targets.
// The function also inserts html markup at the top of the page which will be used as a
// container for the overlay pattern and the inline image.
//
function initLightbox()
{
	
	if (!document.getElementsByTagName){ return; }
	var anchors = document.getElementsByTagName("a");

	// loop through all anchor tags
	for (var i=0; i<anchors.length; i++){
		var anchor = anchors[i];

		if (anchor.getAttribute("href") && (anchor.getAttribute("rel") == "lightbox")){
			anchor.onclick = function () {showLightbox(this); return false;}
		}
	}

	
	
	var objBody = document.getElementsByTagName("body").item(0);
	
	// create overlay div and hardcode some functional styles (aesthetic styles are in CSS file)
	var objOverlay = document.createElement("div");
	objOverlay.setAttribute('id','overlay');
	objOverlay.onclick = function () {hideLightbox(); return false;}
	objOverlay.style.display = 'none';
	objOverlay.style.position = 'absolute';
	objOverlay.style.top = '0';
	objOverlay.style.left = '0';
	objOverlay.style.zIndex = '90';
 	objOverlay.style.width = '100%';
	objBody.insertBefore(objOverlay, objBody.firstChild);
	
	var arrayPageSize = getPageSize();
	var arrayPageScroll = getPageScroll();

	// preload and create loader image
	var imgPreloader = new Image();
	
	// if loader image found, create link to hide lightbox and create loadingimage
	imgPreloader.onload=function(){

		var objLoadingImageLink = document.createElement("a");
		objLoadingImageLink.setAttribute('href','#');
		objLoadingImageLink.onclick = function () {hideLightbox(); return false;}
		objOverlay.appendChild(objLoadingImageLink);
		
		var objLoadingImage = document.createElement("img");
		objLoadingImage.src = loadingImage;
		objLoadingImage.setAttribute('id','loadingImage');
		objLoadingImage.style.position = 'absolute';
		objLoadingImage.style.zIndex = '150';
		objLoadingImageLink.appendChild(objLoadingImage);

		imgPreloader.onload=function(){};	//	clear onLoad, as IE will flip out w/animated gifs

		return false;
	}

	imgPreloader.src = loadingImage;

	// create lightbox div, same note about styles as above
	var objLightbox = document.createElement("div");
	objLightbox.setAttribute('id','lightbox');
	objLightbox.style.display = 'none';
	objLightbox.style.position = 'absolute';
	objLightbox.style.zIndex = '22';	
	objBody.insertBefore(objLightbox, objOverlay.nextSibling);
	
	// create link
	var objLink = document.createElement("a");
	objLink.setAttribute('href','#');
	objLink.setAttribute('title','Click to close');
	objLink.onclick = function () {hideLightbox(); return false;}
	objLightbox.appendChild(objLink);

	// preload and create close button image
	var imgPreloadCloseButton = new Image();

	// if close button image found, 
	imgPreloadCloseButton.onload=function(){

		var objCloseButton = document.createElement("img");
		objCloseButton.src = closeButton;
		objCloseButton.setAttribute('id','closeButton');
		objCloseButton.style.position = 'absolute';
		objCloseButton.style.zIndex = '200';
		objLink.appendChild(objCloseButton);

		return false;
	}

	imgPreloadCloseButton.src = closeButton;

	// create image
	var objImage = document.createElement("img");
	objImage.setAttribute('id','lightboxImage');
	objLink.appendChild(objImage);
	
	// create details div, a container for the caption and keyboard message
	var objLightboxDetails = document.createElement("div");
	objLightboxDetails.setAttribute('id','lightboxDetails');
	objLightbox.appendChild(objLightboxDetails);

	// create caption
	var objCaption = document.createElement("div");
	objCaption.setAttribute('id','lightboxCaption');
	objCaption.style.display = 'none';
	objLightboxDetails.appendChild(objCaption);

	// create keyboard message
	var objKeyboardMsg = document.createElement("div");
	objKeyboardMsg.setAttribute('id','keyboardMsg');
	objKeyboardMsg.innerHTML = 'press <kbd>x</kbd> to close';
	objLightboxDetails.appendChild(objKeyboardMsg);


}





function addLoadEvent(func)
{	
	var oldonload = window.onload;
	if (typeof window.onload != 'function'){
    	window.onload = func;
	} else {
		window.onload = function(){
		oldonload();
		func();
		}
	}

}



addLoadEvent(initLightbox);	// run initLightbox onLoad

function textCounter(field,counter,maxlimit,linecounter) {
	// text width//
	var fieldWidth =  parseInt(field.offsetWidth);
	var charcnt = field.value.length;        

	// trim the extra text
	if (charcnt > maxlimit) { 
		field.value = field.value.substring(0, maxlimit);
	}

	else { 
	// progress bar percentage
	var percentage = parseInt(100 - (( maxlimit - charcnt) * 100)/maxlimit) ;
	document.getElementById(counter).style.width =  parseInt((fieldWidth*percentage)/100)+"px";
	document.getElementById(counter).innerHTML="Limit: "+percentage+"%"
	// color correction on style from CCFFF -> CC0000
	setcolor(document.getElementById(counter),percentage,"background-color");
	}
}

function setcolor(obj,percentage,prop){
	obj.style[prop] = "rgb(80%,"+(100-percentage)+"%,"+(100-percentage)+"%)";
}



function textCountersub(field,counter,maxlimit,linecounter) {
	// text width//
	var fieldWidth =  parseInt(field.offsetWidth);
	var charcnt = field.value.length;        

	// trim the extra text
	if (charcnt > maxlimit) { 
		field.value = field.value.substring(0, maxlimit);
	}

	else { 
	// progress bar percentage
	var percentage = parseInt(100 - (( maxlimit - charcnt) * 100)/maxlimit) ;
	document.getElementById(counter).style.width =  parseInt((fieldWidth*percentage)/100)+"px";
	document.getElementById(counter).innerHTML="Limit: "+percentage+"%"
	// color correction on style from CCFFF -> CC0000
	setcolor(document.getElementById(counter),percentage,"background-color");
	}
}

function setcolor(obj,percentage,prop){
	obj.style[prop] = "rgb(80%,"+(100-percentage)+"%,"+(100-percentage)+"%)";
}

function textCountertitulo(field,counter,maxlimit,linecounter) {
	// text width//
	var fieldWidth =  parseInt(field.offsetWidth);
	var charcnt = field.value.length;        

	// trim the extra text
	if (charcnt > maxlimit) { 
		field.value = field.value.substring(0, maxlimit);
	}

	else { 
	// progress bar percentage
	var percentage = parseInt(100 - (( maxlimit - charcnt) * 100)/maxlimit) ;
	document.getElementById(counter).style.width =  parseInt((fieldWidth*percentage)/100)+"px";
	document.getElementById(counter).innerHTML="Limit: "+percentage+"%"
	// color correction on style from CCFFF -> CC0000
	setcolor(document.getElementById(counter),percentage,"background-color");
	}
}

function setcolor(obj,percentage,prop){
	obj.style[prop] = "rgb(80%,"+(100-percentage)+"%,"+(100-percentage)+"%)";
}


//-------------------------------------------------------------------------------------------------------------------------editar form----------------------------------------------------------------------------------------------------------------------
// <![CDATA[
 var form_name = 'frmimage';
 var text_name = 'maxcharfield';
 var load_draft = false;
 var upload = false;

 // Define the bbCode tags
 var bbcode = new Array();
 var bbtags = new Array('<b>','</b>','<i>','</i>','<u>','</u>','<quote>','</quote>','<code>','</code>','<list>','</list>','<list=>','</list>','<img>','</img>','<a href=http://url>URL texto','</a>','<flash=>', '</flash>','<size=>','</size>');
 var imageTag = false;
 
 // Helpline messages
 var help_line = {
 b: 'Texto en negrita: <b>texto</b> (alt+b)',
 i: 'Texto Itálica: <i>texto</i> (alt+i)',
 u: 'Texto subrayado: <u>texto</u> (alt+u)',
 q: 'Citar texto: <quote>texto</quote> (alt+q)',
 c: 'Mostrar código: <code>código</code> (alt+c)',
 l: 'Lista: <list>texto</list> (alt+l)',
 o: 'Lista ordenada: <list=>texto</list> (alt+o)',
 p: 'Inserta imagen: <img>http://imagen_url</img> (alt+p)',
 w: 'Insertar URL:  <a href=http://url>URL texto</a> (alt+w)',
 a: 'Insertar adjunto: <attachment=>filename.ext</attachment>',
 s: 'Color de fuente: <color=red>texto</color> Tip: puede usar código de color=#FF0000',
 f: 'Tamaño de fuente: <size=x-small>texto pequeño</size>',
 e: 'Lista: Añadir elemento a la lista',
 d: 'Flash: <flash=width,height>http://url</flash> (alt+d)'
 }

 var panels = new Array('options-panel', 'attach-panel', 'poll-panel');
 var show_panel = 'options-panel';


// ]]>


// Startup variables
var imageTag = false;
var theSelection = false;

// Check for Browser & Platform for PC & IE specific bits
// More details from: http://www.mozilla.org/docs/web-developer/sniffer/browser_type.html
var clientPC = navigator.userAgent.toLowerCase(); // Get client info
var clientVer = parseInt(navigator.appVersion); // Get browser version

var is_ie = ((clientPC.indexOf('msie') != -1) && (clientPC.indexOf('opera') == -1));
var is_win = ((clientPC.indexOf('win') != -1) || (clientPC.indexOf('16bit') != -1));

var baseHeight;
onload_functions.push('initInsertions()');

/**
* Shows the help messages in the helpline window
*/
function helpline(help)
{
 document.forms[form_name].helpbox.value = help_line[help];
}

/**
* Fix a bug involving the TextRange object. From
* http://www.frostjedi.com/terra/scripts/demo/caretBug.html
*/
function initInsertions()
{
 var doc;

 if (document.forms[form_name])
 {
 doc = document;
 }
 else
 {
 doc = opener.document;
 }

 var textarea = doc.forms[form_name].elements[text_name];

 if (is_ie && typeof(baseHeight) != 'number')
 {
 textarea.focus();
 baseHeight = doc.selection.createRange().duplicate().boundingHeight;

 if (!document.forms[form_name])
 {
 document.body.focus();
 }
 }
}

/**
* bbstyle
*/
function bbstyle(bbnumber)
{
 if (bbnumber != -1)
 {
 bbfontstyle(bbtags[bbnumber], bbtags[bbnumber+1]);
 }
 else
 {
 insert_text('[*]');
 document.forms[form_name].elements[text_name].focus();
 }
}

/**
* Apply bbcodes
*/
function bbfontstyle(bbopen, bbclose)
{
 theSelection = false;

 var textarea = document.forms[form_name].elements[text_name];

 textarea.focus();

 if ((clientVer >= 4) && is_ie && is_win)
 {
 // Get text selection
 theSelection = document.selection.createRange().text;

 if (theSelection)
 {
 // Add tags around selection
 document.selection.createRange().text = bbopen + theSelection + bbclose;
 document.forms[form_name].elements[text_name].focus();
 theSelection = '';
 return;
 }
 }
 else if (document.forms[form_name].elements[text_name].selectionEnd && (document.forms[form_name].elements[text_name].selectionEnd - document.forms[form_name].elements[text_name].selectionStart > 0))
 {
 mozWrap(document.forms[form_name].elements[text_name], bbopen, bbclose);
 document.forms[form_name].elements[text_name].focus();
 theSelection = '';
 return;
 }

 //The new position for the cursor after adding the bbcode
 var caret_pos = getCaretPosition(textarea).start;
 var new_pos = caret_pos + bbopen.length;

 // Open tag
 insert_text(bbopen + bbclose);

 // Center the cursor when we don't have a selection
 // Gecko and proper browsers
 if (!isNaN(textarea.selectionStart))
 {
 textarea.selectionStart = new_pos;
 textarea.selectionEnd = new_pos;
 }
 // IE
 else if (document.selection)
 {
 var range = textarea.createTextRange();
 range.move("character", new_pos);
 range.select();
 storeCaret(textarea);
 }

textarea.focus();
 return;
}

/**
* Insert text at position
*/
function insert_text(text, spaces, popup)
{
 var textarea;

 if (!popup)
 {
 textarea = document.forms[form_name].elements[text_name];
 }
 else
 {
 textarea = opener.document.forms[form_name].elements[text_name];
 }
 if (spaces)
 {
 text = ' ' + text + ' ';
 }

 if (!isNaN(textarea.selectionStart))
 {
 var sel_start = textarea.selectionStart;
 var sel_end = textarea.selectionEnd;

 mozWrap(textarea, text, '')
 textarea.selectionStart = sel_start + text.length;
 textarea.selectionEnd = sel_end + text.length;
 }
 else if (textarea.createTextRange && textarea.caretPos)
 {
 if (baseHeight != textarea.caretPos.boundingHeight)
 {
 textarea.focus();
 storeCaret(textarea);
 }

 var caret_pos = textarea.caretPos;
 caret_pos.text = caret_pos.text.charAt(caret_pos.text.length - 1) == ' ' ? caret_pos.text + text + ' ' : caret_pos.text + text;
 }
 else
 {
 textarea.value = textarea.value + text;
 }
 if (!popup)
 {
 textarea.focus();
 }
}

/**
* Add inline attachment at position
*/
function attach_inline(index, filename)
{
 insert_text('[attachment=' + index + ']' + filename + '[/attachment]');
 document.forms[form_name].elements[text_name].focus();
}

/**
* Add quote text to message
*/
function addquote(post_id, username)
{
 var message_name = 'message_' + post_id;
 var theSelection = '';
 var divarea = false;

 if (document.all)
 {
 divarea = document.all[message_name];
 }
 else
 {
 divarea = document.getElementById(message_name);
 }

 // Get text selection - not only the post content :(
 if (window.getSelection)
 {
 theSelection = window.getSelection().toString();
 }
 else if (document.getSelection)
 {
 theSelection = document.getSelection();
 }
 else if (document.selection)
 {
 theSelection = document.selection.createRange().text;
 }

 if (theSelection == '' || typeof theSelection == 'undefined' || theSelection == null)
 {
 if (divarea.innerHTML)
 {
 theSelection = divarea.innerHTML.replace(/<br>/ig, '\n');
 theSelection = theSelection.replace(/<br\/>/ig, '\n');
 theSelection = theSelection.replace(/&lt\;/ig, '<');
 theSelection = theSelection.replace(/&gt\;/ig, '>');
 theSelection = theSelection.replace(/&amp\;/ig, '&');
 theSelection = theSelection.replace(/&nbsp\;/ig, ' ');
 }
 else if (document.all)
 {
 theSelection = divarea.innerText;
 }
 else if (divarea.textContent)
 {
 theSelection = divarea.textContent;
 }
 else if (divarea.firstChild.nodeValue)
 {
 theSelection = divarea.firstChild.nodeValue;
 }
 }

 if (theSelection)
 {
 insert_text('[quote="' + username + '"]' + theSelection + '[/quote]');
 }

 return;
}

/**
* From http://www.massless.org/mozedit/
*/
function mozWrap(txtarea, open, close)
{
 var selLength = txtarea.textLength;
 var selStart = txtarea.selectionStart;
 var selEnd = txtarea.selectionEnd;
 var scrollTop = txtarea.scrollTop;

 if (selEnd == 1 || selEnd == 2)
 {
 selEnd = selLength;
 }

 var s1 = (txtarea.value).substring(0,selStart);
 var s2 = (txtarea.value).substring(selStart, selEnd)
 var s3 = (txtarea.value).substring(selEnd, selLength);

 txtarea.value = s1 + open + s2 + close + s3;
 txtarea.selectionStart = selEnd + open.length + close.length;
 txtarea.selectionEnd = txtarea.selectionStart;
 txtarea.focus();
 txtarea.scrollTop = scrollTop;

 return;
}

/**
* Insert at Caret position. Code from
* http://www.faqts.com/knowledge_base/view.phtml/aid/1052/fid/130
*/
function storeCaret(textEl)
{
 if (textEl.createTextRange)
 {
 textEl.caretPos = document.selection.createRange().duplicate();
 }
}

/**
* Color pallette
*/
function colorPalette(dir, width, height)
{
 var r = 0, g = 0, b = 0;
 var numberList = new Array(6);
 var color = '';

 numberList[0] = '00';
 numberList[1] = '40';
 numberList[2] = '80';
 numberList[3] = 'BF';
 numberList[4] = 'FF';

 document.writeln('<table cellspacing="1" cellpadding="0" border="0">');

 for (r = 0; r < 5; r++)
 {
 if (dir == 'h')
 {
 document.writeln('<tr>');
 }

 for (g = 0; g < 5; g++)
 {
 if (dir == 'v')
 {
 document.writeln('<tr>');
 }

 for (b = 0; b < 5; b++)
 {
 color = String(numberList[r]) + String(numberList[g]) + String(numberList[b]);
 document.write('<td bgcolor="#' + color + '" style="width: ' + width + 'px; height: ' + height + 'px;">');
 document.write('<a href="#" onclick="bbfontstyle(\'[color=#' + color + ']\', \'[/color]\'); return false;"><img src="images/spacer.gif" width="' + width + '" height="' + height + '" alt="#' + color + '" title="#' + color + '" /></a>');
 document.writeln('</td>');
 }

 if (dir == 'v')
 {
 document.writeln('</tr>');
 }
 }

 if (dir == 'h')
 {
 document.writeln('</tr>');
 }
 }
 document.writeln('</table>');
}


/**
* Caret Position object
*/
function caretPosition()
{
 var start = null;
 var end = null;
}


/**
* Get the caret position in an textarea
*/
function getCaretPosition(txtarea)
{
 var caretPos = new caretPosition();

 // simple Gecko/Opera way
 if(txtarea.selectionStart || txtarea.selectionStart == 0)
 {
 caretPos.start = txtarea.selectionStart;
 caretPos.end = txtarea.selectionEnd;
 }
 // dirty and slow IE way
 else if(document.selection)
 {

 // get current selection
 var range = document.selection.createRange();

 // a new selection of the whole textarea
 var range_all = document.body.createTextRange();
 range_all.moveToElementText(txtarea);

 // calculate selection start point by moving beginning of range_all to beginning of range
 var sel_start;
 for (sel_start = 0; range_all.compareEndPoints('StartToStart', range) < 0; sel_start++)
 {
 range_all.moveStart('character', 1);
 }

 txtarea.sel_start = sel_start;

 // we ignore the end value for IE, this is already dirty enough and we don't need it
 caretPos.start = txtarea.sel_start;
 caretPos.end = txtarea.sel_start;
 }

 return caretPos;
}

var gradientshadow={}
gradientshadow.depth=6 //Depth of shadow in pixels
gradientshadow.containers=[]

gradientshadow.create=function(){
var a = document.all ? document.all : document.getElementsByTagName('*')
for (var i = 0;i < a.length;i++) {
	if (a[i].className == "shadow") {
		for (var x=0; x<gradientshadow.depth; x++){
			var newSd = document.createElement("DIV")
			newSd.className = "shadow_inner"
			newSd.id="shadow"+gradientshadow.containers.length+"_"+x //Each shadow DIV has an id of "shadowL_X" (L=index of target element, X=index of shadow (depth) 
			if (a[i].getAttribute("rel"))
				newSd.style.background = a[i].getAttribute("rel")
			else
				newSd.style.background = "black" //default shadow color if none specified
			document.body.appendChild(newSd)
		}
	gradientshadow.containers[gradientshadow.containers.length]=a[i]
	}
}
gradientshadow.position()
window.onresize=function(){
	gradientshadow.position()
}
}

gradientshadow.position=function(){
if (gradientshadow.containers.length>0){
	for (var i=0; i<gradientshadow.containers.length; i++){
		for (var x=0; x<gradientshadow.depth; x++){
  		var shadowdiv=document.getElementById("shadow"+i+"_"+x)
			shadowdiv.style.width = gradientshadow.containers[i].offsetWidth + "px"
			shadowdiv.style.height = gradientshadow.containers[i].offsetHeight + "px"
			shadowdiv.style.left = gradientshadow.containers[i].offsetLeft + x + "px"
			shadowdiv.style.top = gradientshadow.containers[i].offsetTop + x + "px"
		}
	}
}
}

if (window.addEventListener)
window.addEventListener("load", gradientshadow.create, false)
else if (window.attachEvent)
window.attachEvent("onload", gradientshadow.create)
else if (document.getElementById)
window.onload=gradientshadow.create