if (typeof QG_AJAX == 'undefined') {
	QG_AJAX = {};
}

QG_AJAX.util = {};

QG_AJAX.util.center = function(element) {
	var windowHeight = $(window).height();
	var windowWidth = $(window).width();
	var elementHeight = element.height();
	var elementWidth = element.width();
	var windowTop = $(window).scrollTop();
	var windowLeft = $(window).scrollLeft();
	
    var elementTop = windowTop + (elementHeight > windowHeight ? windowHeight/10 : (windowHeight - elementHeight)/2);
    var elementLeft = windowLeft + (elementWidth > windowWidth ? 0 : (windowWidth - elementWidth)/2);
    element.css({'top': elementTop, 'left': elementLeft});
};

QG_AJAX.util.skin = function(skinBase, div, oBase) {
	var originalValue;
	if (oBase) {
		originalValue = oBase.val();
	}
	else {
		originalValue = 'skin/default/';
	}
	if (skinBase) {
		var baseValue = skinBase;
		div.find('img[src*=' + originalValue + ']').attr('src', function(index, attr) {
			return attr.replace(originalValue, baseValue);
		});
	}	
};

QG_AJAX.ajaxObject = function(spec) {
	var mask = $("<div></div>").
			attr("id","mask").
			css({
				"position" : "absolute",
				"background-color" : "rgb(0, 0, 0)",
				"color" : "#fff",
				"z-index" : "100",
				"top" : "0pt",
				"left" : "0pt",
				"-moz-opacity" : 0.3,
				"filter" : "alpha(opacity=30)"
			});
	var loading = $("<div class='loading'><img src='http://www.qiaogu.com/images/loading.gif'/><span></span></div>");
	var userLoginText = "您还没有登录或登录已过期，请您重新登录！";
	var applyOfficeText = "您还没有办公室,请先去申请巧顾办公室";
	var certifyOfficeText = "此功能为认证用户功能,您未通过身份认证不能使用";
	var userLoginUrl = "http://www.qiaogu.com/a/pre-user-name-login.action";
	var applyOfficeUrl = "http://www.qiaogu.com/u/choose-office-type.action";
	var certifyOfficeUrl = "http://www.qiaogu.com/o/show-my-certificates.action";
	var errorDiv = $("<div style='z-index:200;background-color:#FFFFFF;margin:10px auto 0;position:absolute;'><div style='width:500px;border:1px solid #EA621A; padding-bottom:20px;'><h2 style='height:60px; padding:26px 0 0px 80px; color:#EA621A; font-size:16px;background-color:#FFF; background-image:url(http://www.qiaogu.com/skin/default/images/error.gif); background-repeat:no-repeat; background-position:30px 20px; '></h2><a style='margin:0 auto; background-image:url(http://www.qiaogu.com/skin/default/images/errorbtn.gif); background-repeat:no-repeat; color:#000; display:block; width:78px; text-align:center; line-height:30px; font-size:14px; color:#FFF; font-weight:bold;'>确 认</a></div></div>");
	
	var ajax = {};
	ajax.method = spec['method'] || "post";
	ajax.url = spec['url'];
	ajax.loadingText = spec['loadingText'] || "内容正在载入中，请稍候。";
	loading.find("span").text(ajax.loadingText);
	ajax.loading = loading;
	if (!ajax.url) {
		alert("url is required.");
		return;
	}

	ajax.mask = function() {
		mask.css({
			"width" : $(document).width(),
			"height" : $(document).height()
		});
		$("body").append(mask);
	};
	
	ajax.unmask = function() {
		mask.remove();
	};
	
	ajax.ajax = function(params) {
		this.setUp();
		$[this.method](this.url, params.data, function(d) {
			var result = d;
			if (typeof d == 'object') {
				if (result && result.ajaxUserLogin) {
					ajax.mask();
					errorDiv.find("h2").text(userLoginText);
					errorDiv.find("a").attr("href", (userLoginUrl + '?redirectUrl=' + escape(location.href)));
					$("body").append(errorDiv);
					QG_AJAX.util.center(errorDiv);
					return;
				}
				else if (result && result.ajaxApplyOffice) {
					ajax.mask();
					errorDiv.find("h2").text(applyOfficeText);
					errorDiv.find("a").attr("href", applyOfficeUrl);
					$("body").append(errorDiv);
					QG_AJAX.util.center(errorDiv);
					return;
				}
				else if (result && result.ajaxCertifyOffice) {
					ajax.mask();
					errorDiv.find("h2").text(certifyOfficeText);
					errorDiv.find("a").attr("href", certifyOfficeUrl);
					$("body").append(errorDiv);
					QG_AJAX.util.center(errorDiv);
					return;
				}
			}
			ajax.callback(d);
		});
	};
	
	ajax.setUp = function() {};
	ajax.callback = function() {};
	
	return ajax;
};

