//
//
//

function enableMscore() {
  //$('options_enable_news_false').click();
  mscoreEnabled = true;
  document.showElementsByClassName('msport');
  setSportsConfirmation(mscore_message);
}

function disableMscore() {
  mscoreEnabled = false;
  document.hideElementsByClassName('msport')
  elem = document.getElementById('options_confirmation_message')
  if (elem.value == mscore_message || elem.value == news_message) {
  	clearConfirmation();
  }
}

function enableNews() {
  $('options_enable_msport_false').click();
  newsEnabled = true;
  document.showElementsByClassName('news');
  setNewsConfirmation(news_message);
}

function disableNews() {
  newsEnabled = false;
  document.hideElementsByClassName('news')
  elem = document.getElementById('options_confirmation_message')
  if (elem.value == mscore_message || elem.value == news_message) {
  	clearConfirmation();
  }
}

function enableSponsor() {
  
  sponsorEnabled = true;

}

function disableSponsor() {
  sponsorEnabled = false;
  
}



function setSportsConfirmation(message) {
	var elem;
	messageBox = document.getElementById('options_confirmation_message');
	if (mscoreEnabled && (messageBox.value == "" || (elem != null && elem.value == news_message))) {
		messageBox.value = message;
	}
}

function setNewsConfirmation(message) {
	messageBox = document.getElementById('options_confirmation_message');
	if (newsEnabled && (messageBox.value == "" || elem.value == mscore_message)) {
		messageBox.value = message;
	}
}

function clearConfirmation() {
	document.getElementById('options_confirmation_message').value = "";
}

function disable(id) {
  document.getElementById(id).disabled=true;
}

function enable(id) {
  document.getElementById(id).disabled=false;
}

document.hideElementsByClassName = function(className) {
  $A(document.getElementsByClassName(className)).each(
    function(e) { Element.hide(e) }
  );
}

document.showElementsByClassName = function(className) {
  $A(document.getElementsByClassName(className)).each(
    function(e) { Element.show(e) }
  );
} 

document.toggleElementsByClassName = function(className) {
  $A(document.getElementsByClassName(className)).each(
    function(e) { Element.toggle(e) }
  );
} 

Object.extend(Form, {
  clear: function(form) {
    Form.getElements(form).each(
      function(element) {
        switch (element.type.toLowerCase()) {
          case 'password':
          case 'text':
            element.value = '';
          case 'checkbox':
          case 'radio':
            element.value = element.value;
          case 'select':
          case 'select-one':
            element.selectedIndex = 0;
        }
      }
    );
  }
});

// Ripped from edge Prototype
var Browser = {
    IE:     !!(window.attachEvent && navigator.userAgent.indexOf('Opera') === -1),
    Opera:  navigator.userAgent.indexOf('Opera') > -1,
    WebKit: navigator.userAgent.indexOf('AppleWebKit/') > -1,
    Gecko:  navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('KHTML') === -1,
    MobileSafari: !!navigator.userAgent.match(/Apple.*Mobile.*Safari/)
  }

/**
* Identical in functionality to counter_observer() except that it does *not* take in to
* account anything besides a max length of 160 and the field's length.
*/
function counter_observer_simple(text_field_dom_id, counter_field_dom_id, check_tag_line)
{
    var updater = function(foo,bar)
        {
          var val  = $(text_field_dom_id).value;
    	  var cval = $('campaign_tag_line');
    	  var corrected_value = val.length;
    	  var tagline_length = 0;
    	  
    	  var _max_msg_len = 160;

    	  // FF somehow screws with \n and \r when POSTing, so we adjust here
    	  if (Browser.Gecko == true)
    	  {
              // Add 1 for every newline
              corrected_value += (val.split("\n").length - 1);
    	  }

    	  if (cval != null && (typeof check_tag_line == "undefined" || check_tag_line)) {
    	  	corrected_value += cval.value.length;
    		tagline_length = cval.value.length;
    	  }
          $(counter_field_dom_id).value = corrected_value + '/' +
            _max_msg_len;

          if( corrected_value > _max_msg_len )
          {
    	  	//$(text_field_dom_id).value = $(text_field_dom_id).value.substr( 0, (client_max_message_length()-tagline_length) );
            $(counter_field_dom_id).style.background = "red";
          }
          else
          {
            $(counter_field_dom_id).style.background = "";
          }
        };

      Event.observe(window, 'load', updater);
      new Form.Element.Observer('client_max_message_length', 0.1, updater);
      new Form.Element.Observer(text_field_dom_id, 0.1, updater);
      if ($('campaign_tag_line') != null)
      	new Form.Element.Observer('campaign_tag_line', 0.1, updater);
      updater(null, null);
}

function counter_observer(text_field_dom_id, counter_field_dom_id, check_tag_line)
{

  var updater = function(foo,bar)
    {
      var val  = $(text_field_dom_id).value;
	  var cval = $('campaign_tag_line');
	  var corrected_value = val.length;
	  var tagline_length = 0;
	  
	  // FF somehow screws with \n and \r when POSTing, so we adjust here
	  if (Browser.Gecko == true)
	  {
          // Add 1 for every newline
          corrected_value += (val.split("\n").length - 1);
	  }
	  
	  if (cval != null && (typeof check_tag_line == "undefined" || check_tag_line)) {
	  	corrected_value += cval.value.length;
		tagline_length = cval.value.length;
	  }
      $(counter_field_dom_id).value = corrected_value + '/' +
        client_max_message_length();

      if( corrected_value > client_max_message_length() )
      {
	  	//$(text_field_dom_id).value = $(text_field_dom_id).value.substr( 0, (client_max_message_length()-tagline_length) );
        $(counter_field_dom_id).style.background = "red";
      }
      else
      {
        $(counter_field_dom_id).style.background = "";
      }
    };

  Event.observe(window, 'load', updater);
  new Form.Element.Observer('client_max_message_length', 0.1, updater);
  new Form.Element.Observer(text_field_dom_id, 0.1, updater);
  if ($('campaign_tag_line') != null)
  	new Form.Element.Observer('campaign_tag_line', 0.1, updater);
  updater(null, null);


}

