// ===================================================================
//
// Colorpicker Author: Matt Kruse <matt@mattkruse.com>
// WWW: http://www.mattkruse.com/
// This version has been altered for the iso housebuilder,
// please visit Matt Kruse's website
// for a recent version of the great color picker
// =============================================================


function getAnchorPosition(anchorname) {
        // This function will return an Object with x and y properties
        var useWindow=false;
        var coordinates=new Object();
        var x=0,y=0;
        // Browser capability sniffing
        var use_gebi=false, use_css=false, use_layers=false;
        if (document.getElementById) { use_gebi=true; }
        else if (document.all) { use_css=true; }
        else if (document.layers) { use_layers=true; }
        // Logic to find position
         if (use_gebi && document.all) {
                x=AnchorPosition_getPageOffsetLeft(document.all[anchorname]);
                y=AnchorPosition_getPageOffsetTop(document.all[anchorname]);
                }
        else if (use_gebi) {
                var o=document.getElementById(anchorname);
                x=AnchorPosition_getPageOffsetLeft(o);
                y=AnchorPosition_getPageOffsetTop(o);
                }
         else if (use_css) {
                x=AnchorPosition_getPageOffsetLeft(document.all[anchorname]);
                y=AnchorPosition_getPageOffsetTop(document.all[anchorname]);
                }
        else if (use_layers) {
                var found=0;
                for (var i=0; i<document.anchors.length; i++) {
                        if (document.anchors[i].name==anchorname) { found=1; break; }
                        }
                if (found==0) {
                        coordinates.x=0; coordinates.y=0; return coordinates;
                        }
                x=document.anchors[i].x;
                y=document.anchors[i].y;
                }
        else {
                coordinates.x=0; coordinates.y=0; return coordinates;
                }
        coordinates.x=x;
        coordinates.y=y;
        return coordinates;
        }


function AnchorPosition_getPageOffsetLeft (el) {
        var ol=el.offsetLeft;
        while ((el=el.offsetParent) != null) { ol += el.offsetLeft; }
        return ol;
        }
function AnchorPosition_getWindowOffsetLeft (el) {
        return AnchorPosition_getPageOffsetLeft(el)-document.body.scrollLeft;
        }
function AnchorPosition_getPageOffsetTop (el) {
        var ot=el.offsetTop;
        while((el=el.offsetParent) != null) { ot += el.offsetTop; }
        return ot;
        }
function AnchorPosition_getWindowOffsetTop (el) {
        return AnchorPosition_getPageOffsetTop(el)-document.body.scrollTop;
        }


function PopupWindow_getXYPosition(anchorname) {
        var coordinates;
        if (this.type == "WINDOW") {
                coordinates = getAnchorWindowPosition(anchorname);
                }
        else {
                coordinates = getAnchorPosition(anchorname);
                }
        this.x = coordinates.x;
        this.y = coordinates.y;
        }
// Set width/height of DIV/popup window
function PopupWindow_setSize(width,height) {
        this.width = width;
        this.height = height;
        }
// Fill the window with contents
function PopupWindow_populate(contents) {
        this.contents = contents;
        this.populated = false;
        }
// Set the URL to go to
function PopupWindow_setUrl(url) {
        this.url = url;
        }
// Set the window popup properties
function PopupWindow_setWindowProperties(props) {
        this.windowProperties = props;
        }

function PopupWindow_refresh() {
        if (this.divName != null) {
                // refresh the DIV object
                if (this.use_gebi) {
                        document.getElementById(this.divName).innerHTML = this.contents;
                        }
                else if (this.use_css) {
                        document.all[this.divName].innerHTML = this.contents;
                        }
                else if (this.use_layers) {
                        var d = document.layers[this.divName];
                        d.document.open();
                        d.document.writeln(this.contents);
                        d.document.close();
                        }
                }
        else {
                if (this.popupWindow != null && !this.popupWindow.closed) {
                        if (this.url!="") {
                                this.popupWindow.location.href=this.url;
                                }
                        else {
                                this.popupWindow.document.open();
                                this.popupWindow.document.writeln(this.contents);
                                this.popupWindow.document.close();
                        }
                        this.popupWindow.focus();
                        }
                }
        }
