
if (window.HTMLElement) {

    var element = HTMLElement.prototype;

    var capture = ["click",    "mousedown", "mouseup",    "mousemove", "mouseover", "mouseout" ];
    if (!element.setCapture )
    {
        element.setCapture = function(){
            var self = this;
            var flag = false;
            this._capture = function(e){
                if (flag) {return}
                flag = true;
                var event = document.createEvent("MouseEvents");
                event.initMouseEvent(e.type,
                    e.bubbles, e.cancelable, e.view, e.detail,
                    e.screenX, e.screenY, e.clientX, e.clientY,
                    e.ctrlKey, e.altKey, e.shiftKey, e.metaKey,
                    e.button, e.relatedTarget);
                self.dispatchEvent(event);
                flag = false;
            };
            for (var i=0; i<capture.length; i++) {
                window.addEventListener(capture[i], this._capture, true);
            }
        };

        element.releaseCapture = function(){
            for (var i=0; i<capture.length; i++) {
                window.removeEventListener(capture[i], this._capture, true);
            }
            this._capture = null;
        };
    }
}

function site_EmailToolClass(){
	this.emailPaneDiv = null;
	this.enabledMove = false;
	this.oldcursor = "auto";
	this.divEmail = null;
	this.topPaneEmailTool = null;
	this.nowX = 0;
	this.nowY = 0;
	this.offsetx = 0;
	this.offsety = 0;
	this.oldcursor = "auto";
	this.oldMoveFunc = null;
	this.oldUpFunc = null;
	this.checkMultiDocHiddenInput = null;
	this.AddressInput = null;
	this.SubjectInput = null;
	this.ContentInput = null;
	this.numberCharactersSpan = null;
	this.vani_timeFloatingID = 0;
	this.Groups = new Array;
    this.Addresses = new Array;
} 

site_EmailToolClass.prototype.hideEmailToolPane = function(){
	if (typeof etag_objAddressesTool != "undefined")
	    if (etag_objAddressesTool != null)
			try{etag_objAddressesTool.hideAddressesToolPane();}catch(e){}	//will go into catch if Address Tool already closed
	clearInterval(this.vani_timeFloatingID);
	site_objEmailTool.emailPaneDiv.style.visibility = "hidden";
}

site_EmailToolClass.prototype.setCatchInContentChange = function(ele)
{
    ele.onkeyup = site_objEmailTool.contentChange;
    ele.onkeydown = site_objEmailTool.contentChange;
    ele.onkeypress = site_objEmailTool.contentChange;
    ele.drag = site_objEmailTool.contentChange;
    ele.cut = site_objEmailTool.contentChange;
    ele.paste = site_objEmailTool.contentChange;
}

site_EmailToolClass.prototype.AddAddresses = function(strAddresses)
{  
    var strEmailText = "";
    //if (this.isEmailInput) 
    strEmailText = trim(site_objEmailTool.AddressInput.value);
    if (strEmailText != "")
    {
        if (strEmailText.charAt(strEmailText.length-1) != ',')    
            strEmailText += ", ";   
    }
    strEmailText += strAddresses;
    //this.isEmailInput = true;
    site_objEmailTool.AddressInput.value = strEmailText;
}

site_EmailToolClass.prototype.contentChange = function(ev)
{
    var e =window.event||ev;
    var eventElement= e.srcElement||e.target;
    e.cancelBubble = true;
    var str = eventElement.value;
    site_objEmailTool.numberCharactersSpan.innerHTML = 400 - str.length;
}

