YAHOO.namespace('uv');
var YUE = YAHOO.util.Event,
	YUD = YAHOO.util.Dom;
	
YAHOO.uv.textCounter = function(textarea_el, max, feedback_el) {         	
	var ta = YUD.get(textarea_el),
		feedback = YUD.get(feedback_el);
		
	var showCountdown = function() {
		feedback.style.visibility = 'visible';
	};
	
	var hideCountdown = function() {
		feedback.style.visibility = 'hidden';
	}; 
	
	var checkLength = function() {
		var valueLength = ta.value.length;
		var valueRemaining = max - valueLength;
		if (valueRemaining < 0) {
			YUD.addClass(feedback,'textred');
			YUD.removeClass(feedback,'textgray');
			ta.value = ta.value.substr(0,max);
		} else {
			YUD.addClass(feedback,'textgray');
			YUD.removeClass(feedback,'textred');
		}   
		
		feedback.innerHTML = valueRemaining +' of ' + max + ' characters left';
	};
	
	YUE.on(ta, 'keyup', checkLength);
    YUE.on(ta, 'focus', showCountdown);
    YUE.on(ta, 'blur', hideCountdown);
    YUE.on(ta, 'click', checkLength); 
};


YAHOO.uv.stringify = function(obj) {
	var arr = [];
	for (var key in obj) {
		arr.push(key+'='+escape(obj[key]));
	}                              
	return arr.join('&');
};