function PopupWindow_showPopup(anchorname) {
        this.getXYPosition(anchorname);
        this.x += this.offsetX;
        this.y += this.offsetY;
        if (!this.populated && (this.contents != "")) {
                this.populated = true;
                this.refresh();
                }
        if (this.divName != null) {
                // Show the DIV object
                if (this.use_gebi) {
                        document.getElementById(this.divName).style.left = this.x + "px";
                        document.getElementById(this.divName).style.top = this.y+"px";
                        document.getElementById(this.divName).style.visibility = "visible";
                        }
                else if (this.use_css) {
                        document.all[this.divName].style.left = this.x;
                        document.all[this.divName].style.top = this.y;
                        document.all[this.divName].style.visibility = "visible";
                        }
                else if (this.use_layers) {
                        document.layers[this.divName].left = this.x;
                        document.layers[this.divName].top = this.y;
                        document.layers[this.divName].visibility = "visible";
                        }
                }
        else {
                if (this.popupWindow == null || this.popupWindow.closed) {
                        // If the popup window will go off-screen, move it so it doesn't
                        if (this.x<0) { this.x=0; }
                        if (this.y<0) { this.y=0; }
                        if (screen && screen.availHeight) {
                                if ((this.y + this.height) > screen.availHeight) {
                                        this.y = screen.availHeight - this.height;
                                        }
                                }
                        if (screen && screen.availWidth) {
                                if ((this.x + this.width) > screen.availWidth) {
                                        this.x = screen.availWidth - this.width;
                                        }
                                }
                        var avoidAboutBlank = window.opera || ( document.layers && !navigator.mimeTypes['*'] ) || navigator.vendor == 'KDE' || ( document.childNodes && !document.all && !navigator.taintEnabled );
                        this.popupWindow = window.open(avoidAboutBlank?"":"about:blank","window_"+anchorname,this.windowProperties+",width="+this.width+",height="+this.height+",screenX="+this.x+",left="+this.x+",screenY="+this.y+",top="+this.y+"");
                        }
                this.refresh();
                }
        }

function PopupWindow_hidePopup() {
        if (this.divName != null) {
                if (this.use_gebi) {
                        document.getElementById(this.divName).style.visibility = "hidden";
                        }
                else if (this.use_css) {
                        document.all[this.divName].style.visibility = "hidden";
                        }
                else if (this.use_layers) {
                        document.layers[this.divName].visibility = "hidden";
                        }
                }
        else {
                if (this.popupWindow && !this.popupWindow.closed) {
                        this.popupWindow.close();
                        this.popupWindow = null;
                        }
                }
        }

function PopupWindow_isClicked(e) {
        if (this.divName != null) {
                if (this.use_layers) {
                        var clickX = e.pageX;
                        var clickY = e.pageY;
                        var t = document.layers[this.divName];
                        if ((clickX > t.left) && (clickX < t.left+t.clip.width) && (clickY > t.top) && (clickY < t.top+t.clip.height)) {
                                return true;
                                }
                        else { return false; }
                        }
                else if (document.all) { // Need to hard-code this to trap IE for error-handling
                        var t = window.event.srcElement;
                        while (t.parentElement != null) {
                                if (t.id==this.divName) {
                                        return true;
                                        }
                                t = t.parentElement;
                                }
                        return false;
                        }
                else if (this.use_gebi && e) {
                        var t = e.originalTarget;
                        while (t.parentNode != null) {
                                if (t.id==this.divName) {
                                        return true;
                                        }
                                t = t.parentNode;
                                }
                        return false;
                        }
                return false;
                }
        return false;
        }


function PopupWindow_hideIfNotClicked(e) {
        if (this.autoHideEnabled && !this.isClicked(e)) {
                this.hidePopup();
                }
        }

function PopupWindow_autoHide() {
        this.autoHideEnabled = true;
        }

