/* PlugBase JavaScript framework, version 1.0.0
 * Copyright © 2005-2008 OpenZone.com Inc. WenYunlong, All Rights Reserved
 **/

function initForm(name) {
	$("#" + name).xform('init', name);
}

function submitForm(name) {
	$("#" + name).xform('submit', name);
}

function ajaxSubmitForm(name) {
	$("#" + name).xform('ajax', name);
}

// 初始化Form控件
jQuery.fn.xform = function(action, id) {

	var normal = Array('normal', 'notice');
	var notice = Array('notice', 'notice');
	var warning = Array('warning', 'warning');
	var error = Array('error', 'error');
	var empty = Array('error', 'empty');
	var valided = Array('normal', 'valided');
	

	var _this = $('#'+id);
	var name = id;
	
	var info = eval('_' + name + '_info');

	var upfile = 0;
	
	findinfo = function(item) {
		for(key in info) {
			if(key == item) return true;
		}
		return false;
	}
	
	var items = Array();
	var formItems = _this.find(":input|:select");
	var c = 0;
	for ( var i = 0; i < formItems.length; i++) {
		var item = formItems[i];
		if(findinfo(item.name) || item.type == 'file' || item.type == 'hide') {
			items[c++] = item;
		}
	}

	// 初始化控件
	initialize = function() {
		
		for ( var i = 0; i < items.length; i++) {
			var item = items[i];
			
			setStatus(item, normal);
			$(item).focus( function() {
				setStatus(this, notice);
			});
			$(item).blur( function() {
				setStatus(this, valid(this));
			});

			if (item.nodeName == "INPUT") {
				if (item.type == 'text' || item.type == 'password') {
					// $(item).width(item.size * 10);
				} else if (item.type == 'checkbox') {
					var obj = $("#" + item.name);
					var value = info[item.name]['value'] + ',';

					obj.each( function(index, element) {
						if (value.indexOf($(element).val() + ",") >= 0)
							$(element).attr("checked", "true");
						else
							$(element).removeAttr("checked", "");
					});
				}
			} else if (item.nodeName == 'SELECT') {
				var obj = $("#" + item.name);
				var value = info[item.name]['value'];

				if (item.className == 'ajax-select') {
					var url = obj.attr('data');
					$.get(url, '', function(result) {
						eval('var data = ' + result);
						$.each(data, function(key) {
							var opt = $('<option value="' + key + '">'
									+ data[key] + '</option>');
							if (key == value)
								opt.attr('selected', true);
							opt.appendTo(obj);
						});
					});
				} else {
					obj.find("option").each( function() {
						if (value == $(this).val())
							$(this).attr("selected", "true");
						else
							$(this).removeAttr("selected");
					});
				}
			}
		}
	};

	// 设置控件状态
	setStatus = function(item, stat) {

		var obj = $('#' + $(item.form).attr("id") + '_' + item.name + '_status');

		if (obj != null && stat != null) {
			if (info[item.name] && info[item.name][stat[1]])
				obj.html(info[item.name][stat[1]]);
			else if (stat[1] == 'empty')
				obj.html('此项需要填写！');
			else if (stat[1] == 'valided')
				obj.html('填写正确。');

			obj.removeClass();
			obj.addClass('form_item_status');
			obj.addClass(stat[0]);
		}
	};

	// 控件验证
	valid = function(item) {
		if (info[item.name]) {
			if (item.nodeName == "INPUT" || item.nodeName == "TEXTAREA") {
				// 单选按钮
				if (item.type == 'radio' && info[item.name]['empty'] == false) {
					var valid = false;
					$(":input[@name=" + item.name + "]").each( function(index, element) {
						if (element.checked)
							valid = true;
					});
					if (valid)
						return valided;
					else
						return empty;
				}

				// 复选框
				if (item.type == 'checkbox') {
					var count = 0;
					$(":input[@name=" + item.name + "]").each( function(index, element) {
						if (element.checked) {
							count++;
						}
					});

					if (count == 0 && !info[item.name]['empty']) {
						return empty;
					} else {
						return valided;
					}
				}
				
				// 文本框
				if (item.type == 'text' || item.type == 'password'
						|| item.type == 'textarea') {
					
					if (item.type == 'textarea' && item.className == name + item.name) {
						save(item);
					}
					var value = $(item).val();

					// 验证是否为空
					if (value == "") {
						if (info[item.name]['empty'] == false)
							return empty;
						else
							return valided;
					}

					// 验证内容长度
					var min = info[item.name]['minlength'];
					var max = info[item.name]['maxlength'];
					if (min && max
							&& (value.length < min || value.length > max))
						return error;

					var reg = info[item.name]['valid'];
					if (reg && value.match(reg) == null)
						return error;
				}
			} else if (item.nodeName == "SELECT") {
				var valid = false;
				$("#" + item.name).find("option").each( function() {
					if (this.selected)
						valid = true;
				});
				if (valid)
					return valided;
				else
					return empty;
			}
		}
		return valided;
	};

	// 提交文件
	fileUpload = function(formName, itemName) {
		$.ajaxFileUpload( {
			url :'/common/upfile.do',
			secureuri :false,
			fileElementId :itemName,
			dataType :'json',
			success : function(data, status) {
				if (typeof (data) != 'undefined') {
					if (data.file != '') {
						upfile--;
						$("#" + itemName.substring(9)).val(data.file);
						if (upfile == 0)
							$("#" + formName).submit();
					} else {
						$("#" + itemName.substring(9)).val("");
						if (upfile == 0)
							$("#" + formName).submit();
					}
				}
			},
			error : function(data, status, e) {
				alert(e);
			}
		});
	}

	// 提交表单
	htmlSubmit = function() {
		var result = null;
		for ( var i = 0; i < items.length; i++) {
			var vd = valid(items[i]);
			setStatus(items[i], vd);
			
			if (vd != valided) {
				result = items[i];
				break;
			}
		}
		
		if (!result) {
			for ( var i = 0; i < items.length; i++) {
				if (items[i].className == 'ajaxUpfile'
						&& $("#" + items[i].id).val() != "")
					upfile++;
			}
			for ( var i = 0; i < items.length; i++) {
				if (items[i].className == 'ajaxUpfile')
					fileUpload(name, items[i].id);
			}
			if (upfile == 0) {
				$("#" + name).submit();
				return true;
			} else {
				return false;
			}
		}

		return false;
	};

	ajaxSubmit = function() {
		var result = null;
		for ( var i = 0; i < items.length; i++) {
			var vd = valid(items[i]);
			setStatus(items[i], vd);

			if (vd != valided) {
				result = items[i];
				break;
			}
		}

		if (!result) {
			var data = $("#" + name).serialize();
			if ($("#" + name).attr("methoz") == "GET") {
				$.get($("#" + name).attr("action"), data, ajaxResult);
			} else {
				$.post($("#" + name).attr("action"), data, ajaxResult);
			}
			return true;
		}

		return false;
	};

	ajaxResult = function(result) {
		$("#" + name).html(result);
	}

	if (action == 'init')
		initialize();
	else if (action == 'submit')
		htmlSubmit();
	else if (action == 'ajax')
		ajaxSubmit();
}

