//<script>
YAHOO.namespace("Personals");

function debug(msg){
	//console.log(msg);
}

YAHOO.Personals.ile = function(ajax, initObj){

    var submitLink = initObj.submitLink;
    var cancelLink = initObj.cancelLink;
    var formAction = initObj.formAction;
    var charCounter = initObj.charCounter;
    var targetEl   = initObj.targetEl;
    var parentElId = initObj.parentEl;

    //cache YUI stuff
    var cEvent = YAHOO.util.CustomEvent;
    var dom = YAHOO.util.Dom;
    var event = YAHOO.util.Event;
    var connect = YAHOO.util.Connect;

    var eSubmitClicked = new cEvent("submitClicked", this);
    var eCancelClicked = new cEvent("cancelClicked", this);
    var eStartSubmit    = new cEvent("startSubmit", this);
    var eSubmitSuccess  = new cEvent("submitSuccess", this);
    var eSubmitFailure  = new cEvent("submitFailure", this);
    var eDisplayed     = new cEvent("displayed", this);
    var eChangedCaption    = new cEvent("changedCaption", this);
    var eError = new cEvent("error", this);

    var captionAction = "edit";

    function setUpLinks(){

        var submitEl = document.getElementById(submitLink);
        var inputEl  = document.getElementById('desc');
        var counter = new YAHOO.Personals.textAreaCharCount("desc");
        counter.init();
        event.addListener(inputEl, 'focus', handleInputFocus);
        event.addListener(inputEl, 'blur', handleInputBlur);
        event.addListener(submitEl, 'click', handleSubmit);

        var cancelEl = document.getElementById(cancelLink);

        event.addListener(cancelEl, 'click', cancelForm);

    };


    function submitForm(){

        handleLoading();
        var inputArea = document.getElementById("desc");
        var spaceid = YAHOO.Personals.PAGE_INFO.space_id;
        var postString = "caption=" + escape(inputArea.value);
        

        //parse the query string to get the pid
        var qs = formAction.substring(postString.indexOf('?'));
	
        var args = qs.split('&');
        var len = args.length;
        
        var params = new Array();

        //convert this in two name value array
        for (var i=0;i<len;i++) {
            var value;
            var pair = args[i].split('=');
            var name = pair[0];
            if (pair.length == 2){
                value = pair[1];
            }else{
                value = name;
            }

            params[name] = value;
        }

        var pid = params['pid'];


        var clickData = {'sec': 'caption',
		     'lt': pid
         };
        if(captionAction != 'add'){
	        if(inputArea.value == ''){
	            clickData['slk'] = 'delete';
	            debug('deleted!');
	       	}else{
            clickData['slk'] = 'edit';
            debug('edited!');
        }
        }else{
            clickData['slk'] = 'add';
            debug('added!');
        }

        clickData[YAHOO.ULT.SRC_SPACEID_KEY] = spaceid;
		debug(clickData);
        formAction = YAHOO.ULT.track_click(formAction, clickData);
		
		
        var transaction = YAHOO.util.Connect.asyncRequest('POST', formAction, submitCallback, postString);
    };

    function cancelForm(e){
        event.preventDefault(e);
        eCancelClicked.fire();

    };

    function handleInputFocus(){
		var inputEl  = document.getElementById('desc');
		dom.addClass(inputEl, 'focused');
		debug(YAHOO.Personals.PAGE_INFO);
    };

    function handleInputBlur(){
    	var inputEl  = document.getElementById('desc');
		dom.removeClass(inputEl, 'focused');

    };

    function handleRollOver(){

    };

    function stopClicks(e){
    	event.preventDefault(e);
    }

    function handleLoading(){
    	var submitEl = document.getElementById(submitLink);
    	var buttonT = dom.getElementsByClassName('buttonState', 'span', submitEl)[0];
    	dom.removeClass(buttonT, 'bold');
    	dom.addClass(buttonT, 'disable');
    	dom.addClass(submitEl.parentNode, 'loading');
    	event.removeListener(submitEl, 'click');
    	event.addListener(submitEl, 'click', stopClicks);
    };

    function handleFinishLoading(){
        var submitEl = document.getElementById(submitLink);
        var buttonT = dom.getElementsByClassName('buttonState', 'span', submitEl)[0];
        event.removeListener(submitEl, 'click', stopClicks);
        event.addListener(submitEl, 'click', handleSubmit);
    	dom.removeClass(buttonT, 'disable');
    	dom.removeClass(submitEl.parentNode, 'loading');
    	dom.addClass(buttonT, 'bold');

    };

    function handleSubmit(e){
       event.preventDefault(e);
       eStartSubmit.fire();
       submitForm();
    };

    var submitCallback = {
        success: function(o){

            handleFinishLoading();
            eSubmitSuccess.fire();
            var err = false;
            var returnObj = eval('(' + o.responseText + ')');

            for(i in returnObj.errors) {
                err = true;

                header = '';
                body = '';

                len = returnObj.errors.length;

                header += returnObj.errors[i].title;
                body += returnObj.errors[i].body;

                var args = {};
                args.eheader = header;
                args.ebody = body;
                eError.fire(args);
                break;
            }


            var captionText = '';
            var lastUpdateTime = '';
            if(returnObj.content.caption_hash){
                captionText = returnObj.content.caption_hash.caption;
                lastUpdateTime = returnObj.content.caption_hash.lastUpdateTime;
            }
            eChangedCaption.fire(captionText, lastUpdateTime);
        },
        failure: function(o){
            //eSubmitFailure.fire();
            handleFinishLoading();

            var args = {
            	eheader:"Connection Failure",
            	ebody:"Sorry, we could not connect to Yahoo!'s servers, check your internet connection"
            	}
            eError.fire(args);
        }
    }

    return{
        init:function(){
           setUpLinks();

        },
        setFormAction:function(fAct){
            formAction = fAct;
        },
        setFocus:function(){
            var inputEl = document.getElementById('desc');
            inputEl.focus();
        },
        setCaptionAction:function(action){
            captionAction = action;
        },
		disable:function(){
			
		},
		enable:function(){
			
		},
        submitClicked:eSubmitClicked,
        cancelClicked:eCancelClicked,
        startSubmit:eStartSubmit,
        submitSuccess:eSubmitSuccess,
        submitFailure:eSubmitFailure,
        displayed:eDisplayed,
        changedCaption:eChangedCaption,
        error:eError
    }
}
