/* 
 * Telemetry JS
 *
 * Initial prototype JS functions for sending telemetry events cross domain
 * Requires jquery
 *
 * @author Stylefoundry Ltd <support@stylefoundry.co.uk>
 */

var gameObject = null;
var surveyNum = null;

function sendTelemetryEvent(data) {
    var fullData = new Object();
    fullData.telData = data;
    var sendData = $.toJSON(fullData);
    var args = 'callback=?&key='+telemetryKey+'&data=' + sendData;
    jQuery.getJSON(telemetryUrl,args,
        function(data) {
           if(debug)
             debug.log("Telemetry>sendTelemetryEvent>Success: " + data.success);
        });
    return false;
}

function initiateGame(data)
{
    if(debug)
      debug.log('got initiate game data ' + data);
    var gameData = $.parseJSON(data).gameData;
    panelManager.resetPanels();
    panelManager.setShowUpdates(true);
    $.each(gameData.kills,(function(i,v){
        var tmp = new Object();
        tmp.value = v.slays;
        panelManager.updatePanelItem(tmp,'slain',lowerCaseFirst(v.name));
    }));
    $.each(gameData.achievements,(function(i,v){
        var tmp = new Object();
        tmp.value = v.value;
        panelManager.updatePanelItem(tmp,'achievements',lowerCaseFirst(v.name));
    }));
    $.each(gameData.quests,(function(i,v){
        var tmp = new Object();
        tmp.value = v.value;
        panelManager.updatePanelItem(tmp,'quests',lowerCaseFirst(v.name));
    }));
    $.each(gameData.unlocks,(function(i,v){
        var tmp = new Object();
        tmp.value = v.value;
        tmp.total = v.total;
        panelManager.updatePanelItem(tmp,'unlocks',lowerCaseFirst(v.name));
    }));
    panelManager.setShowUpdates(true);
}

function progressUpdate(data)
{
    var updateData = $.parseJSON(data);
    var panelToUpdate;
    var itemToUpdate;
    var tmp = new Object();
    switch(updateData.updateType)
    {
        case 'achievements':
           panelToUpdate = 'achievements';
           itemToUpdate = updateData.data.name ? updateData.data.name : updateData.data.title;
           tmp.value = updateData.data.gained ? updateData.data.gained : updateData.data.value;
        break;
        case 'kills':
            panelToUpdate = 'slain';
            itemToUpdate = updateData.data.monster ? updateData.data.monster : updateData.data.name;
            tmp.value = updateData.data.slays ? updateData.data.slays : updateData.data.value;
        break;
        case 'quests':
            panelToUpdate = 'quests';
            itemToUpdate = updateData.data.name;
            tmp.value = updateData.data.value;
        break;
        case 'unlocks':
            panelToUpdate = 'unlocks';
            itemToUpdate = updateData.data.title ? updateData.data.title : updateData.data.name;
            tmp.total = updateData.data.total;
            tmp.value = updateData.data.progress;
        break;
    }
    panelManager.updatePanelItem(tmp,panelToUpdate,lowerCaseFirst(itemToUpdate));
}

function showSurvey(number)
{
   surveyNum = number;
   if(debug)
     debug.log('loading survey number ' + surveyNum + ' on url ' +surveys[getSurvey()-1]);
   $("#surveyOverlay").overlay({
        onBeforeLoad: function() { 
            var wrap = this.getContent().find(".contentWrap"); 
            wrap.unload();
            wrap.load(surveys[getSurvey()-1]); 
        },
        api: true
   }).load();
}

function showVideo(url)
{
   $("#videoOverlay").overlay({
        onBeforeLoad: function() { 
            var wrap = this.getContent().find(".contentWrap"); 
            wrap.load(url); 
        },
        api: true
   }).load();
}

function showTweets(url)
{
   $("#tweetsOverlay").overlay({
        onBeforeLoad: function() { 
            var wrap = this.getContent().find(".contentWrap"); 
            wrap.load(url); 
        },
        api: true
   }).load();
}

function showFaqs(url)
{
   $("#faqsOverlay").overlay({
        onBeforeLoad: function() { 
            var wrap = this.getContent().find(".contentWrap"); 
            wrap.load(url); 
        },
        api: true
   }).load();
}

function showBlogs(url)
{
   $("#blogsOverlay").overlay({
        onBeforeLoad: function() { 
            var wrap = this.getContent().find(".contentWrap"); 
            wrap.load(url); 
        },
        api: true
   }).load();
}

function updateSurveyStatus(status) {
  if(debug)
    debug.log('recieved remote update call for survey with status: '+status); 
  if(gameObject)
  try {
     gameObject.surveyComplete();
  }
  catch(err) {
    if(debug)  
      debug.log('error calling surveyComplete function on game object: ' +err);
  }
  $("#surveyOverlay").overlay().close();
}

function getSurvey() {
   return surveyNum;
}

function onGameEmbeded(event) {
   if(debug)
     debug.log('game swf loaded and references as ' + event.ref) 
   gameObject = event.ref;
}

function lowerCaseFirst(text) {
   return text.substr(0, 1).toLowerCase() + text.substr(1);
}