YAHOO.uv.getUrl = function(url,params) {     
	var pstr = '', urllist, path, pairs;
	var s = url.replace(/^\?|#.*$/g, ''); 
	
	//parse url and parameters
	urllist = s.split('?');
    path = urllist[0];
	if (urllist.length>=2) {
		var qs = urllist[1];
		pairs = qs.split('&');
		for (var i=0; i < pairs.length; i++) {
			var parts = pairs[i].split('=');
			if(!params.hasOwnProperty(parts[0])) params[parts[0]] = parts[1];
		}
	}                         

	//put parameters back on
  	if (params) {         
		pairs = []; 
		for (var i in params) {      
		    if (!params[i]) continue;
			pairs.push(i+'='+params[i]);
		}
		pstr = pairs.join('&');
	}    
	            
	//add query string back on
	if (pstr) path += '?' + pstr;
	
	return path;
};

YAHOO.uv.getUrlParam = function(name) {
    name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
    var regexS = "[\\?&]"+name+"=([^&#]*)";
    var regex = new RegExp(regexS);
    var results = regex.exec(window.location.href);
    return (results == null) ? '' : results[1];
};
     

YAHOO.uv.cloneObject = function(obj) {
    if (obj == null || typeof(obj) != 'object') return obj;
    var temp = new obj.constructor(); 
    for (var key in obj) temp[key] = YAHOO.uv.cloneObject(obj[key]);
    
    return temp;
};


YAHOO.uv.toggleVisibility = function(el){ 
	var YUD = YAHOO.util.Dom;
	el = YUD.get(el);
	
	var display = YUD.getStyle(el, 'display');
	(display && display == 'block') ? YUD.setStyle(el, 'display', 'none') : YUD.setStyle(el, 'display', 'block');
		
	return YUD.getStyle(el, 'display');	
};

YAHOO.uv.hide = function(el){ 
    var YUD = YAHOO.util.Dom;
    el = YUD.get(el);
    
    YUD.setStyle(el, 'display', 'none');
        
    return YUD.getStyle(el, 'display'); 
};

YAHOO.uv.show = function(el){ 
    var YUD = YAHOO.util.Dom;
    el = YUD.get(el);
    
    YUD.setStyle(el, 'display', 'block');
        
    return YUD.getStyle(el, 'display'); 
};
  

YAHOO.uv.toggleDisplayClass = function(el){ 
	var YUD = YAHOO.util.Dom;
	el = YUD.get(el);                                         
	YUD.hasClass(el, 'nodisplay') ? YUD.removeClass(el, 'nodisplay') : YUD.addClass(el, 'nodisplay');
};

YAHOO.uv.waitPanel = function(){
	var panel = new YAHOO.widget.Panel("wait",  
				{ width:"300px", 
				  fixedcenter:true, 
				  close:false, 
				  draggable:false, 
				  zindex:5,
				  modal:true,
				  visible:false
				} 
	);
	
	panel.setHeader("Loading...");
	panel.setBody('<img src="http://us.i1.yimg.com/us.yimg.com/i/us/per/gr/gp/rel_interstitial_loading.gif" />');
	panel.render(document.body);
	
	return panel;
}; 


YAHOO.uv.clearDefaultText = function() {
	var classname = 'cleardefault';
	var inputs = YAHOO.util.Dom.getElementsByClassName(classname);
                                        
	var clearDefaultText = function(e) {				
		var target = YAHOO.util.Event.getTarget(e);
		YAHOO.util.Dom.removeClass(target, classname);

		if (target.value == target.defaultText) {
			target.value = '';
		}
	};
	
	var replaceDefaultText = function(e) {
		var target = YAHOO.util.Event.getTarget(e);        
		if (target.value == '' && target.defaultText) {
			YAHOO.util.Dom.addClass(target, classname);
			target.value = target.defaultText;
		}
	};
	                                                        
	var init = function() {
		YAHOO.util.Dom.batch(inputs, function(el, o) {
			YAHOO.util.Event.on(el, 'focus', clearDefaultText);
			YAHOO.util.Event.on(el, 'blur', replaceDefaultText);
			if (el.value != '') {
				el.defaultText = el.value;
			}
		});      		
	}();    
};


YAHOO.uv.placeholderSupport = function(id) {            
	var classname='placeholder', inputs, textareas, el;
	
	if (id) {
        inputs = YUD.get(id);
	} else {
        inputs = document.getElementsByTagName('input');
        textareas = document.getElementsByTagName('textarea');
	}
	
	var supportsPlaceholder = function() {
		var i = document.createElement('input');
		return 'placeholder' in i;
	};                             
	
	var clearDefaultText = function(e) {   
		var target = YUE.getTarget(e);
		YUD.removeClass(target, classname);

		if (target.value == target.placeholder) {
			target.value = '';
		}
	};
	
	var replaceDefaultText = function(e) {
		var target = YUE.getTarget(e);        
		if (target.value == '' && target.placeholder) {
			YUD.addClass(target, classname);
			target.value = target.placeholder;
		}
	};
	
	var init = function() {
		if (!supportsPlaceholder()) { 
			YUD.batch(inputs, function(el, o) {
				el.placeholder = el.getAttribute('placeholder');
				if (el.placeholder && (el.value == '' || el.value == el.placeholder)) {
					if (!YUD.hasClass(el, classname)) {
						YUD.addClass(el, classname);
					}
					el.value = el.placeholder;
				} else {
					YUD.removeClass(el, classname);
				}
				
				YUE.on(el, 'focus', clearDefaultText);
				YUE.on(el, 'blur', replaceDefaultText);
			});
			
			YUD.batch(textareas, function(el, o) {
				el.placeholder = el.getAttribute('placeholder');
				if (el.value == '' && el.placeholder) {
					if (!YUD.hasClass(el, classname)) {
						YUD.addClass(el, classname);
					}
					el.value = el.placeholder;
				} else {
					YUD.removeClass(el, classname);
				}
				
				YUE.on(el, 'focus', clearDefaultText);
				YUE.on(el, 'blur', replaceDefaultText);
			});
		} else {
			YUD.batch(inputs, function( el, o) {
				YUD.removeClass(el, classname);
			});
			
			YUD.batch(textareas, function( el, o) {
				YUD.removeClass(el, classname);
			});
		}
	}();
};
YAHOO.uv.placeholderSupport();

YAHOO.uv.privacyOverlay = function(pos) {
	var top,left,width,height,topoffset;
	
	var panel = new YAHOO.widget.Panel("privacypanel", {
	    fixedcenter: false, 
	    constraintoviewport: false, 
	    underlay: "shadow",
	 	modal:true,
	    close: false, 
	    visible: false, 
	    draggable: false
	});
	                                         
	width = document.documentElement.clientWidth;
	height = document.documentElement.clientHeight;
	topOffset = Math.max(document.body.scrollTop,document.documentElement.scrollTop);
	
	top = topOffset + 450;
	left = (width / 2) - 245;
	
	if (YAHOO.env.ua.ie) {
		top +=30;
	}
	
	panel.render(document.body);
	YAHOO.util.Dom.removeClass('privacypanel', 'nodisplay');
	YAHOO.util.Dom.setXY('privacypanel', [left,top]);
	
	return panel;
};

YAHOO.uv.areyousureOverlay = function() {	
	var panel = new YAHOO.widget.Panel("areyousurepanel", {
	    fixedcenter: true, 
	    constraintoviewport: false, 
	    underlay: "shadow",
	 	modal:true,
	    close: true, 
	    visible: false, 
	    draggable: false
	});             

	YAHOO.util.Dom.removeClass('areyousurepanel', 'nodisplay');
	panel.setHeader('Are you sure?');
	panel.render(document.body);	
	
	YAHOO.util.Event.on('cancelbtn', 'click', function(){ panel.hide() });
	
	return panel;
}; 

YAHOO.uv.voter = function(votecontainer) {    
    var io,
		votelinks = votecontainer.getElementsByTagName('a'),
		positivecounter = YUD.getElementsByClassName('positivecount','span',votecontainer)[0],
		negativecounter = YUD.getElementsByClassName('negativecount','span',votecontainer)[0];

	var unselectAll = function() {
		var classname,newclassname,thumbEl;
		
		for (var i=0; i < votelinks.length; i++) {
		    thumbEl = votelinks[i].getElementsByTagName('span')[0];
			classname = YUD.getAttribute(thumbEl,'class');
			
			if (classname.indexOf('selected') > 0) {   
				newclassname = classname.substr(0,classname.indexOf('selected'));
				YUD.replaceClass(thumbEl,classname,newclassname);
			}
		}
	};
	
	var updateMkp = function(e, args) {
		var vote = parseInt(args[1]['update']),
		    thumbEl = args[1]['thumbEl'];  
		
		switch(vote) {
			case 1: 
				classname = 'thumbsupselected';
				break;                         
	   		case 0: 
				classname = 'thumbsdownselected';
				break; 	               
		}
	   
		if (vote >= 0) {  		    				        				
			YUD.setAttribute(thumbEl, 'class', classname);  
			incrementCounter(vote);  							
		} else {
			decrementCounter(vote);
		}
	};
	
	var spinningWheel = function(thumbEl) {
	    var link = thumbEl.parentNode,
	        oldMkp = link.innerHTML;
	        
            link.innerHTML = '<img src="/media/img/spinning_wheel.gif" style="padding:0px 5px 0px 5px;background:#fafafa;">';
	};
	
	var incrementCounter = function(vote) {  		     
		if (vote == 1) {                          
			positivecounter.innerHTML = parseInt(positivecounter.innerHTML) + 1;
		} else {
			negativecounter.innerHTML = parseInt(negativecounter.innerHTML) + 1;
		}				                   
	};
	
	var decrementCounter = function(vote) {      
		if (vote == -1) {                          
			positivecounter.innerHTML = parseInt(positivecounter.innerHTML) - 1;
		} else {
			negativecounter.innerHTML = parseInt(negativecounter.innerHTML) - 1;
		}		 
	};
	
	YUD.batch(votelinks, function(el,o) {
        var thumbEl = el.getElementsByTagName('span')[0];
	    
		io = YAHOO.uv.AjaxWrapper(el, {});
		io.subscribe('trigger',unselectAll);
		io.subscribe('update',function(e, args) {
            args[1]['thumbEl'] = thumbEl;
            updateMkp(e,args);
        });
	});
};

YAHOO.uv.reviewGesture = function(gestureContainer) {    
    var io,
        links = gestureContainer.getElementsByTagName('a');

    var spinningWheel = function(textEl) {
        textEl.innerHTML = '<img src="/media/img/spinning_wheel.gif" style="padding:0px 17px 0px 17px;background:#fafafa;position:relative;top:5px;height:17px;">';
    };
    
    
    YUD.batch(links, function(el,o) {
        var textEl = el.parentNode;
        YAHOO.uv.AjaxWrapper(el, {
            trigger: function() {
                spinningWheel(textEl)
            },
            done: function(ev, args) {
                var msg = YUD.getElementsByClassName('inventory_item_action','span',el.parentNode)[0];
                textEl.innerHTML = '<span class="small_secondary_btn_inactive">Done!</span>';
            }
        });
    });
};

YAHOO.uv.inviter = function(inviteContainer) {    
    var io,
        links = YUD.getElementsByClassName('invitelink','a',inviteContainer);

    var spinningWheel = function(textEl) {
        textEl.innerHTML = '<img src="/media/img/spinning_wheel.gif" class="actionButton" style="padding:0px 17px 0px 17px;background:#fafafa;position:relative;top:5px;height:17px;">';
    };
    
    
    YUD.batch(links, function(el,o) {
        var textEl = el.parentNode;
        var YUD = YAHOO.util.Dom;
        tel = YUD.get(textEl);
        if (YUD.hasClass(tel, 'invite')) {
            YAHOO.uv.AjaxWrapper(el, {
                trigger: function() {
                    spinningWheel(textEl);
                },
                done: function(ev, args) {
                    textEl.innerHTML = '<span class="small_secondary_btn_inactive actionButton">Following!</span>';
                }
            });
        } else {
            var textEl = textEl.parentNode;
            var YUD = YAHOO.util.Dom;
            tel = YUD.get(textEl);
            if (YUD.hasClass(tel, 'invite')) {
                YAHOO.uv.AjaxWrapper(el, {
                    trigger: function() {
                        spinningWheel(textEl);
                    },
                    done: function(ev, args) {
                        textEl.innerHTML = '<span class="small_secondary_btn_inactive actionButton">Following!</span>';
                    }
                });
            }
        }
    });
};

YAHOO.uv.ConfirmationOverlay = function(id) {
    var el = YUD.get(id),
        closebtn;
        
    if (!el) return false;
    
    YUD.removeClass(el,'nodisplay');    
    closebtn = el.getElementsByTagName('input')[0];
    var panel = new YAHOO.widget.Panel(el,  
				{ width:"300px", 
				  fixedcenter:true, 
				  close:true, 
				  draggable:false, 
				  zindex:5,
				  modal:true,
				  visible:false
				} 
	);
	
	panel.render();                 
	panel.show();
	
	YUE.on(closebtn, 'click', function() {
	    panel.hide();
	});
};

YAHOO.uv.DropdownRedirect = function(id) {
    var el = YUD.get(id);
        
    if (!el) return false;
    
    YUE.on(el,'change',function() {
        window.location = this.options[this.selectedIndex].value;
    });
};
         
                                  
/*
 * renders an overlay allowing the viewing user to send private fb msg
 */
YAHOO.uv.FacebookPrivateMessage = function(url) {
    var width, height, top, left, fbwindow;                                                    
    
    width = 750;
	// heigh of 240 works perfectly in my FF, but is too small in my Chrome.  But Chrome only appear to take increments of 100.
    height = 400;
    left = (document.documentElement.clientWidth - width) / 2;
    
    //close existing window
    if (fbwindow && fbwindow.closed == false) {
        fbwindow.close();
    }   
    
	fbwindow = window.open(url, 'fbwindow',"resizable=1, width="+width+", height="+height+", left="+left+", top="+200);
    fbwindow.focus();
};

YAHOO.uv.FacebookUserLiked = function(skip) {
    var handleEvent = {
        success: function(e,args) { },

        failure:function(e,args){ },

        start:function(e,args){ },

        complete:function(e,args){ }
    };

    var callback = {
        customevents:{
            onStart:handleEvent.start,
            onComplete:handleEvent.complete,
            onSuccess:handleEvent.success,
            onFailure:handleEvent.failure
        },
        scope: handleEvent
    };

    var jsonobj = { skip: skip ? 1 : 0 };
    
    YAHOO.util.Connect.asyncRequest('POST', '/site/fbliked/', callback, YAHOO.uv.stringify(jsonobj));
};