function PopupWindow_hidePopupWindows(e) {
        for (var i=0; i<popupWindowObjects.length; i++) {
                if (popupWindowObjects[i] != null) {
                        var p = popupWindowObjects[i];
                        p.hideIfNotClicked(e);
                        }
                }
        }
// Run this immediately to attach the event listener
function PopupWindow_attachListener() {
        if (document.layers) {
                document.captureEvents(Event.MOUSEUP);
                }
        window.popupWindowOldEventListener = document.onmouseup;
        if (window.popupWindowOldEventListener != null) {
                document.onmouseup = new Function("window.popupWindowOldEventListener(); PopupWindow_hidePopupWindows();");
                }
        else {
                document.onmouseup = PopupWindow_hidePopupWindows;
                }
        }

function PopupWindow() {
        if (!window.popupWindowIndex) { window.popupWindowIndex = 0; }
        if (!window.popupWindowObjects) { window.popupWindowObjects = new Array(); }
        if (!window.listenerAttached) {
                window.listenerAttached = true;
                PopupWindow_attachListener();
                }
        this.index = popupWindowIndex++;
        popupWindowObjects[this.index] = this;
        this.divName = null;
        this.popupWindow = null;
        this.width=0;
        this.height=0;
        this.populated = false;
        this.visible = false;
        this.autoHideEnabled = false;

        this.contents = "";
        this.url="";
        this.windowProperties="toolbar=no,location=no,status=no,menubar=no,scrollbars=auto,resizable,alwaysRaised,dependent,titlebar=no";
        if (arguments.length>0) {
                this.type="DIV";
                this.divName = arguments[0];
                }
        else {
                this.type="WINDOW";
                }
        this.use_gebi = false;
        this.use_css = false;
        this.use_layers = false;
        if (document.getElementById) { this.use_gebi = true; }
        else if (document.all) { this.use_css = true; }
        else if (document.layers) { this.use_layers = true; }
        else { this.type = "WINDOW"; }
        this.offsetX = 0;
        this.offsetY = 0;
        // Method mappings
        this.getXYPosition = PopupWindow_getXYPosition;
        this.populate = PopupWindow_populate;
        this.setUrl = PopupWindow_setUrl;
        this.setWindowProperties = PopupWindow_setWindowProperties;
        this.refresh = PopupWindow_refresh;
        this.showPopup = PopupWindow_showPopup;
        this.hidePopup = PopupWindow_hidePopup;
        this.setSize = PopupWindow_setSize;
        this.isClicked = PopupWindow_isClicked;
        this.autoHide = PopupWindow_autoHide;
        this.hideIfNotClicked = PopupWindow_hideIfNotClicked;
        }


ColorPicker_targetInput = null;
function ColorPicker_writeDiv() {
        document.writeln("<div id=\"cpdiv\" STYLE=\"position:absolute;visibility:hidden;\"> </DIV>");
        }

function ColorPicker_show(anchorname) {
        this.showPopup(anchorname);
        }

function ColorPicker_pickColor(color,obj) {
        obj.hidePopup();
        pickColor(color);
        }


function pickColor(color) {
        if (ColorPicker_targetInput==null) {
                alert("Target Input is null, which means you either didn't use the 'select' function or you have no defined your own 'pickColor' function to handle the picked color!");
                return;
                }
        ColorPicker_targetInput.value = color;
        }
function ColorPicker_select(inputobj,linkname) {
        /*if (inputobj.type!="text" && inputobj.type!="hidden" && inputobj.type!="textarea") {
                alert("colorpicker.select: Input object passed is not a valid form input object");
                window.ColorPicker_targetInput=null;
                return;
                }      */
        window.ColorPicker_targetInput = inputobj;
        this.show(linkname);
        }
function ColorPicker_highlightColor(c) {
        var thedoc = (arguments.length>1)?arguments[1]:window.document;
        var d = thedoc.getElementById("colorPickerSelectedColor");
        d.style.backgroundColor = c;
        d = thedoc.getElementById("colorPickerSelectedColorValue");
        d.innerHTML = c;
        }

