
var INPUT_ITEMS = "inputItems";  
var TOTAL_ITEMS = "totalItems";  
var BTN_SEARCH = "itemQuery";
var BTN_CLEAR = "itemClear";
var DETAIL_TEMPLATE = "itemDetailTemplate";
var LOADING_TEMPLATE = "itemDetailLoading";
var ERROR_TEMPLATE = "itemDetailError";
var BODY_PANEL = "itemDetailBody";
var DETAIL_CONTENT = "itemDetailContent";
var DETAIL_CONTENT_TEMPLATE1 = "itemDetailContentTemplate1";
var DETAIL_CONTENT_TEMPLATE2 = "itemDetailContentTemplate2";
var MAX_ITEMS_COUNT = 200;
var SEND_EMAIL_ID = "sendEmailPanel";
var SEND_EMAIL_RN = "receiver_name";
var SEND_EMAIL_ET = "email_title";
var SEND_EMAIL_EC = "email_content";
var SEND_EMAIL_BS = "email_btn_send";
var SEND_EMAIL_BC = "email_btn_close";
var GRID_VIEW_ITEMS = "grid-view-items"; 
var BTN_GROUP_ALL = "btnGroupAll"; 
var BTN_DOWNLOAD_ALL = "btnDownloadAll"; 
var BTN_COPY_ALL = "btnCopyAll"; 
var BTN_RESEARCHERR_ALL = "btnReSearchErr"; 
var DIV_DOWNLOAD_FORMID = "divDownloadFormId"; 
var DIV_CONTROL_ID = "gridMgrPanel";
var DIV_RSCOUNT_ID = "gridBarPanel";
var SPAN_RSCOUNTER = "rsCounter";
var DIV_SAMPLE_ID  = "divSampleBar";
var DIV_LEFT_MENU_ID = "menu-panel-id";
var DIV_GLIDER_ID  = "gliderPanel";

var myTrackManager = null;
var myTrackTimeout = 25; //seconds
var myTrackCounter = 0;
var myTrackParams  = {id:null,timeout:null,mailType:null,lang:null,srcId:null,srcMode:null,dstId:null,dstMode:null,input:null};
var myGlider       = new Glider(DIV_GLIDER_ID,false,400,40);

$(document).ready(function () {
    initPage();
});