QG_AJAX.loadObject = function(params) {
	var container = params.container;
	if (!container) {
		alert("lack container for loading.");
		return;
	}
	var ajax = QG_AJAX.ajaxObject($.extend({},params,{method:"get"}));
	ajax.container = container;
	ajax.setUp = function() {
		container.empty();
		container.append(this.loading);
	};
	ajax.callback = function(html) {
		container.hide();
		container.empty();
		container.html(html);
		container.show();
		QG_AJAX.util.skin(params.skinBase.val(), container);
		if (this.complete) {
			this.complete(html);
		}
	};
	ajax.load = function(data) {
		if (data) {
			this.ajax({data:data});
		}
		else {
			this.ajax({});
		}
	};
	
	return ajax;
};

QG_AJAX.openWindowObject = function(params) {
	var win = $("<div style='z-index:101;background-color:#FFFFFF;margin:10px auto 0;position:absolute;'><!--[if lte IE 6.5]><iframe></iframe><![endif]--></div>");

	var ajax = QG_AJAX.ajaxObject($.extend({},params,{method:"get"}));
	ajax.setUp = function() {
		if (0 < $(document).find("#mask").length) {
			alert("masked once already!");
		}
		this.mask();
		this.loading.css({
			"position": "absolute",
			"height": "75px",
			"width": "100px",
			"background-color": "#fff",
			"z-index": "101"
		});
		$("body").append(this.loading);
		QG_AJAX.util.center(this.loading);
	};
	ajax.callback = function(html) {
		this.loading.remove();

		win.html(html);
		win.append("<!--[if lte IE 6.5]><iframe></iframe><![endif]-->");
		win.show();
		
		win.find("*[name='close']").click(function() {
			win.remove();
			ajax.unmask();
			return false;
		});
		$("body").append(win);
		
		// for ie6 compatibility
		win.find("iframe").css({
			'position':'absolute',
			'top':"0px",
			'left':"0px",
			'z-index':"-1",
			'filter':"mask()",
			'width': win.width(),
			'height':win.height()
		});
		
		QG_AJAX.util.center(win);
		this.mask();
		if (params.skinBase) {
			QG_AJAX.util.skin(params.skinBase.val(), win);
		}
		if (this.complete) {
			this.complete(win);
		}
	};
	ajax.open = function(data) {
		if (data) {
			this.ajax({data:data});
		}
		else {
			this.ajax({});
		}
	};
	
	return ajax;
};

QG_AJAX.postObject = function(params) {
	var form = params.form;
	if (!form) {
		alert("lack form for posting.");
		return;
	}
	var ajax = QG_AJAX.ajaxObject($.extend({},params,{method:"post"}));
	ajax.callback = function(data) {
		if (this.complete) {
			this.complete(data);
		}
	};
	ajax.post = function() {
		this.ajax({data:form.serialize()});
	};
	
	return ajax;
};

QG_AJAX.preCreateServiceMessage = function(params) {
	var serviceId = params.serviceId;
	if (!serviceId) {
		alert("service id is required for creating service message.");
	}
	var complete = params.complete;
	var ajax = QG_AJAX.openWindowObject($.extend({
		url:"/u/ajax-pre-create-service-message.action",
		loadingText:"正在准备给服务留言，请稍候。"
	}, params));
	ajax.complete = function(win) {
		initBinding(win);
		
		if (complete) {
			complete(win);
		}
	};
	
	var initBinding = function(win) {
		var message = {};
		message.form = win.find("form");

		message.button = win.find("input:button");
		
		message.form.find("input:hidden[name='serviceId']").val(serviceId);

		message.message = QG_VALI.message({inputable:message.form.find("textarea[name='message']"), validationEvent: "null"});
		
		message.validator = QG_VALI.formValidator({
			fields:[message.message]});

		message.create = QG_AJAX.createServiceMessage({
			form: message.form,
			complete: function(data) {
				win.remove();
				ajax.unmask();
				if (!data) {
					alert("服务留言失败");
				}
				else if (data.blocked) {
					alert("您已经屏蔽了该服务，不能进行留言了。");
				}
				else if (data.id > 0) {
					alert("服务留言成功，您可以进入个人中心留言管理中查看办公室对您的回复");
					if (params.complete) {
						params.complete(data);
					}
				}
				else {
					alert("服务留言失败");
				}
			}
		});

		message.form.find("textarea").keypress(function(event) {
			if (event.keyCode == 13) {
	                message.button.click();
	        }
		});

		message.button.click(function() {
			if(message.validator.validate()) {
				message.create.post();
			}
		});
	};

	return ajax;
};

