/**
 * ColorPicker
 * @author unknown
 * Modified 20091021 by CarbonPhyber <dwortham@gaiaonline.com>
 * Upgraded to use YUI2 + yShort
 */

function Picker(picker, hiddenAnchor) {
	this.currentId = null;
	this.hiddenAnchor = hiddenAnchor;
	this.picker = picker;
	
	ThisPicker = this;
    yShort('a.color-picker-swatch').bind('click', function(evt){
        YAHOO.util.Event.preventDefault(evt);
        var color = ThisPicker.getSwatchColor(this);
        ThisPicker.set(color);
    });
    yShort('a.color-picker-swatch').bind('mouseover', function(evt){
        YAHOO.util.Event.preventDefault(evt);
        var color = ThisPicker.getSwatchColor(this);
        ThisPicker.bgcolor(color);
    });
    yShort('a.color-picker-swatch').bind('mouseout', function(evt){
        YAHOO.util.Event.preventDefault(evt);
        var color = ThisPicker.getSwatchColor(this);
        ThisPicker.retcolor();
    });
};

Picker.prototype.getSwatchColor = function(elem) {
    var elemId = elem.href;
    
    // if the browser converted the anchor to a fully qualified URL...
    if(elemId.substr(0, 1) != '#') {
        // extract anchor from href... we're going to use it as a CSS3 selector for the element to show
        var beginAnchor = elemId.lastIndexOf('#');
        elemId = elem.href.substr(beginAnchor);
    }
    
    return elemId;
};

Picker.prototype.find = function(n, d) { //v4.01
    var p,i,x;
    if(!d) d=document;
    if((p=n.indexOf("?"))>0&&parent.frames.length){
        d=parent.frames[n.substring(p+1)].document;
        n=n.substring(0,p);
    }
    if(!(x=d[n])&&d.all)
        x=d.all[n];
    for(i=0;!x&&i<d.forms.length;i++)
        x=d.forms[i][n];
    for(i=0;!x&&d.layers&&i<d.layers.length;i++)
        x=this.find(n,d.layers[i].document);
    if(!x && d.getElementById)
        x=d.getElementById(n);
    return x;
}

Picker.prototype.snap = function() { //v2.65 by PVII
 var x,y,ox,bx,oy,p,tx,a,b,k,d,da,e,el,tw,q0,xx,yy,w1,pa='px',args=arguments;a=parseInt(a);
 if(document.layers||window.opera){pa='';}
    for(k=0;k<(args.length);k+=4){
        if((g=this.find(args[k]))!=null){
            if((el=this.find(args[k+1]))!=null){
             a=parseInt(args[k+2]);b=parseInt(args[k+3]);x=0;y=0;ox=0;oy=0;p="";tx=1;
             da="document.all['"+args[k]+"']";
             if(document.getElementById){
                 d="document.getElementsByName('"+args[k]+"')[0]";
                 if(!eval(d)){
                     d="document.getElementById('"+args[k]+"')";
                        if(!eval(d)){d=da;}
                 }
             }else if(document.all){d=da;}
             if(document.all||document.getElementById){
                 while(tx==1){
                     p+=".offsetParent";
                     if(eval(d+p)){
                         x+=parseInt(eval(d+p+".offsetLeft"));
                         y+=parseInt(eval(d+p+".offsetTop"));
						 
						 
						 
                     }else{tx=0;}
                }
                ox=parseInt(g.offsetLeft);
                oy=parseInt(g.offsetTop);
                tw=x+ox+y+oy;

                if(tw==0||(navigator.appVersion.indexOf("MSIE 4")>-1&&navigator.appVersion.indexOf("Mac")>-1)){
                  ox=0;oy=0;
                  if(g.style.left){
                      x=parseInt(g.style.left);y=parseInt(g.style.top);
                  }else{
                      w1=parseInt(el.style.width);bx=(a<0)?-5-w1:-10;a=(Math.abs(a)<1000)?0:a;b=(Math.abs(b)<1000)?0:b;
                      x=document.body.scrollLeft+event.clientX+bx;y=document.body.scrollTop+event.clientY;}
                  }
            }else if(document.layers){
                x=g.x;y=g.y;q0=document.layers,dd="";
                for(var s=0;s<q0.length;s++){
                    dd='document.'+q0[s].name;
                    if(eval(dd+'.document.'+args[k])){
                        x+=eval(dd+'.left');
                        y+=eval(dd+'.top');
                        break;
                    }
                }
           }

           e=(document.layers)?el:el.style;xx=parseInt(x+ox+a),yy=parseInt(y+oy+b);
           if(navigator.appVersion.indexOf("MSIE 5")>-1 && navigator.appVersion.indexOf("Mac")>-1){
               xx+=parseInt(document.body.leftMargin);yy+=parseInt(document.body.topMargin);
           }
           e.left=xx+pa;e.top=yy+pa;
            }}}
};

Picker.prototype.bgcolor = function(v){
	if (!this.currentId)
	   return;
	this.find(this.currentId).style.backgroundColor = v;
};

Picker.prototype.retcolor = function(v){
	if (!this.currentId) return;
	this.find(this.currentId).style.backgroundColor = this.oldColor;
};

Picker.prototype.set = function(v){
	if (!this.currentId)
	   return;
	this.find(this.currentId + '_save').value = v;
	this.find(this.currentId).style.backgroundColor = v;
	this.find(this.currentId + '_img').alt = v;
	this.hide();
};

Picker.prototype.hide = function(){
	this.snap(this.hiddenAnchor,this.picker,0,0);
	yShort(this.find(this.picker)).addClass('yui-hidden');
	this.currentId = null;
};

Picker.prototype.show = function(){
	if (!this.currentId)
	   return;
	yShort(this.find(this.picker)).removeClass('yui-hidden');
	this.snap(this.currentId,this.picker,this.offX,this.offY);
};

Picker.prototype.toggle = function(id,leftRight){
	if(id==this.currentId) {
		this.hide();
	} else {
		this.currentId = id;
		this.oldColor = this.find(this.currentId).style.backgroundColor;
		if (leftRight=='left') {
			this.offX = 0; 
			this.offY = 0;
		} else {     
			this.offX = 0;
			this.offY = 0;
		}
		this.show();
	}
};

