function transformMapping(name, value)
	{
	    var easing, dirs = ['X', 'Y', 'Z'], values = {}, parts, baseName;
	    if(isArray(value))
	    {
	        value = value[0];
	        easing = value[1];
	    }
	    else
	    {
	        easing = null;
	    }

	    parts = String(value).split(/\s*,\s*/);
	    baseName = name.indexOf('3') !== -1? name.substr(0, name.length - 2) : name;

	    if(name == 'rotate3d')
	    {
	        if(parts.length == 4)
	        {
	            dirs = [parts[0] == '1'? 'X' : (parts[1] == '1'? 'Y' : 'Z')];
	            parts[0] = parts[3];
	        }
	        else
	        {
	            throw 'invalid rotate 3d value';
	        }
	    }
	    else
	    {
	        switch(parts.length)
	        {
	            // for rotations, a single value is passed as Z-value, while for other transforms it is applied to X and Y
	            case 1:
	                parts = baseName == 'rotate' || baseName == 'rotation'? [null, null, parts[0]] : [parts[0], parts[0], null];
	            break;

	            case 2:
	                parts = [parts[0], parts[1], null];
	            break;
	        }

	    }

	    for(var i = 0; i < dirs.length; i++)
	    {
	        if(parts[i] !== null)
	        {
	            values[baseName + dirs[i]] = easing? [parts[i], easing] : parts[i];
	        }
	    }
	    return values;
	}
split commpound transform values

  scale: 1.2 => scaleX: 1.2, scaleY: 1.2
  rotate3d: 30, 60, 40 => rotateX: 30, rotateY: 60, rotateZ: 40

@param {string} name
@param {string} value
@returns {object}