YAHOO.namespace("evie");
YAHOO.evie.rooturl = "http://widget.eviesays.com";

YAHOO.evie.show = function(id) {
  YAHOO.util.Dom.removeClass(id,'hidden');
  YAHOO.util.Dom.setStyle(id, "display", "block");
};

YAHOO.evie.hide = function(id) {
  YAHOO.util.Dom.setStyle(id, "display", "none");
};

YAHOO.evie.is_hidden = function(id) {
  return ( YAHOO.util.Dom.getStyle(id, "display") == "none" ) ?
     true : false;
};

YAHOO.evie.toggle = function(id) {
  if (YAHOO.lang.isArray(id)) {
    for (var i=0; i<id.length; ++i) { YAHOO.evie.toggle(id[i]); }
  }
  else if( this.is_hidden(id) ) {
    YAHOO.evie.show(id);
  }
  else {
    YAHOO.evie.hide(id);
  }
};


YAHOO.evie.redirect = function(url) {
	window.location = url;
};

YAHOO.evie.timed_redirect = function(oEvent, args) {
	setTimeout('YAHOO.evie.redirect(\'' + args.url+ '\')', args.secs * 1000);
};

YAHOO.evie.is_logged_in = function () {
  return ( YAHOO.util.Cookie.get('eviesays_auth')
          && YAHOO.util.Cookie.get('eviesays_user') ) ? true : false;
};

var eviesays;

if(!eviesays) eviesays = {};
else if(typeof eviesays != "object")
	throw new Error("eviesays already exists and is not an object");

eviesays.baseURL = "http://widget.eviesays.com";
eviesays.styleURL = "http://widget.eviesays.com";

eviesays.sidebar = new Object();

/* On Load */
YAHOO.util.Event.onDOMReady( function ( arg ) {
  var temp = YAHOO.util.Selector.query( 'li.evie_top_level > a', 'categories' );
  YAHOO.util.Event.addListener( temp , 'click' , eviesays.sidebar.click_category );
  var find_li_with_category_link = function (cat_num) {
    var sublists = YAHOO.util.Selector.query( 'ul > li > a','categories');
    for (var anchor in sublists){
      var match2 = sublists[anchor].href.match(/category\/(\d+)/);
      if (match2 != null && parseInt(match2[1]) === cat_num){
        eviesays.sidebar.expand( sublists[anchor].parentNode.parentNode.previousElementSibling );
        YAHOO.util.Dom.addClass( sublists[anchor], 'current');
      }
    }
    return false;
  };

  var match = temp[0].baseURI.match(/category\/(\d+)/);
  if (match != null ){
    find_li_with_category_link( parseInt(match[1]) );
  }

//  var when_field = YAHOO.util.Dom.get('when');

});

YAHOO.util.Event.onDOMReady(function (e) {
  function when_custom_function (e) {
    function create_reset_when_link (el){
        var original_div = el.parentNode.innerHTML;
        var p_el = YAHOO.util.Dom.getNextSibling(el);
        // create, place, and name link
        var link = document.createElement('a');
        p_el.appendChild(link);
        link.innerHTML = 'Preset Options';
        // give link behavior
        YAHOO.util.Event.on(link, 'click', function (e) {
          // reconstruct the options
          var when = YAHOO.util.Dom.getPreviousSibling(p_el);
          var div = p_el.parentNode;
          div.innerHTML = original_div;
          // give user's custom search its own name
          var select_box = div.getElementsByTagName('select')[0];
          var selected_option = select_box.options[select_box.selectedIndex];
          selected_option.value = selected_option.text;
          // re-add Custom option
          if (select_box.options[select_box.options.length-1].text !== "Custom" ) {
            var custom_option = new Option("Custom", "Custom");
            select_box.add(custom_option, null);
          }
          select_box.options[0].selected = true;
          YAHOO.util.Event.on('when','change', when_custom_function);
        });
      }

      if (this.value == "Custom") {
        create_reset_when_link(this);
        var when_parent = this.parentNode;
        var input_field;
        if (YAHOO.env.ua.ie > 0 && YAHOO.env.ua.ie < 7) {
          //IE 6 won't let setAttribute modify 'name'
          input_field = document.createElement("<input name='when' id='when' type='text'>");
        } else {
          input_field = document.createElement('input');
          YAHOO.util.Dom.setAttribute(input_field, 'type', 'text');
          YAHOO.util.Dom.setAttribute(input_field, 'name', 'when');
          YAHOO.util.Dom.setAttribute(input_field, 'id', 'when');
        }

        var selected_text = this.options[this.selectedIndex].text;
        if (selected_text != "Custom") {
          input_field.value = selected_text;
        }

        when_parent.replaceChild(input_field, this);
        input_field.focus();
      }
    return false;
    }
    YAHOO.util.Event.on('when', 'change', when_custom_function);
    YAHOO.util.Event.onContentReady('when', when_custom_function);

});

