﻿function TextBox($elt) {
	var self = this;
	self.$elt = $elt;

	self.Init = function () {
	    self.$elt.focus(self.HandleFocus);
	    self.$elt.blur(self.HandleBlur);
	    self.Name = self.$elt.data('name');
	    self.Key = self.$elt.data('name');
	    self.$elt.bind('invalid', self.Invalid);
	    self.$elt.bind('valid', self.Valid);
	};

	self.Invalid = function (e) {
	    self.$elt.addClass('ui-error');
	};

	self.Valid = function (e) {
	    self.$elt.removeClass('ui-error');
	};

	self.HandleFocus = function() {
		self.oldVal = self.$elt.val();
	};
	
	self.HandleBlur = function() {
		if(self.oldVal != self.$elt.val())
			self.$elt.trigger('ValueChanged');
	};
	
	self.GetValue = function() {
		return self.$elt.val();
	};
	
	self.SetValue = function(value) {
		self.$elt.val(value);
	};

    self.SetError = function () {
        $('label[for="' + self.$elt.attr('id') + '"]').addClass("ui-error");
    };

    self.SetWarning = function () {
        $('label[for="' + self.$elt.attr('id') + '"]').addClass("ui-warning");
    };

	self.SetValid = function() {
	    $('label[for="' + self.$elt.attr('id') + '"]').removeClass("ui-error").removeClass("ui-warning");
	};
	
	self.SetStatus = function(columnInfo) {
		self.SetValid();
		if(columnInfo.isError) {
			self.SetError();
		}
		else if (columnInfo.isWarning) {
			self.SetWarning();
		}
		
		self.SetValue(columnInfo.Value);
	};
}
$.fn.TextBox = function(elt) {
	$(this).each(function(i, ele) {
		var $elt = $(ele);
		if($elt.data('object')) return;
		$elt.data('object', new TextBox($elt));
		$elt.data('object').Init();
	});
	
	return this;
};

function CheckBox($elt) {
	var self = this;
	self.$elt = $elt;
	self.Name = $elt.find('input').eq(0).attr('name');
	self.Key = $elt.find('input').eq(0).attr('name');

	self.GetValue = function() {
		var retval = [];
		self.$elt.find('input:checked').each(function(i, ele) {
			retval.push($(ele).val());
		});
		
		return retval;
	};
}

$.fn.CheckBox = function(elt) {
	$(this).each(function(i, ele) {
		var $elt = $(ele);
		if($elt.data('object')) return;
		$elt.data('object', new CheckBox($elt));
	});
	
	return this;
};

function SelectList($elt) {
    var self = this;
    self.$elt = $elt;

    self.Init = function () {
        self.$elt.change(self.Change);
        self.Name = self.$elt.data('name');
        self.Key = self.$elt.data('name');

    };

    self.Change = function() {
        self.$elt.trigger('ValueChanged');
    };

    self.GetValue = function() {
        return self.$elt.val();
    };

    self.SetValid = function () {
        $('label[for="' + self.$elt.attr('id') + '"]').removeClass("ui-error");
    };

    self.SetValue = function (val) {
        self.$elt.find('[value="' + val + '"]').attr('selected', 'selected');
    };

    self.SetError = function () {
        $('label[for="' + self.$elt.attr('id') + '"]').addClass("ui-error");
    };

    self.SetWarning = function () {
        $('label[for="' + self.$elt.attr('id') + '"]').addClass("ui-warning");
    };
	
	self.SetStatus = function(columnInfo) {
		self.SetValid();
		if(columnInfo.isError) {
			self.SetError();
		}
		else if (columnInfo.isWarning) {
			self.SetWarning();
		}
		
		self.SetValue(columnInfo.Value);
	};
}

$.fn.SelectList = function (elt) {
    $(this).each(function (i, ele) {
        var $elt = $(ele);
        if ($elt.data('object')) return;
        $elt.data('object', new SelectList($elt));
        $elt.data('object').Init();
    });

    return this;
};

function HiddenField($elt) {
	var self = this;
	self.$elt = $elt;
	self.Name = self.$elt.attr('name');
	self.Key = self.$elt.data('name');

	self.GetValue = function() { return self.$elt.val(); };
}
$.fn.HiddenField = function(elt) {
	$(this).each(function(i, ele) {
		var $elt = $(ele);
		if($elt.data('object')) return;
		$elt.data('object', new HiddenField($elt));
	});
};

function RadioButton($elt) {
	var self = this;
	self.$elt = $elt;
	self.Name = $elt.find('input').eq(0).attr('name');
	self.Key = $elt.find('input').eq(0).attr('name');

	self.Init = function () {
	    self.$elt.bind('invalid', self.Invalid);
	    self.$elt.bind('valid', self.Valid);
	    self.$elt.change(self.HandleOptional);
	};

	self.Invalid = function (e) {
	    self.$elt.find('.ui-controlgroup-label').addClass('ui-error');
	    self.$elt.find('.ui-controlgroup-controls').addClass('ui-error');
	};

	self.Valid = function (e) {
	    self.$elt.find('.ui-controlgroup-label').removeClass('ui-error');
	    self.$elt.find('.ui-controlgroup-controls').removeClass('ui-error');
	};

	self.GetValue = function() {
		return self.$elt.find('input:checked').val();
    };

    self.HandleOptional = function (e) {
        if ($(e.target).is('.js-optional') || $(e.target).closest('.js-optionalfield').length == 1)
            self.$elt.find('.js-optionalfield').removeClass('hidden');
        else
            self.$elt.find('.js-optionalfield').addClass('hidden');
    };
}

$.fn.RadioButton = function (elt) {
    $(this).each(function (i, ele) {
        var $elt = $(ele);
        if ($elt.data('object')) return;
        $elt.data('object', new RadioButton($elt));
        $elt.data('object').Init();
    });

    return this;
};

$.fn.SubmitButton = function($elt) {
	$(this).each(function(i, ele) {
		var $elt = $(ele);
		$elt.click(function() { $elt.trigger('SubmitClicked'); });		
	});
}