site_EmailToolClass.prototype.saveAndEmail = function(){
    //check email addresses valid
    var strAddresses = trim(site_objEmailTool.AddressInput.value);
    if (/*!this.isEmailInput ||*/ strAddresses == "")
    {
        alert("Please enter Email Addresses")
        return false;
    }  
    if (strAddresses.indexOf(";") != -1)
    {
        alert("Please separate addresses by commas.")
        return false;    
    }
    var arrAddresses = strAddresses.split(","); 
    var strAddressFail = "";
    var isNotAddress = false;
    var isMustAddress;
    for (var i=0; i<arrAddresses.length; i++)
    {
        isMustAddress = false;
        if (trim(arrAddresses[i])!= "")
        {
            arrAddresses[i] = trim(arrAddresses[i]);
            var tempAddress = arrAddresses[i];
            var pos, pos1;
            pos= arrAddresses[i].indexOf('<');
            if (pos >= 0 && pos != arrAddresses[i].length-1)
            {
                pos1 = arrAddresses[i].indexOf('>');
                if (pos1 > pos)
                {
                    arrAddresses[i] = arrAddresses[i].substr(pos + 1, pos1 - pos  - 1)
                    isMustAddress = true;
                }
            }
            arrAddresses[i] = trim(arrAddresses[i]);
            var isCheckEmailSuccess = Email_checkEmail(arrAddresses[i]);
            var isInBook = Email_isInCols(tempAddress, site_objEmailTool.Groups, site_objEmailTool.Addresses);
            if (!(isCheckEmailSuccess || (isInBook && !isMustAddress )))
            {
                if (strAddressFail != "")   
                    strAddressFail +=","; 
                strAddressFail += arrAddresses[i];
                isNotAddress = true;
            }
        }
    }
    if (isNotAddress)
    {
        var strError = "We cannot find a match for these addresses\n";
        strError += strAddressFail + "\n";
        strError += "Please use an email address which looks like user@example.com.";
        alert(strError);
        return false;
    }
    
    var strSubject;
    //if (this.isSubjectInput)
        strSubject = site_objEmailTool.SubjectInput.value;    
    //else
    //    strSubject = ""; 
    var strContent;
    //if (this.isContentInput)
        strContent = site_objEmailTool.ContentInput.value;
    //else
    //    strContent = "";
    this.hideEmailToolPane();
    return true;
}



site_EmailToolClass.prototype.moveEmailPane = function(ev)
{
	var e =window.event||ev;
	if (!site_objEmailTool.enabledMove) return;
		if ((e.button != 1 && !ev) ||(ev && e.button != 0))
		{
			site_objEmailTool.enabledMove = false;
			return;
		}	
	  nMove=site_objEmailTool.nowX+e.clientX-site_objEmailTool.offsetx;
	  site_objEmailTool.emailPaneDiv.style.left = nMove + "px";
	  nMove = site_objEmailTool.nowY+e.clientY-site_objEmailTool.offsety;
	  site_objEmailTool.emailPaneDiv.style.top = nMove + "px";
	  return false;  
}

site_EmailToolClass.prototype.startMoveEmailPane = function(ev){
	  var topDocument="BODY";
	  var e =window.event||ev;
	  var eventElement= e.srcElement||e.target;
	  while (eventElement.id!=site_objEmailTool.topPaneEmailTool.id&&eventElement.tagName!=topDocument){
		eventElement=eventElement.parentNode;
	  }  
	  if (eventElement.id==site_objEmailTool.topPaneEmailTool.id){
		site_objEmailTool.offsetx=e.clientX ;
		site_objEmailTool.offsety=e.clientY ;
		site_objEmailTool.nowX=parseInt(site_objEmailTool.emailPaneDiv.style.left);
		site_objEmailTool.nowY=parseInt(site_objEmailTool.emailPaneDiv.style.top);
		site_objEmailTool.enabledMove=true;
		site_objEmailTool.oldcursor =  document.body.style.cursor;
		document.body.style.cursor = "move";
		site_objEmailTool.emailPaneDiv.setCapture();
		if (document.onmousemove !=site_objEmailTool.moveEmailPane)
		{
		    site_objEmailTool.oldMoveFunc = document.onmousemove;
		    site_objEmailTool.oldUpFunc = document.onmouseup;
		    document.onmousemove=site_objEmailTool.moveEmailPane;
		    document.onmouseup=site_objEmailTool.stopMoving;
		}
	  }
}