QG_AJAX.createServiceMessage = function(params) {
	var complete = params.complete;
	var ajax = QG_AJAX.postObject($.extend({
		url:"/u/ajax-create-service-message.action"
	}, params));
	ajax.complete = function(data) {
		if (complete) {
			complete(data);
		}
	};
	return ajax;
};





QG_AJAX.preCreateRequirement = function(params) {
	var officeName = params.officeName;
	var officeId = params.officeId;
	if (!officeName || !officeId) {
		alert("office name and office id are required.");
	}
	var complete = params.complete;
	var ajax = QG_AJAX.openWindowObject($.extend({
		url:"/u/ajax-pre-create-requirement-to-office.action",
		loadingText:"正在准备添加新需求，请稍候。"
	}, params));
	ajax.complete = function(win) {
		win.find("strong[title='officeName']").text(officeName);
		initBinding(win);
	};
	
	var initBinding = function(win) {
		var requirement = {};


		requirement.form = win.find("form");

		requirement.button = win.find("input:button[name='create']");

		requirement.name = QG_VALI.requirementName({inputable:requirement.form.find("input[name='name']")});
		requirement.estimatedExpenditure = QG_VALI.requirementEstimatedExpenditure({inputable: win.find("input[name='estimatedExpenditure']")});
		requirement.timeOfValidity = QG_VALI.requirementTimeOfValidity({inputable:win.find("select[name='timeOfValidity']"),tipBindable:$("#null"),validationEvent:"change"});
		requirement.description = QG_VALI.requirementDescription({inputable: win.find("textarea[name='description']")});
		requirement.contactPerson = QG_VALI.requirementContactPerson({inputable: win.find("input[name='contactPerson']")});
		requirement.tel = QG_VALI.officeTel({inputable: win.find("input[name^='tel']")});
		requirement.cellPhone = QG_VALI.officeCellPhone({inputable: win.find("input[name^='cellPhone']")});
		requirement.qq = QG_VALI.officeQq({inputable: win.find("input[name='qq']")});
		requirement.msn = QG_VALI.officeMsn({inputable: win.find("input[name='msn']")});
		requirement.email = QG_VALI.officeEmail({inputable: win.find("input[name='email']")});

		requirement.officeId = $("<input type='hidden' name='officeId' />");
		requirement.officeId.val(officeId);
		requirement.validator = QG_VALI.formValidator({
			fields:[requirement.name, requirement.estimatedExpenditure, requirement.timeOfValidity, requirement.description, requirement.contactPerson, 
			        requirement.qq, requirement.msn, requirement.email, requirement.cellPhone, requirement.tel]});

		requirement.create = QG_AJAX.createRequirement({
			form: requirement.form,
			complete: function(data) {
				win.remove();
				ajax.unmask();
				if (!data || !data.id) {
					alert("需求创建失败");
				}
				else {
					alert("需求创建成功，你可以在我的需求中查到相关信息。");
					if (params.complete) {
						params.complete(data);
					}
				}
			}
		});

		requirement.button.click(function() {
			if(requirement.validator.validate()) {
				requirement.form.append(requirement.officeId);
				requirement.create.post();
			}
		});
		
		QG.wordCounter(win.find("textarea[name='description']"));

	};
	
	return ajax;
};

QG_AJAX.createRequirement = function(params) {
	var complete = params.complete;
	var ajax = QG_AJAX.postObject($.extend({
		url:"/u/ajax-create-requirement-to-office.action"
	}, params));
	ajax.complete = function(data) {
		if (complete) {
			complete(data);
		}
	};
	return ajax;
};



QG_AJAX.bookmarkService = function(params) {
	var serviceId = params.serviceId;
	if (!serviceId) {
		alert("service id is required for bookmarking service");
		return;
	}
	var ajax = QG_AJAX.ajaxObject($.extend({
		url:"/u/ajax-bookmark-service.action"
	}, params));
	ajax.callback = function(data) {
		if (!data) {
			alert("收藏服务失败");
		}
		else if (data.serviceId > 0) {
			if(data.bookmarked) {
				alert("该服务已经被收藏，请到“我的收藏”里查看");
			}
			else {
				alert("成功收藏该服务，请到“我的收藏”里查看");
			}
		}
		else {
			alert("收藏服务失败");
		}
	};
	ajax.bookmark = function() {
		ajax.ajax({data: {serviceId: serviceId}});
	};
	return ajax;
};


