var ctrl = {
	ctrls: new Array(),
	callback: new Array(),

	init: function() {
		$('div').each(function() {
			if ($(this).hasClass('check-box') != false || $(this).hasClass('check-box-2') != false) {
				$(this).bind('click', ctrl.onCheckBoxClick);
				
				if (($(this).hasClass('check-box-checked') != false || $(this).hasClass('check-box-2-checked') != false) && ctrl.callback[1] != null) {
					ctrl.callback[1](this.id);
				}
				
			}
			else if ($(this).hasClass('spin-number') != false) {
				$(this).append('<a href="#" class="up-button" onclick="ctrl.onSpinNumberUpButton(\''+this.id+'\');return false;"></a><a href="#" class="down-button" onclick="ctrl.onSpinNumberDownButton(\''+this.id+'\');return false;"></a>')
			}
		});
		
		
		
		$('a').each(function() {
			if ($(this).hasClass('check-box') != false || $(this).hasClass('check-box-2') != false) {
				$(this).bind('click', ctrl.onCheckBoxClick);
				$(this).bind('focus', function() {$(this).css('color', '#d6026b'); });
				$(this).bind('blur', function() {$(this).css('color', ''); });
				$(this).bind('keypress', ctrl.onCheckBoxPress);
				
				if (($(this).hasClass('check-box-checked') != false || $(this).hasClass('check-box-2-checked') != false) && ctrl.callback[1] != null) {
					ctrl.callback[1](this.id);
				}
			}
		});
		
	},
	
	setCheckBoxGroup: function(id, group) {
		this.ctrls[id] = group;
	},
	
	setCheckBoxCallBack: function(callBack) {
		this.callback[1] = callBack;
	},
	
	// Checkbox
	onCheckBoxClick: function() {
		ctrl.checkUncheck(this);
	},
	
	onCheckBoxPress: function(e) {
		switch (e.keyCode) {
			case 13:
			case 32:
				ctrl.checkUncheck(this);
				return false;
				break;
		}
	},
	
	isCheckBoxChecked: function(id) {
		return $('#' + id).hasClass('check-box-checked') || $('#' + id).hasClass('check-box-2-checked');
	},
	
	checkUncheck: function(elm) {
		if ($(elm).css('background-image') != '') {
			$(elm).css('background-image', '');
		}
		
		var type = $(elm).hasClass('check-box-2') ? 2 : 1;
		var className = (type == 1 ? 'check-box-checked' : 'check-box-2-checked');

		if ($(elm).hasClass(className) == false) {	
			$(elm).addClass(className);
		}
		else {
			$(elm).removeClass(className);
		}

		if (ctrl.ctrls[elm.id] != null) {
			for (id in ctrl.ctrls[elm.id]) {
				if (id != elm.id) {
					$('#' + ctrl.ctrls[elm.id][id]).removeClass(className);
				}
			}
		}

		if (ctrl.callback[1] != null) {
			ctrl.callback[1](elm.id);
		}
		
		$(elm).css('color', '');
	}
}

var birthday = {
	get: function() {
		return dd['year'].getVal() + '-' + 
			   dd['month'].getVal() + '-' + 
			   dd['day'].getVal();
	}
}

var dd = new Array();
var _activeDD = null;