function ajaxGet(url, data, fun) {
	$.get(url, data, fun);
}

function ajaxPost(url, data, fun) {
	$.post(url, data, fun);
}

function fillRowData(name, data) {
	$.each(data, function(key) {
		$('#' + key + '_' + name).html(data[key]);
	});
}

// 推荐控件
function vote(up, nid) {
	if (up) {
		var obj = $('#' + 'btn_up_' + nid);
		if (obj.className != 'active') {
			var nv = $('#count_' + nid).html();
			$.get("/vote/vote.do", 'vote=true&nid=' + nid, function(result) {
				$('#count_' + nid).html(result);
				obj.className = 'active';
			});
		} else
			alert("您已经推过过了!");
	} else {
		var obj = $('#' + 'btn_down_' + nid);
		if (obj.className != 'active') {
			var nv = $('#count_' + nid).html();
			$.get("/vote/vote.do", 'vote=false&nid=' + nid, function(result) {
				$('#count_' + nid).html(result);
				obj.className = 'active';
			});
		} else
			alert("已经拍过板砖了!");

	}
}

// 弹出窗口
function showWindow(btn, title, url, args) {
	showOwnWindow(btn, title, url, args, 400, 300);
}

// 弹出窗口
function showOwnWindow(btn, title, url, args, width, height) {
	$.get(url, args, function(html) {
		$("div#dialog").remove();
		$("body").append("<div id='dialog'>" + html + "</div>");
		var params = {
			'title' :title,
			'width' :width,
			'height' :height,
			'position' : [ 'center', 'middle' ],
			overlay : {
				opacity :0.5,
				background :"#cccccc"
			},
			modal :true
		};
		$("#dialog").dialog(params);
	});
}

