﻿
/*************************************************************************
*
* ADOBE CONFIDENTIAL
* ___________________
*
*  Copyright 2008 Adobe Systems Incorporated
*  All Rights Reserved.
*
* NOTICE:  All information contained herein is, and remains
* the property of Adobe Systems Incorporated and its suppliers,
* if any.  The intellectual and technical concepts contained
* herein are proprietary to Adobe Systems Incorporated and its
* suppliers and may be covered by U.S. and Foreign Patents,
* patents in process, and are protected by trade secret or copyright law.
* Dissemination of this information or reproduction of this material
* is strictly forbidden unless prior written permission is obtained
* from Adobe Systems Incorporated.
*
* $DateTime: 2008/04/10 13:35:00 $
*
* Adobe Output Module 2.0
*
* MediaGallery Originally Written by Quality Process Incorporated, Enhanced by
* Adobe System China. Contact Sheet written by Adobe System China.
* 
*
**************************************************************************/

AOM.CS.Keyboards =function() {};

AOM.CS.Keyboards.keyIsAlt = function(event) {
	return (event.keyName == 'Alt') ;
}


AOM.CS.Keyboards.keyIsTab = function(event) {
	return event.keyName == 'Tab';
}

AOM.CS.Keyboards.keyIsDecimal = function(event) {
	var cdecimal = AOM.CS.Locale.getDecimal();
	if (cdecimal == AOM.CS.Locale.DECIMAL_AS_COMMA) {
		return (event.keyName == 'Comma' && !AOM.CS.Keyboards.keyHasModifier(event));
	} else if (cdecimal == AOM.CS.Locale.DECIMAL_AS_DOT) {
		return (event.keyName == 'Decimal' || (event.keyName == 'Period' && !AOM.CS.Keyboards.keyHasModifier(event)));
	} else {
		throw new Error("AOM.CS.Locale.toLocaleString(), decimal must be dot or comma.");
	}
}

AOM.CS.Keyboards.keyIsDelete = function(event) {
	return (event.keyName == 'Backspace') && !(event.ctrlKey);
}

AOM.CS.Keyboards.keyHasModifier = function(event) {
	return (event.shiftKey || event.ctrlKey || event.altKey || event.metaKey);
}

AOM.CS.Keyboards.keyIsNumeric = function(event) {
	return (event.keyName >= '0') 
				&& (event.keyName <= '9')  
				&& !AOM.CS.Keyboards.keyHasModifier(event);
}


AOM.CS.Keyboards.KeyIsLRArrow = function(event) {
	return ((event.keyName == 'Left') || (event.keyName == 'Right')) 
				&& !(event.altKey || event.metaKey);
}

AOM.CS.Keyboards.keyIsMinus = function(event) {
	return (event.keyName == 'Minus') ;
}

AOM.CS.Keyboards.keyIsPlus = function(event) {
	return ((event.keyName == 'Plus')|| (event.keyName == 'Equal' && AOM.CS.Keyboards.keyHasModifier(event)) );
}

AOM.CS.Keyboards.keyIsCopy = function(event) {
	return ( (event.keyName == 'C') && (event.ctrlKey || event.metaKey) );
}

AOM.CS.Keyboards.keyIsPaste = function(event) {
	return ( (event.keyName == 'V') && (event.ctrlKey || event.metaKey) );
}

AOM.CS.Keyboards.keyIsEnter = function(event) {
	return (event.keyName == 'Enter') ;
}

//only number
AOM.CS.Keyboards.rowAndColumnEditKeyBoardHandler = function(event) {
	try {	
		var keyIsOk = AOM.CS.Keyboards.keyIsNumeric(event) 
								|| AOM.CS.Keyboards.keyIsDelete(event)
								|| AOM.CS.Keyboards.KeyIsLRArrow(event) 
								|| AOM.CS.Keyboards.keyIsTab(event)
                				|| AOM.CS.Keyboards.keyIsEnter(event)
								|| AOM.CS.Keyboards.keyIsCopy(event)
								|| AOM.CS.Keyboards.keyIsPaste(event);
								
		if (keyIsOk) {
			//
		} else {
			event.preventDefault();
		}
	} catch(e) {
		AOM.CS.Log.writeError("AOM.CS.Keyboards.rowAndColumnEditKeyBoardHandler() throw an exception:" + e);
	}
}

AOM.CS.Keyboards.numericEditKeyBoardHandler = function(event) {
	try {
		
		var keyIsOk = AOM.CS.Keyboards.keyIsNumeric(event) 
								|| AOM.CS.Keyboards.keyIsDelete(event) 
								|| AOM.CS.Keyboards.keyIsDecimal(event)
								|| AOM.CS.Keyboards.KeyIsLRArrow(event) 
								|| AOM.CS.Keyboards.keyIsTab(event) 
								|| AOM.CS.Keyboards.keyIsEnter(event)
								|| AOM.CS.Keyboards.keyIsCopy(event)
								|| AOM.CS.Keyboards.keyIsPaste(event);
		if (keyIsOk) {
			var text = this.text;
			if (AOM.CS.Locale.existDecimal(text) && AOM.CS.Keyboards.keyIsDecimal(event)) {
				event.preventDefault();
			}
		} else {
			event.preventDefault();
		}
	} catch(e) {
		AOM.CS.Log.writeError("AOM.CS.Keyboards.numericaEditKeyBoardHandler() throw an exception:" + e);
	}
}

//allow real 
AOM.CS.Keyboards.numericStepperEditKeyBoardHandler = function(event) {
	try {
		var keyIsOk = AOM.CS.Keyboards.keyIsNumeric(event) 
								|| AOM.CS.Keyboards.keyIsDelete(event) 
								|| AOM.CS.Keyboards.keyIsDecimal(event)
								|| AOM.CS.Keyboards.KeyIsLRArrow(event) 
								|| AOM.CS.Keyboards.keyIsTab(event)
								|| AOM.CS.Keyboards.keyIsMinus(event)
								|| AOM.CS.Keyboards.keyIsPlus(event)
								|| AOM.CS.Keyboards.keyIsEnter(event)
								|| AOM.CS.Keyboards.keyIsCopy(event)
								|| AOM.CS.Keyboards.keyIsPaste(event);
								
    	if (keyIsOk) {
            var text = this.text;
            if (text.length ==0) {
                if(AOM.CS.Keyboards.keyIsDecimal(event)) {
                    event.preventDefault();
                }
                
            } else if (text.length == 1) {
                if (text == 0 && AOM.CS.Keyboards.keyIsNumeric(event)) {
                    this.text = "";
                }
                if ( text == '-' || text == '+') {
                    if ( AOM.CS.Keyboards.keyIsDecimal(event)) {
                        event.preventDefault();
                    }
                    if (AOM.CS.Keyboards.keyIsPlus(event) || AOM.CS.Keyboards.keyIsMinus(event)) {
                        event.preventDefault();
                    }
                }
            } else {
                if (text.indexOf(".") > 0 && AOM.CS.Keyboards.keyIsDecimal(event)) {
                    event.preventDefault();
                }
                if ( (text.indexOf("+") > -1 || text.indexOf("-") > -1) 
                    && (AOM.CS.Keyboards.keyIsPlus(event) || AOM.CS.Keyboards.keyIsMinus(event)) ) {
                    event.preventDefault();
                }
            }
	   } else {
	   	   event.preventDefault();
	   }
	} catch(e) {
		AOM.CS.Log.writeError("AOM.CS.Keyboards.numericaEditKeyBoardHandler() throw an exception:" + e);
	}
}