$(function() {
	function dropDown(type) {
		var _type = type;
		var _hide = false;
		var _selVal = '';
		var _itemIndex = -1;
		var _findText = "";
		
		this.setVal = function(val) {
			_selVal = val;
		}
		
		this.getVal = function() {
			return _selVal;
		}
		
		function up() {
			_hide = false;
			$(_type + ' .items').scrollTo('-=128px', 10, {queue:true});
		}
		
		function down() {
			_hide = false;
			$(_type + ' .items').scrollTo('+=128px', 10, {queue:true});
		}
		
		function selItem() {
			var data = $(this).attr('id').split('_');
			_selVal = data[1];
			
			$(_type + ' > .item > label').html($(this).html());
			$(_type + ' > div.list > div.selected > label').html($(this).html());
			$(_type + ' > div.list').fadeOut(100);
			
			if ($('#dropdown_sel').length) $('#dropdown_sel').val($(this).html());
		}
		
		function expand() {
			$(_type + ' > div.list').fadeIn(100, function() {
				_itemIndex = -1;
				_findText = "";
				
				if (_activeDD != null && _activeDD != _type) {
					$(_activeDD + ' > div.list').fadeOut(100);
				}
														  
				_activeDD = _type;
				$(document).bind('mouseup', function() {
					if (_hide != false) {
						$(document).unbind('mouseup');
						$(_type + ' > div.list').fadeOut(100);
					}
					_hide = true;
				});
			});
		}
		
		function keyPress(e) {
			var key = e.charCode || e.keyCode;
			if (key >= 48 && key <= 122) {
				_findText += String.fromCharCode(key);
				findText();
				return false;
			}
			return true;
		}
		
		function keyDown(e) {
			
			var key = e.charCode || e.keyCode;
			
			switch (key) {
				case 38:
					if (_itemIndex - 1 >= 0) {
						_itemIndex--;
						
						if (_itemIndex != -1) $(_type + ' .items span:eq('+(_itemIndex+1)+')').css('color', '')
						$(_type + ' .items span:eq('+_itemIndex+')').css('color', '#d6026b');
						
						if (_itemIndex % 8 == 0 && _itemIndex != 0) up();
					}
					return false;
					break;
					
				case 40:
					var length = $(_type + ' .items span').length;
					if (_itemIndex + 1 < length) {
						_itemIndex++;
						
						if (_itemIndex != -1) $(_type + ' .items span:eq('+(_itemIndex-1)+')').css('color', '')
						$(_type + ' .items span:eq('+_itemIndex+')').css('color', '#d6026b');
						
						if (_itemIndex % 8 == 0 && _itemIndex != 0) {
							down();
						}
					}
					return false;
					break;
				
				case 9:
					hide();
					break;
					
				case 27:
					hide();
					return false;
					break;
					
				case 13:
					if (_itemIndex >= 0) $(_type + ' .items span:eq('+_itemIndex+')').click();
					return false;
					break;
					
				case 8:
					_findText = _findText.substr(0, _findText.length - 1);
					findText();
					return false;
					break;
			}
		}
		
		function findText() {
			var label = $(_type + ' > div.list > div.selected > label');
			label.html(_findText);
			label.scrollTo(label.scrollLeft() + 10);
			
			$(_type + ' .items span:eq('+_itemIndex+')').css('color', '');
			
			var items = $(_type + ' .items span');
			for (_itemIndex = 0; _itemIndex < items.length; _itemIndex++) {
				var str = $(items[_itemIndex]).html();
				if (str.substr(0, _findText.length).toUpperCase() == _findText.toUpperCase()) {
					$(_type + ' .items span:eq('+_itemIndex+')').css('color', '#d6026b');
					visibleItem();
					return true;
				}
			}
		}
		
		function visibleItem() {
			var scrollTop = $(_type + ' .items').scrollTop();
			var itemPos = _itemIndex * 16;

			if (itemPos <= scrollTop) {
				$(_type + ' .items').scrollTo(itemPos);
			}
			else if (itemPos >= scrollTop + 128) {
				$(_type + ' .items').scrollTo(itemPos);
			}
		}
		
		function hide() {
			if (_activeDD != null) {
				_itemIndex = -1;
				$(_activeDD + ' > div.list').fadeOut(100);
			}
		}
				
		$(_type + ' .item').bind('click', expand);
		$(_type + ' .item').bind('focus', expand);
		$(_type).bind('keypress', keyPress);
		$(_type).bind('keydown', keyDown);
		
		$(_type + ' .items span').bind('click', selItem);
		$(_type + ' .up').bind('click', up);
		$(_type + ' .down').bind('click', down);
	}

	if ($('.bday').length) {
		dd['day'] = new dropDown('.bday');
		dd['month'] = new dropDown('.bmonth');
		dd['year'] = new dropDown('.byear');

		if (typeof(bd) != 'undefined') {
			dd['day'].setVal(bd.day);
			dd['month'].setVal(bd.mon);
			dd['year'].setVal(bd.year);
		}
	}
	else if ($('#contact_form').length) {
		dd['country'] = new dropDown('.dropdown');
	}
});