/**
 * Front end app 
 * app_fe.js
 * 
 * Meant to be example App. Template.
 * 
 * @package YAHOO.Plank
 * @author  Mitchell Amihod 2008-07-19
 */

(function(){

  YAHOO.namespace('Plank.appfe');
  
  var Dom = YAHOO.util.Dom,
      Lang = YAHOO.lang,
      Event = YAHOO.util.Event,
      putils = YAHOO.Plank.util,
      containerFactory = YAHOO.Plank.util.container;
  
  //Classes and IDs used.
  var names = {
    CROP_CLASS: 'plank-imagecrop',
    OVERLAY_CLASS: 'plank-overlay',
	PLANK_AJAX_CLASS: 'plank-ajax',
    // For search form swapping. tells us if we loading geg or cp
    FORM_SHOW_GEG: 'plank-show-geg',  
    FORM_SHOW_CP: 'plank-show-cp', 
    //The form ids to show/hide
    FORM_ID_GEG: 'search_geg',
    FORM_ID_CP: 'search_cp',
    //Id of the tabs which we will want to swap the BG for - 
    //simpler o target directly rather than have a bunch of 
    //find by classes and traversal, since an IMG or DIV is the trigger,
    TAB_ID_GEG: 'tab_search_geg',
    TAB_ID_CP: 'tab_search_cp',
    //Classes to apply BG to the tabs
    SEARCH_TAB_ON: 'search-tab-on',
    SEARCH_TAB_OFF: 'search-tab-off',
    //Classes to control which search form is visible
    HIDE_FORM_CLASS: 'hide-header-search-form',
    SHOW_FORM_CLASS: 'show-header-search-form',
    PRINT_PAGE_CLASS: 'plank-print-page'

  };
  
  var clickHandler = function(e) {
    
    var el = Event.getTarget(e);

    switch(true) {
      
      case (Dom.hasClass(el, names.CROP_CLASS)) :
          putils.imagecropper(el);
        break;
      case (Dom.hasClass(el, names.PRINT_PAGE_CLASS)) :
          window.print();
        break;
      case (Dom.hasClass(el, names.OVERLAY_CLASS) && !Lang.isUndefined(el.href)): 

        Event.stopEvent(e);

        var tCon = containerFactory('popin', 
          {
            'conType': 'Panel', 
            'width': '660px', 
            'height': '400px', 
            'source': el.href
          }
        );

        tCon.render(document.body);
        tCon.show();
        
        break;

      default:
      
        break;
      
    }
    
  };

	var successHandler = function(o) {
	
		if(Lang.isUndefined(o.responseText)) { return true; }

		var argument = o.argument || {};

		var response = Lang.JSON.parse(o.responseText);
		if(response.success) {
			var responseDiv = Dom.get(argument.id+'-response');

			if(!Lang.isUndefined(responseDiv)) {
				responseDiv.innerHTML = response.success;
			}

			//Special rules for popup, which in this case encompasses just the remind me's
			if(window.name == 'popup') {
				if(!Lang.isUndefined(argument.tagName)){ 
					Dom.addClass(argument, 'hide'); 
				}
				//Autoclose
				Lang.later ( 3000 , window , function() {
					this.close();
				});
			}
		}
	};
	
	//Right now, just for the remind me feature
	var submitHandler = function(e) {

		Event.stopEvent(e);

		//Default to valid
		var valid = true;
		if(!Lang.isUndefined(YAHOO.Plank.util.validator)) {
			valid = YAHOO.Plank.util.validator.processForm(e);
		}
		
		if(valid) {
			var el = Event.getTarget(e);
			YAHOO.util.Connect.setForm(el);
			YAHOO.util.Connect.asyncRequest('POST', el.action, 
				{ 
					success: successHandler, 
					failure: function(o) {
						console.log(o);
					},
					argument : el
				}
			);
		}
		
	};

  var init = function() {

    YAHOO.log('appfe:init');  
    YAHOO.Plank.util.validator.init();
    Event.on(document.body, 'click', clickHandler, YAHOO.Plank, true);

	Dom.getElementsByClassName(names.PLANK_AJAX_CLASS, 'form', '', function(el) {
		Event.on(el, 'submit', submitHandler, YAHOO.Plank, true );
	});
	
  };

  YAHOO.Plank.appfe.init = init;

  /*
  var testContainer = function() {
    YAHOO.log('testContainer');
    //Test Container factory
    var con = containerFactory('overlayId', {'conType' : 'Panel'});


    //Testing fetching existing and overriding one prop, and rerendering it.
    containerFactory('overlayId', {'width' : '500px', 'fixedcenter' : true }).render();
    con.setBody('click to hide');
        
  };
  */
  
  //Let loader know.
  YAHOO.register("plank_app_fe", YAHOO.Plank.appfe, {version: "1", build: "1"}); 

})();