function initPage() {

	menuAutoSelected();
		
    if($("#"+INPUT_ITEMS).size()<=0)return;

	TIP_COPY_SUCESS = CLIP_COPY_SUCESS;
	CLIP_MOVIE_PATH = baseURL+"/js/clip/"+CLIP_MOVIE_PATH;
	
	$("#"+INPUT_ITEMS).bind('keyup',function(){
		setInputItemsCount();
	});
	
	$("#"+INPUT_ITEMS).bind('blur',function(){
		setInputItemsCount();
	});
	
	function clearParameters(){
		$("#"+BODY_PANEL).empty();
		$("#"+DIV_CONTROL_ID).hide();
		$("#"+DIV_RSCOUNT_ID).find("span").text("0");
		$("#"+DIV_RSCOUNT_ID).hide();
	}
	$("#"+BTN_CLEAR).bind('click',function(){
		$("#"+INPUT_ITEMS).val('');
		clearParameters();
		setInputItemsCount();
	});
	
	$("#"+BTN_SEARCH).bind('click',function(){
		clearParameters();
		searchItem();
		$("#"+DIV_CONTROL_ID).show();
		$("#"+DIV_RSCOUNT_ID).show();
	});
	
	$("#"+BTN_GROUP_ALL).bind('click',function(){
		sortThisCol(3);
	});
	
	$("#"+BTN_DOWNLOAD_ALL).bind('click',function(){
		var data = getGridViewItemsData();
		downloadExcel(data);
	});
	
	$("#"+BTN_COPY_ALL).bind('mouseover',function(){
		registClipborad(this,copyAllDetail,
			function(args){
				var obj = args[0];
			    return {
			        "left": rel_X(obj) + 50,
			        "top":  rel_Y(obj),
			        "width":$(obj).outerWidth(),
			        "height":$(obj).outerHeight()
			    };
			}
		);
	});
	
	$("#"+BTN_RESEARCHERR_ALL).bind('click',function(){
		showReTrackAll();
	});
	
	$("#"+DIV_SAMPLE_ID).bind('click',function(){
		showSampleTrack();
	});

	$(document).bind("mousedown",function(event){
		if(myGlider.clicked(event))return;

		var panel = $("#"+BODY_PANEL);
		if(panel==null || panel==undefined)return;
		var trs = $(panel).children("tr");
	 	for(var i=0; i<trs.length; i=i+1){
	 		try{
		 		var tds = $(trs[i]).children("td");
				if(tds.length<=5)continue;
				var table = $(tds[5]).children("table");
				$(table).hide();
				myGlider.clear();
	 		}catch(e){}
	 	}
	});

	autoSearchItem();
	setInputItemsCount();
	try{ afterReload(); }catch(e){}
	try{ $("#"+BTN_SEARCH).removeAttr("disabled");  $("#"+BTN_CLEAR).removeAttr("disabled"); }catch(e){}
};


  function autoSearchItem(){
  	var items = $("#"+INPUT_ITEMS).val().trim();
  	if(items.length>0){
  		$("#"+INPUT_ITEMS).val(items.replaceAll(",","\r\n"));
  		$("#"+BTN_SEARCH).click();
  	}
  }

  function makeNewLine(itemid,i){
  	if($("#"+itemid).size()>0){
  		var style = $("#"+itemid).attr("class");
	  	var itemHTML = $("#"+LOADING_TEMPLATE).html();
	  	itemHTML = itemHTML.replaceAll("{mailNo}",itemid);
	  	itemHTML = itemHTML.replaceAll("{style}",style);
  		$("#"+itemid).replaceWith( $(itemHTML) );
  	}else{
	  	var itemHTML = $("#"+LOADING_TEMPLATE).html();
	  	itemHTML = itemHTML.replaceAll("{mailNo}",itemid);
	  	itemHTML = itemHTML.replaceAll("{style}",(i%2==0?"odd":"even"));
	  	$("#"+BODY_PANEL).append( $(itemHTML) );
  	}
  }

 var MyTracker = function(itemid){
  	var dex = myTrackCounter;
  	myTrackCounter ++;
  	
  	function errorProcess(){
	  	    var itemHTML = $("#"+ERROR_TEMPLATE).html();
		  	itemHTML = itemHTML.replaceAll("{mailNo}",itemid);
		  	$("#"+itemid).replaceWith( $(itemHTML) );
  	}
  	
  	//重新设置和修正参数
  	var timeout = (myTrackParams.timeout==null?myTrackTimeout:myTrackParams.timeout);
  	myTrackParams.id = itemid;
  	myTrackParams.timeout = timeout;
  	if(myTrackParams.mailType!=null){
  		if(myTrackParams.mailType!="EMS" && myTrackParams.mailType!="REG" && myTrackParams.mailType!="Pack" ){
  			myTrackParams.srcId = null;
  			myTrackParams.dstId = null;
  		}
  	}
  	
	$.ajax({
	  url: baseURL+"/track",
	  data:myTrackParams,
	  async: true,
	  dataType:"json",
	  timeout: (timeout)*1000,
	  success: function(result){
	  	if(result.length<=0){
			errorProcess();
			return;
	  	}
	  	var json = result;
	  	$(json).each(function(z, data){
			//for(var key in data){}
			TrackerCallback(data["mstatus"]);
			var itemHTML = $("#"+DETAIL_TEMPLATE).html();
			itemHTML = itemHTML.replaceAll("{mailNo}",itemid);
			itemHTML = itemHTML.replaceAll("{style}",(dex%2==0?"odd":"even"));
			var mailStatText = data["mailStatus"];
			if(data["mstatus"]=="3"){
				mailStatText += " ("+(myTrackParams.lang=="EN"? (data["mailDays"]+" Days"):(data["mailDays"]+" 天") ) +")";
			}
			itemHTML = itemHTML.replaceAll("{mailStatus}",mailStatText);
			itemHTML = itemHTML.replaceAll("{queryStatus}",data["queryStatus"]);
			itemHTML = itemHTML.replaceAll("{dstName}",data["dstName"]);
			itemHTML = itemHTML.replaceAll("{srcName}",data["srcName"]);
			itemHTML = itemHTML.replaceAll("dstLink",(data["dstLink"]!=null?data["dstLink"]:"#"));
			itemHTML = itemHTML.replaceAll("srcLink",(data["srcLink"]!=null?data["srcLink"]:"#"));
			//itemHTML = itemHTML.replaceAll("{waittime}",data["waittime"]/1000);
			itemHTML = itemHTML.replaceAll("{mstatus}",data["mstatus"]);
			itemHTML = itemHTML.replaceAll("{qstatus}",data["qstatus"]);
			
			function getContent (itemEvent){
				var content = itemEvent["content"];
				var midspot = itemEvent["location"];
				if(midspot == null || midspot == "null") midspot = "";
				if( midspot.length>0) midspot = ",  location:"+midspot;
				return content + midspot;
			}
			function getLineHtml_A(itemEvent,style){
				var datetime = itemEvent["datetime"];
				var content = getContent(itemEvent);
				var eventHTML = $("#"+DETAIL_CONTENT_TEMPLATE1).html();
				eventHTML = eventHTML.replaceAll("{datetime}",datetime);
				eventHTML = eventHTML.replaceAll("{content}",content);
				eventHTML = eventHTML.replaceAll("{style}",style);
				return eventHTML;
			}
			function getLineHtml_B(content,style){
				var eventHTML = $("#"+DETAIL_CONTENT_TEMPLATE2).html();
				eventHTML = eventHTML.replaceAll("{content}",content);
				eventHTML = eventHTML.replaceAll("{style}",style);
				return eventHTML;
			}
			
			if(data["lastEvent"]){
				itemHTML = itemHTML.replaceAll("{lastEventDatetime}",data["lastEvent"]["datetime"]);
				var lastEContent = getContent(data["lastEvent"]);
				if(data["dstName"]!=null && data["dstName"].length>0){
					lastEContent += " (" + data["dstName"] + ")";
				}
				itemHTML = itemHTML.replaceAll("{lastEventContent}", lastEContent);
			}else{
				itemHTML = itemHTML.replaceAll("{lastEventDatetime}","");
				itemHTML = itemHTML.replaceAll("{lastEventContent}", "");
			}

			var x = 0, style="";
			var srcHtml = "";
			if(data["srcName"]!=null && data["srcName"]!=""){
				style = ((x%2==0)?"Odd":"Even"); x++;
				srcHtml += getLineHtml_B("[" + data["srcName"]+"] &nbsp;"+GOV_POST_DESC,style);
			}
			var srcEvent = data["srcEvent"];
			if(srcEvent!=null && srcEvent.length>0){
				for(var i=0; i<srcEvent.length; i++){
					style = ((x%2==0)?"Odd":"Even"); x++;
					srcHtml += getLineHtml_A(srcEvent[i],style);
				}
			}
			
			var dstHtml = "";
			if(data["dstName"]!=null && data["dstName"]!=""){
				style = ((x%2==0)?"Odd":"Even"); x++;
				dstHtml += getLineHtml_B("[" + data["dstName"]+"] &nbsp;"+GOV_POST_DESC,style);
			}
			var dstEvent = data["dstEvent"];
			if(dstEvent!=null && dstEvent.length>0){
				for(var i=0; i<dstEvent.length; i++){
					style = ((x%2==0)?"Odd":"Even"); x++;
					dstHtml += getLineHtml_A(dstEvent[i],style);
				}
			}
			
			style = ((x%2==0)?"Odd":"Even"); x++;
			itemHTML = itemHTML.replaceAll("{waittime_style}",style);
			itemHTML = itemHTML.replaceAll("{waittime}",data["waittime"]/1000);
			
			var detailHtml = srcHtml+dstHtml;
			if(itemHTML.indexOf(DETAIL_CONTENT+">")>0){
				itemHTML = itemHTML.insertAfter(DETAIL_CONTENT+">",detailHtml);
			}else if(itemHTML.indexOf(DETAIL_CONTENT+"\">")>0){
				itemHTML = itemHTML.insertAfter(DETAIL_CONTENT+"\">",detailHtml);
			}

			//track error setting
			if(data["mstatus"]=="0"){
				itemHTML = itemHTML.replaceAll("showSendEmail","showReTrack");
				itemHTML = itemHTML.replaceAll("email2.png","retrack.png");
			}

			$("#"+itemid).replaceWith( $(itemHTML) );
	  	});
	  },
	  error:function(a,b,c){
	  	TrackerCallback(null);
	  	errorProcess();
	  }
	});
  }