function fireEvent(element,event){
    if (document.createEventObject){
        // dispatch for IE
        var evt = document.createEventObject();
        return element.fireEvent('on'+event,evt)
    }
    else{
        // dispatch for firefox + others
        var evt = document.createEvent("HTMLEvents");
        evt.initEvent(event, true, true ); // event type,bubbling,cancelable
        return !element.dispatchEvent(evt);
    }
}

var mSnap = {}
mSnap.mClub = {}
mSnap.mClub.Message = {
  initialize: function() {
    counter_observer('message', 'message_len');
  }
}
mSnap.mClub.Wizard = {}
mSnap.mClub.Wizard.Form = {
  initialize: function() {
    counter_observer_simple('options_confirmation_message', 'confirmation_message_len');
    counter_observer_simple('options_exit_message', 'exit_message_len');
  }
}
mSnap.mClub.Members = {
  initialize: function() {
    counter_observer('message', 'message_len');
  },
  refresh: function(id) {
    mSnap.mClub.Members.refresh_basics(id);
    mSnap.mClub.Members.refresh_search(id);
  },
  refresh_basics: function(id) {
    new Ajax.Request('/mclub/members/basics/' + id, {
      asynchronous:true,
      evalScripts:true,
      onLoading:function(request) {
        Element.hide('refresh_basics');
        Element.show('refreshing_basics');
      },
      onComplete: function(request) {
        Element.show('refresh_basics');
        Element.hide('refreshing_basics');
      }
    })
  },
  refresh_search: function(id) {
    new Ajax.Request('/mclub/members/search/' + id, {
      asynchronous:true,
      evalScripts:true,
      onLoading:function(request) {
        Element.hide('refresh_search');
        Element.show('refreshing_search');
      },
      onComplete: function(request) {
        Element.show('refresh_search');
        Element.hide('refreshing_search');
      }
    })
  }
}
mSnap.mClub.Activity = {
  initialize: function(id) {
    new PeriodicalExecuter(function() {
      mSnap.mClub.Activity.refresh(id)
    }, 300);
  },
  refresh: function(id) {
    mSnap.mClub.Activity.refresh_basics(id)
    mSnap.mClub.Activity.refresh_chart("default", id)
  },
  refresh_basics: function(id) {
    new Ajax.Request('/mclub/members/basics/' + id, {
      asynchronous:true,
      evalScripts:true,
      onLoading:function(request) {
        Element.hide('refresh_basics');
        Element.show('refreshing_basics');
      },
      onComplete: function(request) {
        Element.show('refresh_basics');
        Element.hide('refreshing_basics');
      }
    })
  },
  refresh_chart: function(period, id) {
    var url = '/mclub/chart/activity/' + period + '/' + id;

    this.refresh_image('chart', url, {
      onLoading:function(request) {
        Element.hide('refresh_chart');
        Element.show('refreshing_chart');
      },
      onComplete: function(request) {
        Element.show('refresh_chart');
        Element.hide('refreshing_chart');
      }
    })
  },
  refresh_image: function(id, url, options) {
    var now = new Date;
    url = url + "?ts=" + now.getTime();
    options = options || {}
    var onLoading = options.onLoading || Prototype.emptyFunction;
    var onComplete = options.onComplete || Prototype.emptyFunction;

    onLoading();
    var image = new Image;
    image.src = url;
    var tid = setInterval(function() {
      if (image.complete) {
        clearInterval(tid);
        $(id).src = image.src;
        onComplete();
        return true;
      } else {
        return false;
      }
    }, 100);
  }
}

mSnap.mInfo = {}
mSnap.mInfo.Wizard = {}
mSnap.mInfo.Wizard.Form = {
  Promotions: new Array,

  initialize: function() {
    var self = this;
    this.current_promotion = null;

    this.Promotions.clear();
    $A(document.getElementsByClassName('promotion_type')).each(
      function(e) {
        var name = e.id.replace(/minfo_promotion_/, '').replace(/_active/, '');
        self.Promotions.push(name);

        if (self.isPromotionActive(name)) {
          if (self.current_promotion == null) {
            self.current_promotion = name;
            Element.show('minfo_promotion_' + name);
          } else {
            Element.hide('minfo_promotion_' + name);
          }
          Element.show('selector_' + name)
        } else {
          Element.hide('minfo_promotion_' + name);
          Element.hide('selector_' + name)
        }
      }
    );

    $A(document.getElementsByClassName('countable')).each(
      function(e) {
        new Form.Element.Observer(e, 0.1, function(element, value) { self.updateMenuResponse() });
      }
    );
    this.updateMenuResponse();
    this.selectPromotion(null);
  },
  updateMenuResponse: function() {
    var regex = /_menu_label/;
    var count = 0;
    var menu = '';
    var n = 1;
    $A(document.getElementsByClassName('countable')).each(
      function(e) {
        if (e.id == 'options_menu_message') {
          count = e.value.length;
        } else {
          var name = e.id.replace(regex, '_active');
          if ($F(name) == 1) {
            menu += n + '. ' + e.value + "\n";
            n++;
          }
        }
      }
    );
    $('menu_response_count').value = (count + menu.length) + '/'+client_max_message_length();
    $('menu_response').value = menu;
  },
  isPromotionActive: function(name) {
    return ($F('minfo_promotion_' + name + '_active') == 1);
  },
  activatePromotion: function(name) {
    if (this.isPromotionActive(name)) {
      Element.show('selector_' + name);
      if (this.current_promotion == null) {
        this.selectPromotion(name);
      }
    } else {
      Element.hide('selector_' + name);
      if (this.current_promotion == name) {
        this.selectPromotion(null);
      }
    }
    this.updateMenuResponse();
  },
  selectPromotion: function(name) {
    var self = this;

    if (this.current_promotion) {
      Element.hide('minfo_promotion_' + this.current_promotion);
    }

    this.current_promotion = name
    if (name == null) {
      $A(this.Promotions).each(
        function(p) {
          if ((self.current_promotion == null) &&
              (self.isPromotionActive(p))) {
            self.current_promotion = p;
          }
        }
      );
    }

    if (this.current_promotion) {
      Element.show('minfo_promotion_' + this.current_promotion);
    }
  }
}