function ColorPicker() {
        var windowMode = false;
        if (arguments.length==0) {
                var divname = "colorPickerDiv";
                }
        else if (arguments[0] == "window") {
                var divname = '';
                windowMode = true;
                }
        else {
                var divname = arguments[0];
                }

        if (divname != "") {
                var cp = new PopupWindow(divname);
                }
        else {
                var cp = new PopupWindow();
                cp.setSize(225,250);
                }

        // Object variables
        cp.currentValue = "#FFFFFF";

        // Method Mappings
        cp.writeDiv = ColorPicker_writeDiv;
        cp.highlightColor = ColorPicker_highlightColor;
        cp.show = ColorPicker_show;
        cp.select = ColorPicker_select;


       var colors =new Array("#7B3712","#E78C8C","#A35454","#A36C54","#CA6C43","#B14B1F","#BD9A70",
       "#D8C67E","#EBE1CE","#F3DAC3","#F4C092","#F8ECD0","#EBF8D0","#D2DEDB","#D2DEDB","#DAD2DE",
       "#ECD5E8","#C4D4E7","#D7D2F9","#BAC6F4","#BAE8F4","#C0C5CB","#D9D172","#835115","#B16707",
       "#B15307","#7C4912","#B06135","#ECEEBA","#ECEEBA","#9EAE98","#8D9B6A","#C0D491","#6A918F",
       "#8798AB","#A26F47","#8A902B","#9F89A6","#9E3F19","#EDB097","#E9B264","#9D2317","#986834","#D04F2C",
       "#3D5F88","#B3C1D1","#4382CF","#495981","#106D8B","#564B89","#C2DCC0","#A1DD6C","#D09DD9","#BFDEF8","#E4A213",
       "#A87E7A","#719B5C","#DFB2DB","#C53420","#70866D","#86816D","#CDC5A6","#1B4A7B","#88AACE","#6B7D8F",
       "#46586B","#1E4B78","#6B906E","#E7CF84","#545E7A");
        var total = colors.length;
        var width = 10;
        var cp_contents = "";
        var windowRef = (windowMode)?"window.opener.":"";
        if (windowMode) {
                cp_contents += "<html><head><title>select color</title></head>";
                cp_contents += "<body marginwidth='0' marginheight='0' leftmargin='0' topmargin='0'><center>";
                }
        cp_contents += "<table style='background-color:#ADB688;border:none' summary='colortable' cellspacing='1' cellpadding='0'>";
        var use_highlight = (document.getElementById || document.all)?true:false;
        for (var i=0; i<total; i++) {
                if ((i % width) == 0) { cp_contents += "<tr>"; }
                if (use_highlight) { var mo = 'onmouseover="'+windowRef+'ColorPicker_highlightColor(\''+colors[i]+'\',window.document)"'; }
                else { mo = ""; }
                cp_contents += '<td style="background-color:'+colors[i]+'"><a style="display:block;width:15px;height:15px;" href="#" onclick="'+windowRef+'ColorPicker_pickColor(\''+colors[i]+'\','+windowRef+'window.popupWindowObjects['+cp.index+']);return false;" '+mo+' style="text-decoration:none;">&nbsp;</a></td>';
                if ( ((i+1)>=total) || (((i+1) % width) == 0)) {
                        cp_contents += "</TR>";
                        }
                }

        if (document.getElementById) {
                var width1 = Math.floor(width/2);
                var width2 = width = width1;
                cp_contents += "<tr><td colspan='"+width1+"' bgcolor='#ffffff' id='colorPickerSelectedColor'>&nbsp;</td><td colspan='"+width2+"' align='center' id='colorPickerSelectedColorValue'>#ffffff</td></tr>";
                }
        cp_contents += "</table>";
        if (windowMode) {
                cp_contents += "</center></body></html>";
                }

        cp.populate(cp_contents+"\n");
        cp.offsetY = 25;
        cp.autoHide();
        return cp;
        }


cp = new ColorPicker("cpdiv");