// 选择列表
( function($) {
	var opts = {};

	$.fn.selectbox = function(settings) {
		opts = $.extend( {}, $.fn.selectbox.defaults, settings);
		$.fn.selectbox.init();

		return this.each( function() {
			// 鼠标移动
				$(this).hover( function() {
					$(this).addClass('active');
				}, function() {
					$(this).removeClass('active');
				});

				// 鼠标点击
				$(this).unbind('toggle').toggle( function() {
					$.fn.selectbox.popup(this);
				}, function() {
					$.fn.selectbox.close();
				});
			});
	};

	$.fn.selectbox.init = function() {
		var obj = $('<div id="__selectbox_popup" class="ui-popup form"></div>');
		var title = $('<div class="ui-popup-title"></div>');
		var content = $('<div class="ui-popup-content"></div>');

		obj.appendTo('body');
		obj.hide();

		if (opts['title']) {
			title.html(opts['title']);
			title.appendTo(obj);
		}

		content.appendTo(obj);

		$.each(opts['data'], function(key) {
			var item = $('<div class="ui-popup-item">'
					+ '<input type="checkbox" name="' + key + '" value="' + key
					+ '" data="' + opts['data'][key] + '"/>'
					+ '<label id="label_for_' + key + '">' + opts['data'][key]
					+ '</label>' + '</div>');
			item.appendTo(content);
		});

		var button = $('<div class="clear"></div><div class="ui-popup-buttons"><label class="button" id="Submit"><a href="#" id="__selectbox_popup_button">确定</a></label></div>');
		button.appendTo(obj);
	};

	$.fn.selectbox.popup = function(element) {
		var _obj = $('#__selectbox_popup');
		var _this = $(element);
		var btnOffset = _this.offset();
		var left = btnOffset['left'];
		var top = btnOffset['top'] + _this.height() + 5;

		_obj.css( {
			left :left,
			top :top,
			width :_this.width() + 8
		});

		$('#__selectbox_popup_button').unbind('click').click( function() {
			$.fn.selectbox.save(element);
		});

		_obj.find(':input[@type=checkbox]').each( function() {
			var _o = $(this);
			_o.removeAttr('checked');
			
			_this.find(':input[@type=checkbox]').each( function() {
				var _t = $(this);
				if (_o.val() == _t.val()) {
					_o.attr('checked', 'true');
				}
			});
		});
		_obj.show();
	}

	$.fn.selectbox.close = function() {
		$('#__selectbox_popup').hide();
	}

	$.fn.selectbox.save = function(element) {
		var _obj = $('#__selectbox_popup');
		var _this = $(element);

		_this.html('');
		_obj.find(':input[@type=checkbox]').each(
						function() {
							if (this.checked) {
								othis = $(this);
								item = $('<input style="display:none;" type="checkbox" value="'
										+ othis.val()
										+ '"/>'
										+ '<label>'
										+ othis.attr('data') + '</label>&nbsp;');
								item.appendTo(_this);
							}
						});
		if(opts['callback']) eval(opts['callback']);
		_obj.hide();
	};

	$.fn.selectbox.defaults = {
		data :'',
		width :400,
		callback :null
	};
})(jQuery);

