function CUserConfig(){
	//款式ID
	this.sStyleId = null;
	//款式名称
	this.sStyleName = null;
	//卡片类型ID，即configs[]数组的下标
	this.sTypeId = 0;
	//卡片类型名称
	this.sTypeName = "";
	//背景颜色
	this.sBgColor = "";
	//背景图片
	this.sBgPic = "";
	//卡片宽和高
	this.iWidth = 0;
	this.iHeight = 0;
	//verse detail文字块详细配置信息
	this.oVerseDetail = null;	
	//verse string插图详细配置信息
	this.oIconDetail = null;
}

//根据verseList下标取得其样例图片路径
CUserConfig.prototype._fnGetPicPath = function(iIndex){
	var picPath = "cardsStyle/" + this.sStyleId + "/" + this.sTypeId + "/samples/" + this.sBgColor + "/";
	if(iIndex === null || iIndex === undefined){
		picPath += "0.jpg";
	}
	else{
		//picPath += iIndex + ".jpg";
		picPath += "0.jpg";//返回固定图片
	}
	return picPath;
};
//背景图片
CUserConfig.prototype._fnGetBgPic = function(){
	return "cardsStyle/" + this.sStyleId + "/" + this.sTypeId + "/bgPics/" + this.sBgColor + ".png";
};
//预览图片
CUserConfig.prototype._fnGetReviewConfig = function(){
	var oParam = new Object();
	oParam.sBgPic = this._fnGetBgPic();
	oParam.oVerseDetail = this.oVerseDetail;
	return  oParam;
}


function CCardConfig(){
	//全局配置信息
	this.oGlobalConfig = null;
}
//由类型ID得到所属类型的信息
CCardConfig.prototype._fnGetTypeInfo = function(sTypeId){
	if( this.oGlobalConfig === null){
		return false;
	}
	var arTypeList = this.oGlobalConfig.typeList;
	for( var i=0; i<arTypeList.length; i++){
		if(arTypeList[i].typeId == sTypeId){
			return arTypeList[i];
		}
	}
};
//由类型ID得到类型名称
CCardConfig.prototype._fnGetTypeName = function(sTypeId){
	return this.fnGetTypeInfo(sTypeId).typeName;
};
//得到款式名称
CCardConfig.prototype._fnGetStyleName = function(){
	if( this.oGlobalConfig === null){
		return false;
	}
	return this.oGlobalConfig.styleName;
};
//得到所有诗词格式详细信息
CCardConfig.prototype._fnGetAllVerse = function(sTypeId)
{
	return this._fnGetTypeInfo(sTypeId).verseList;
};
//得到选中诗词详细格式
CCardConfig.prototype._fnGetSelectedVerse = function(iSelected){
	return this.fnGetAllVerser[iSelected];
};





function StepControl(){}
//步骤名称数组
StepControl.arName = ["verseStep","enterInfo","personalizeStep","reviewStep","envelopesStep"];
//当前步骤
StepControl.iNextStep = 0;

//全局配置信息
StepControl.oCardConfig = new CCardConfig();
//用户配置信息
StepControl.oUserConfig = new CUserConfig();

//过程中的临时变量
//选中的内容格式序号
StepControl.iSelectedVerseId = 0;

//获得选中内容格式样例图片路径
StepControl.fnGetPicPath = function(){
	return this.oUserConfig._fnGetPicPath(this.iSelectedVerseId);
};
//选中卡片类型的背景图片
StepControl.fnGetBgPic = function(){
	return this.oUserConfig._fnGetBgPic();
};