site_EmailToolClass.prototype.stopMoving= function(){
    site_objEmailTool.enabledMove=false;
    document.body.style.cursor = site_objEmailTool.oldcursor; 
    site_objEmailTool.emailPaneDiv.releaseCapture();
    document.onmousemove = site_objEmailTool.oldMoveFunc;
    document.onmouseup = site_objEmailTool.oldUpFunc;
}

var site_objEmailTool = new site_EmailToolClass();
var etag_objAddressesTool = null;

site_EmailToolClass.prototype.ShowAddressBook= function(){
    if (etag_objAddressesTool == null){ 
	    etag_objAddressesTool = new etag_AddressesToolClass(site_objEmailTool);		        
    }
    etag_objAddressesTool.createImportAddrToolDiv(parseInt(site_objEmailTool.emailPaneDiv.style.left) +10,parseInt(site_objEmailTool.emailPaneDiv.style.top) +10);
}

function CreateEmailDiv(cx,cy, isMultiDoc)
{
    if (site_objEmailTool.emailPaneDiv == null)
    {
        PromptLogin();
        return;
    }
    //because using the same address box, email dialog and group action dialog can't be opened at the same time
    if (vani_objGroupActionTool != null){
        //return;
        
    }
    if (isMultiDoc != '0')
        if (!IsResultItemCheck())
            {
                alert('Please select at least one eTag.')
                return;
            }
    
    var ydom = YAHOO.util.Dom;
    var viewport = [
       ydom.getViewportWidth(),
       ydom.getViewportHeight()
       
    ];
    var StartX = ydom.getDocumentScrollLeft();
    var StartY = ydom.getDocumentScrollTop();
        
    site_objEmailTool.emailPaneDiv.style.left = StartX + viewport[0]/2 - 250 + "px";
    site_objEmailTool.emailPaneDiv.style.top = StartY + viewport[1]/4 - 100 +"px";
    site_objEmailTool.emailPaneDiv.style.visibility = "visible";
    if(site_objEmailTool.checkMultiDocHiddenInput)site_objEmailTool.checkMultiDocHiddenInput.value = isMultiDoc;
    site_objEmailTool.topPaneEmailTool.onmousedown = site_objEmailTool.startMoveEmailPane;
    UpdateAddressesBook();
}

function CloseSingleEmailDiv()
{
    if (typeof site_objEmailTool == "undefined" || typeof site_objEmailTool.checkMultiDocHiddenInput == "undefined"
            ||site_objEmailTool == null || site_objEmailTool.checkMultiDocHiddenInput == null)
        return;
    if (site_objEmailTool.checkMultiDocHiddenInput.value == "0")
        if (site_objEmailTool.emailPaneDiv.style.visibility != "hidden")
            site_objEmailTool.hideEmailToolPane();
}

function trim(str1)
{
	var str= str1; 
	if (str.length == "") return str;
	while(str.length != 0 && str.charAt(0)==' ')
		str = str.substr(1);
	while(str.length != 0 && str.charAt(str.length-1)==' ')
		str = str.substr(0, str.length - 1);
	return str;
}

function replaceAll( oldStr,findStr,repStr ) {
    var srchNdx = 0; 
  var newStr = "";  
  while (oldStr.indexOf(findStr,srchNdx) != -1)  
  {
    newStr += oldStr.substring(srchNdx,oldStr.indexOf(findStr,srchNdx));
    newStr += repStr;
    srchNdx = (oldStr.indexOf(findStr,srchNdx) + findStr.length);
  }
  newStr += oldStr.substring(srchNdx,oldStr.length);
  return newStr;
}
function replaceJavascript(str)
{
    var strResult = str;
    strResult = this.replaceAll(strResult,"&","&amp;");
    strResult = this.replaceAll(strResult,"<","&lt;");
    strResult = this.replaceAll(strResult,"<","&gt;");
    return strResult;
}