mSnap.mTalk = {}
mSnap.mTalk.Reply = {
  initialize: function() {
    counter_observer('message', 'message_len');
  }
}
mSnap.mTalk.Activity = {
  initialize: function(id) {
    new PeriodicalExecuter(function() {
      mSnap.mTalk.Activity.refresh(id)
    }, 300);
  },
  refresh: function(id) {
    mSnap.mTalk.Activity.refresh_basics(id)
    mSnap.mTalk.Activity.refresh_chart("default", id)
    mSnap.mTalk.Activity.refresh_messages(id)
  },
  refresh_basics: function(id) {
    new Ajax.Request('/mtalk/activity/basics/' + id, {
      asynchronous:true,
      evalScripts:true,
      onLoading:function(request) {
        Element.hide('refresh_basics');
        Element.show('refreshing_basics');
      },
      onComplete: function(request) {
        Element.show('refresh_basics');
        Element.hide('refreshing_basics');
      }
    })
  },
  refresh_chart: function(period, id) {
    var url = '/mtalk/chart/activity/' + period + '/' + id;

    this.refresh_image('chart', url, {
      onLoading:function(request) {
        Element.hide('refresh_chart');
        Element.show('refreshing_chart');
      },
      onComplete: function(request) {
        Element.show('refresh_chart');
        Element.hide('refreshing_chart');
      }
    })
  },
  refresh_image: function(id, url, options) {
    var now = new Date;
    url = url + "?ts=" + now.getTime();
    options = options || {}
    var onLoading = options.onLoading || Prototype.emptyFunction;
    var onComplete = options.onComplete || Prototype.emptyFunction;

    onLoading();
    var image = new Image;
    image.src = url;
    var tid = setInterval(function() {
      if (image.complete) {
        clearInterval(tid);
        $(id).src = image.src;
        onComplete();
        return true;
      } else {
        return false;
      }
    }, 100);
  },
  refresh_messages: function(id) {
    new Ajax.Updater('activity', '/mtalk/activity/' + id, {asynchronous:true, evalScripts:true, onComplete:function(request){Element.hide("indicator")}, onLoading:function(request){Element.show("indicator")}});
  }
}

mSnap.mTalk.External = {
  initialize: function(id) {
    new PeriodicalExecuter(function() {
      mSnap.mTalk.External.refresh(id)
    }, 60);
    new PeriodicalExecuter(function() {
        new Effect.Highlight('newer_messages',{});
    }, 5);
  },
  hide_refresh: function() {
    mSnap.mTalk.External.hide_refresh_messages();
    mSnap.mTalk.External.hide_refresh_queued();
  },
  show_refresh: function() {
    mSnap.mTalk.External.show_refresh_messages();
    mSnap.mTalk.External.show_refresh_queued();
  },
  hide_refresh_messages: function() {
    Element.hide('refresh_messages');
    Element.show('refreshing_messages');
  },
  show_refresh_messages: function() {
    Element.show('refresh_messages');
    Element.hide('refreshing_messages');
  },
  hide_refresh_queued: function() {
    Element.hide('refresh_queued');
    Element.show('refreshing_queued');
  },
  show_refresh_queued: function() {
    Element.show('refresh_queued');
    Element.hide('refreshing_queued');
  },
  refresh: function(id) {
    mSnap.mTalk.External.refresh_messages(id);
    mSnap.mTalk.External.refresh_queued(id);
  },
  refresh_messages: function(id) {
    new Ajax.Request('/mtalk/externals/messages/' + id, {
      asynchronous:true,
      evalScripts:true,
      onLoading:function(request) {
        Element.hide('refresh_messages');
        Element.show('refreshing_messages');
      },
      onComplete: function(request) {
        Element.show('refresh_messages');
        Element.hide('refreshing_messages');
      }
    })
  },
  refresh_queued: function(id) {
    new Ajax.Request('/mtalk/externals/queued/' + id, {
      asynchronous:true,
      evalScripts:true,
      onLoading:function(request) {
        Element.hide('refresh_queued');
        Element.show('refreshing_queued');
      },
      onComplete: function(request) {
        Element.show('refresh_queued');
        Element.hide('refreshing_queued');
      }
    })
  },
  check: function(form, checked) {
    var elements = Form.getElements(form);
    for (var i = 0; i < elements.length; i++) {
      var element = elements[i];
      element.checked = checked;
      mSnap.mTalk.External.on_check(element.id, checked);
    }
  },
  on_check: function(id, checked) {
    new Ajax.Request('/mtalk/externals/check/' + id + '/' + checked, {
      asynchronous:true,
      evalScripts:true
    })
  }
}
mSnap.mTalk.Wizard = {}
mSnap.mTalk.Wizard.Form = {
  initialize: function(auto_reply) {
    this.setAutoReply(auto_reply);
    counter_observer('options_auto_reply_message', 'auto_reply_message_len');
  },
  setAutoReply: function(auto_reply) {
    if (auto_reply == 'true') {
      document.showElementsByClassName('auto_reply_option');
    } else {
      document.hideElementsByClassName('auto_reply_option');
    }
    return false;
  }
}