//define a tracker manager.
var myTrackManager = new TrackerManager(20,MyTracker);

 function TrackerCallback(data){
 	myTrackManager.dec();//--------dec Thread
 	if(data==null) data = "0";
 	var count = $("#"+SPAN_RSCOUNTER+data).text();
 	$("#"+SPAN_RSCOUNTER+data).text(parseInt(count)+1);
 }

  function searchItem(){
    var mailnos = getInputItemsList();
    var items = "";
  	for (var i = 0; i < mailnos.length; i++) {
  	    var itemid = $.trim(mailnos[i]);
  	    itemid = itemid.replaceAll("\\s","");
  	    if(itemid.length==0) continue;
  	    makeNewLine(itemid,i);
  	    items = items + (items.length>0?",":"") + itemid;
  	}
  	if(items.length<=0)return;
  	myTrackCounter = 0;
  	myTrackManager.load(items);
  	myTrackManager.track();
  }


  function translate(textVal,func){
	$.ajax({
	  type: 'POST',
	  url: baseURL+"/translate",
	  data: {text:textVal},
	  async: true,
	  success: function(data){
	    try{ func.call(this,data); }catch(e){}
	  },
	  error:function(a,b,c){
	  }
	});
  }

function countInputItemsCount() {
    var result = document.getElementById(INPUT_ITEMS).value;

    var count = 0;
    var results = result.split("\n");
    for (var i = 0; i < results.length; i++) {
        if ($.trim(results[i]) == "")
            continue;
        count++;
    }

    return count;
};


