/**
 * Custom button state handler for enabling/disabling button state. 
 * Called when the carousel has determined that the previous button
 * state should be changed.
 * Specified to the carousel as the configuration
 * parameter: prevButtonStateHandler
 **/

var Event = YAHOO.util.Event;
 
var handlePrevButtonState = function(type, args) {

    var enabling = args[0];
    var leftImage = args[1];
    if(enabling) {
        leftImage.src = "../images/btnCarouselLeftEnabled.gif";    
    } else {
        leftImage.src = "../images/btnCarouselLeftDisabled.gif";    
    }
    
};

/**
 * Custom button state handler for enabling/disabling button state. 
 * Called when the carousel has determined that the next button
 * state should be changed.
 * Specified to the carousel as the configuration
 * parameter: nextButtonStateHandler
 **/
var handleNextButtonState = function(type, args) {

    var enabling = args[0];
    var rightImage = args[1];
    
    if(enabling) {
        rightImage.src = "../images/btnCarouselRightEnabled.gif";
    } else {
        rightImage.src = "../images/btnCarouselRightDisabled.gif";
    }
};


/**
 * You must create the carousel after the page is loaded since it is
 * dependent on an HTML element (in this case 'mycarousel'.) See the
 * HTML code below.
 **/
var carousel; // for ease of debugging; globals generally not a good idea
var pageLoad = function() {
    carousel = new YAHOO.extension.Carousel("siteCarousel", 
        {
            numVisible:        5,
            animationSpeed:    0.25,
            scrollInc:         5,
            navMargin:         20,
            prevElement:     "prev-arrow",
            nextElement:     "next-arrow",
            prevButtonStateHandler:   handlePrevButtonState,
            nextButtonStateHandler:   handleNextButtonState
        }
    );

    var notificationHandler = {
    	notify : function(message, type) {
    		if(!YAHOO.util.Dom.get("notifyPanel")) {
    			this.notifyPanel = new YAHOO.widget.Panel("notifyPanel", 
                                                          { width: "320px",
    			                                            modal: true,
                                                            fixedcenter: true,
                                                            visible:true,
                                                            draggable: false,
                                                            close:true});
    			this.notifyPanel.setHeader(type);
    			this.notifyPanel.setBody(message);
    			this.notifyPanel.render(document.body);
                this.notifyPanel.hideEvent.subscribe(this.closeEvent, this.notifyPanel);
    		}
    	},
    	closeEvent: function(e, attr, panel) {
			// using timed clearing to avoid timing problems
			var timedClearing = function(dialog) {
				var tC = window.setTimeout(function(){dialog.destroy();}, 50);
			};
            
            timedClearing(panel);
    	}
    };

    var showConfirmationPanel = function(e, form, title, message, showButtons) {
        YAHOO.util.Event.preventDefault(e);
        
        var container = document.createElement("div");

        var p = document.createElement("p");
        p.appendChild(document.createTextNode(message ));
        container.appendChild(p);

        if (showButtons !== false) {
            var div = document.createElement("div");
            var b = document.createElement("button");
            b.setAttribute("type", "button");
            b.setAttribute("id", "btnRemoveAccountAccept");
            YAHOO.util.Event.on(b, "click", function(e) { form.submit(); } );
            b.appendChild(document.createTextNode("Ja"));
            div.appendChild(b);
    
            b = document.createElement("button");
            b.setAttribute("type", "button");
            b.setAttribute("id", "btnRemoveAccountDecline");
            YAHOO.util.Event.on(b, "click", function(e) { notificationHandler.closeEvent(null, [], notificationHandler.notifyPanel ); } );
            b.appendChild(document.createTextNode("Nee"));
            div.appendChild(b);
            
            container.appendChild(div);
        }
                   
        notificationHandler.notify(container, title);
    };

    var initRemoveButton = function(div) {
        var button = YAHOO.util.Dom.getElementsByClassName("btnMyIDsubmit", "button", div)[0];
        var form = YAHOO.util.Dom.getAncestorByTagName(button, "form");
        if (button && form) {
            YAHOO.util.Event.on(button, "click", function(e) { showConfirmationPanel(e, form, button.getAttribute("title"), "Weet je zeker dat je je wilt afmelden voor " + button.getAttribute("title").replace("Afmelden voor ", "") + "?"); } );
        }
    };
    
    var removeAccountConfirmation = function(e) {
        var text = "Weet je zeker dat je je account wil opheffen?";
        var showButtons = true;
        showConfirmationPanel(e, this.form, "Account verwijderen", text, showButtons); 
    };
    
    YAHOO.util.Dom.getElementsByClassName("profileRow", "div", "bd", initRemoveButton);
    YAHOO.util.Event.on("btnRemoveAllSites", "click", function(e) { showConfirmationPanel(e, this.form, "Afmelden voor alle sites", "Weet je zeker dat je je wilt afmelden voor alle sites?"); });
    YAHOO.util.Event.on("btnRemoveMyAccount", "click", removeAccountConfirmation );
    YAHOO.util.Event.on("btnChangeMyPassword", "click", function(e) { YAHOO.util.Dom.setStyle("divChangePassword", "display", "block"); } );
    YAHOO.util.Event.on("btnCancelChangePassword", "click", function(e) { YAHOO.util.Dom.setStyle("divChangePassword", "display", "none"); } );
    YAHOO.util.Event.on("btnChangeEmail", "click", function(e) { YAHOO.util.Dom.setStyle("divChangeEmail", "display", "block"); } );
    YAHOO.util.Event.on("btnCancelChangeEmail", "click", function(e) { YAHOO.util.Dom.setStyle("divChangeEmail", "display", "none"); } );
    YAHOO.util.Event.on("fldPasswordCheck2", "change", function(e) { /* validate passwords - implemented server side only */ } );

};
YAHOO.util.Event.addListener(window, 'load', pageLoad);


