/*
App Data
Changeable
*/
var App =  {
  baseDomain: function(){
    var d = document.location.hostname.split('.');
    return (d[1]+'.'+d[2]);
  },
  userCookie: 'current_user',
  sessionCookie: '_session_id',
  sessionLifeSpan: 1800000, //30 mins
  loadingImage: function(){
    return ("<img src='/images/indicator.gif' height='5' width='21' alt='loading' class='loading' />");
  },
  loadingImageWide: function(){
    return ("<img src=\"http://us.i1.yimg.com/us.yimg.com/i/us/per/gr/gp/rel_interstitial_loading.gif\"/>");
  },
  yahooMapId: function(){
    var y = ['scenestr', 'scenstr5', 'testbase', 'scenestr.com', 'anc_production'];
    return y[Math.floor ( Math.random ( ) * y.length + 1 )];
  }
};

//FCG namespaces
YAHOO.namespace("fcg", "fcg.element", "fcg.page", "fcg.data", "fcg.user", "fcg.loader", "fcg.loading", "fcg.wait");
// YUI shortcuts
var $E = YAHOO.util.Event;
var $D = YAHOO.util.Dom;
var $C = YAHOO.util.Connect;
var FCG = YAHOO.fcg;

var $$F = function(arg){
  var list = $$(arg);
  return (list.length > 0 ? list[0] : false );
};

FCG.message = {
  elementId: 'message',
  state: 'bad',
  suffix: '_ajax_response',
  renderNode: function(d,cls,txt){
    $(elementId).setStyle({"display": d || 'none'});
    $(elementId).className = cls || '';
    $(elementId).update(txt || '');
  },
  reset: function(){
    this.renderNode();
  },
  set : function(text, st, el, suf){
    elementId = el || this.elementId;
    state = st || this.state;
    suffix = suf || this.suffix;
    state = state + this.suffix;
    this.renderNode('block', state, text);
    return this;
  }
};

FCG.field = {
  reset: function(el){
    if ($(el)){
      $(el).update("");
      $(el).className = '';
    }
  },
  loading: function(el){
    if(arguments.length == 2){
      var msg = arguments[1];
    } else {
      var msg = "";
    }
    
    if ($(el)){
      $(el).update(msg + " " + App.loadingImage());
      $(el).className = 'loading';
    }
  },
  good: function(el){
    if(arguments.length == 2){
      var msg = arguments[1];
    } else {
      var msg = "";
    }
    if ($(el)){
      $(el).update(msg);
      $(el).className = 'fieldGood';
    }
  },
  bad: function(el){
    if(arguments.length == 2){
      var msg = arguments[1];
    } else {
      var msg = "";
    }
    if ($(el)){
      $(el).update(msg);
      $(el).className = 'fieldBad';
    }
  }
};

FCG.date = function(){
  var month=['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'];
  var currentYear = new Date().getFullYear();
  return {
    formatFullDate : function(postTime) {
    	postTime=new Date(postTime);
    	var postYear=postTime.getYear();
    	if (postYear<1900) postYear+=1900;
    	var yearString = ", "+postYear;
    	if (postYear == currentYear){
    	  yearString = "";
    	}
    	return month[postTime.getMonth()]+' '+postTime.getDate()+ yearString;
    },
    
    timeDifference : function(postTime) {
       if (!serverTime || serverTime<postTime) return this.formatFullDate(postTime);

       var ago=Math.floor((serverTime-postTime)/(1000*60)); // Posted ago in whole minutes rounded down
       if (ago>(60*24)) return this.formatFullDate(postTime); // Skip if more than 24 hours

       var hoursAgo=Math.floor(ago/60); //Whole hours = total minutes/(60min/hour) rounded down
       var minutesAgo=ago%60;           //Minutes = the remainder

       var message='';
       if (hoursAgo) {
          message+=hoursAgo+" hour";
          if (hoursAgo>1) message+="s";
          if (minutesAgo) message+=", ";
       }
       if (minutesAgo) {
          message+=minutesAgo+" minute";
          if (minutesAgo>1) message+="s";
       }
       if (message.length == 0) {
       		message = 'seconds';
       }
       message+=" ago";
       return message;
    }
  };
}();

// from extjs.com @class Ext.form.VTypes
FCG.validate = function(){
    // closure these in so they are only created once.
    var alpha = /^[a-zA-Z_]+$/;
    var alphanum = /^[a-zA-Z0-9_]+$/;
    var email = /^([\w]+)(.[\w]+)*@([\w-]+\.){1,5}([A-Za-z]){2,4}$/;
    var url = /(((https?)|(ftp)):\/\/([\-\w]+\.)+\w{2,3}(\/[%\-\w]+(\.\w{2,})?)*(([\w\-\.\?\\\/+@&#;`~=%!]*)(\.\w{2,})?)*\/?)/i;
    var date = /^((((0[13578])|([13578])|(1[02]))[\/](([1-9])|([0-2][0-9])|(3[01])))|(((0[469])|([469])|(11))[\/](([1-9])|([0-2][0-9])|(30)))|((2|02)[\/](([1-9])|([0-2][0-9]))))[\/]\d{4}$|^\d{4}$/;
    return {
      'email' : function(v){
        return email.test(v);
      },
      'emailText' : 'This field should be an e-mail address in the format "user@domain.com"',
      'emailMask' : /[a-z0-9_\.\-@]/i,
      'url' : function(v){
        return url.test(v);
      },
      'urlText' : 'This field should be a URL in the format "http:/'+'/www.domain.com"',
      'alpha' : function(v){
        return alpha.test(v);
      },
      'alphaText' : 'This field should only contain letters and _',
      'alphaMask' : /[a-z_]/i,
      'alphanum' : function(v){
        return alphanum.test(v);
      },
      'alphanumText' : 'This field should only contain letters, numbers and _',
      'alphanumMask' : /[a-z0-9_]/i,
      'date' : function(v){
        return date.test(v);
      }
    };
}();

FCG.loading = function(){
  return{
    init: function(){
      new YAHOO.util.YUILoader({
        require: ["container"],
        onSuccess: function(){
          if (!$("wait")){
            FCG.wait = new YAHOO.widget.Panel("wait",  
              { width: "300px",
                fixedcenter: true, 
                close: false, 
                draggable: false, 
                zindex:4,
                visible: false
              } 
            );
            FCG.wait.setHeader("Loading, please wait...");
            FCG.wait.setBody(App.loadingImageWide());
            FCG.wait.render(document.body);
          }
        }
      }).insert();
    },
    show: function(){
      FCG.wait.show();
    },
    hide: function(){
      FCG.wait.hide();
      FCG.wait.setBody(App.loadingImageWide());
    },
    setMsg: function(msg){
      FCG.wait.setBody(App.loadingImageWide() + " <br /> " + msg);
      FCG.wait.show();
    },
    setHeader: function(msg){
      FCG.wait.setHeader(msg);
    }
  };
}();

//log
var log = function(arg){
  try{
    console.log(arg);
  } catch(e){}
};