function setInputItemsCount() {
    document.getElementById(TOTAL_ITEMS).innerHTML = "( " + countInputItemsCount() + " )";
};


function getInputItemsList() {

    var numberList = new Array();

    var numbersResult = $.trim(document.getElementById(INPUT_ITEMS).value);

    function isExists(numbersList, number) {
        for (var i = 0; i < numbersList.length; i++) {
            if ($.trim(numbersList[i]).toUpperCase() == number.toUpperCase())
                return true;
        }

        return false;
    }

    var numbers = numbersResult.split("\n");

    for (var i = 0; i < numbers.length; i++) {

        if (numberList.length >= MAX_ITEMS_COUNT)
            break;

        if ($.trim(numbers[i]) == "")
            continue;

        if (isExists(numberList, numbers[i]))
            continue;

        numberList.push(numbers[i]);
    }

    return numberList;
};


function registDetail(div) {
	var panel = $(div).next();
	var gliderDIV = $("#"+DIV_GLIDER_ID);
	
	myGlider.load(gliderDIV.get(0) , panel.get(0), $(panel).width(), $(panel).height() );
	myGlider.start();
		
	var top  = rel_Y($(div).get(0)) -  myGlider.height + get_H($(div).get(0))/2 - 3;
	var left = rel_X($(div).get(0)) -  myGlider.width + get_W($(div).get(0))/2 -30;

	document.getElementById(DIV_GLIDER_ID).style.top = top;
	document.getElementById(DIV_GLIDER_ID).style.top = top+"px";
	document.getElementById(DIV_GLIDER_ID).style.left = left;
	document.getElementById(DIV_GLIDER_ID).style.left = left+"px";
		
};