mSnap.mVote = {}
mSnap.mVote.Wizard = {}
mSnap.mVote.Wizard.Tabs = {
  initialize: function(tabName) {
    element = $('mvote_tabs');
    $A(document.getElementsByClassName(tabName, element)).each(
      function(e) { Element.addClassName(e, 'active') }
    );
    this.setVoteType(tabName);
  },
  onclick: function(tabName) {
    this.setVoteType(tabName);
    Previewer.updateForDC();
  },
  setVoteType: function(tabName) {
    document.hideElementsByClassName('vote_option');
    document.hideElementsByClassName('quiz_option');
    document.hideElementsByClassName('sweepstakes_option');
    document.showElementsByClassName(tabName + '_option');
    $('options_vote_type').value = tabName;
    if ($('mvote_tabs')) {
      $A(Element.childrenWithClassName('mvote_tabs', 'active')).each(
          function(e) { Element.removeClassName(e, 'active') }
      );
      $A(Element.childrenWithClassName('mvote_tabs', tabName)).each(
        function(e) { Element.addClassName(e, 'active') }
      );
    }
  }
}

function questionLength() {
    var ql = 0;
    if( $('options_response_type_numeric').checked ) {
        //console.log('q numeric');
        ql = questionLengthNumeric();
    } else if( $('options_response_type_alpha').checked ) {
        //console.log('q alpha');
        ql = questionLengthNumeric();
    } else if( $('options_response_type_yesno').checked ) {
        //console.log('q yesno');
        ql = questionLengthYesNo();
    } else {
        // should never happen
        //console.log('it happened');
        ql = $('options_question').value.length;
    }
    
    if ($('campaign_tag_line') != null && $('campaign_tag_line').type != 'hidden')
    {
        // Has tagline
        //console.log('with tagline');
        ql += $('campaign_tag_line').value.length;
    }
    
    return ql;
}

// returns the length of a line break in an sms message
function crlf() {
    return 2;
}

function questionLengthYesNo() {
    if( $('options_question').value.length < 1 ) {
        return 0;
    } else {
        return $('options_question').value.length + crlf() + crlf() + "Yes or No".length + crlf();
    }
}

function getAnswers(){
	
	var answers = [];
	var elts = document.getElementsByTagName('input');
    // foreach answers[]
    for(var i=0, qnum=0; i<elts.length; i++) {
        if ((/^answer[\d]+$/i).test(elts[i].id) && elts[i].value != null & elts[i].value != '')
        {
            answers.push( elts[i] );
        }
        
    }
	
	return answers;
	
}

function questionLengthNumeric() {
    var total_length = 0;

    if( $('options_question').value.length > 0 ) {
        total_length += $('options_question').value.length + crlf() + crlf();
    }

    var elts = document.getElementsByTagName('input');
    // foreach answers[]
    for(var i=0, qnum=0; i<elts.length; i++) {
        if ((/^answer[\d]+$/i).test(elts[i].id) && elts[i].value != null & elts[i].value != '')
        {
            //console.log('answer', elts[i].id, elts[i].value);
            qnum++;
            var answer = "" + qnum + "." + elts[i].value;
            total_length += Math.floor(answer.length) + crlf();
            //console.log('total_length now', total_length);
        }
        
    }

    if( qnum == 0 ) {
        total_length += 0;
    } else if( qnum == 1 ) {
        total_length += "(Reply 1)".length + crlf();
    } else if( qnum == 2 ) {
        total_length += "(Reply 1,2)".length + crlf();
    } else if( qnum == 3 ) {
        total_length += "(Reply 1,2,3)".length + crlf();
    } else {
        total_length += "(Reply 1,2,3...)".length + crlf();
    }

    return total_length;
}

function questionChanged() {
    //console.log(questionLength());
    $('question_length').value = questionLength()+'/'+client_max_message_length();
	
	if( questionLength() > client_max_message_length() )
	    $("question_length").style.backgroundColor = "red";
	else
	    $("question_length").style.backgroundColor = "white";
	
	/*var answers = getAnswers();	
	if( typeof answers == "undefined" ) answers = [];
	for( var i=0; i<answers.length; i++ )
	    answers[i].style.border = ( questionLength() > client_max_message_length() ) ? "solid red 2px" : "";*/
}

mSnap.mVote.Wizard.Form = {
  initialize: function(response_type) {
    this.setResponseType(response_type);
    var qc = function(elt,val) { questionChanged(); };

    Event.observe(window, 'load', qc);
    new Form.Element.Observer('client_max_message_length', 0.1, qc);
    new Form.Element.Observer('options_question', 0.1, qc);
    new Form.Element.Observer('options_response_type_numeric', 0.1, qc);
    new Form.Element.Observer('options_response_type_alpha', 0.1, qc);
    new Form.Element.Observer('options_response_type_yesno', 0.1, qc);

    counter_observer('options_confirmation_message', 'confirmation_message_len');
    counter_observer('options_invalid_message', 'invalid_message_len', false);
	counter_observer('options_incorrect_message', 'incorrect_message_len');
	
	// Fix tagline length
	if ($('campaign_tag_line') != null && $('campaign_tag_line').type != 'hidden')
	{
	    new Form.Element.Observer('campaign_tag_line', 0.1, function(){
    	    questionChanged();
    	});
	}
	
    // This function is dynamically generated in views/mVote/_wizard_create.rhtml
    addEventListenersToAnswers();

    // update the length of the outgoing question
    questionChanged();
  },
  setResponseType: function(response_type) {
    document.hideElementsByClassName('numeric_option');
    document.hideElementsByClassName('alpha_option');
    document.hideElementsByClassName('yesno_option');
    document.showElementsByClassName(response_type + '_option');
    return false;
  },
  addAnswer: function() {
    $('answer').value = 'add';
    $('wizard_form').submit();
    return false;
  },
  removeAnswer: function () {
    $('answer').value = 'remove';
    $('wizard_form').submit();
    return false;
  }
}
mSnap.mVote.Votes = {
  initialize: function(id) {
    new PeriodicalExecuter(function() {
      mSnap.mVote.Votes.refresh(id)
    }, 300);
  },
  refresh: function(id) {
    new Ajax.Request('/mvote/votes/' + id, {
      asynchronous:true,
      evalScripts:true,
      onLoading:function(request) {
        Element.hide('refresh_basics');
        Element.show('refreshing_basics');
        Element.hide('refresh_search');
        Element.show('refreshing_search');
      },
      onComplete: function(request) {
        Element.show('refresh_basics');
        Element.hide('refreshing_basics');
        Element.show('refresh_search');
        Element.hide('refreshing_search');
      }
    })
  }
}

