/*
 * InputDefaultText jQuery Plugin v1.0.0
 *
 */

function InputDefaultHandler(original, eventgroup, inactive_color, active_color, pwdelement) {
    this.pwdelement = pwdelement;
    this.inactive_color = inactive_color;
    this.active_color = active_color;
    this.eventgroup = eventgroup;

    this.default_value = '';
    this.original = original;

    inputt = null;

	if (!$(this.original).data('__dflt')) {
	    $(this.original).data('__dflt', $(this.original));
	}

	if(!this.inactive_color){
		this.inactive_color = $.inputDefaultText.default_colors.inactive_color;
	}

	if(!this.active_color){
		this.active_color = $(this.original).css("color");
	}

	if(!this.active_color){
		this.active_color = $.inputDefaultText.default_colors.active_color;
	}

	if($(this.original).attr('type')=="password"){
		inputt = document.createElement('input');
		inputt.type = 'text';
		$.each($(this.original)[0].attributes, function(index, value){
			if($(value).attr("name")=='type' || $(value).attr("name")=='id' || $(value).attr("name")=='name'){ return; }

			$(inputt).attr($(value).attr("name"), $(value).attr("value"));
		});
		$(inputt).inputDefaultText(eventgroup, this.inactive_color, this.active_color, $(this.original));
		return;
	}

	if(pwdelement){
		$(pwdelement).hide();
		$(this.original).insertBefore(pwdelement);
	}

	$(this.original).css("color", inactive_color);

	if($(this.original)[0].value.length<=0){
		$(this.original)[0].value = $(original)[0].title;
	}

	$(this.original).bind("focus", {focus: true, obj: this}, this.handleEvent);
	//$(original).focus({'focus':true}, this.handleEvent);
    this.bindHandler();
}

InputDefaultHandler.prototype.bindHandler = function() {
	console.log("bind",'inputDefaultText-'+this.eventgroup);
	console.log($(this.original));
    //$(this.original).bind('inputDefaultText-'+this.eventgroup, {focus:false, obj:this}, this.handleEvent);
	$(window).bind('inputDefaultText-'+this.eventgroup, {focus:false, obj:this}, this.handleEvent);
};
InputDefaultHandler.prototype.unbindHandler = function() {
	console.log("unbind",'inputDefaultText-'+this.eventgroup);
	$(window).unbind('inputDefaultText-'+this.eventgroup);
};
InputDefaultHandler.prototype.handleEvent = function(event, additionalargs) {
	focus = event.data.focus;
	obj = event.data.obj;
	value = $(obj.original).attr('value');
	console.log($(obj.original));
	
	if(additionalargs && additionalargs.sourceobj && additionalargs.sourceobj==obj){
		return;
	}

	console.log(additionalargs);
	console.log(event);

    if (obj.default_value.length<=0) {
    	obj.default_value = value;
    }

    console.log("b");
    if (value == obj.default_value) {
    	$(obj.original).attr('value','');
    	$(obj.original).css('color',obj.active_color);
    }

    console.log("c");
    if(obj.pwdelement){
    	console.log("c2");
        $(obj.original).hide();

        console.log("d");
        $(obj.pwdelement).show();
        $(obj.pwdelement).focus();
        $(obj.pwdelement).blur(function() {
        	console.log("b1");
            if($(obj.pwdelement).attr('value') == ''){ // we're in pwdelement this!
            	console.log("b2");
            	$(obj.original).show();
            	$(obj.pwdelement).hide();

            	$(obj.original).css('color', obj.inactive_color);
            	$(obj.original).attr('value', obj.default_value);
            	console.log("b3");
            }
            console.log("b4");
        });
        console.log("e");
    }
    else{
        console.log("f");
        $(obj.original).blur(function() {
          if($(obj.original).attr('value')==''){
        	  $(obj.original).css('color',obj.inactive_color);
        	  $(obj.original).attr('value', obj.default_value);
          }
        });
        console.log("g");
    }
    console.log("h");
    console.log(focus);

    if(focus){
    	//obj.unbindHandler();
    	console.log("trigger", 'inputDefaultText-'+obj.eventgroup);
        $(window).trigger('inputDefaultText-'+obj.eventgroup, {sourceobj: obj});
        //obj.bindHandler();
    }

};


(function($){

	$.fn.inputDefaultText = function(eventgroup, inactive_color, active_color, pwdelement){
        return this.each(function(){
        	  (new InputDefaultHandler(this, eventgroup, inactive_color, active_color, pwdelement));
	      });
	};

	$.inputDefaultText = {
		default_colors: { inactive_color: '#cccccc', active_color: '#000000' },

		getInstance: function(el) {
			return $(el).data('__dflt');
		}
	};
	
})(jQuery);