function copyDetail(args) {
	var div = args[0];
	var records = "";
	var panel = $(div).next();
	var trs = $(panel).find("tr");
	for(var i=0; i<trs.length; i=i+1){
		records += $(trs[i]).text() + "\r\n";
	}
	return records;
};

function copyDetailPos(args){
	var obj = args[0];
    var pos = 
    {
        "left": rel_X(obj)+0,
        "top":  rel_Y(obj)+2,
        "width":$(obj).outerWidth(),
        "height":$(obj).outerHeight() + 10
    };
    return pos;
}

function copyAllDetail() {
	var records = "";
 	var trs = $("#"+GRID_VIEW_ITEMS+" > tbody > tr");
 	for(var i=0; i<trs.length; i=i+1){
 		if($(trs[i]).parent().css("display")
 			.toLowerCase()=='none')continue;
 		var tds = $(trs[i]).children("td");
 		if($(tds).length<=0)continue;
 		
		for(var j=0; j<tds.length-2; j=j+1){
			records += $(tds[j]).text() + " ";
		}
		records += "\r\n";
		
		if(tds.length<=5)continue;
		var rows = $(tds[5]).find("table").find("tr");
		for(var j=0; j<rows.length; j=j+1){
			if(j==rows.length-1)continue;
			records += $(rows[j]).text() + "\r\n";
		}
		records += "\r\n";
 	}
	return records;
};

function showSendEmail(obj) {
	
	var panel = $("#"+SEND_EMAIL_ID);
	
	var top = $(obj).position().top +135;
	var left = $(obj).position().left -  $(panel).width()/2 + 0;
	
	$("#"+SEND_EMAIL_RN+"_tip").hide();
	$("#"+SEND_EMAIL_ET+"_tip").hide();
	$(panel).show();
	$(panel).css({"left":left,"top":top});

  	    var td = $(obj).parent().prev().clone();
  	    $(td).children("a").remove();
  	    var tab = $(td).children("table")[0];
  	    $(tab).css("display","block");
  	    $(tab).css("position","relative");
  	    $(tab).css("top","0px");
  	    $(tab).css("left","0px");
  	    var dataContent = $(td).html();
  	    
  	    $("#"+SEND_EMAIL_RN).focus();
  	    
  	var itemid = $(obj).parent().parent().attr("id");
  	$("#"+SEND_EMAIL_ET).val(SendMail_GetTitle(itemid));
  	    
  	    
	$("#"+SEND_EMAIL_BC).bind("click",function(){
		$(panel).hide();
	});
	$("#"+SEND_EMAIL_BS).bind("click",function(){
		var mail = $("#"+SEND_EMAIL_RN).val();
		var title = $("#"+SEND_EMAIL_ET).val();
		if($.trim(mail).length<=0){
		    	$("#"+SEND_EMAIL_RN).focus();
		    	$("#"+SEND_EMAIL_RN+"_tip").show();
		    	return;
		}
		if($.trim(title).length<=0){
		    	$("#"+SEND_EMAIL_ET).focus();
		    	$("#"+SEND_EMAIL_ET+"_tip").show();
		    	return;
		}
		sendMail(panel, mail, title, dataContent);
	});
	  
};



  function sendMail(panel, mail,title,content){ 
		content = content.insertBefore("<table",SendMail_Style);
		content = content.insertBefore("</table>",SendMail_Append);
		$.ajax({
		  type: 'POST',
		  url:  baseURL+"/mail",
		  data: {mail:mail, title:title, content:content},
		  async: true,
		  timeout: 100*1000,
		  success: function(data){
			if(data == '1'){
				alert(SendMail_Sucess);
				$(panel).hide();
			}else{
				alert(SendMail_Failed);
			}
		  }
		});
  } 

 function getGridViewItemsData(){
 	var ths = $("#"+GRID_VIEW_ITEMS+" > thead > tr > th");
 	function getRow(tds){
 		return "{"+
 			"\"" + $(ths[0]).text() + "\":\"" + $(tds[0]).text() + "\"," +
			"\"" + $(ths[1]).text() + "\":\"" + $(tds[1]).text() + "\"," +
 			"\"" + $(ths[2]).text() + "\":\"" + $(tds[2]).text().toJsonText() + "\"," +
			"\"" + $(ths[3]).text() + "\":\"" + $(tds[3]).text() + "\"," +	
 			"\"" + $(ths[4]).text() + "\":\"" + $(tds[4]).text() + "\"" +
 			"}"
 	}
 	var trs = $("#"+GRID_VIEW_ITEMS+" > tbody > tr");
 	var data = "[";
 	for(var i=0; i<trs.length; i++){
 		if($(trs[i]).parent().css("display")
 			.toLowerCase()=='none')continue;
 		var tds = $(trs[i]).children("td");
 		if($(tds).length<=0)continue;
 		data += (data.length>1?",":"")  +  getRow( tds );
 	}
 	data += "]";
 	return data;
}

