/**
 * Community.
 *
 * Description:
 * JS functionality for community ajax actions.
 *
 * Require YUI:
 * - YAHOO.util.Dom	(yahoo-dom-event.js)
 * - YAHOO.util.Event (yahoo-dom-event.js)
 * - YAHOO.util.Element (element-min.js)
 * - YAHOO.util.SimpleDialog (container-min.js)
 * - YAHOO.util.Connect (connection-min.js)
 *
 * - YAHOO.webfact.MsgFeedback (wfMsgFeedback.js)
 *
 * @author S.Wille <s.wille@e-media.de>
 * @version $Id$
 * @package Mediabiz
 * @subpackage Modules.Community
 */
(function() {

	YAHOO.namespace("Emv.Community");
	YAHOO.Emv.Community = function(attributes) {

		this.init(attributes);
	};

	var Event   = YAHOO.util.Event,
    	Dom     = YAHOO.util.Dom,
    	Connect = YAHOO.util.Connect;

	YAHOO.Emv.Community.NAME = 'Community';

	YAHOO.Emv.Community.prototype = {

		/**
		 * Initialize.
		 */
		init: function(attributes) {

			this.attributes = attributes || {};

            if (typeof YAHOO.webfact != "undefined") {

                var feedbackId  = this.attributes.feedbackId ? this.attributes.feedbackId : 'FeedbackBox';
                this.rMsg_green = new YAHOO.webfact.MsgFeedback(feedbackId);
                this.rMsg_red   = new YAHOO.webfact.MsgFeedback(feedbackId, {mode:'red'});
            }
		},

		/**
		 * Initialize new status update form.
		 * @param attribs OBJECT
		 */
		initStatusNew: function(attribs) {

			if (typeof attribs == "undefined" || !attribs) {

				return false;
			}

			this.attribs = {
				formId:    attribs.formId,
				submitUri: attribs.submitUri
			};

			var form = Dom.get(this.attribs.formId);

			Event.on(form, "submit", this.statusNewSubmit, this, true);
		},
		
		/**
		 * Handle new status msg form submit.
		 */
		statusNewSubmit: function(e) {

			// Pause submission of the form
			Event.preventDefault(e);

			var form = Dom.get(this.attribs.formId);
			var callbackNewStatus = {
				success: function(o) {

					// Process the response
                	var json = o.responseText.substring(o.responseText.indexOf('{'), o.responseText.lastIndexOf('}') + 1);
                	var data = eval('(' + json + ')');

	                if (typeof(data.status) == 'undefined') {

	                	// Invalid status return!
	                	this.rMsg_red.show('Status-Fehler beim Speichern Ihrer Statusmeldung');
	                	return;
	                }

	                if (data.status != 'success') {

	                	// User/form error!
	                	/*if ("undefined" !== typeof(data.errorMessage)) {

	                	    this.rMsg_red.show(data.errorMessage);
	                	} else {*/

	                	    this.rMsg_red.show('Undefinierter Fehler beim Speichern Ihrer Statusmeldung');
	                	/*}*/
	                	return;
	                } else {

	                	// Everything is fine.
	                	this.rMsg_green.show('Ihre Statusmeldung wurde gespeichert.');
	                }
				},
				failure: function() {
					// asyncRequest failure
                	this.rMsg_red.show('Fehler beim Senden des Formulars');
				},
				scope: this
			};

			Connect.setForm(this.attribs.formId);
			var _uri = this.attribs.submitUri + '?format=json';
			Connect.asyncRequest('POST', _uri, callbackNewStatus);
		},
		
		/**
		 * Handle members you could know loading.
		 */
		loadMembersYouCouldKnow: function(container, limit, evenAmount) {
			
			if ("undefined" == typeof(limit)) {
				
				limit = null;
			}
			if ("undefined" == typeof(evenAmount)) {
				
				evenAmount = false;
			}
			evenAmount = evenAmount ? "true" : "false";

			var callback = {
				success: function(o) {

					if (o.responseText !== undefined) {

						document.getElementById(container).innerHTML = o.responseText;  
					}

					// Disable loading icon
					Dom.removeClass(Dom.get(container).parentNode, "loading");
				},
				failure: function() {

					// asyncRequest failure: disable loading icon
					Dom.removeClass(Dom.get(container).parentNode, "loading");
				},
				scope: this
			};

			Connect.asyncRequest("GET", "/community/members-you-could-know-ajax?limit=" + limit + "&even=" + evenAmount, callback);
		},
		
        /**
         * Auto-complete overlay for companies.
         * Used in forms for community access.
         * Populates company name as well as anr, if possible.
         *
         * @param string    Name of input field
         * @param string    Name of output field
         * @param string    Name of anr field
         * @return string   Result list
         */
        companyAutoComplete: function(inputFieldName, outputFieldName, anrFieldName) {

            var oDS = new YAHOO.util.XHRDataSource('/account/get-companies-ajax');
            var oAC = new YAHOO.widget.AutoComplete(inputFieldName, outputFieldName, oDS);

    		// Response preset
    		oDS.responseType = YAHOO.util.XHRDataSource.TYPE_JSON;
    		oDS.responseSchema = {
    			resultsList : 'ResultSet.Result',
    			fields : ['name', 'city', 'id', 'anr']
    		};
            oDS.maxCacheEntries = 10;

            // Autocomplete preset
    		oAC.maxResultsDisplayed = 10;
            oAC.resultTypeList      = false;

            // Result formatting
    		oAC.formatResult = function(oResultData, sQuery, sResultMatch) {

    		    var sRegExp = new RegExp(sQuery, 'i');
    			var sMatch = sResultMatch.match(sRegExp);

    			var sReplace = '<strong>' + sMatch + '</strong>';
    			var cName = sResultMatch.replace(sRegExp, sReplace);
    			if( oResultData.city != '' ) {

    			    var cCity = ' (' + oResultData.city + ')';
    			} else {

    			    var cCity = '';
    			}
    			return cName + cCity;
    		};

            // Action to be fired on select of item: populate hidden anr field
            itemSelectHandler = function(sType, aArgs) {

            	var oData = aArgs[2];
            	Dom.get(anrFieldName).value = oData.anr;
            	return false; // Stop processing to avoid form sending here on 'enter' press!
            };
            oAC.itemSelectEvent.subscribe(itemSelectHandler);

            return oAC;
        }
	};
}());
