package  commongrid.utils.summary {
    

    
    import mx.collections.CursorBookmark;
    import mx.collections.IViewCursor;
    import mx.collections.SummaryObject;
    
    public class Div  {
    
        private var numeratorField:String;
        private var denominatorField:String;
        
        public function Div(numeratorString:String,denominatorString:String) {
            this.numeratorField = numeratorString;    
            this.denominatorField = denominatorString;    
        }
        
        public function getCallbackFunction():Function{
            return myFunc1;
        }
        /** Use this only for GroupingCollection1 */
        private function myFunc1(summaryObj:SummaryObject,depth:int,current:Object, dataField:String, operation:String):Number{
            if(summaryObj[numeratorField] == null){
                summaryObj[numeratorField] = 0.0;
            }
            if(summaryObj[denominatorField] == null){
                summaryObj[denominatorField] = 0.0;
            }
            var numeratorTotal:Number = Number(summaryObj[numeratorField]);
            var denominatorTotal:Number = Number(summaryObj[denominatorField]);
            
            var result:Number = (denominatorTotal == 0)?0.0:(numeratorTotal/denominatorTotal);
                            
            //trace(dataField+'='+numeratorField+'/'+denominatorField+'===>>>'+numeratorTotal+'/'+denominatorTotal+' = '+result);
            
            
            switch(operation){
                case "BPS":    
                    return (10000)* result;
                default://CPS
                    return result;
             }
        }
        
        private function myFunc(iterator:IViewCursor, dataField:String, operation:String):Number{
                if (!iterator){
                    return 0.0;
                }    
                if (!iterator.current){
                    return 0.0;
                }                            
                if(!iterator.current.hasOwnProperty(numeratorField)){
                    return 0.0;
                }
                if(!iterator.current.hasOwnProperty(denominatorField)){
                       return 0.0;
                }
                
                var numeratorTotal:Number = 0;
                var denominatorTotal:Number = 0;
                       
                iterator.seek( CursorBookmark.FIRST );//reset
                 
                while (!iterator.afterLast){
                    var o:Object = iterator.current;                        
                    numeratorTotal += Number(o[numeratorField]);
                    denominatorTotal += Number(o[denominatorField]);
                    iterator.moveNext();
                }             
                
                var result:Number = (denominatorTotal == 0)?0.0:(numeratorTotal/denominatorTotal);
                
                
                
                switch(operation){
                    case "BPS":    
                        return (10000)* result;
                    default://CPS
                        return result;
                }
            }
    }
}