mSnap.mSong = {}
mSnap.mSong.Dashboard = {
  initialize: function(client_id) {
    var self = this;
    Element.show('chart')

    $('current_client').value = client_id;
    new Ajax.Request('/msong/select_client/' + client_id, {
      asynchronous:false,
      evalScripts:true
    });
    new PeriodicalExecuter(function() {
      self.refresh_songs()
    }, 60);
    new PeriodicalExecuter(function() {
      self.refresh_basics()
    }, 300);
    new PeriodicalExecuter(function() {
      self.refresh_reports()
    }, 300);
    new PeriodicalExecuter(function() {
      self.refresh_image('sparkline_monthly', '/msong/sparkline/monthly')
    }, 86400);
    new PeriodicalExecuter(function() {
      self.refresh_image('sparkline_weekly', '/msong/sparkline/weekly')
    }, 86400);
    new PeriodicalExecuter(function() {
      self.refresh_image('sparkline_daily', '/msong/sparkline/daily')
    }, 3600);
    new PeriodicalExecuter(function() {
      self.refresh_image('sparkline_hourly', '/msong/sparkline/hourly')
    }, 300);
  },
  refresh_basics: function() {
    new Ajax.Request('/msong/basics', {
      asynchronous:true,
      evalScripts:true,
      onLoading:function(request) {
        Element.hide('refresh_basics');
        Element.show('refreshing_basics');
      },
      onComplete: function(request) {
        Element.show('refresh_basics');
        Element.hide('refreshing_basics');
      }
    })
  },
  refresh_chart: function(period) {
    var url = '/msong/chart';
    if (period) url = url + '/' + period;

    this.refresh_image('chart', url, {
      onLoading:function(request) {
        Element.hide('refresh_reports');
        Element.show('refreshing_reports');
      },
      onComplete: function(request) {
        Element.show('refresh_reports');
        Element.hide('refreshing_reports');
      }
    })
  },
  refresh_image: function(id, url, options) {
    var now = new Date;
    url = url + "?ts=" + now.getTime();
    options = options || {}
    var onLoading = options.onLoading || Prototype.emptyFunction;
    var onComplete = options.onComplete || Prototype.emptyFunction;

    onLoading();
    var image = new Image;
    image.src = url;
    //Event.observe(image, 'load', function(e){
    //    $('chart').src = image.src;
    //    Element.show('refresh_reports');
    //    Element.hide('refreshing_reports');
    //}, false);
    var tid = setInterval(function() {
      if (image.complete) {
        clearInterval(tid);
        $(id).src = image.src;
        onComplete();
        return true;
      } else {
        return false;
      }
    }, 100);
  },
  refresh_impressions: function(period) {
    var url = '/msong/impressions'
    if (period) url = url + '/' + period;
    new Ajax.Request(url, {
      asynchronous:true,
      evalScripts:true,
      onLoading:function(request) {
        Element.hide('refresh_reports');
        Element.show('refreshing_reports');
      },
      onComplete: function(request) {
        Element.show('refresh_reports');
        Element.hide('refreshing_reports');
      }
    })
  },
  refresh_popsongs: function(period) {
    var url = '/msong/popsongs'
    if (period) url = url + '/' + period;
    new Ajax.Request(url, {
      asynchronous:true,
      evalScripts:true,
      onLoading:function(request) {
        Element.hide('refresh_reports');
        Element.show('refreshing_reports');
      },
      onComplete: function(request) {
        Element.show('refresh_reports');
        Element.hide('refreshing_reports');
      }
    })
  },
  refresh_reports: function() {
    if (Element.visible('chart')) this.refresh_chart();
    if (Element.visible('impressions')) this.refresh_impressions();
    if (Element.visible('popsongs')) this.refresh_popsongs();
  },
  refresh_songs: function() {
    new Ajax.Request('/msong/songs', {
      asynchronous:true,
      evalScripts:true,
      onLoading:function(request) {
        Element.hide('refresh_songs');
        Element.show('refreshing_songs');
      },
      onComplete: function(request) {
        Element.show('refresh_songs');
        Element.hide('refreshing_songs');
      }
    })
  },
  select_chart: function(period) {
    Element.show('chart');
    Element.hide('impressions');
    Element.hide('popsongs');
    this.refresh_chart(period);
  },
  select_impressions: function(period) {
    Element.hide('chart');
    Element.show('impressions');
    Element.hide('popsongs');
    this.refresh_impressions(period);
  },
  select_popsongs: function(period) {
    Element.hide('chart');
    Element.hide('impressions');
    Element.show('popsongs');
    this.refresh_popsongs(period);
  }
}