QG_AJAX.bookmarkOffice = function(params) {
	var officeId = params.officeId;
	if (!officeId) {
		alert("office id is required for bookmarking office");
		return;
	}
	var ajax = QG_AJAX.ajaxObject($.extend({
		url:"/u/ajax-bookmark-office.action"
	}, params));
	ajax.callback = function(data) {
		if (!data) {
			alert("收藏办公室失败");
		}
		else if (data.officeId > 0) {
			if(data.bookmarked) {
				alert("该办公室已经被收藏，请到“我的收藏”里查看");
			}
			else {
				alert("成功收藏该办公室，请到“我的收藏”里查看");
			}
		}
		else {
			alert("收藏办公室失败");
		}
	};
	ajax.bookmark = function() {
		ajax.ajax({data: {officeId: officeId}});
	};
	return ajax;
};




QG_AJAX.preCreateOfficeMessage = function(params) {
	var officeId = params.officeId;
	if (!officeId) {
		alert("office id is required for creating office message.");
	}
	var complete = params.complete;
	var ajax = QG_AJAX.openWindowObject($.extend({
		url:"/u/ajax-pre-create-office-message.action",
		loadingText:"正在准备给办公室留言，请稍候。"
	}, params));
	ajax.complete = function(win) {
		initBinding(win);
	};
	
	var initBinding = function(win) {
		var message = {};
		message.form = win.find("form");

		message.button = win.find("input:button");
		
		message.form.find("input:hidden[name='officeId']").val(officeId);

		message.message = QG_VALI.message({inputable:message.form.find("textarea[name='message']"), validationEvent: "null"});
		
		message.validator = QG_VALI.formValidator({
			fields:[message.message]});

		message.create = QG_AJAX.createOfficeMessage({
			form: message.form,
			complete: function(data) {
				win.remove();
				ajax.unmask();
				if (!data) {
					alert("办公室留言失败");
				}
				else if (data.id > 0) {
					alert("办公室留言成功，您可以进入个人中心留言管理中查看办公室对您的回复");
					if (params.complete) {
						params.complete(data);
					}
				}
				else {
					alert("办公室留言失败");
				}
			}
		});

		message.button.click(function() {
			if(message.validator.validate()) {
				message.create.post();
			}
		});
	};

	return ajax;
};

QG_AJAX.createOfficeMessage = function(params) {
	var complete = params.complete;
	var ajax = QG_AJAX.postObject($.extend({
		url:"/u/ajax-create-office-message.action"
	}, params));
	ajax.complete = function(data) {
		if (complete) {
			complete(data);
		}
	};
	return ajax;
};



QG_AJAX.viewOffice = function(params) {
	var officeId = params.officeId;
	if (!officeId) {
		alert("office id is required for viewing office");
		return;
	}
	var ajax = QG_AJAX.ajaxObject($.extend({
		url:"/a/ajax-view-office.action"
	}, params));
	ajax.view = function() {
		ajax.ajax({data: {officeId: officeId}});
	};
	return ajax;
};

QG_AJAX.viewService = function(params) {
	var serviceId = params.serviceId;
	if (!serviceId) {
		alert("service id is required for viewing service");
		return;
	}
	var ajax = QG_AJAX.ajaxObject($.extend({
		url:"/a/ajax-view-service.action"
	}, params));
	ajax.view = function() {
		ajax.ajax({data: {serviceId: serviceId}});
	};
	return ajax;
};


QG_AJAX.preCreateUESurveyAdvice = function(params) {
	var complete = params.complete;
	var ajax = QG_AJAX.openWindowObject($.extend({
		url:"/a/ajax-pre-create-ue-survey-advice.action",
		loadingText:"正在准备提交建议，请稍候。"
	}, params));
	ajax.complete = function(win) {
		initBinding(win);
	};
	
	var initBinding = function(win) {
		var advice = {};
		
		advice.form = win.find("form");

		advice.button = win.find("input:button");
		
		advice.content = QG_VALI.adviceContent({inputable:advice.form.find("textarea[name='content']"), validationEvent: "null"});

		advice.type = QG_VALI.adviceType({inputable:advice.form.find("select[name='type']"), validationEvent: "null"});

		advice.validator = QG_VALI.formValidator({
			fields:[advice.content, advice.type]});

		advice.create = QG_AJAX.createUESurveyAdvice({
			form: advice.form,
			complete: function(data) {
				if (!data) {
					alert("您的建议反馈失败");
				}
				else if (data.id > 0) {
					alert("您的建议已反馈成功");
					window.location = data.reloadUrl;
				}
				else {
					alert("您的建议反馈失败");
				}
				win.remove();
				ajax.unmask();
			}
		});

		advice.button.click(function() {
			if(advice.validator.validate()) {
				advice.create.post();
			}
		});
	};

	return ajax;
};

QG_AJAX.createUESurveyAdvice = function(params) {
	var complete = params.complete;
	var ajax = QG_AJAX.postObject($.extend({
		url:"/a/ajax-create-ue-survey-advice.action"
	}, params));
	ajax.complete = function(data) {
		if (complete) {
			complete(data);
		}
	};
	return ajax;
};