//得到选中卡片类型的信息
StepControl.fnGetTypeInfo = function(){
	return this.oCardConfig._fnGetTypeInfo(this.oUserConfig.sTypeId);
};
//得到选中卡片类型内容的所有诗词格式
StepControl.fnGetAllVerse = function(){
	return this.oCardConfig._fnGetAllVerse(this.oUserConfig.sTypeId);
};
//得到选中卡片所选的内容格式
StepControl.fnGetSelectedVerse = function(){
	return this.fnGetAllVerse()[this.iSelectedVerseId];
};
//得到选中卡片类型名称
StepControl.fnGetTypeName = function(){
	return  this.fnGetTypeInfo().typeName;
};
//得到选中内容格式字符串
StepControl.fnGetVerseString = function(){
	var arContent = this.fnGetSelectedVerse().content;
	var sContent = "";
	for(i=0; i<arContent.length; i++){
		if(typeof(arContent[i]) == "object"){
			sContent += arContent[i][0];
		}
		else{
			sContent += arContent[i];
		}
	}
	return sContent;
};
//获取款式名称
StepControl.fnGetStyleName = function(){
	return this.oCardConfig._fnGetStyleName();
}


//初始化
StepControl.fnInit = function(oJson){
	this.oUserConfig.sStyleId = oJson.sStyleId;
	this.oUserConfig.sTypeId = oJson.sTypeId;
	this.oUserConfig.sBgColor = oJson.sBgColor;
	//获取全局配置文件
	jQuery.getJSON("getConfig.php",{"id": this.oUserConfig.sStyleId},this.fnGetJSON);
};
StepControl.fnGetJSON = function(oData){
	//alert(JSON.stringify(oData));
	if( StepControl.oUserConfig.sTypeId == ''){
		StepControl.oUserConfig.sTypeId = 0;
	}
	if( StepControl.oUserConfig.sBgColor == '' ){
		StepControl.oUserConfig.sBgColor = oData.bgColors[0].value;
	}
	StepControl.oCardConfig.oGlobalConfig = oData;
	StepControl.oUserConfig.sBgPic = StepControl.fnGetBgPic();
	StepControl.oUserConfig.sStyleName = StepControl.fnGetStyleName();
	StepControl.oUserConfig.sTypeName = StepControl.fnGetTypeName();
	StepControl.oUserConfig.iWidth = StepControl.fnGetTypeInfo().width;
	StepControl.oUserConfig.iHeight = StepControl.fnGetTypeInfo().height;
	if(StepControl.fnGetAllVerse().length == 1){
		StepControl.arName = StepControl.arName.slice(1);
		StepControl.iSelectedVerseId = 0;
	}
	//开始流程
	StepControl.fnNext();
}
//预览图片
StepControl.fnGetReviewConfig = function(){
	return this.oUserConfig._fnGetReviewConfig();
}
//上一步
StepControl.fnBack = function() {
	this.iNextStep --;
	$("#" + this.arName[this.iNextStep] ).hide();
	$("#" + this.arName[this.iNextStep-1] ).show();
}
//下一步
StepControl.fnNext = function(){
//	if(this.arName[this.iNextStep] == "personalizeStep"){
//	}
	switch (this.arName[this.iNextStep]) {
		case "verseStep":
			oVerseStep = new CVerseSelect();
			oVerseStep.fnRun();
			break;
		case "enterInfo":
			oEnterInfo = new CEnterInfo();
			oEnterInfo.fnRun();
			break;
		case "personalizeStep":
			oPersonlize = new CPersonlize();
			//检查数据是否提交完整，只有完整后才可继续
			if( !oPersonlize.fnCheckData() ){
				return null;
			}
			oPersonlize.fnRun();
			break;
		case "reviewStep":
			oReview = new CReview();
			oReview.fnRun();
			break;
		case "envelopesStep":
			$("#saveUserConfigForm").submit();
			break;
		default:
			alert("error step");
	}
	//往后一步
	this.iNextStep ++;
}




