var setupPanels = new Array('setup_imp_contacts', 'setup_contacts')

function showSetupPanel(pId)
{
	hideOverlay()

    for (var i =0; i<setupPanels.length; i++) {
        setVisibility(setupPanels[i], (pId == setupPanels[i]))
        if (pId == setupPanels[i]) {
        	var tg = $(pId)
        	var fireFunc = tg.getAttribute("onshow")
        	if (fireFunc) setTimeout(fireFunc, 20)
        }
    }
}

// contact import
var lastNewContactRow = 1
function addContactRow()
{
  var anchor = $("newContactRow")
  if (! anchor) return
  
  var newId = ++lastNewIdentRow
  
  var newNode = document.createElement("tr");
  var td = document.createElement("td")
  td.innerHTML = '<input class="emailBox" type="text" id="new_cn_user_'+newId+'"  />'
  newNode.appendChild(td)
  td = document.createElement("td")
  td.innerHTML = '<input type="password" id="new_cn_pass_'+newId+'" class="passwordBox" />'
  newNode.appendChild(td)

  anchor.parentNode.insertBefore(newNode, anchor)
}
    
function Identity(email, passwd, isLinkedIn)
{
    this.Email = email
    this.Password = passwd
    this.IsLinkedIn = isLinkedIn
}

var contactImportList = new Array()
var contactImportRunning = false
var contactImportMsg = ""
var importedContacts = new Array()

function runImports()
{
    var theForm = $('contactImport')
    
    if (contactImportRunning) {
        alert("Contact import seems to be in progress.")
        return
    }
    
    contactImportRunning = true
    contactImportList = new Array()
    importedContacts = new Array()
    
    for (var i=0;i<theForm.elements.length; i++) {
      var email = theForm.elements.item(i)
    if (! email || ! email.value) continue

    if (email.id.substr(0, 12) == "new_cn_user_") {
        var passwd = $("new_cn_pass_"+email.id.substr(12))
        if (email && email.value && passwd && passwd.value) { 
            contactImportList.push(new Identity(email.value, passwd.value, (email.id.substr(12) == "linkedin")))
        }
      }
    }
    
    if (contactImportList.length < 1) {
        showSetupPanel('setup_contacts')
        return
    }
    
    contactImportMsg = "<p>Working on your contact imports.  This may take a minute or two...</p>"
    setOverlayContent(contactImportMsg)
    showOverlay('setup_imp_contacts')
    
    ImportOneContact()
}

var currentContactImportIdentity = false
function ImportOneContact(response)
{
    if (! contactImportRunning) {
        currentContactImportIdentity = false
        contactImportList = new Array()
        
        ImportDone()
        return
    }
    
    if (response && currentContactImportIdentity) {
        var domain = currentContactImportIdentity.Email
        if (currentContactImportIdentity.IsLinkedIn)
            domain = "LinkedIn.com"
        else {
            var idx = domain.indexOf('@')
            if (idx >= 0) domain = domain.substring(idx+1)
        }
        
        var json = response.responseText
        var status = "unknown"
        var error = ""
        var data = false
        if (response.status == 200 && typeof(json) == "string") {                
            try {
                data = json.parseJSON()
                
                if (data.status) {
                    status = data.status
                    if (data.status == "ok") {
                        if (data.identity == currentContactImportIdentity.Email) {
                            importedContacts.push(data)
                        }
                        else {
                            status = "unexpectedIdentity"
                            error = "Current working identity is '"+currentContactImportIdentity.Email
                            error += "' but the server is talking about '"+data.identity+"'"
                        }
                    }
                    else {
                        error = data.message
                    }
                }
                else {
                    error = "No status in server response"
                    status = "unknown"
                }
            }
            catch (ex) {
                status = "parseException"
                error = ex.message
                alert(dump(ex))
            }
        }
        else {
            status = "invalidResponse"
            error = "The Identity Server returned status code "+response.status
        }

        contactImportMsg += "<p style='text-align:left'>Connecting to "+domain+" ("+currentContactImportIdentity.Email+")...<br />"
        if (status == "ok") {
            contactImportMsg += "++ Retrieved "+data.contacts.length+" addresses.</p>"
        }
        else {
            contactImportMsg += "++ Bad news&mdash;the fetch request failed.<br />"
            contactImportMsg += "++ Status Code: "+status+"<br />"
            contactImportMsg += "++ Error Message: "+error+"</p>"
        }
        
        setOverlayContent(contactImportMsg)
    }
    
    if (contactImportList.length < 1) {
        ImportCompleted()
        return
    }
    
    
    currentContactImportIdentity = contactImportList.shift()
    var email = escape(currentContactImportIdentity.Email)
    var passwd = escape(currentContactImportIdentity.Password)

    var domain = currentContactImportIdentity.Email
    if (currentContactImportIdentity.IsLinkedIn) {
        email += ".linkedin"
        domain = "LinkedIn.com"
    }
    else {
        var idx = domain.indexOf('@')
        if (idx >= 0) domain = domain.substring(idx+1)
    }
            
    var tmpMsg = "<p style='text-align:left'>Connecting to "+domain+" ("+currentContactImportIdentity.Email+")...</p>"
        
    setOverlayContent(contactImportMsg+tmpMsg)
    
	var req = "email="+escape(email)+"&password="+escape(passwd)
		
	var dl = new Ajax.Request(
    	web_base+"My/ContactImport.ashx", 
    	{
        	method: 'post', 
        	onComplete: ImportOneContact,
        	postBody: req,
		    onException: ImportOneContact
   	 	})
}   


