// Useful to when you want to save the EziFBIncomingRequest Object in CCArray or CCDictionary.
CCObject* EziFBIncomingRequest::copyWithZone(CCZone *pZone)
{
    CCZone* pNewZone = NULL;
    EziFBIncomingRequest* pCopy = NULL;
    if(pZone && pZone->m_pCopyObject)
    {
        //in case of being called at sub class
        pCopy = (EziFBIncomingRequest*)(pZone->m_pCopyObject);
    }
    else
    {
        pCopy = new EziFBIncomingRequest();
        pNewZone = new CCZone(pCopy);
    }
    
    pCopy->setReceiverID(getReceiverID());
    pCopy->setSender(getSender());
    pCopy->setRequestID(getRequestID());
    pCopy->setMessage(getMessage());
    pCopy->setConsumed(isConsumed());
    pCopy->setDataDictionary(getDataDictionary());
    
    CC_SAFE_DELETE(pNewZone);
    return pCopy;
}
EziFBIncomingRequest* EziFBIncomingRequest::createForRequestID(std::string requestID)
{
    EziFBIncomingRequest* fbRequest = EziFBIncomingRequest::create();
    
    if (fbRequest)
    {
        fbRequest->setRequestID(requestID);
        
        // Build the items from CCUserDefaults
        std::string key = FB_INCOMING_REQUEST_DATA_;
        key.append(requestID);
        
        std::string dataKey = DATA_DICTIONARY_;
        dataKey.append(requestID);
        
        std::string statusKey = REQUEST_CONSUMED_STATUS_;
        statusKey.append(requestID);
        
        std::string requestData = CCUserDefault::sharedUserDefault()->getStringForKey(key.c_str());
        std::string dictionaryString = CCUserDefault::sharedUserDefault()->getStringForKey(dataKey.c_str());
        bool toConsumed = CCUserDefault::sharedUserDefault()->getBoolForKey(statusKey.c_str());
        
        // Mark it as consumed or not.
        fbRequest->setConsumed(toConsumed);
        
        // We need to break Request Data String and Data Dictionary String
        
        std::vector< std::string > requestDataVector    = EziSocialObject::tokenizeStr(requestData.c_str(), ";");
        std::vector< std::string > dataDictionaryVector = EziSocialObject::tokenizeStr(dictionaryString.c_str(), ";");
        
        if (requestData.size()==0)
        {
            // Data is not fetched from the Facebook.
            fbRequest->setDataFetchedFromFacebook(false);
        }
        else
        {
            fbRequest->setDataFetchedFromFacebook(true);
        }
        
        // Save the Request Data
        for (int i=0; i<requestDataVector.size(); i += 2)
        {
            fbRequest->setData(requestDataVector[i], requestDataVector[i+1]);
        }
        
        // Build the Data Dictionary
        if (dataDictionaryVector.size()%2 == 0 && dataDictionaryVector.size() > 0) // It should be of even size.
        {
            CCDictionary *dataDictionary = CCDictionary::create();
            
            for (int j=0; j<dataDictionaryVector.size(); j += 2)
            {
                dataDictionary->setObject(CCString::create(dataDictionaryVector[j+1]), dataDictionaryVector[j]);
            }
            
            fbRequest->setDataDictionary(dataDictionary);
        }
    }
    
    return fbRequest;
}