
function Dec2Hex16 (x) {
    x = Math.floor(x);
    if (x>=10) x++;
    return unescape("%"+(30+x));
}

function Hex2Dec16 (h) {
    var d = h.charCodeAt(0);
    if (d>=97) d-=87;
    else if (d>=65) d -= 55;
    else d -= 48;
    return d;  
}

function Hex2Dec256 (h) {
    return Hex2Dec16(h.charAt(0))*16+Hex2Dec16(h.charAt(1));
}

function Dec2Hex256(x) {
    return ""+Dec2Hex16(Math.floor(x/16))+Dec2Hex16(x%16);
}

function HexAdd256(h,d) {
    var x = Hex2Dec256(h);
    x += d;
    x = x%256;
    if (x<0) x+=256;
    return Dec2Hex256(x);
}   

function colorComplement(s) {
    var r = Hex2Dec256(s.substr(0,2));  
    var g = Hex2Dec256(s.substr(2,2));  
    var b = Hex2Dec256(s.substr(4,2));  
    
    var rc = (r<128)?"FF":"00";
    var gc = (g<128)?"FF":"00";
    var bc = (b<128)?"FF":"00";
    return ""+rc+gc+bc;
}