mSnap.mInfo.Dashboard = {
  initialize: function(client_id) {
    var self = this;
    Element.show('chart')

    $('current_client').value = client_id;
    new Ajax.Request('/minfo/select_client/' + client_id, {
      asynchronous:false,
      evalScripts:true
    });
    new PeriodicalExecuter(function() {
      self.refresh_ads()
    }, 60);
    new PeriodicalExecuter(function() {
      self.refresh_basics()
    }, 300);
    new PeriodicalExecuter(function() {
      self.refresh_reports()
    }, 300);
    new PeriodicalExecuter(function() {
      self.refresh_image('sparkline_monthly', '/minfo/sparkline/monthly')
    }, 86400);
    new PeriodicalExecuter(function() {
      self.refresh_image('sparkline_weekly', '/minfo/sparkline/weekly')
    }, 86400);
    new PeriodicalExecuter(function() {
      self.refresh_image('sparkline_daily', '/minfo/sparkline/daily')
    }, 3600);
    new PeriodicalExecuter(function() {
      self.refresh_image('sparkline_hourly', '/minfo/sparkline/hourly')
    }, 300);
  },
  refresh_basics: function() {
    new Ajax.Request('/minfo/basics', {
      asynchronous:true,
      evalScripts:true,
      onLoading:function(request) {
        Element.hide('refresh_basics');
        Element.show('refreshing_basics');
      },
      onComplete: function(request) {
        Element.show('refresh_basics');
        Element.hide('refreshing_basics');
      }
    })
  },
  refresh_chart: function(period) {
    var url = '/minfo/chart';
    if (period) url = url + '/' + period;

    this.refresh_image('chart', url, {
      onLoading:function(request) {
        Element.hide('refresh_reports');
        Element.show('refreshing_reports');
      },
      onComplete: function(request) {
        Element.show('refresh_reports');
        Element.hide('refreshing_reports');
      }
    })
  },
  refresh_image: function(id, url, options) {
    var now = new Date;
    url = url + "?ts=" + now.getTime();
    options = options || {}
    var onLoading = options.onLoading || Prototype.emptyFunction;
    var onComplete = options.onComplete || Prototype.emptyFunction;

    onLoading();
    var image = new Image;
    image.src = url;
    //Event.observe(image, 'load', function(e){
    //    $('chart').src = image.src;
    //    Element.show('refresh_reports');
    //    Element.hide('refreshing_reports');
    //}, false);
    var tid = setInterval(function() {
      if (image.complete) {
        clearInterval(tid);
        $(id).src = image.src;
        onComplete();
        return true;
      } else {
        return false;
      }
    }, 100);
  },
  refresh_impressions: function(period) {
    var url = '/minfo/impressions'
    if (period) url = url + '/' + period;
    new Ajax.Request(url, {
      asynchronous:true,
      evalScripts:true,
      onLoading:function(request) {
        Element.hide('refresh_reports');
        Element.show('refreshing_reports');
      },
      onComplete: function(request) {
        Element.show('refresh_reports');
        Element.hide('refreshing_reports');
      }
    })
  },
  refresh_popads: function(period) {
    var url = '/minfo/popads'
    if (period) url = url + '/' + period;
    new Ajax.Request(url, {
      asynchronous:true,
      evalScripts:true,
      onLoading:function(request) {
        Element.hide('refresh_reports');
        Element.show('refreshing_reports');
      },
      onComplete: function(request) {
        Element.show('refresh_reports');
        Element.hide('refreshing_reports');
      }
    })
  },
  refresh_reports: function() {
    if (Element.visible('chart')) this.refresh_chart();
    if (Element.visible('impressions')) this.refresh_impressions();
    if (Element.visible('popads')) this.refresh_popads();
  },
  refresh_ads: function() {
    new Ajax.Request('/minfo/ads', {
      asynchronous:true,
      evalScripts:true,
      onLoading:function(request) {
        Element.hide('refresh_ads');
        Element.show('refreshing_ads');
      },
      onComplete: function(request) {
        Element.show('refresh_ads');
        Element.hide('refreshing_ads');
      }
    })
  },
  select_chart: function(period) {
    Element.show('chart');
    Element.hide('impressions');
    Element.hide('popads');
    this.refresh_chart(period);
  },
  select_impressions: function(period) {
    Element.hide('chart');
    Element.show('impressions');
    Element.hide('popads');
    this.refresh_impressions(period);
  },
  select_popads: function(period) {
    Element.hide('chart');
    Element.hide('impressions');
    Element.show('popads');
    this.refresh_popads(period);
  }
}