/* Processes a user click on a category in the sidebar */
eviesays.sidebar.click_category = function ( e ) {
  eviesays.sidebar.expand(this);
  return false;
};

eviesays.sidebar.expand = function (el) {
  var temp = YAHOO.util.Selector.query( 'ul', 'categories' );
  eviesays.hide( temp );

  temp = YAHOO.util.Selector.query( '.selected', 'categories' );
  YAHOO.util.Dom.removeClass( temp , 'selected' );

  YAHOO.util.Dom.addClass( el , 'selected' );

  temp = YAHOO.util.Dom.getNextSibling( el );
  eviesays.show( temp );

//  return false;

};

/* Form Functions */
eviesays.form = {};
eviesays.form.char_count = function( elem, callback ) {
	var Dom = YAHOO.util.Dom,
			Event = YAHOO.util.Event;

	var count = function() {
		var editor = Dom.get(elem),
		text = editor.value,
		wordCount = 0,
		charCount = ((text.length) ? text.length : ((editor.textLength) ? editor.textLength : 0));
		
		if (charCount > 0) {
			wordCount = text.match(/\b/g);
			wordCount = ((wordCount) ? (wordCount.length / 2) : 0);
		}
		
		var start = editor.selectionStart,
		end = editor.selectionEnd,
		rows = 0, cols = 0;
		
		if (YAHOO.env.ua.ie) {
			if (document.selection) {
				var range = document.selection.createRange();
				var stored_range = range.duplicate();
				stored_range.moveToElementText(editor);
				stored_range.setEndPoint('EndToEnd', range);
				start = stored_range.text.length - range.text.length;
				end = start + range.text.length;
			}
		}
		
		var rowList = text.split(/\n/),
		r = 0;
		rowCount = ((rowList) ? rowList.length : 1);
		
		for (var i = 0; i < rowCount; i++) {
			if (YAHOO.env.ua.gecko) {
				charCount++;
			}
			r += (rowList[i].length + 1);
			var sc = (r - rowList[i].length - 1),
			ec = ((rowList[i].length + 1) + sc);
			if ((start >= sc) && (start <= ec)) {
				rows = (i + 1);
				cols = ((start - sc) + 1);
			}
		}
		
		if (YAHOO.env.ua.gecko) {
			charCount--;
		}
		if (start !== end) { //No Selection
			rows = 0, cols = 0;
		}
			
		callback(wordCount,charCount,rows,cols);
	};

	Event.onDOMReady(function() {
		count();
		Event.on(elem, 'keyup', count);
		Event.on(elem, 'keypress', count);
		Event.on(elem, 'mouseup', count);
	});
};



/* Utility functions */
eviesays.show = function ( elem ) {
	YAHOO.util.Dom.setStyle( elem , 'display' , 'block');
};

eviesays.hide = function ( elem ) {
	YAHOO.util.Dom.setStyle( elem , 'display' , 'none');
};

eviesays.is_hidden = function ( elem ) {
	if( YAHOO.util.Dom.getStyle( elem , 'display') == 'none') {
		return true;
	}
	return false;
};

eviesays.expand = function (elem) {

};
