function isUndefined(v)
{
    var undef;
    return v===undef;
}

/* Name		: trim
** ±â´É		: ¹®ÀÚ¿­¿¡¼­ white space¸¦ Á¦°ÅÇÑ´Ù.
*/

String.prototype.trim = function()
{
	return this.replace(/^\s+|\s+$/g, "");
}

/* Name		: getElementsByClassName
** ±â´É		: ÁÖ¾îÁø array¿¡¼­ classNameÀÌ ÀÏÄ¡ÇÏ´Â elementµéÀ» Ã£¾Æ ¹ÝÈ¯ÇÑ´Ù.
*/
function getElementsByClassName( elArray, className )
{
	var resultArray = new Array();
	var count = 0;
	for ( var i = 0; i < elArray.length; i++ )
	{
		var element = elArray[i];
		if ( element.className == className )
			resultArray[count++] = element;
	}

	return resultArray;
}

// Start of addEvent, removeEvent

/* Name		: addEvent, removeEvent
** written by Dean Edwards, 2005
** with input from Tino Zijdel - crisp@xs4all.nl
** http://dean.edwards.name/weblog/2005/10/add-event/
** http://therealcrisp.xs4all.nl/upload/addEvent_dean.html
*/

var addEvent;
var removeEvent;

if (document.addEventListener)
{
	addEvent = function(element, type, handler)
	{
		element.addEventListener(type, handler, false);
	}

	removeEvent = function(element, type, handler)
	{
		element.removeEventListener(type, handler, false);
	}
}
else
{
	addEvent = function(element, type, handler)
	{
		if (!handler.$$guid) handler.$$guid = addEvent.guid++;
		if (!element.events) element.events = {};
		var handlers = element.events[type];
		if (!handlers)
		{
			handlers = element.events[type] = {};
			if (element['on' + type])
				handlers[0] = element['on' + type];
			element['on' + type] = handleEvent;
		}

		handlers[handler.$$guid] = handler;
	}

	removeEvent = function (element, type, handler)
	{
		if (element.events && element.events[type] && handler.$$guid)
		delete element.events[type][handler.$$guid];
	}
}
addEvent.guid = 1;

function handleEvent(event)
{
	event = event || fixEvent(window.event, this);
	var returnValue = true;
	var handlers = this.events[event.type];

	for (var i in handlers)
	{
		if (!Object.prototype[i])
		{
			this.$$handler = handlers[i];
			if (this.$$handler(event) === false)
				returnValue = false;
		}
	}

	if (this.$$handler)
		this.$$handler = null;

	return returnValue;
}


function fixEvent(event, src)
{
	// add W3C standard property and event methods
	event.currentTarget = src;
	event.preventDefault = fixEvent.preventDefault;
	event.stopPropagation = fixEvent.stopPropagation;
	return event;
}
fixEvent.preventDefault = function()
{
	this.returnValue = false;
}
fixEvent.stopPropagation = function()
{
	this.cancelBubble = true;
}

// This little snippet fixes the problem that the onload attribute on the body-element will overwrite
// previous attached events on the window object for the onload event
if (!window.addEventListener)
{
	document.onreadystatechange = function()
	{
		if (window.onload && window.onload != handleEvent)
		{
			addEvent(window, 'load', window.onload);
			window.onload = handleEvent;
		}
	}
}

// End of addEvent, removeEvent


// Start of popup

// default popup features
var _POPUP_FEATURES = 'width=400, height=300, toolbar=0, status=0';

function rawPopup( url, target, features )
{
	if (isUndefined(features))
		features = _POPUP_FEATURES;
	
	if (isUndefined(target))
	    target = '_blank';

	var openedWindow = window.open(url, target, features);
	openedWindow.focus();
	return openedWindow;
}

function linkPopup( src, features )
{
	return rawPopup(src.getAttribute('href'), src.getAttribute('target') || '_blank', features);
}

// End of popup

// Start of preparePopupLink

/* Name		: preparePopupLink
** ±â´É		: ÀÔ·Â¹ÞÀº className°ú °°Àº classNameÀ» °¡Áö°í hyperlink°¡ ÀÖ´Â	anchor¿¡
**			onclick event ¹ß»ý½Ã popupÃ¢ÀÌ ¶ßµµ·Ï ÇÑ´Ù.
** »ç¿ë¹æ¹ý	: document°¡ parsingµÈ ÈÄ¿¡ prepareLink¸¦ È£ÃâÇÑ´Ù.
*/

function preparePopupLink( className, features )
{
	if ( !document.getElementsByTagName )
		return;
		
	var anchorArray = document.getElementsByTagName("a");

//	var isClassNameNotSet = isUndefined(className) || className == null || className == "";
	var isFeaturesDefined = !isUndefined(features);
	
	for ( var i = 0; i < anchorArray.length; i++ )
	{
		var anchor = anchorArray[i];
//		if ( ( isClassNameNotSet || anchor.className == className )
		if ( anchor.className == className && anchor.getAttribute("href") )
		{
			if ( isFeaturesDefined )
				anchor.features = features;
			addEvent( anchor, "click", preparePopupLink.linkClick );
		}
	}
}
preparePopupLink.linkClick = function(e)
{
	var anchor = e.currentTarget;
	linkPopup( anchor, anchor.features );
	e.preventDefault();
}

// End of prepareLink


/* Name		: insertAfter
** ±â´É		: »õ·Î¿î element¸¦ ÁöÁ¤µÈ element µÚ¿¡ Ãß°¡ ÇÑ´Ù. (ÁöÁ¤µÈ element¿¡ parent°¡ ÀÖ¾î¾ß ÇÑ´Ù.)
** »ç¿ë¹æ¹ý	: 
*/

function insertAfter( newElement, targetElement )
{
	if ( !targetElement.parentNode ) return;
	
	var parent = targetElement.parentNode;
	if ( parent.lastChild == targetElement )
		parent.appendChild(newElement);
	else
		parent.insertBefore( newElement, targetElement.nextSibling );
}

/* Name		: insertBefore
** ±â´É		: »õ·Î¿î element¸¦ ÁöÁ¤µÈ element ¾Õ¿¡ Ãß°¡ ÇÑ´Ù. (ÁöÁ¤µÈ element¿¡ parent°¡ ÀÖ¾î¾ß ÇÑ´Ù.)
** »ç¿ë¹æ¹ý	: 
*/

function insertBefore( newElement, targetElement )
{
	if ( !targetElement.parentNode ) return;
	
	targetElement.parentNode.insertBefore( newElement, targetElement );
}

function imageRollOver( mode, path, image, imageName )
{
	if ( mode == "over" )
	{
		image.src = path + imageName + "_over.gif";
	}
	else
	{
		image.src = path + imageName + ".gif";
	}
}