/**
 * Overrides _ajaxValidateUsername in mijnid-validate.js
 */
function _ajaxValidateUsername(event, params) {
    var username = Dom.get(params.fieldId).value;

    var callback =  {

        cache: false,

        success: function(o) {
            var errorMsgSpan = Dom.get('userNameTakenErrorMsg');

            if(o.responseText == "success") {
                Dom.removeClass(errorMsgSpan.parentNode, "myIDhasUsernameError");
                errorMsgSpan.style.display = 'none';
            } else {
                Dom.addClass(errorMsgSpan.parentNode, "myIDhasUsernameError");
                errorMsgSpan.style.display = 'block';
            }
        },

        failure: function(o) {
            // silently ignore, username will be checked on server anyway
        }
    };
    
    YAHOO.util.Connect.asyncRequest('GET', params.ajaxCheckUrl + "?username=" + username , callback, null);
}

function _hideAjaxUsernameMsg() {
    var errorMsgSpan = Dom.get('userNameTakenErrorMsg');
    errorMsgSpan.style.display = 'none';
    Dom.removeClass(errorMsgSpan.parentNode, "myIDhasUsernameError");
}

Event.addListener("myIDusername", "blur", _ajaxValidateUsername, {ajaxCheckUrl: "checkUserNameAvailable.do", fieldId: "myIDusername"});
Event.addListener("myIDusername", "focus", _hideAjaxUsernameMsg);

// Event listeners for passportCreated page
Event.on("wrongEmailLink", "click", function(e) { YAHOO.util.Dom.setStyle("myIDmodule", "display", "block"); YAHOO.util.Dom.setStyle("wrongEmailLink", "display", "none");} );
Event.on("cancelWrongEmailLink", "click", function(e) { YAHOO.util.Dom.setStyle("myIDmodule", "display", "none"); YAHOO.util.Dom.setStyle("wrongEmailLink", "display", "inline");} );