function ImportCompleted()
{
    if (! contactImportRunning) {
        currentContactImportIdentity = false
        contactImportList = new Array()
        
        ImportAborted()
        return
    }

    var html = "<p style='width: 100%; text-align: center;border-top:solid 1px #909090;'>All of your webmail fetch requests have completed. Click the <b>Continue</b> button to choose which contacts will be added to your Network."
    html += "<br /><input type='button' value='Continue' class='b80' onclick='ImportDone()' /></p>"
    appendOverlayContent(html)
}

function ImportDone()
{
	currentContactImportIdentity = false
	contactImportList = new Array()
    contactImportRunning = false
	
    hideOverlay()
    
    setVisibility('setup_imp_contacts', false)
    setVisibility('setup_contacts', true)
    drawContacts()
}

function XMLEscape(str)
{
  return str.replace(/</,"&lt;").replace(/>/,"&gt;")
}     
    
var uuid = 1
function drawContacts()
{
	if (importedContacts && importedContacts.length > 0) {
		
		
		for (var i=0;i<importedContacts.length;i++) {
			var theList = importedContacts[i]
			if (theList.contacts.length < 1) continue
			
			var myPanel = $("contacts_from_"+escape(theList.identity))
			var newPanel = false
			if (! myPanel) {
				newPanel = document.createElement("div")
				newPanel.id = "contacts_from_"+escape(theList.identity)
				myPanel = newPanel
			}
			
			
			var html = "<p class='copyi'>"
			
			var firstUuid = uuid
			var splitAt = theList.contacts.length/2
			for (var j=0; j<theList.contacts.length; j++) {
			 // TODO fix bug
			 if(! theList.contacts[j] || ! theList.contacts[j].email ) continue
				var name = theList.contacts[j].display
				var eml = theList.contacts[j].email
				var showAs = ""
				if (name == "" || name == eml) showAs = eml
				else if (name.indexOf("<"+eml+">") >= 0) showAs = name
				else showAs = name + " <"+eml+">"
				
				html += "<label><input type=\"checkbox\" name=\"email_"+uuid+"\" id=\"email_"+uuid+"\" value=\""
					 +  escape(showAs)+"\" checked=\"checked\" /> "+XMLEscape(showAs)+"</label><br />"
				
				uuid++
			}
			html += "</p>"

			html = "<h3>"+XMLEscape(theList.identity)+"</h3>"
			     + "<p class='copyi'>"
				 + " Any contact with a checkbox next to it will be added to your network. "
				 + " <br /><input type='button' onclick=\"selectEmails("+firstUuid+","+(uuid-1)+", true)\" class=\"b80\" value='Select All' />"
				 + " <input type='button' onclick=\"selectEmails("+firstUuid+","+(uuid-1)+", false)\" class=\"b80\" value='Select None' />"
				 + "</p>"
				 + html
				 
			myPanel.innerHTML = html
			if (newPanel)
				$('importResults').insertBefore(newPanel, $('importStub'))
		}
	}
	
}

function selectEmails(firstUuid, lastUuid, checkIt)
{
	for (var i=firstUuid; i<=lastUuid; i++) {
		var cb = $("email_"+i)
		if (cb)
			cb.checked = checkIt
	}
}

function saveContacts()
{
	var contacts = $('addContactRawList').value

    setOverlayContent("<p>Updating your Personal Network.<br />You may wish to take a moment for personal reflection.</p>")
    showOverlay('importResults')

	if (uuid > 1) {
		for (var i=1; i<uuid; i++) {
			var cb = $("email_"+i)
			if (cb && cb.checked)
				contacts += ";"+ unescape(cb.value)
		}
	}
	
	var newContacts = new Ajax.Request(
	    web_base+"My/SubmitContacts.ashx", 
	    {
    	    method: 'post', 
    	    postBody: 'contacts=' + contacts,
    	    onSuccess: saveContactsComplete,
    	    onFailure: saveContactsError
 	    })
	
}

function saveContactsComplete()
{
	setOverlayContent("<p>Your network has been updated.</p>")
    appendOverlayContent("<br /><input type='button' value='To My Network' class='b80' onclick=\"document.location='Network.aspx'\" /></p>")
}

function saveContactsError(message)
{
	setOverlayContent("<p>An error occurred while updating your network.</p>")
		
    appendOverlayContent("<p><input type='button' value='To My Network' class='b80' onclick=\"document.location='Network.aspx'\" />")
    appendOverlayContent("<input type='button' value='Start Over' class='b80' onclick=\"document.location='ImportContacts.aspx'\" />")
    
    appendOverlayContent("</p>")
}

function ContactsDone()
{
	hideOverlay()
	showSetupPanel('setup_invite')
}
               