/*
    Copyright (C) 2001-2003 KSVG Team
    This file is part of the KDE project

    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Library General Public
    License as published by the Free Software Foundation; either
    version 2 of the License, or (at your option) any later version.

    This library is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    Library General Public License for more details.

    You should have received a copy of the GNU Library General Public License
    along with this library; see the file COPYING.LIB.  If not, write to
    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
    Boston, MA 02110-1301, USA.
*/

#include "SVGEvent.h"
#include "SVGEventImpl.h"

using namespace KSVG;

SVGEvent::SVGEvent() : DOM::Event()
{
	impl = 0;
}

SVGEvent::SVGEvent(const SVGEvent &other) : DOM::Event(other), impl(0)
{
	(*this) = other;
}

SVGEvent &SVGEvent::operator =(const SVGEvent &other)
{
	DOM::Event::operator=(other);

	if(impl == other.impl)
		return *this;

	if(impl)
		impl->deref();

	impl = other.impl;

	if(impl)
		impl->ref();

	return *this;
}

SVGEvent::SVGEvent(SVGEventImpl *other) : DOM::Event()
{
	impl = other;
	if(impl)
		impl->ref();
}

SVGEvent::~SVGEvent()
{
	if(impl)
		impl->deref();
}

SVGEvent::EventId SVGEvent::typeToId(DOM::DOMString type)
{
	if(type == "DOMFocusIn")
		return DOMFOCUSIN_EVENT;
	else if(type == "DOMFocusOut")
		return DOMFOCUSOUT_EVENT;
	else if(type == "DOMActivate")
		return DOMACTIVATE_EVENT;
	else if(type == "click")
		return CLICK_EVENT;
	else if(type == "mousedown")
		return MOUSEDOWN_EVENT;
	else if(type == "mouseup")
		return MOUSEUP_EVENT;
	else if(type == "mouseover")
		return MOUSEOVER_EVENT;
	else if(type == "mousemove")
		return MOUSEMOVE_EVENT;
	else if(type == "mouseout")
		return MOUSEOUT_EVENT;
	else if(type == "DOMSubtreeModified")
		return DOMSUBTREEMODIFIED_EVENT;
	else if(type == "DOMNodeInserted")
		return DOMNODEINSERTED_EVENT;
	else if(type == "DOMNodeRemoved")
		return DOMNODEREMOVED_EVENT;
	else if(type == "DOMNodeRemovedFromDocument")
		return DOMNODEREMOVEDFROMDOCUMENT_EVENT;
	else if(type == "DOMNodeInsertedIntoDocument")
		return DOMNODEINSERTEDINTODOCUMENT_EVENT;
	else if(type == "DOMAttrModified")
		return DOMATTRMODIFIED_EVENT;
	else if(type == "DOMCharacterDataModified")
		return DOMCHARACTERDATAMODIFIED_EVENT;
	else if(type == "load")
		return LOAD_EVENT;
	else if(type == "unload")
		return UNLOAD_EVENT;
	else if(type == "abort")
		return ABORT_EVENT;
	else if(type == "error")
		return ERROR_EVENT;
	else if(type == "resize")
		return RESIZE_EVENT;
	else if(type == "scroll")
		return SCROLL_EVENT;
	else if(type == "zoom")
		return ZOOM_EVENT;
 	else if(type == "keydown")
 		return KEYDOWN_EVENT;	
 	else if(type == "keyup")
 		return KEYUP_EVENT;	
 	else if(type == "keypress")
 		return KEYPRESS_EVENT;	

	return UNKNOWN_EVENT;
}

DOM::DOMString SVGEvent::idToType(EventId id)
{
	switch(id)
	{
		case DOMFOCUSIN_EVENT:
			return "DOMFocusIn";
		case DOMFOCUSOUT_EVENT:
			return "DOMFocusOut";
		case DOMACTIVATE_EVENT:
			return "DOMActivate";
		case CLICK_EVENT:
			return "click";
		case MOUSEDOWN_EVENT:
			return "mousedown";
		case MOUSEUP_EVENT:
			return "mouseup";
		case MOUSEOVER_EVENT:
			return "mouseover";
		case MOUSEMOVE_EVENT:
			return "mousemove";
		case MOUSEOUT_EVENT:
			return "mouseout";
		case DOMSUBTREEMODIFIED_EVENT:
			return "DOMSubtreeModified";
		case DOMNODEINSERTED_EVENT:
			return "DOMNodeInserted";
		case DOMNODEREMOVED_EVENT:
			return "DOMNodeRemoved";
		case DOMNODEREMOVEDFROMDOCUMENT_EVENT:
			return "DOMNodeRemovedFromDocument";
		case DOMNODEINSERTEDINTODOCUMENT_EVENT:
			return "DOMNodeInsertedIntoDocument";
		case DOMATTRMODIFIED_EVENT:
			return "DOMAttrModified";
		case DOMCHARACTERDATAMODIFIED_EVENT:
			return "DOMCharacterDataModified";
		case LOAD_EVENT:
			return "load";
		case UNLOAD_EVENT:
			return "unload";
		case ABORT_EVENT:
			return "abort";
		case ERROR_EVENT:
			return "error";
		case RESIZE_EVENT:
			return "resize";
		case SCROLL_EVENT:
			return "scroll";
		case ZOOM_EVENT:
			return "zoom";
		case KEYDOWN_EVENT:
			return "keydown";
		case KEYUP_EVENT:
			return "keyup";
		case KEYPRESS_EVENT:
			return "keypress";
		default:
			return DOM::DOMString();
			break;
	}
}