function replaceValueField(str)
{
    var Result;
    strResult = this.replaceJavascript(str);
    strResult = this.replaceAll(strResult, "'","&#39;");
    return strResult;
}

//-----------------------------script for addresses dialog
function etag_AddressesToolClass(parent){
	this.addressesPaneDiv = null;
	this.parentObj = parent;
	
	YAHOO.namespace("etag.emTool");	//import Email namespace
	
	this.hideAddressesToolPane = function(){
		try{
			if(YAHOO.etag.emTool.panImpEmail)
				YAHOO.etag.emTool.panImpEmail.hide();
				//YAHOO.etag.emTool.panImpEmail.destroy();
			
			etag_objAddressesTool = null;
			document.body.removeChild(etag_objAddressesTool.addressesPaneDiv);
		}catch(e){}
	}
	
	this.createImportAddrToolDiv = function(cx,cy){
		YAHOO.etag.emTool.panImpEmail = new YAHOO.widget.Panel("panExistingEmails", { width:"230px", height:"350px", visible:true, zIndex: 3, nowrap:true,
			draggable:true, close:true, underlay: 'shadow',
			//context: ["showbtn","tl","bl"],
			effect:{effect:YAHOO.widget.ContainerEffect.FADE,duration:0.10}, xy: [100, 100] } );
		YAHOO.etag.emTool.panImpEmail.setHeader("Select From Your Address Book:");
		YAHOO.etag.emTool.panImpEmail.setBody(createAddressesDiv());
		//YAHOO.etag.emTool.panImpEmail.setFooter("&nbsp;");
		YAHOO.etag.emTool.panImpEmail.render(document.body);

		var resize = new YAHOO.util.Resize('panExistingEmails', { handles: ['br'], autoRatio: true, status: false,
				minWidth: 230, minHeight: 350 });
	            
		resize.on('resize', function(args) {
				var panelHeight = args.height;
				this.cfg.setProperty("height", panelHeight + 'px');
				_YUD.setStyle('Addresses_Pane', 'height', (panelHeight - 75) +'px');            
			}, YAHOO.etag.emTool.panImpEmail, true);            
	    
	    this.addressesPaneDiv = _YUD.get('panExistingEmails');
		YAHOO.etag.emTool.panImpEmail.hideEvent.subscribe(etag_objAddressesTool.hideAddressesToolPane);
	}	
	
	var createAddressesDiv = function(parentDiv){
		var strHTML = "<a href='fake'></a><a href='javascript: etag_objAddressesTool.loadImportPane();'><b>Import from my Web Email <span style='font-weight: bold;'>&raquo;</span></b></a><br/>";
			strHTML +=		"<div id='Addresses_Pane' style='width:100%; height: 275px; white-space: nowrap; overflow: auto; margin-top: 5px; font-size: 8pt;'>"; 

		var objCol = etag_objAddressesTool.parentObj.Groups;
		if (objCol != null && objCol.length > 0)
		{
			strHTML += "<span style='color: #1d5aa7; font-weight: bold;'>Group Mails:</span><br/>";	    
			for (var i=0; i<objCol.length; i++){               
				strHTML += "<input name='site_idCBEmailAddresses' type='checkbox' value='" + replaceValueField(objCol[i]) + "'>&nbsp;"+ replaceJavascript(objCol[i]) + "<br>";	    
			}
			strHTML += " <hr> ";
		}
		var objCol = etag_objAddressesTool.parentObj.Addresses;
		if (objCol != null){
			strHTML += "<span style='color: #1d5aa7; font-weight: bold;'>Emails:</span><br/>";
			for (var i=0; i<objCol.length; i++){               
				strHTML += "<input name='site_idCBEmailAddresses' type='checkbox' value='" + replaceValueField(objCol[i]) + "'>&nbsp;"+ replaceJavascript(objCol[i]) + "<BR>";
			}	        
		}
		strHTML +=  "</div><div style='margin-top: 2px; position: absolute; right: 4px; bottom: 4px;'>" +				
					"<img src='/img/ok.gif' onclick='etag_objAddressesTool.saveAndHide();' borber='0'></div>";	
		
		return strHTML;
	}	
	
	this.loadImportPane = function(){
		var head = document.getElementsByTagName("HEAD")[0];
		var script = document.createElement("SCRIPT");
		script.type = "text/javascript";
		script.src = "/js/ImportExtEmails.js";//"/js/ImportAddr.js";
		script.id = "id_ImportAddr";
		head.appendChild(script);
	}
	
	this.closeImportScriptObj = function(){
		var script = document.getElementById("id_ImportAddr");
		var parent = script.parentNode;
		parent.removeChild(script);   
	}

	this.AddNewAddresses = function(fromCount)
	{
		var length = this.parentObj.Addresses.length;
		var oDiv = document.getElementById('Addresses_Pane');
		for (var i=fromCount; i<length; i++)
		{
			var oChild = document.createElement("INPUT");
			oChild.name = "site_idCBEmailAddresses";
			oChild.type = "checkbox";
			oChild.value = this.parentObj.Addresses[i];
			oDiv.appendChild(oChild);
			oChild.checked = true;
			oChild = document.createTextNode(" " +this.parentObj.Addresses[i]);
			oDiv.appendChild(oChild);
			oChild = document.createElement("BR");
			oDiv.appendChild(oChild);
		}
	}
	
	this.saveAndHide = function(){
		var objDiv = document.getElementById("Addresses_Pane");
		var colAddresses = objDiv.getElementsByTagName("INPUT");
		var isHasSelected = false;
		var strAddressesSelected = "";
		/*if (typeof colAddresses.length == "undefined")
		{
			if (colAddresses.checked)
				isHasSelected = true;
			strAddressesSelected += colAddresses.value;              
		}
		else*/
		for (i=0; i< colAddresses.length; i++)
		{
			if (colAddresses[i].type == "checkbox")
			{
				isHasSelected = true;
				if (colAddresses[i].checked && !CheckIncludedEmail(etag_objAddressesTool.parentObj.AddressInput.value, colAddresses[i].value))
				{
					if (strAddressesSelected != "")
						strAddressesSelected += ", ";
					strAddressesSelected += colAddresses[i].value;
				}    
			}			
		}
		
		if (!isHasSelected)
			alert('There is no item selected.');
		else
		{
			etag_objAddressesTool.parentObj.AddAddresses(strAddressesSelected);  
			etag_objAddressesTool.hideAddressesToolPane();
		}
	}
	
	var CheckIncludedEmail = function(strContainer,strAddress )
	{
		strContainer = strContainer.replace('&lt;', '<').replace('&gt;','>');
		strAddress = strAddress.replace('&lt;', '<').replace('&gt;','>');
		//refine strAddress
		var pos, pos1;
		pos= strAddress.indexOf('<');
		if (pos >= 0 && pos != strAddress.length-1)
		{
			pos1 = strAddress.indexOf('>');
			if (pos1 > pos)
				strAddress = strAddress.substr(pos + 1, pos1 - pos  - 1)
		}
		pos = strContainer.indexOf(strAddress);
		if (pos < 0)
			return false;
		var isFirstOK = false;
		var isLastOK = false;    
		if (pos == 0)    
			isFirstOK = true;
		else if (strContainer.charAt(pos-1)=='<' || strContainer.charAt(pos-1)==' ' || strContainer.charAt(pos-1)==',')    
			isFirstOK = true;
		pos += (strAddress.length - 1);    
		if (pos == strContainer.length - 1)    
			isLastOK = true;
		else if (strContainer.charAt(pos+1)=='>' || strContainer.charAt(pos+1)==' ' || strContainer.charAt(pos+1)==',')    
			isLastOK = true;    
		if (isLastOK && isFirstOK)
			return true;
		else
			return false;        
	}	
} 