// 下拉列表
jQuery.fn.combobox = function() {

	var _this = this;
	var _list = $('#' + _this.attr("id") + 'List');

	initialize = function() {
		_list.hide();
		_this.click( function() {
			_list.css( {
				left :$(_this).offset().left + 'px',
				top :$(_this).offset().top + $(_this).height() + 'px'
			});
			_list.slideDown("normal");
		});
	};

	initialize();
}

// 图片选择
jQuery.fn.photoselecter = function() {

	var _this = this;
	var _list = _this.find("li");
	initialize = function() {
		_list.each(select);
	};

	select = function(index, element) {
		$(element).click(
				function() {
					$(_this).find(":input[@type=hidden]").val(
							$(this).find("img").attr("src"));
					$("form").submit();
				});

		$(element).hover( function() {
			$(this).addClass("selected");
		}, function() {
			$(this).removeClass("selected");
		});
	};

	initialize();
}

// 单选列表
jQuery.fn.rediobuttons = function() {

	var _this = this;
	var _list = _this.find("li");
	initialize = function() {
		_list.each(select);
	};

	select = function(index, element) {
		$(element).click( function() {
			_list.removeClass();
			_list.find(":input[@type=radio]").attr("checked", "");
			
			$(this).find(":input[@type=radio]").attr("checked", "true");
			$(this).addClass("selected");
		});
	};

	initialize();
}

// 气泡提示信息
jQuery.fn.tooltip = function(params) {
	var _this = this;
	var _id = Math.floor(Math.random() * 10000) + 1;

	var _content = params['content'];
	var _time = params['time'];
	var obj = $('<div id="__tooltip_'
			+ _id
			+ '" class="tooltip"><table class="tooltip">'
			+ '<tr><td class="top-left"></td><td class="top"></td><td class="top-right"></td></tr>'
			+ '<tr><td class="left"></td><td class="center">'
			+ _content
			+ '</td><td class="right"></td></tr>'
			+ '<tr><td class="bottom-left"></td><td class="bottom"><img width="30" height="29" alt="popup tail" src="/images/tooltip/bubble-tail2.png"/></td><td class="bottom-right"></td></tr>'
			+ '</table></div>');

	initialize = function() {

		obj.appendTo('body');

		var btnOffset = _this.offset();
		var btnWidth = _this.width();
		var left = btnOffset['left'] + btnWidth / 2 - obj.width() / 2;
		var top = btnOffset['top'] - obj.height() + 10;

		obj.css( {
			left :left,
			top :top
		});

		obj.show();
		close();
	};

	close = function() {
		if (_time > 0) {
			_time--;
			setTimeout(close, 500);
		} else {
			obj.hide();
		}
	}

	initialize();
}

// 页面处理事件
$(document).ready( function() {
	$(".combo-box").combobox();
	$(".radio-buttons").rediobuttons();
	$(".photo-select").photoselecter();

	// 确认删除
		$(".confirm-delete").click( function() {
			if (confirm('确定删除这条信息?')) {
				eval($(this).attr('data'));
			}
		});

		if ($("#search-query").val() == '')
			$("#search-query").val('搜索内容');
		$("#search-query").focus( function() {
			if ($(this).val() == '搜索内容')
				$(this).val('')
		});
		$("#search-query").blur( function() {
			if ($(this).val() == '')
				$(this).val('搜索内容')
		});
	});