function CVerseSelect(){
	this.arVerseList = StepControl.fnGetAllVerse();
}
CVerseSelect.prototype.fnRun = function(){
	//显示verseStep
	$("#verseStep").show();
	//样例图片默认值
	$("#verseStep_sampleImageContainer > img").attr("src", StepControl.fnGetPicPath());
	//隐藏具体内容
	$("#verseStep_verseSelectBox").hide();
	this.fnAppendToPage();
}
//得到verseMenu的HTML代码
CVerseSelect.prototype.fnGetMenuHTML = function(){
	var sHtml = '<div><div class="sprite-icon-arrow-right clickable" id="verseStep_selectTemplate_group_radio_indicator" style="margin-left: 25px; margin-right: 4px; float: left"></div><span style="color: #3992b4; font-weight: bold; cursor: pointer">Select a verse</span><div style="clear:both"></div><div class="templateContainer" id="verseStep_selectTemplate_group_radio_container" style="display:none">  <div>';
	for( var i=0; i<this.arVerseList.length; i++){
		sHtml += '<input id="verseStep_selectTemplate_group_template_' + i + '_radio" style="margin-left: 40px;" type="radio" name="verse_template" /><label for="verseStep_selectTemplate_group_template_' + i + '_radio">' + this.arVerseList[i].hint + '</label><div style="clear:both"></div>';
	}
	sHtml += '</div></div></div>';
	return sHtml;
}
//事件处理函数
CVerseSelect.prototype.fnIndicatorClick = function (){
	//alert('fnIndicatorClick');
	$("#verseStep_selectTemplate_group_radio_indicator").removeClass("sprite-icon-arrow-right");
	$("#verseStep_selectTemplate_group_radio_indicator").addClass("sprite-icon-arrow-down");
	$("#verseStep_selectTemplate_group_radio_container").show();
}
CVerseSelect.prototype.fnItemClick = function (e){
	//alert('fnItemClick');
	var iIndex = e.data;
	//选中的内容序号
	StepControl.iSelectedVerseId = iIndex;
	//显示选中内容格式字符串
	$("#verseText").html(StepControl.fnGetVerseString().replace(/\n/g,'<br />'));
	$("#verseStep_verseSelectBox").show();
	
	//样例图片
	$("#verseStep_sampleImageContainer > img").attr("src", StepControl.fnGetPicPath(iIndex));
}
//添加到页面
CVerseSelect.prototype.fnAppendToPage = function(){
	//绑定事件
	var sHtml = this.fnGetMenuHTML();
	var oJQuery = $(sHtml);
	oJQuery.find("#verseStep_selectTemplate_group_radio_indicator").bind("click", this.fnIndicatorClick);
	oJQuery.find("div#verseStep_selectTemplate_group_radio_indicator ~ span").bind("click", this.fnIndicatorClick);
	for( i=0; i<this.arVerseList.length; i++){
		oJQuery.find("#verseStep_selectTemplate_group_template_" + i + "_radio").bind("click", i, this.fnItemClick);
	}
	//先清除
	$("#verseStep_selectTemplate").empty();
	oJQuery.appendTo("#verseStep_selectTemplate");
};

//输入信息步骤
function CEnterInfo(){
	this.oSelectedVerse = StepControl.fnGetSelectedVerse();
}
CEnterInfo.prototype.fnRun = function(){
	//隐藏上一步verseStep，显示当前enterInfo
	$("#verseStep").hide();
	$("#enterInfo").show();
	//样例图片
	$("div#enterInfo_sampleImageContainer > img").attr("src", StepControl.fnGetPicPath());
	//HTML输出到页面
	$("#wizardStep").html(this.fnGetEnterInfoHTML());	
}
CEnterInfo.prototype.fnGetEnterInfoHTML = function(){
	var oContent = this.oSelectedVerse.content;
	var sHtml = "";
	for(i=0; i<oContent.length; i++){
		if(typeof(oContent[i]) == "object"){
			sHtml +='<div class="enterInfoLabel" style="float:left; clear: left" >' + oContent[i][1] + '</div><div class="enterInfofield" style="clear:both" ><input id="wizardStepVariable_' + i + '" name="wizardStepVariable_' + i + '" value="" /></div>';
		}
	}
	//alert(sHtml);
	return sHtml;
}