function downloadExcel(postdata){
		var execURL = baseURL + '/excel';
		var formid = DIV_DOWNLOAD_FORMID;
		try{$("#"+formid).remove();}catch(e){};
        var form = $("<form id='"+formid+"'method='POST'>" +
                   "<input type='hidden' name='download_data' value=\"" +
                   	encodeURIComponent(postdata)+"\"/>" +
        		"</form>");
        form.attr('action',execURL);
        form.attr('method','post');
        form.attr("target", "_blank");
        form.css('display','none');
        form.appendTo("body");
        form.submit();
}

var sortType = true;
function sortThisCol(id){
	id = parseInt(id);
	var panel = $("#"+BODY_PANEL);
	PanelSortMgr(panel,id,sortType);
	sortType = !sortType;
	$(panel).children().removeClass();
	$(panel).children("tr:even").addClass("even");
	$(panel).children("tr:odd").addClass("odd");
}

function showReTrack(obj){
	var panel = $(obj).parent().parent();
	var itemid = $(panel).attr("id");
	
	var count = $("#"+SPAN_RSCOUNTER+"0").text();
	count = parseInt(count)-1;
	if(count<0)count = 0;
 	$("#"+SPAN_RSCOUNTER+"0").text(count);
 	
	myTrackManager.push(itemid);
	makeNewLine(itemid);
}

function showReTrackAll(){
	var trs = $("#"+BODY_PANEL).children("tr");
	$(trs).each(function(i,tr){
		var span = $(tr).find("td > span");
		if(span.length>0 && $(span[0]).text()=="0"){
			showReTrack(span[0]);
		}
	});
}

function menuAutoSelected(){
	var href = window.location.href;
	var hrefs = $("#"+DIV_LEFT_MENU_ID).find("a");
	var def = null;
	for(var i=0; i<hrefs.length; i++){
		var obj = hrefs[i];
		if(i==0) def=obj;
		if( href.indexOf( $(obj).attr("href") )>0 ){
			$(obj).addClass("current");
			def = null;
		}else{
			$(obj).removeClass("current");
		}
	}
	if(def!=null) $(def).addClass("current");
}

function showSampleTrack(){
		var items = DEFAULT__EXAMPLE_ITEMS||"";
  		$("#"+INPUT_ITEMS).val(items.replaceAll(",","\r\n"));
  		$("#"+BTN_SEARCH).click();
}




