function em2px(em) {return parseFloat(em)*16;}
            function em2percent(em) {return parseFloat(em)*100;}
            function em2pt(em) {return parseFloat(em)*12;}
            function em2pc(em) {return parseFloat(em)}
            function em2inch(em) {return parseFloat(em)/6}
            function em2mm(em) {return (parseFloat(em)/6)*25.4}
            function em2cm(em) {return (parseFloat(em)/6)*2.54}
            
            function px2em(px) {return parseFloat(px)/16;}
            function px2pc(px) {return parseFloat(px)/16;}
            function px2pt(px) {return (parseFloat(px)*12)/16;}
            function px2percent(px) {return (parseFloat(px)*100)/16;}
            function px2cm(px) {return em2cm(parseFloat(px)/16)}
            function px2mm(px) {return em2mm(parseFloat(px)/16)}
            function px2inch(px) {return em2inch(parseFloat(px)/16)}
            
            function pt2em(pt) {return parseFloat(pt)/12;}
            function pt2pc(pt) {return parseFloat(pt)/12;}
            function pt2px(pt) {return (parseFloat(pt)*16)/12;}
            function pt2percent(pt) {return (parseFloat(pt)*100)/12;}
            function pt2cm(pt) {return em2cm(parseFloat(pt)/12)}
            function pt2mm(pt) {return em2mm(parseFloat(pt)/12)}
            function pt2inch(pt) {return em2inch(parseFloat(pt)/12)}
            
            function percent2em(percent) {return parseFloat(percent)/100;}
            function percent2pc(percent) {return parseFloat(percent)/100;}
            function percent2px(percent) {return (parseFloat(percent)/100)*16;}
            function percent2pt(percent) {return (parseFloat(percent)/100)*12;}
            function percent2cm(pt) {return em2cm(parseFloat(percent)/100)}
            function percent2mm(pt) {return em2mm(parseFloat(percent)/100)}
            function percent2inch(pt) {return em2inch(parseFloat(percent)/100)}
            
            function pc2inch(pc) {return parseFloat(pc)/6}
            function pc2mm(pc) {return (parseFloat(pc)/6)*25.4}
            function pc2cm(pc) {return (parseFloat(pc)/6)*2.54}
            function pc2px(pc) {return parseFloat(pc)*16;}
            function pc2em(pc) {return parseFloat(pc);}
            function pc2percent(pc) {return parseFloat(pc)*100;}
            function pc2pt(em) {return parseFloat(em)*12;}
            
            function inch2pc(inch) {return parseFloat(inch)*6}
            function inch2cm(inch) {return parseInt(inch)*2.54}
            function inch2mm(inch) {return parseInt(inch)*25.4}
            function inch2percent(inch) {return (parseFloat(inch)*6)*100}
            function inch2em(inch) {return parseFloat(inch)*6}
            function inch2pt(inch) {return parseFloat(inch)*6*12}
            function inch2px(inch) {return parseFloat(inch)*6*16}
            
            //function pc2mm(pc) {1 PostScript pica = 4.23333333 millimeters}
            function cm2inch(cm) {return parseInt(cm)/2.54}
            function cm2mm(cm) {return parseInt(cm)*10}
            function cm2pc(cm) {return (parseInt(cm)/25.4)*6}
            function cm2pt(cm) {return (parseInt(cm)/25.4)*6*12}
            function cm2px(cm) {return (parseInt(cm)/25.4)*6*16}
            function cm2em(cm) {return (parseInt(cm)/25.4)*6}
            function cm2percent(cm) {return (parseInt(cm)/25.4)*6*100}
            
            function mm2inch(mm) {return parseInt(mm)/0.254}
            function mm2cm(mm) {return parseInt(mm)/10}
            function mm2pc(mm) {return (parseInt(mm)/2.54)*6}
            function mm2pt(mm) {return (parseInt(mm)/2.54)*6*12}
            function mm2px(mm) {return (parseInt(mm)/2.54)*6*16}
            function mm2em(mm) {return (parseInt(mm)/2.54)*6}
            function mm2percent(cm) {return (parseInt(cm)/2.54)*6*100}
            
            function getPrecision(unit) {
                if (unit=='px') return 0;
                else return 4;
            }
            
            function getUnit(val) {
                if (val.substr(val.length-1,1)=='%') return '%';
                if (val.substr(val.length-2,2)=='em') return 'em';
                if (val.substr(val.length-2,2)=='pt') return 'pt';
                if (val.substr(val.length-2,2)=='px') return 'px';
                if (val.substr(val.length-2,2)=='pc') return 'pc';
                if (val.substr(val.length-2,2)=='cm') return 'cm';
                if (val.substr(val.length-2,2)=='in') return 'in';
                if (val.substr(val.length-2,2)=='mm') return 'mm';
                return '';
            }
            
            function toUnit(val, unit) {
                switch (unit) {
                    case '%':
                         if (val.substr(val.length-1, 1)=='%') return parseFloat(val.substr(0, val.length-1));
                         
                         if (val.substr(val.length-2, 2)=='em') return em2percent(val.substr(0, val.length-2));
                         
                         if (val.substr(val.length-2, 2)=='pc') return pc2percent(val.substr(0, val.length-2));
                         
                         if (val.substr(val.length-2, 2)=='pt') return pt2percent(val.substr(0, val.length-2));
                         
                         if (val.substr(val.length-2, 2)=='px') return px2percent(val.substr(0, val.length-2));
                         
                         if (val.substr(val.length-2, 2)=='cm') return px2cm(val.substr(0, val.length-2));
                         
                         if (val.substr(val.length-2, 2)=='mm') return px2mm(val.substr(0, val.length-2));
                         
                         if (val.substr(val.length-2, 2)=='in') return px2inch(val.substr(0, val.length-2));
                         
                    break;
                    
                    case 'px':
                         if (val.substr(val.length-2, 2)=='px') return parseFloat(val.substr(0, val.length-2));
                         
                         if (val.substr(val.length-2, 2)=='pt') return pt2px(val.substr(0, val.length-2));
                         
                         if (val.substr(val.length-2, 2)=='pc') return pc2px(val.substr(0, val.length-2));
                         
                         if (val.substr(val.length-2, 2)=='em') return em2px(val.substr(0, val.length-2));
                         
                         if (val.substr(val.length-1, 1)=='%') return percent2px(val.substr(0, val.length-1));
                         
                         if (val.substr(val.length-2, 2)=='in') return inch2px(val.substr(0, val.length-2));
                         
                         if (val.substr(val.length-2, 2)=='cm') return cm2px(val.substr(0, val.length-2));
                         
                         if (val.substr(val.length-2, 2)=='mm') return mm2px(val.substr(0, val.length-2));
                         
                    break;
                    
                    case 'pt':
                         if (val.substr(val.length-2, 2)=='pt') return parseFloat(val.substr(0, val.length-2));
                         
                         if (val.substr(val.length-2, 2)=='px') return px2pt(val.substr(0, val.length-2));
                         
                         if (val.substr(val.length-2, 2)=='pc') return pc2pt(val.substr(0, val.length-2));
                         
                         if (val.substr(val.length-2, 2)=='em') return em2pt(val.substr(0, val.length-2));
                         
                         if (val.substr(val.length-1, 1)=='%') return percent2pt(val.substr(0, val.length-1));
                         
                         if (val.substr(val.length-2, 2)=='cm') return cm2pt(val.substr(0, val.length-2));
                         
                         if (val.substr(val.length-2, 2)=='mm') return mm2pt(val.substr(0, val.length-2));
                         
                         if (val.substr(val.length-2, 2)=='in') return inch2pt(val.substr(0, val.length-2));
                         
                    break;
                    
                    case 'pc':
                    case 'em':
                         if (val.substr(val.length-2, 2)=='pc') return parseFloat(val.substr(0, val.length-2));
                         
                         if (val.substr(val.length-2, 2)=='em') return parseFloat(val.substr(0, val.length-2));
                         
                         if (val.substr(val.length-2, 2)=='pt') return pt2pc(val.substr(0, val.length-2));
                         
                         if (val.substr(val.length-2, 2)=='px') return px2pc(val.substr(0, val.length-2));
                         
                         if (val.substr(val.length-1, 1)=='%') return percent2pc(val.substr(0, val.length-1));
                         
                         if (val.substr(val.length-2, 2)=='cm') return cm2pc(val.substr(0, val.length-2));
                         
                         if (val.substr(val.length-2, 2)=='mm') return mm2pc(val.substr(0, val.length-2));
                         
                         if (val.substr(val.length-2, 2)=='in') return inch2pc(val.substr(0, val.length-2));
                         
                    break;
                    
                    case 'cm':
                         if (val.substr(val.length-2, 2)=='cm') return parseFloat(val.substr(0, val.length-2));
                         
                         if (val.substr(val.length-2, 2)=='in') return inch2cm(val.substr(0, val.length-2));
                         
                         if (val.substr(val.length-2, 2)=='mm') return mm2cm(val.substr(0, val.length-2));
                         
                         if (val.substr(val.length-2, 2)=='em') return em2cm(val.substr(0, val.length-2));
                         
                         if (val.substr(val.length-2, 2)=='pc') return pc2cm(val.substr(0, val.length-2));
                         
                         if (val.substr(val.length-2, 2)=='pt') return pt2cm(val.substr(0, val.length-2));
                         
                         if (val.substr(val.length-2, 2)=='px') return px2cm(val.substr(0, val.length-2));
                         
                         if (val.substr(val.length-1, 1)=='%') return percent2cm(val.substr(0, val.length-1));
                         
                    break;
                    
                    case 'mm':
                         if (val.substr(val.length-2, 2)=='mm') return parseFloat(val.substr(0, val.length-2));
                         
                         if (val.substr(val.length-2, 2)=='in') return inch2mm(val.substr(0, val.length-2));
                         
                         if (val.substr(val.length-2, 2)=='cm') return mm2mm(val.substr(0, val.length-2));
                         
                         if (val.substr(val.length-2, 2)=='em') return em2mm(val.substr(0, val.length-2));
                         
                         if (val.substr(val.length-2, 2)=='pc') return pc2mm(val.substr(0, val.length-2));
                         
                         if (val.substr(val.length-2, 2)=='pt') return pt2mm(val.substr(0, val.length-2));
                         
                         if (val.substr(val.length-2, 2)=='px') return px2mm(val.substr(0, val.length-2));
                         
                         if (val.substr(val.length-1, 1)=='%') return percent2mm(val.substr(0, val.length-1));
                         
                    break;
                    
                    case 'in':
                         if (val.substr(val.length-2, 2)=='in') return parseFloat(val.substr(0, val.length-2));
                         
                         if (val.substr(val.length-2, 2)=='cm') return inch2inch(val.substr(0, val.length-2));
                         
                         if (val.substr(val.length-2, 2)=='mm') return mm2inch(val.substr(0, val.length-2));
                         
                         if (val.substr(val.length-2, 2)=='em') return em2inch(val.substr(0, val.length-2));
                         
                         if (val.substr(val.length-2, 2)=='pc') return pc2inch(val.substr(0, val.length-2));
                         
                         if (val.substr(val.length-2, 2)=='pt') return pt2inch(val.substr(0, val.length-2));
                         
                         if (val.substr(val.length-2, 2)=='px') return px2inch(val.substr(0, val.length-2));
                         
                         if (val.substr(val.length-1, 1)=='%') return percent2inch(val.substr(0, val.length-1));
                         
                    break;
                    
                    
                    
                }
                    return parseFloat(val);
            }
        
        $(document).ready(function(){
                          $('#total').focus();
                  $("textarea").change(
                        function(){
                                switch (this.name) {
                                    case 'size_bigger':
                                        
                                        var unit=getUnit(this.value);
                                        size=toUnit(this.value,'px');
                                        var smaller=0.618033989*size;
                                        smaller=toUnit(smaller.toString(), 'px');
                                        smaller_rounded=toUnit(smaller.toFixed(getPrecision(unit)).toString()+'px', unit);
                                        
                                        var total=smaller+size;
                                        total_rounded=toUnit(total.toFixed(getPrecision(unit)).toString()+'px', unit);
                                        
                                        $("#li_bigger").attr('innerHTML', this.value);
                                        $("#size_bigger").css("width",size);
                                        
                                        $("#li_smaller").attr('innerHTML', smaller+unit);
                                        $("#size_smaller").css("width",smaller);
                                        $("#size_smaller").val(smaller_rounded+unit);
                                        
                                        $("#li_total").attr('innerHTML', total+unit);
                                        $("#total").css("width",total);
                                        $("#total").val(total_rounded+unit);
                                        $("#prvw").css('width', total);
                                        
                                    break;
                                    
                                    case 'size_smaller':
                                        var unit=getUnit(this.value);
                                        size=toUnit(this.value,'px');
                                        var bigger=1.618033989*size;
                                        bigger=toUnit(bigger.toString(), 'px');
                                        bigger_rounded=toUnit(bigger.toFixed(getPrecision(unit)).toString()+'px', unit);
                                        
                                        var total=bigger+size;
                                        total_rounded=toUnit(total.toFixed(getPrecision(unit)).toString()+'px', unit);
                                        
                                        $("#li_smaller").attr('innerHTML', this.value);
                                        $("#size_smaller").css("width",size);
                                        
                                        $("#li_bigger").attr('innerHTML', bigger+unit);
                                        $("#size_bigger").css("width",bigger);
                                        $("#size_bigger").val(bigger_rounded+unit);
                                        
                                        $("#li_total").attr('innerHTML', total+unit);
                                        $("#total").css("width",total);
                                        $("#total").val(total_rounded+unit);
                                        $("#prvw").css('width', total);
                                        
                                        
                                    break;
                                default:
                                    var unit=getUnit(this.value);
                                    size=toUnit(this.value,'px');
                                    var bigger=0.618033989*size;
                                    bigger=toUnit(bigger.toString(), 'px');
                                    bigger_rounded=toUnit(bigger.toFixed(getPrecision(unit)).toString()+'px', unit);

                                    var smaller=size-bigger;
                                    smaller_rounded=toUnit(smaller.toFixed(getPrecision(unit)).toString()+'px', unit);
                                
                                    $(".total").css("width", size);
                                    $("#size_bigger").css("width", bigger);
                                    $("#size_bigger").val(bigger_rounded+unit);
                                    $("#li_bigger").attr('innerHTML',bigger_rounded+unit);
                                    $("#size_smaller").css("width", smaller);
                                    $("#size_smaller").val(smaller_rounded+unit);
                                    $("#li_smaller").attr('innerHTML',smaller_rounded+unit);
                                    $("#li_total").attr('innerHTML', this.value);
        
                                }
                        }
                    );                          
});
