//---------------------------------------------------------------------
    void SkeletonSerializer::writeSkeleton(const Skeleton* pSkel, SkeletonVersion ver)
    {
		// Write blend mode
		if ((int)ver > (int)SKELETON_VERSION_1_0)
		{
			writeChunkHeader(SKELETON_BLENDMODE, SSTREAM_OVERHEAD_SIZE + sizeof(unsigned short));
			uint16 blendMode = static_cast<uint16>(pSkel->getBlendMode());
			writeShorts(&blendMode, 1);
		}
		
        // Write each bone
        unsigned short numBones = pSkel->getNumBones();
        unsigned short i;
        for (i = 0; i < numBones; ++i)
        {
            Bone* pBone = pSkel->getBone(i);
            writeBone(pSkel, pBone);
        }
        // Write parents
        for (i = 0; i < numBones; ++i)
        {
            Bone* pBone = pSkel->getBone(i);
            unsigned short handle = pBone->getHandle();
            Bone* pParent = (Bone*)pBone->getParent(); 
            if (pParent != NULL) 
            {
                writeBoneParent(pSkel, handle, pParent->getHandle());             
            }
        }
    }
    //---------------------------------------------------------------------
    void XMLSkeletonSerializer::writeSkeleton(const Skeleton* pSkel)
    {
        TiXmlElement* rootNode = mXMLDoc->RootElement();

        TiXmlElement* bonesElem = 
            rootNode->InsertEndChild(TiXmlElement("bones"))->ToElement();

        unsigned short numBones = pSkel->getNumBones();
		LogManager::getSingleton().logMessage("There are " + StringConverter::toString(numBones) + " bones.");
        unsigned short i;
        for (i = 0; i < numBones; ++i)
        {
			LogManager::getSingleton().logMessage("   Exporting Bone number " + StringConverter::toString(i));
            Bone* pBone = pSkel->getBone(i);
            writeBone(bonesElem, pBone);
        }

        // Write parents
        TiXmlElement* hierElem = 
            rootNode->InsertEndChild(TiXmlElement("bonehierarchy"))->ToElement();
        for (i = 0; i < numBones; ++i)
        {
            Bone* pBone = pSkel->getBone(i);
			String name = pBone->getName() ;

			if ((pBone->getParent())!=NULL) // root bone
            {
                Bone* pParent = (Bone*)pBone->getParent();
                writeBoneParent(hierElem, name, pParent->getName());
            }
        }


    }
 //---------------------------------------------------------------------
 void SkeletonSerializer::writeSkeleton(const Skeleton* pSkel)
 {
     // Write each bone
     unsigned short numBones = pSkel->getNumBones();
     unsigned short i;
     for (i = 0; i < numBones; ++i)
     {
         Bone* pBone = pSkel->getBone(i);
         writeBone(pSkel, pBone);
     }
     // Write parents
     for (i = 0; i < numBones; ++i)
     {
         Bone* pBone = pSkel->getBone(i);
         unsigned short handle = pBone->getHandle();
         Bone* pParent = (Bone*)pBone->getParent(); 
         if (pParent != NULL) 
         {
             writeBoneParent(pSkel, handle, pParent->getHandle());             
         }
     }
 }