//调整步骤
function CPersonlize(){
}
CPersonlize.prototype.fnInit = function() {
	/* 清除编辑器 */
	$("#personalizeStep_textStyles").empty();
	$("#color_list_button").empty();
	$("#personalizeImagePreviewPane").empty();
	//alert(!!StepControl.fnEditorInit);
	if( !!StepControl.fnEditorInit ) {
		StepControl.fnEditorInit();		/* 重置全局变量 */
	}
}
CPersonlize.prototype.fnRun = function(){
	/* 清除已生成的HTML */
	this.fnInit();
	//隐藏上一步verseStep，显示当前enterInfo
	$("#enterInfo").hide();
	$("#personalizeStep").show();
	var iWidth = StepControl.oUserConfig.iWidth;
	var iHeight = StepControl.oUserConfig.iHeight;
	//小预览图标
	$("#small_example_pic > img").attr({src : StepControl.fnGetPicPath(), width : Math.floor(iWidth*9/125)} );
	//阴影背景
	$("#personalizeStep_imageView").css({"background-image" : "url(getImage.php?op=shadow&width=" + iWidth + "&height=" + iHeight + ")", "width" : (parseInt(iWidth) + 11).toString() + "px", "height" : (parseInt(iHeight) + 11).toString() + "px"});
	//背景图片
	$("#personalizeImagePreviewPane").css({"background" : "url(" + StepControl.fnGetBgPic() + ")", "width" : iWidth + "px", "height" : iHeight + "px"});
	
	//输出颜色按钮列表
	this.fnAppendColorList();
	
	//输出背景图片
	this.fnAppendTextImage();
}
CPersonlize.prototype.fnCheckData = function(){
	var arVerseDetail = StepControl.fnGetSelectedVerse().detail;
	var arContent = StepControl.fnGetSelectedVerse().content;
	for(var i=0; i<arContent.length; i++){
		if(typeof(arContent[i]) == "object"){
			arContent[i][0] = $('#wizardStepVariable_' + i).val();
		}
	}
	var arString = StepControl.fnGetVerseString().split('\n\n');
	for(i=0; i<arString.length; i++){
		if( arString[i] != "" ){
			arVerseDetail[i].sTextContent = arString[i];
		}
		else{
			alert('Can not be blanked!');
			$('#wizardStepVariable_' + i).focus();
			return false;
			break;
		}
	}
	StepControl.oUserConfig.oVerseDetail = arVerseDetail;
	return true;
}
//颜色列表HTML代码
CPersonlize.prototype.fnGetColorListHTML = function(){
	var sTmpHtml = '<div>';
	var arBgColors = StepControl.oCardConfig.oGlobalConfig.bgColors;
	for(var i=0; i<arBgColors.length; i++){
		sTmpHtml += '<DIV class="colorElementSelector';
		if(StepControl.oUserConfig.sBgColor == arBgColors[i].value)
			sTmpHtml += ' selectedColorElementSelector';
		sTmpHtml += '" color=' + arBgColors[i].value + '> <IMG class="colorElement clickable" title="' + arBgColors[i].name + '" style="background-color:#' + arBgColors[i].value + '" height="18" src="images/blank.gif" width="18" /> </DIV>';
	}
	sTmpHtml += '</div>';
	//alert(sTmpHtml);
	return sTmpHtml;
}
//颜色按钮事件
CPersonlize.fnColorBtnClick = function( e ) {
	var oData = e.data;//div元素本身	
	$(".selectedColorElementSelector").removeClass("selectedColorElementSelector");
	oData.addClass("selectedColorElementSelector");
	//更改选定背景颜色
	StepControl.oUserConfig.sBgColor = e.data.attr("color");
	//左上角小图、背景图片
	$("#small_example_pic > img").attr("src", StepControl.fnGetPicPath() );
	$("#personalizeImagePreviewPane").css("background" , "url(" + StepControl.fnGetBgPic() + ")" );
}
CPersonlize.prototype.fnAppendColorList = function(){
	var oJQuery = $( this.fnGetColorListHTML() );
	//颜色列表按钮绑定事件
	oJQuery.find(".colorElementSelector").each(function(){
		//alert(this.color);
		$(this).bind("click", $(this), CPersonlize.fnColorBtnClick);
	});
	oJQuery.appendTo("#color_list_button");
}
//文字块图片HTML
CPersonlize.prototype.fnTextImageHTML = function (){
	var arDetail = StepControl.fnGetSelectedVerse().detail;
	var sTmpHtml = "<div>";
	for(var i=0; i<arDetail.length; i++){
		//alert(JSON.stringify(arDetail[i]));
		sTmpHtml += '<div id="text_block_' + i + '_image" style="position:absolute; top:' + arDetail[i].y0 + 'px; left:' + arDetail[i].x0 + 'px"><img src="getImage.php?op=text&json=' + encodeURIComponent(JSON.stringify(arDetail[i])) + '" /></div>';
	}
	sTmpHtml += "</div>";
	return sTmpHtml;
};

