
function UniqueNameFactory(baseString)
{var _counter=1;this.getName=function()
{var theName=baseString+_counter;_counter++;return theName;}}
function HashMap()
{var _map=new Object();var _count=0;this.getCount=function()
{return _count;}
this.getValue=function(key)
{if(typeof _map[key]=="undefined"){return null;}
else{return _map[key];}}
this.add=function(key,value)
{_map[key]=value;_count++;};this.remove=function(key)
{_map[key]=null;_count--;};this.forEach=function(method)
{for(var key in _map){var value=_map[key];if(value!=null){method(value);}}};}
function AttachFileLink(linkDivID,attachFileLinkID,firstFileMessage,anotherFileMessage)
{var _linkDivNode=document.getElementById(linkDivID);var _attachFileLinkNode=document.getElementById(attachFileLinkID);this.insertBeforeMe=function(node)
{_linkDivNode.parentNode.insertBefore(node,_linkDivNode);}
this.setLinkForFirstFile=function()
{_linkDivNode.style.display="block";_attachFileLinkNode.innerHTML=firstFileMessage;}
this.setLinkForAnotherFile=function()
{_linkDivNode.style.display="block";_attachFileLinkNode.innerHTML=anotherFileMessage;}
this.hideLink=function()
{_linkDivNode.style.display="none";}
this.showLink=function()
{_linkDivNode.style.display="block";}
this.setOnClick=function(onclickFunc)
{_attachFileLinkNode.onclick=onclickFunc;}
this.click=function()
{_attachFileLinkNode.onclick();}}
function AttachField(name,removable)
{if(removable==null){removable=true;}
var _errorNode=document.createElement("span");_errorNode.className="attachError";_errorNode.style.display="none";var _iconNode=document.createElement("span");_iconNode.innerHTML='<img src="/ics/images/common/attachment.gif" align="absmiddle" border=0/>';_iconNode.className="attachIcon";_iconNode.style.display="none";var _labelNode=document.createElement("span");_labelNode.style.display="none";var _inputNode=document.createElement("input");_inputNode.id=name;_inputNode.name=name;_inputNode.setAttribute("type","file");_inputNode.setAttribute("size","50");var _removeSpan=document.createElement("span");if(removable){var _lparen=document.createTextNode(" ( ")
var _rparen=document.createTextNode(" ) ")
var _removeNode=document.createElement("span");_removeNode.className="cssLink";_removeNode.innerHTML="Remove";_removeSpan.appendChild(_lparen);_removeSpan.appendChild(_removeNode);_removeSpan.appendChild(_rparen);}
var _divNode=document.createElement("div");_divNode.className="downloadLinkDiv";_divNode.appendChild(_errorNode);_divNode.appendChild(_iconNode);_divNode.appendChild(_labelNode);_divNode.appendChild(_inputNode);_divNode.appendChild(_removeSpan);this.name=name;this.div=_divNode;this.input=_inputNode;this.removeFromDOM=function()
{_divNode.parentNode.removeChild(_divNode);}
this.setRemoveOnClick=function(onclickFunc)
{_removeNode.onclick=onclickFunc;}
this.clickRemove=function()
{_removeNode.onclick();}
this.lockInput=function()
{_errorNode.style.display="none";_iconNode.style.display="none";_inputNode.style.display="none";_removeSpan.style.display="none";_labelNode.innerHTML=_inputNode.value;_labelNode.style.display="inline";}
this.unlockInput=function(errorMsg)
{_iconNode.style.display="none";_labelNode.style.display="none";_errorNode.innerHTML=helpLabelHTML(errorMsg,"/ics/images/common/iSystemMsgError.gif");_errorNode.style.display="inline";_divNode.insertBefore(_inputNode,_removeSpan);_inputNode.style.display="inline";_removeSpan.style.display="inline";}
this.stickInput=function(fileName)
{_errorNode.style.display="none";_inputNode.style.display="none";_labelNode.innerHTML=fileName;_labelNode.style.display="inline";_iconNode.style.display="inline";_removeSpan.style.display="inline";}}
function ResultIFrame(iFrameNode)
{function extractIFrameBody(node){var doc=null;if(node.contentDocument){doc=node.contentDocument;}else if(node.contentWindow){doc=node.contentWindow.document;}else if(node.document){doc=node.document;}else{alert("Error: could not find iFrame document");return null;}
return doc.body;}
function getXmlDocFromText(text)
{var xmlDoc;if(window.ActiveXObject)
{xmlDoc=new ActiveXObject("Microsoft.XMLDOM");xmlDoc.async="false";xmlDoc.loadXML(text);}
else
{var parser=new DOMParser();xmlDoc=parser.parseFromString(text,"text/xml");}
return xmlDoc;}
var _xmlDoc=getXmlDocFromText(extractIFrameBody(iFrameNode).firstChild.nodeValue);var root=_xmlDoc.getElementsByTagName("result");if(root.length==0){throw new Object();}
function getFilesFromXML(rootElement)
{var fileArray=new Array();var fileNodes=rootElement.getElementsByTagName("file");for(var i=0;i<fileNodes.length;i++){var fileObj=new Object();var children=fileNodes[i].childNodes;for(var j=0;j<children.length;j++){var node=children[j];if(node.childNodes.length==0){fileObj[node.nodeName]="";}
else{fileObj[node.nodeName]=node.firstChild.nodeValue;}}
fileArray.push(fileObj);}
return fileArray;}
function getFiles(elementName)
{var elements=_xmlDoc.getElementsByTagName(elementName);if(elements.length==1){return getFilesFromXML(elements[0]);}
else{return new Array();}}
this.getPassedFiles=function()
{return getFiles("passed");}
this.getFailedFiles=function()
{return getFiles("failed");}}
function OpenProgressBar(progressBarUrl,pingUrl)
{if(pingUrl&&pingUrl!="")
{var xmlhttp=window.XMLHttpRequest?new XMLHttpRequest():new ActiveXObject("Microsoft.XMLHTTP");xmlhttp.open("GET",pingUrl,false);xmlhttp.send(null);}
var feats='height=160,width=600,location=no,menubar=no,resizable=no,scrollbars=no,status=no,toolbar=no';window.open(progressBarUrl,'',feats);}
function CreateUploadForm(uploadUrl)
{var upForm=document.createElement("FORM");upForm.name="upHidden";upForm.target="upFrame";upForm.method="post";upForm.encoding="multipart/form-data";upForm.action=uploadUrl;upForm.style.display="none";document.body.appendChild(upForm);return upForm;}
function ClientAttachmentUI(attachFileLink,maxInputs,uploadUrl,progressBarUrl,pingUrl)
{var _uploadInProgress=false;window.onbeforeunload=function()
{if(_uploadInProgress){return"There is an upload in progress.  If you navigate away, the upload will terminate.";}}
var _nameFactory=new UniqueNameFactory("file");var _numExisting=0;var _removedMap=new HashMap();var _incompleteMap=new HashMap();var _pendingMap=new HashMap();function resetLink()
{var numInputs=_incompleteMap.getCount()+_pendingMap.getCount()+_numExisting;if(numInputs==0)
attachFileLink.setLinkForFirstFile();else if(numInputs>=maxInputs)
attachFileLink.hideLink();else
attachFileLink.setLinkForAnotherFile();}
function setupNewField(field)
{field.setRemoveOnClick(function()
{_incompleteMap.remove(field.name);field.removeFromDOM();resetLink();});_incompleteMap.add(field.name,field);attachFileLink.insertBeforeMe(field.div);}
function setupPendingField(field,filename,guid)
{field.stickInput(filename);field.setRemoveOnClick(function()
{field.removeFromDOM();_pendingMap.remove(field.name);resetLink();});var result=new Object();result.guid=guid;result.filename=filename;_pendingMap.add(field.name,result);attachFileLink.insertBeforeMe(field.div);}
function setupExistingField(field,filename,guid)
{field.stickInput(filename);field.setRemoveOnClick(function()
{field.removeFromDOM();var toRemove=new Object();toRemove.guid=guid;toRemove.filename=filename;_removedMap.add(field.name,toRemove);_numExisting--;resetLink();});_numExisting++;attachFileLink.insertBeforeMe(field.div);}
function setupFailedField(field,error)
{var errorMsg="Error: "+error;field.unlockInput(errorMsg);attachFileLink.insertBeforeMe(field.div);}
attachFileLink.setOnClick(function()
{var newAttachField=new AttachField(_nameFactory.getName());setupNewField(newAttachField);resetLink();});function parseAttachmentString(strFileList)
{var objRet=new Object();if(strFileList=="")
return objRet;var strArr=strFileList.split('|');for(var i=0;i<strArr.length;i++){var strArrGuidName=strArr[i].split(':');objRet[strArrGuidName[0]]=strArrGuidName[1];}
return objRet;}
this.addPendingAttachments=function(fileList)
{var files=parseAttachmentString(fileList);for(var guid in files){var filename=files[guid];var field=new AttachField(_nameFactory.getName());setupPendingField(field,filename,guid);}
resetLink();}
this.addExistingAttachments=function(fileList)
{var files=parseAttachmentString(fileList);for(var guid in files){var filename=files[guid];var field=new AttachField(_nameFactory.getName());setupExistingField(field,filename,guid);}
resetLink();}
function appendResultsToForm()
{function getAttachmentString(resultMap)
{var strings=new Array();resultMap.forEach(function(result){strings.push(result.guid+":"+result.filename);});return strings.join('|');}
function getHiddenInput(name,value)
{var hiddenInput=document.createElement("INPUT");hiddenInput.name=name;hiddenInput.type="hidden";hiddenInput.value=value;return hiddenInput;}
outerForm.appendChild(getHiddenInput("addedAttachments",getAttachmentString(_pendingMap)));outerForm.appendChild(getHiddenInput("removedAttachments",getAttachmentString(_removedMap)));}
this.uploadAttachments=function()
{if(_uploadInProgress){alert("Upload in progress, please be patient");return false;}
_incompleteMap.forEach(function(field)
{if(field.input.value==""){field.clickRemove();}});if(_incompleteMap.getCount()==0){if(_pendingMap.getCount()>0||_removedMap.getCount()>0){appendResultsToForm();}
return true;}
_uploadInProgress=true;OpenProgressBar(progressBarUrl,pingUrl);var upForm=CreateUploadForm(uploadUrl);_incompleteMap.forEach(function(field)
{field.lockInput();field.input.parentNode.removeChild(field.input);upForm.appendChild(field.input);});attachFileLink.hideLink();try{upForm.submit();}
catch(error){var msg="Error uploading files.  Did you enter an invalid path?";_incompleteMap.forEach(function(field){field.unlockInput(msg);});resetLink();alert(msg);}
return false;}
this.uploadCompletedCallback=function(iframe)
{if(outerForm){_uploadInProgress=false;var uploadResult=null;try{uploadResult=new ResultIFrame(iframe);}
catch(error){var msg="Could not connect to file upload server";_incompleteMap.forEach(function(field){field.unlockInput(msg);});resetLink();alert(msg);return;}
var passedFiles=uploadResult.getPassedFiles();for(var i=0;i<passedFiles.length;i++){var result=passedFiles[i];var field=_incompleteMap.getValue(result.inputname);_incompleteMap.remove(result.inputname);setupPendingField(field,result.filename,result.guid);}
var failedFiles=uploadResult.getFailedFiles();if(failedFiles.length>0){var popupError="There was an error uploading one or more of your attachments.\n\n";for(var i=0;i<failedFiles.length;i++){var result=failedFiles[i];popupError+=result.filename+": "+result.error+"\n";var field=_incompleteMap.getValue(result.inputname);setupFailedField(field,result.error);}
resetLink();alert(popupError);}
else{appendResultsToForm();outerForm.submit();}}}}
function ChatButtonUploadUI(parentDivId,button1Name,button2Name,uploadUrl,progressBarUrl,pingUrl)
{var _parentDiv=document.getElementById(parentDivId);var sendField=new AttachField(button1Name,false);var endField=new AttachField(button2Name,false);_parentDiv.appendChild(sendField.div);_parentDiv.appendChild(endField.div);function appendResultToForm(fieldname,result)
{function getHiddenInput(name,value)
{var hiddenInput=document.createElement("INPUT");hiddenInput.name=name;hiddenInput.type="hidden";hiddenInput.value=value;return hiddenInput;}
var formValue=result.guid+":"+result.filename;outerForm.appendChild(getHiddenInput(fieldname,formValue));}
this.uploadAttachments=function()
{OpenProgressBar(progressBarUrl,pingUrl);var upForm=CreateUploadForm(uploadUrl);sendField.lockInput();sendField.input.parentNode.removeChild(sendField.input);upForm.appendChild(sendField.input);endField.lockInput();endField.input.parentNode.removeChild(endField.input);upForm.appendChild(endField.input);try{upForm.submit();}
catch(error){var msg="Error uploading files.  Did you enter an invalid path?";sendField.unlockInput(msg);endField.unlockInput(msg);alert(msg);return true;}
return false;}
this.uploadCompletedCallback=function(iframe)
{if(outerForm)
{var uploadResult=null;try{uploadResult=new ResultIFrame(iframe);}
catch(error){var msg="Could not connect to file upload server";sendField.unlockInput(msg);alert(msg);return;}
var passedFiles=uploadResult.getPassedFiles();if(passedFiles.length==2)
{appendResultToForm("sendButtonUpload",passedFiles[0]);appendResultToForm("endButtonUpload",passedFiles[1]);outerForm.submit();}
else
{var result=uploadResult.getFailedFiles()[0];sendField.unlockInput(result.error);alert(result.error);}}}}
function ClientDMUploadUI(parentDivId,inputName,uploadUrl,progressBarUrl,pingUrl)
{var _parentDiv=document.getElementById(parentDivId);var _field=new AttachField(inputName,false);_field.input.onchange=pasteFileName;_field.input.onkeyup=pasteFileName;_parentDiv.appendChild(_field.div);function appendResultToForm(result)
{function getHiddenInput(name,value)
{var hiddenInput=document.createElement("INPUT");hiddenInput.name=name;hiddenInput.type="hidden";hiddenInput.value=value;return hiddenInput;}
var formValue=result.guid+":"+result.filename;outerForm.appendChild(getHiddenInput("addedAttachment",formValue));}
this.uploadAttachments=function()
{if(_field.input.disabled==true)
{return true;}
OpenProgressBar(progressBarUrl,pingUrl);var upForm=CreateUploadForm(uploadUrl);_field.lockInput();_field.input.parentNode.removeChild(_field.input);upForm.appendChild(_field.input);try{upForm.submit();}
catch(error){var msg="Error uploading files.  Did you enter an invalid path?";_field.unlockInput(msg);alert(msg);}
return false;}
this.uploadCompletedCallback=function(iframe)
{if(outerForm)
{var uploadResult=null;try{uploadResult=new ResultIFrame(iframe);}
catch(error){var msg="Could not connect to file upload server";return;}
var passedFiles=uploadResult.getPassedFiles();var failedFiles=uploadResult.getFailedFiles();if(passedFiles.length==1)
{appendResultToForm(passedFiles[0]);}
else if(failedFiles.length==1)
{var msg="Error uploading files.  Did you enter an invalid path?";_field.unlockInput(msg);alert(msg);return;}
outerForm.submit();}}}
function ClientChatConfigUploadUI(parentDivId,inputName,uploadUrl,progressBarUrl,pingUrl)
{var _parentDiv=document.getElementById(parentDivId);var _field=new AttachField(inputName,false);_parentDiv.appendChild(_field.div);function appendResultToForm(result)
{function getHiddenInput(name,value)
{var hiddenInput=document.createElement("INPUT");hiddenInput.name=name;hiddenInput.type="hidden";hiddenInput.value=value;return hiddenInput;}
var formValue=result.guid+":"+result.filename;outerForm.appendChild(getHiddenInput(inputName+"uploaded",formValue));}
this.uploadAttachments=function()
{OpenProgressBar(progressBarUrl,pingUrl);var upForm=CreateUploadForm(uploadUrl);_field.lockInput();_field.input.parentNode.removeChild(_field.input);upForm.appendChild(_field.input);try{upForm.submit();}
catch(error){var msg="Error uploading files.  Did you enter an invalid path?";return true;}
return false;}
this.uploadCompletedCallback=function(iframe)
{if(outerForm)
{var uploadResult=null;try{uploadResult=new ResultIFrame(iframe);}
catch(error){return;}
var passedFiles=uploadResult.getPassedFiles();if(passedFiles.length==1)
{appendResultToForm(passedFiles[0]);}
outerForm.submit();}}}
function ChatImageUploadUI(parentDivId,image1,image2,image3,image4,image5,uploadUrl,progressBarUrl,pingUrl)
{var _parentDiv=document.getElementById(parentDivId);var image1Field=new AttachField(image1,false);var image2Field=new AttachField(image2,false);var image3Field=new AttachField(image3,false);var image4Field=new AttachField(image4,false);var image5Field=new AttachField(image5,false);_parentDiv.appendChild(image1Field.div);_parentDiv.appendChild(image2Field.div);_parentDiv.appendChild(image3Field.div);_parentDiv.appendChild(image4Field.div);_parentDiv.appendChild(image5Field.div);function appendResultToForm(inputName,result)
{function getHiddenInput(name,value)
{var hiddenInput=document.createElement("INPUT");hiddenInput.name=name;hiddenInput.type="hidden";hiddenInput.value=value;return hiddenInput;}
var formValue=result.guid+":"+result.filename;outerForm.appendChild(getHiddenInput(inputName+"upload",formValue));}
this.uploadAttachments=function()
{OpenProgressBar(progressBarUrl,pingUrl);var upForm=CreateUploadForm(uploadUrl);image1Field.lockInput();image1Field.input.parentNode.removeChild(image1Field.input);upForm.appendChild(image1Field.input);image2Field.lockInput();image2Field.input.parentNode.removeChild(image2Field.input);upForm.appendChild(image2Field.input);image3Field.lockInput();image3Field.input.parentNode.removeChild(image3Field.input);upForm.appendChild(image3Field.input);image4Field.lockInput();image4Field.input.parentNode.removeChild(image4Field.input);upForm.appendChild(image4Field.input);image5Field.lockInput();image5Field.input.parentNode.removeChild(image5Field.input);upForm.appendChild(image5Field.input);try{upForm.submit();}
catch(error){return true;}
return false;}
this.uploadCompletedCallback=function(iframe)
{if(outerForm)
{var uploadResult=null;try{uploadResult=new ResultIFrame(iframe);}
catch(error){return;}
var passedFiles=uploadResult.getPassedFiles();if(passedFiles.length==5)
{appendResultToForm(image1,passedFiles[0]);appendResultToForm(image2,passedFiles[1]);appendResultToForm(image3,passedFiles[2]);appendResultToForm(image4,passedFiles[3]);appendResultToForm(image5,passedFiles[4]);}
outerForm.submit();}}}
function EndChatImageUploadUI(parentDivId,image1,image2,uploadUrl,progressBarUrl,pingUrl)
{var _parentDiv=document.getElementById(parentDivId);var image1Field=new AttachField(image1,false);var image2Field=new AttachField(image2,false);_parentDiv.appendChild(image1Field.div);_parentDiv.appendChild(image2Field.div);function appendResultToForm(inputName,result)
{function getHiddenInput(name,value)
{var hiddenInput=document.createElement("INPUT");hiddenInput.name=name;hiddenInput.type="hidden";hiddenInput.value=value;return hiddenInput;}
var formValue=result.guid+":"+result.filename;outerForm.appendChild(getHiddenInput(inputName+"upload",formValue));}
this.uploadAttachments=function()
{OpenProgressBar(progressBarUrl,pingUrl);var upForm=CreateUploadForm(uploadUrl);image1Field.lockInput();image1Field.input.parentNode.removeChild(image1Field.input);upForm.appendChild(image1Field.input);image2Field.lockInput();image2Field.input.parentNode.removeChild(image2Field.input);upForm.appendChild(image2Field.input);try{upForm.submit();}
catch(error){return true;}
return false;}
this.uploadCompletedCallback=function(iframe)
{if(outerForm)
{var uploadResult=null;try{uploadResult=new ResultIFrame(iframe);}
catch(error){return;}
var passedFiles=uploadResult.getPassedFiles();if(passedFiles.length==2)
{appendResultToForm(image1,passedFiles[0]);appendResultToForm(image2,passedFiles[1]);}
outerForm.submit();}}}
var outerForm;
