/*
 * This file is part of the Echo Point Project. This project is a collection of
 * Components that have extended the Echo Web Application Framework.
 * 
 * Version: MPL 1.1/GPL 2.0/LGPL 2.1
 * 
 * The contents of this file are subject to the Mozilla Public License Version
 * 1.1 (the "License"); you may not use this file except in compliance with the
 * License. You may obtain a copy of the License at http://www.mozilla.org/MPL/
 * 
 * Software distributed under the License is distributed on an "AS IS" basis,
 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
 * the specific language governing rights and limitations under the License.
 * 
 * Alternatively, the contents of this file may be used under the terms of
 * either the GNU General Public License Version 2 or later (the "GPL"), or the
 * GNU Lesser General Public License Version 2.1 or later (the "LGPL"), in which
 * case the provisions of the GPL or the LGPL are applicable instead of those
 * above. If you wish to allow use of your version of this file only under the
 * terms of either the GPL or the LGPL, and not to allow others to use your
 * version of this file under the terms of the MPL, indicate your decision by
 * deleting the provisions above and replace them with the notice and other
 * provisions required by the GPL or the LGPL. If you do not delete the
 * provisions above, a recipient may use your version of this file under the
 * terms of any one of the MPL, the GPL or the LGPL.
 */

/*
 * This file was take from the Echo2 project and hence is
 * Copyright (C) 2002-2005 NextApp, Inc.  It was made part of the
 * EchoPoint on 16/5/05.  We dont use the base button JS because it
 * doesnt quite work for us.
 */

/* 
 * This file is part of the Echo Web Application Framework (hereinafter "Echo").
 * Copyright (C) 2002-2005 NextApp, Inc.
 *
 * Version: MPL 1.1/GPL 2.0/LGPL 2.1
 *
 * The contents of this file are subject to the Mozilla Public License Version
 * 1.1 (the "License"); you may not use this file except in compliance with
 * the License. You may obtain a copy of the License at
 * http://www.mozilla.org/MPL/
 *
 * Software distributed under the License is distributed on an "AS IS" basis,
 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
 * for the specific language governing rights and limitations under the
 * License.
 *
 * Alternatively, the contents of this file may be used under the terms of
 * either the GNU General Public License Version 2 or later (the "GPL"), or
 * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
 * in which case the provisions of the GPL or the LGPL are applicable instead
 * of those above. If you wish to allow use of your version of this file only
 * under the terms of either the GPL or the LGPL, and not to allow others to
 * use your version of this file under the terms of the MPL, indicate your
 * decision by deleting the provisions above and replace them with the notice
 * and other provisions required by the GPL or the LGPL. If you do not delete
 * the provisions above, a recipient may use your version of this file under
 * the terms of any one of the MPL, the GPL or the LGPL.
 */

//__________________
// Object EPButton

EPButton = function() { };

EPButton.STATE_DEFAULT = 0;
EPButton.STATE_ROLLOVER = 1;
EPButton.STATE_PRESSED = 2;

EPButton.setIcon = function(elementId, newIconUri) {
    var iconElement = document.getElementById(elementId + "_icon");
    iconElement.src = newIconUri;
};

EPButton.updateVisualState = function(buttonElement, newState) {
    // Prevent TextNode events.
    if (buttonElement.nodeType != 1) {
        return;
    }
    var newStyle, newIcon;
    switch (newState) {
    case EPButton.STATE_ROLLOVER:
        newStyle = EchoDomPropertyStore.getPropertyValue(buttonElement.id, "rolloverStyle");
        newIcon = EchoDomPropertyStore.getPropertyValue(buttonElement.id, "rolloverIcon");
        break;
    case EPButton.STATE_PRESSED:
        newStyle = EchoDomPropertyStore.getPropertyValue(buttonElement.id, "pressedStyle");
        newIcon = EchoDomPropertyStore.getPropertyValue(buttonElement.id, "pressedIcon");
        break;
    default:
        newIcon = EchoDomPropertyStore.getPropertyValue(buttonElement.id, "defaultIcon");
    }
    EP.applyStyle(buttonElement);
    if (newStyle) {
       	EP.applyStyle(buttonElement, newStyle);
    }
    if (newIcon) {
    	EPButton.setIcon(buttonElement.id, newIcon);
    }
};


EPButton.doAction = function(echoEvent) {
    var elementId = echoEvent.registeredTarget.getAttribute("id");
	if (! EchoClientEngine.verifyInput(elementId)) {
        return;
    }	
    if ("false" == EchoDomPropertyStore.getPropertyValue(elementId, "serverNotify")) {
        return;
    }
    if (document.selection && document.selection.empty) {
        document.selection.empty();
    }
    EchoClientMessage.setActionValue(elementId, "click");
    EchoServerTransaction.connect();
};

EPButton.doPressed = function(echoEvent) {
    EchoDomUtil.preventEventDefault(echoEvent);
    var elementId = echoEvent.registeredTarget.getAttribute("id");
	if (! EchoClientEngine.verifyInput(elementId)) {
        return;
    }	
    var eventTarget = echoEvent.registeredTarget;
    EPButton.updateVisualState(eventTarget, EPButton.STATE_PRESSED);
};

EPButton.doReleased = function(echoEvent) {
    EPButton.updateVisualState(echoEvent.registeredTarget, EPButton.STATE_DEFAULT);
};

EPButton.doRolloverEnter = function(echoEvent) {
    var elementId = echoEvent.registeredTarget.getAttribute("id");
	if (! EchoClientEngine.verifyInput(elementId)) {
        return;
    }	
    EPButton.updateVisualState(echoEvent.registeredTarget, EPButton.STATE_ROLLOVER);
};

EPButton.doRolloverExit = function(echoEvent) {
    EPButton.updateVisualState(echoEvent.registeredTarget, EPButton.STATE_DEFAULT);
};