function fnClickEditorBox( e ){
	/* 文字块索引、编辑器索引 */
	var iIndex = g_iIndex;
	if( iIndex ){
		//更新坐标数据
		var oVerseInfo = StepControl.oUserConfig.oVerseDetail[iIndex];
		oVerseInfo.x0 = /\d{1,}/.exec( $("#text_block_" + iIndex + "_image").css('left') )[0];
		oVerseInfo.y0 = /\d{1,}/.exec( $("#text_block_" + iIndex + "_image").css('top') )[0];
		//文字块不能移动
		$("#text_block_" + iIndex + "_image").draggable('disable');
		$("#text_block_" + iIndex + "_image").bind('click', iIndex, fnClickEditorBox);
	}
	iIndex = e.data;
	//取消本事件
	$("#text_block_" + iIndex + "_image").unbind('click', fnClickEditorBox);
	//加载文字块数据
	TextEditor.oEditor.fnLoadFormat(StepControl.oUserConfig.oVerseDetail[iIndex]);
	//文字块图片可移动
	$("#text_block_" + iIndex + "_image").draggable('enable');
	//聚焦编辑器
	g_aoEditor[iIndex].fnOnFocus();
}
//文字块图片事件
CPersonlize.prototype.fnAppendTextImage = function(){
	var oJQuery = $( this.fnTextImageHTML() );
	var iTexts = StepControl.oUserConfig.oVerseDetail.length;
	for(var i=0; i<iTexts; i++){
		//初始化编辑器
		var oEditor = new CEditor("personalizeStep_textStyles");
		oEditor.fnLoadFormat(StepControl.oUserConfig.oVerseDetail[i]);
		oJQuery.find("#text_block_" + i + "_image").bind('click', oEditor, oEditor.fnOnFocus);
		oJQuery.find("#text_block_" + i + "_image").draggable();
		oJQuery.find("#text_block_" + i + "_image").draggable('disable');
	}
	oJQuery.appendTo("#personalizeImagePreviewPane");
}

//预览
function getGetValue(Name){
	var sQueryString = window.location.search;
	var config=new RegExp(Name+"=([^,]+)", "i") //get name/value config pair (ie: width=400px,)
	
	return (config.test(sQueryString))? parseInt(RegExp.$1) : '' //return value portion (int), or 0 (false) if none found
}
function CReview(){
}
CReview.prototype.fnRun = function()
{
	//隐藏上一步personalizeStep，显示当前reviewStep
	$("#personalizeStep").hide();
	$("#reviewStep").show();
	//更新StepControl.oUserConfig
	StepControl.oUserConfig.sBgPic = StepControl.fnGetBgPic();
	//小预览图标
	var iWidth = StepControl.oUserConfig.iWidth;
	var iHeight = StepControl.oUserConfig.iHeight;
	var sConfigText = JSON.stringify(StepControl.oUserConfig);
	var oForm = $("#saveUserConfigForm");
	oForm.children("#userConfigText").val(sConfigText);
//	alert(location.search.search("uri"));
//	alert( encodeURIComponent(location.search.substr(location.search.search("uri") + 4)) );
//	alert(getGetValue("sid"));
	oForm.children("#cardPreUri").val( encodeURIComponent(location.search.substr( location.search.search("uri") + 4 )) );
	$("#review_small_sample_pic > img").attr({src : StepControl.fnGetPicPath(), width : Math.floor(iWidth*9/125)} );
	$.post('getImage.php?op=review', {"json": sConfigText}, function(oData){
		$("#reviewImageContainer > img").attr({src : oData});
		$("#reviewPicPath").val(oData);
		//alert($("#reviewPicPath").val());
		//$("#debug").text(oData);
	})
	
}