/*
* Campaign Form Previewer
*/
var Previewer = {
    updateForDC: function()
    {
        var val = Previewer.quickGetValue('campaign_dynamic_campaign_id');
        if (val == 'n/a')
        {
            // None
            
            // mtalk/mvote auto reply
            if ($('dc-autoreply') != null)
                $('dc-autoreply').show();
                
            // conf msg for mvote sweeps
            if ($('options_vote_type') != null && $('options_vote_type').value == 'sweepstakes')
            {
                if ($('dc-conf-msg') != null)
                    $('dc-conf-msg').show();

                if ($('dc-conf-msg-counter') != null)
                    $('dc-conf-msg-counter').show();
            }
            
            // gateway
            if ($('dc-gateway') != null)
                $('dc-gateway').show();
                
            // mtalk fields
            if ($('dc-fwd-email') != null)
                $('dc-fwd-email').show();
                
            // auto_reply_option
            $A(Element.childrenWithClassName('wizard_form', 'auto_reply_option')).each(
                  function(e) { Element.show(e); }
            );
        }
        else
        {
            // DC selected
            
            // mtalk/mvote auto reply
            if ($('dc-autoreply') != null)
                $('dc-autoreply').hide();
                
            // conf msg for mvote sweeps
            if ($('options_vote_type') != null && $('options_vote_type').value == 'sweepstakes')
            {
                if ($('dc-conf-msg') != null)
                    $('dc-conf-msg').hide();

                if ($('dc-conf-msg-counter') != null)
                    $('dc-conf-msg-counter').hide();
            }
            
            // gateway
            if ($('dc-gateway') != null)
                $('dc-gateway').hide();
                
            // mtalk fields
            if ($('dc-fwd-email') != null)
                $('dc-fwd-email').hide();
                
            // auto_reply_option
            $A(Element.childrenWithClassName('wizard_form', 'auto_reply_option')).each(
                  function(e) { Element.hide(e); }
            );
        }
    },
	editMode: function()
	{
		
		$('verify-spinner').hide();
		
		var elements = $('wizard_form').getElementsByClassName('verify_value');
		for (var i = 0; i < elements.length; i++)
		{
			var element = elements[i];
			element.hide();
		}
		elements = Form.getElements($('wizard_form'));
		for (var i = 0; i < elements.length; i++)
		{
			var element = elements[i];
			if (element.type == 'text' || element.type == 'textarea')
			{
			   try{
				element.style.display = "inline";
				
				var value_element = ( element.previousSibling ) 
				                        ? element.previousSibling : element.parentNode.previousSibling; 
				
				if( value_element && value_element.style )
				    value_element.style.display = "none";
				}catch( e){
					if (console) {
								console.info(element);
								console.error(e);
							}
				}
			}
			
			// Char counters
			if (element.name.match(/.+_(len|length)$/))
			{
				var _parent = $(element.id).ancestors();
				_parent[0].style.color = '#000';
			}
		}
		
		Previewer.toggleSportData('show');
		this.toggleRadioControls('show');
		
		if( $("current-zone-id") )
			$("current-zone-id").show();
		
		$('btn-save').hide();
		$('btn-edit').hide();
		
		if ($('mini_bttn_add_answer') != null)
			$('mini_bttn_add_answer').show();
			
		if ($('mini_bttn_remove_answer') != null)
			$('mini_bttn_remove_answer').show();
		
		$('btn-verify').show();
		
		if ($('campaign_short_code') != null && $('campaign_short_code').type != 'hidden')
			$('campaign_short_code').show();
		
		if ($('campaign_timezone') != null)
			$('campaign_timezone').disabled   = '';
		
		this.clearErrors();
	},
	toggleRadioControls: function(how)
	{
		elements = $('wizard_form').getElementsByClassName('radio_off');
		for (var i = 0; i < elements.length; i++)
		{
			var element = elements[i];
			var a		= element.ancestors()[0];
			if (how == 'show')
				a.show();
			else if (how == 'hide')
				a.hide();
		}
		
		// Sponsored controls
		if (how == 'show')
		{   
			// Enable openx...
			if ($('campaign_sponsored_0') != null)
			{
				// == false
				$('campaign_sponsored_0').show();
				$('campaign_sponsored_1').show();
				$('old-sponsored-0').show();
				$('old-sponsored-1').show();
			}
			else
			{
				// == true
				$('label_campaign_sponsored_yes').show();
				$('campaign_sponsored_yes').show();
				$('label_campaign_sponsored_no').show();
				$('campaign_sponsored_no').show();
				if ($('mini_bttn_create_new_spons_button') != null)
				  $('mini_bttn_create_new_spons_button').show();
				if ($('select_for_sponsorship_id') != null)
				  $('select_for_sponsorship_id').disabled = '';
			}
		}
		else
		{
			if ($('campaign_sponsored_0') != null)
			{
			    // false
				var which_radio = ($('campaign_sponsored_1').checked == 'checked' || $('campaign_sponsored_1').checked == true) ? '0' : '1';
				$('campaign_sponsored_0').hide();
				$('campaign_sponsored_1').hide();
				$('old-sponsored-' + which_radio).hide();
			}
			else
			{
			    
			    // true
				var which_radio = ($('campaign_sponsored_yes').checked == 'checked' || $('campaign_sponsored_yes').checked == true) ? 'no' : 'yes';
				$('label_campaign_sponsored_' + which_radio).hide();
				$('campaign_sponsored_yes').hide();
				$('campaign_sponsored_no').hide();
				if ($('mini_bttn_create_new_spons_button') != null)
				  $('mini_bttn_create_new_spons_button').hide();
				if ($('select_for_sponsorship_id') != null)
				  $('select_for_sponsorship_id').disabled = 'disabled';
			}
		}
		
		// Date/Time selects, Dynamic campaign dropdown
		elements = Form.getElements($('wizard_form'));
		for (var i = 0; i < elements.length; i++)
		{
			var element = elements[i];
			if (element.name.match('start_time') || element.name.match('end_time') || element.name.match('dynamic_campaign'))
			{
				if (how == 'show')
					element.disabled = '';
				else if (how == 'hide')
					element.disabled = 'disabled';
			}
		}
	},
	toggleSportData: function(how)
	{
		
		if ($('options_enable_msport_true') == null || $('sportnews_sport') == null)
			return;
		
		// mSport
		if ($('options_enable_msport_true').checked)
		{
			elements = $('wizard_form').getElementsByClassName('msport');
			for (var i = 0; i < elements.length; i++)
			{
				var element = elements[i];

				// Hide/show
				if (how == 'hide')
					element.hide();
				else if (how == 'show')
					element.show();
			}
			
			
			// Preview
			if (how == 'hide')
			{
				new Insertion.After(
					$('options_enable_msport_true').ancestors()[2],
					''
					+ '<tr id="sport_msport_preview_1" style="font-weight:normal;">'
						+ '<td class="label">Default Sports Team:</td><td>'
						+ Previewer.quickGetValue('options_default_sport_id') + ' / ' + Previewer.quickGetValue('options_default_team_id') + '</td>'
					+ '</tr>'
				)
				
				if( $('mscore_types_playoffs').checked && Previewer.quickGetValue('options_default_playoff_id') != "n/a" )
				  new Insertion.After(
				      $('sport_msport_preview_1'),
					  '<tr id="sport_msport_preview_2" style="font-weight:normal;">'
					     + '<td class="label">Default Sports Playoff:</td><td>'
						 + Previewer.quickGetValue('options_default_sport_id') + ' / ' + Previewer.quickGetValue('options_default_playoff_id') + '</td>'
					   + '</tr>'
				  );
			}
			else if (how == 'show')
			{
				$('sport_msport_preview_1').remove();
				if( $('sport_msport_preview_2') )
				    $('sport_msport_preview_2').remove();
			}
		}
		
		// #sportnews_sport -- Sport News
		if ($('options_enable_sportnews_by_sport_true').checked)
		{
			if (how == 'hide')
			{
				new Insertion.After(
					$('sportnews_sport'),
					'<div id="sportnews_sport_preview">'
						+ Previewer.quickGetValue('sportnews_sport_id') + ' / ' + Previewer.quickGetValue('options_sportnews_team_id')
					+  '</div>'
				);
				$('sportnews_sport').hide();
			}
			else if (how == 'show')
			{
				$('sportnews_sport_preview').remove();
				$('sportnews_sport').show();
			}				
		}
		
		
	},
	quickGetValue: function(element)
	{
		element = $(element);
		var idx = element.selectedIndex;
		return element.options[idx].value > 0 ? element.options[idx].text : 'n/a';
	},
	clearErrors: function()
	{
		elements = $('wizard_form').getElementsByClassName('fieldWithErrors');
		for (var i = 0; i < elements.length; i++)
		{
			var element = elements[i];
			element.removeClassName('fieldWithErrors');
		}
		
		if ($('errorExplanation') != null)
			$('errorExplanation').hide();
	},
	hideHeadings: function()
	{
		var h = $('heading-wrapper-for-form');
		if (h != null)
			h.hide();
	},
	run: function(model_type, id)
	{
		/*
		
		Flow:
		- submit with no_post=true, get response text; if failed, submit real form to get validation errors
		- if success from above, iterate through visible form elements and make fake verify overlay
		- verify overlay will have submit for actual form
		
		*/
		
		$('btn-verify').hide();
		$('verify-spinner').show();
		
		var form 	 = $('wizard_form');
		var elements = Form.getElements(form);
		var params 	 = form.serialize(true);
		var ajax_url = id == null ? ('/' + model_type + '/create?no_post=true') : ('/' + model_type + '/update/' + id + '?no_post=true');
		new Ajax.Request(ajax_url, {
			asynchronous: true,
			evalScripts:  true,
			parameters:   params,
			onComplete: function(request) {
				if (request.responseText == 'Failed')
				{
					$('wizard_form').submit();
				}
				else if (request.responseText == 'Okay')
				{
					

					for (var i = 0; i < elements.length; i++)
					{
						
				      try {
					  	var element = elements[i];
					  	if (element.type != 'hidden') {
					  		if (element.type == 'text' || element.type == 'textarea') {
					  			element.style.display = "none";
					  			
								var value_element = ( element.previousSibling ) 
				                        ? element.previousSibling : element.parentNode.previousSibling; 
								
								if (value_element && value_element.style) {
									value_element.style.display = "inline";
									value_element.innerHTML = element.value;
								}
					  			/*new Insertion.Bottom(
			
			 $(element.id).ancestors()[0],
			
			 '<strong style="font-weight:normal;" class="verify_value" id="verify_' + element.id + '">' + element.value + '</strong>'
			
			 );*/
			
									//$(element.id).hide();
									}
									
									// Char counters
									if (element.name.match(/.+_(len|length)$/)) {
										var _parent = $(element.id).ancestors();
										_parent[0].style.color = '#bed3e4';
									}
									
									// Show inherited Zone ID if none given
									if (element.id.match(/campaign_zone_id$/) && $('campaign_zone_id') != null && $('campaign_zone_id').value == '')
                        			{
                        			    var czid = $('inherit_zone_id').innerHTML.replace(/[^\d]+/, '');
                                		value_element.innerHTML = czid + ' (inherited)';
                                	}
								}
						}catch (e) {
							
							if (console) {
								console.info(element);
								console.error(e);
							}
						}
						
					}

					
					Previewer.toggleRadioControls('hide');
					Previewer.toggleSportData('hide');
					
					if ($('campaign_short_code') != null && $('campaign_short_code').type != 'hidden')
					{
						new Insertion.Bottom(
							$('campaign_short_code').ancestors()[0],
							'<strong class="verify_value" id="verify_campaign_short_code">' + $('campaign_short_code').value + '</strong>'
						);
						$('campaign_short_code').hide();
					}
					
					if ($('campaign_timezone') != null)
						$('campaign_timezone').disabled   = 'disabled';
					
					if ($('mini_bttn_add_answer') != null)
						$('mini_bttn_add_answer').hide();
						
					if ($('mini_bttn_remove_answer') != null)
					    $('mini_bttn_remove_answer').hide();
					
					if( $("current-zone-id") )
					    $("current-zone-id").hide();
										
					$('btn-verify').hide();
					$('verify-spinner').hide();
					$('btn-save').show();
					$('btn-edit').show();
				}
			}
		});
		
		this.clearErrors();
		
		
		
		return false;
	}
}