function getTagText( doc, tagName )
{
  if ( doc.getElementsByTagName( tagName ).length != 0 )
    return doc.getElementsByTagName( tagName )[0].firstChild.data;
  else
    return "";
}

_prov_LdapAttrs = {        
  'attrcn' : 'cn',
  'attrcompany' : '',
  'attrdepartment' : '',
  'attrfax' : '',
  'attrgivenname' : 'givenName',
  'attrhomephone' : '',
  'attrmobile' : '',
  'attrsamaccountname' : 'sAMAccountName',
  'attrsn' : 'sn',
  'attrsuspended' : '',
  'attrtelephone' : '',
  'attrtitle' : '',
  'attrwebsite' : ''
};

function loadProvisioningCorrelation( domain )
{ 
  $('#dialog').load( "UserProvisioningWizardHTML.php?domain=" + domain, function ( data ) {
    buttons = {
				"Cancel": function() { 
					$('#dialog').dialog("close"); 
				} 
    }
		rebuildProvisioningWizard( buttons );
  });
}

function GetADAttrs()
{
  _prov_LdapAttrs['attrcompany'] = 'company';
  _prov_LdapAttrs['attrdepartment'] = 'department';
  _prov_LdapAttrs['attrfax'] = 'facsimileTelephoneNumber';
  _prov_LdapAttrs['attrhomephone'] = 'homePhone';
  _prov_LdapAttrs['attrmobile'] = 'mobile';
  _prov_LdapAttrs['attrsuspended'] = '';
  _prov_LdapAttrs['attrtelephone'] = 'telephoneNumber';
  _prov_LdapAttrs['attrtitle'] = 'title';
  _prov_LdapAttrs['attrwebsite'] = 'wWWHomePage';
  return _prov_LdapAttrs;
}

function GetOpenLDAPAttrs()
{
  _prov_LdapAttrs['attrsamaccountname'] = 'uid';
  return _prov_LdapAttrs;
}

function setAttrValuesAD( domain )
{
  attrs = GetADAttrs();
  loadProvisioningCorrelationNext( domain );
  $( '#attrform input[type="text"]' ).each( function ( idx, obj ) {
    obj.value = attrs[ obj.name ];
  });  
  loadSavedCorrelation( domain );
}

function setAttrValuesOpenLDAP( domain )
{
  loadProvisioningCorrelationNext( domain );
  attrs = GetOpenLDAPAttrs();
  $( '#attrform input[type="text"]' ).each( function ( idx, obj ) {
    obj.value = attrs[ obj.name ];
  });  
  loadSavedCorrelation( domain );
  
}

function setAttrValuesCustom( domain )
{
  loadProvisioningCorrelationNext( domain );
  loadSavedCorrelation( domain );
}

function loadProvisioningCorrelationNext( domain )
{ 
  buttons = {
    "Next": function() { 
      ProvisioningCorrelation( domain );
    }, 
    "Cancel": function() { 
      $('#dialog').dialog("close"); 
    } 
  }
	rebuildProvisioningWizard( buttons );
}

function ProvisioningCorrelation( domain )
{
  $.post( "/CTK/UserProvisioningWizardXML.php?step=2&domain=" + domain, 
					$( "#attrform" ).serialize(), function ( data ) 
          {
            var gDomain = getTagText( data, 'Domain' );
            loadProvisioningWizard( gDomain );
          });
}

function loadSavedCorrelation( domain )
{
  $.get( "/CTK/UserProvisioningWizardXML.php?step=1&domain=" + domain, function ( data ) {
      $( '#attrform input[type="text"]' ).each( function ( idx, obj ) {
        var val = getTagText( data, obj.name );
        if ( val.length != 0 )
          obj.value = val;
      });  
      $( '#correl_buttons' ).hide();
      $( '#correl_form' ).show();
    });

}

function ProvisioningStepOne( theDomain ) 
{
	$.get( "/CTK/UserProvisioningXML.php", 
  { domain: theDomain, step: '1' }, 
  function ( data ) {
    var gDomain = getTagText( data, 'Domain' );
    var ldapUserDn = getTagText( data, 'ldapUserDn' );
    var ldapServerHost = getTagText( data, 'ldapServerHost' );
    var ldapBaseDn = getTagText( data, 'ldapBaseDn' );
    var permission = getTagText( data, 'Permission' );
    var filter = getTagText( data, 'ldapsearchFilter' );
    var action = getTagText( data, 'provBatchAction' );
    var permDelete = getTagText( data, 'permDelete' );
    var next = getTagText( data, 'nextRun' );
    var timesplit = {};
    if ( next.length != 0 )
    {
      var datesplit = next.split( " " );
      var time = datesplit[1];
      timesplit = time.split( ":" );
    }
    document.getElementById( 'gDomain' ).value = gDomain;
    document.getElementById( 'lAdmin' ).value = ldapUserDn;
    document.getElementById( 'lDomain' ).value = ldapServerHost;
    document.getElementById( 'lDn' ).value = ldapBaseDn;
    if ( next.length != 0 )
    {
      document.wizardForm.hrs.selectedIndex = parseInt( timesplit[0] );
      document.wizardForm.min.selectedIndex = Math.floor( parseInt( timesplit[1] ) / 5 );
    }
	
	if ( filter.indexOf( 'userAccountControl' ) != -1)
		document.wizardForm.skipD.checked = 'true';
	
	if ( permDelete == "TRUE" )
		document.wizardForm.permD.checked = 'true';
	
	if ( action == 'add' )
		document.wizardForm.lAction[0].checked = 'true';
	else
		document.wizardForm.lAction[1].checked = 'true';
  });
} 

function loadProvisioningWizard( domain )
{
	$('#dialog').load( "UserProvisioningHTML.php?domain=" + domain, function ( data ) {
    ProvisioningStepOne( domain );  
    buttons = {
      "Next": function() {  
        ProvisioningStepTwo( domain );
      }, 
      "Cancel": function() { 
        $('#dialog').dialog("close"); 
      },
      "Back": function() { 
        loadProvisioningCorrelation( domain  ); 
      } 
    }
		rebuildProvisioningWizard( buttons );
	});
}

var testTimer;

function ProvisioningStepTwo( domain )
{
  $.post( "/CTK/UserProvisioningXML.php?step=2&domain=" + domain, 
    $( "#wizardForm" ).serialize(), function ( data ) 
    {
      $( '#dialog .unverified' ).empty( );
      
      if ( data.getElementsByTagName( 'Settings' ).length == 0 )
      {
        $( '#dialog .unverified' ).append( '<div class="ui-widget"><div class="ui-state-error ui-corner-all" style="padding: 0 .7em;"><p><span class="ui-icon ui-icon-alert" style="float: left; margin-right: .3em;"></span><strong>Error:</strong> There was an error in your settings. Please try again.</p></div></div>' );
        return false;
      }
      else {
        var gAdmin = getTagText( data, 'gAdmin' );
        var gDomain = getTagText( data, 'Domain' );
        var ldapUserDn = getTagText( data, 'ldapUserDn' );
        var ldapServerHost = getTagText( data, 'ldapServerHost' );
        var ldapBaseDn = getTagText( data, 'ldapBaseDn' );
        var permission = getTagText( data, 'Permission' );
        var action = getTagText( data, 'Action' );
        var filter = getTagText( data, 'ldapsearchFilter' );
        var permDel = getTagText( data, 'PermDelete' );
        var time = getTagText( data, 'ScheduledTime' );
        var testId = getTagText( data, 'JobID' );
        
        $('#dialog > .pane').html( "<h2>User Provisioning for "  + gDomain + "</h2>" );
        $('#dialog > .pane').append( "<p>We are starting a test run with the following settings: </p>" );
        $('#dialog > .pane').append( "Google Apps Admin: " + gAdmin + "<br/>"  );
        $('#dialog > .pane').append( "Google Apps Domain: " + gDomain + "<br/>"  );
        $('#dialog > .pane').append( "LDAP Admin: " + ldapUserDn + "<br/>"  );
        $('#dialog > .pane').append( "LDAP Server: " + ldapServerHost + "<br/>"  );
        $('#dialog > .pane').append( "LDAP Group: " + ldapBaseDn + "<br/>" );
        //$('#dialog > .pane').append( "LDAP Filter: " + filter + "<br/>" );
        $('#dialog > .pane').append( "Action: " + action + "<br/>" );
        if ( filter.indexOf( '1.2.840.113556.1.4.803:=2' ) != -1 )
          $('#dialog > .pane').append( "Skip Disabled Accounts is ON<br/>" );
        else
          $('#dialog > .pane').append( "Skip Disabled Accounts is OFF<br/>" );

        if ( permDel == '1' )
          $('#dialog > .pane').append( "Permanent Deletion is ON<br/>" );
        else
          $('#dialog > .pane').append( "Permanent Deletion is OFF<br/>" );
        $('#dialog > .pane').append( "Schedule: " + time + " Daily<br/>" );  
        $('#dialog > .pane').append( "<form id=\"timeform\"><input type=\"hidden\" name=\"time\" value=\"" + time + "\"/></form>" );
      } 
      $('#dialog > .pane').append( "<p class=\"teststatus\">Test Status: Started</p>" );
      $('.teststatus').prepend( "<span class=\"loader\"></span>" );
			loadProvisioningWizard2( gDomain );
      testTimer = setTimeout( "ProvisioningCheckTestStatus( \"" + gDomain + "\", \"" + testId + "\" )", 10000 );
    }
  );
}

function loadProvisioningWizard2( domain )
{

  buttons = {
    "Cancel": function() { 
      $('#dialog').dialog("close"); 
      clearTimeout( testTimer );
    },
    "Back": function() { 
      loadProvisioningWizard( domain ); 
    }
  }
  rebuildProvisioningWizard( buttons );
}

function ProvisioningCheckTestStatus( domain, id )
{
  $.get( "/CTK/UserProvisioningXML.php?domain=" + domain + "&id=" + id + "&step=21", 
    function( data )
    {
      // id for empty results testing id = 1243;
      // id for results testing id = 1159;
      var status = getTagText( data, 'Status' );
      if ( status != "Error" && status != "Completed" )
      {
        testTimer = setTimeout( "ProvisioningCheckTestStatus( \"" + domain + "\", \"" + id + "\" )", 10000 );
        $('#dialog > .pane > .teststatus').html( "<span class=\"loader\"></span> Updated Test Status: " + status );
      }
      else if ( status == "Completed" )
      {
        $('#dialog > .pane > .teststatus').html( "Updated Test Status: " + status );
        loadProvisioningWizard2Next( domain, data );
      }
    }
  );
}

function loadProvisioningWizard2Next( domain, data )
{
		buttons = {
      "Next": function() { 
        //$('#dialog').dialog("close"); 
        ProvisioningStepThree( domain, data );
      },
      "Cancel": function() { 
        $('#dialog').dialog("close"); 
      },
      "Back": function() { 
        loadProvisioningWizard( domain ); 
      }
    }
		rebuildProvisioningWizard( buttons );
}

function ProvisioningStepThree( domain, data )
{
  var time = $( "#timeform input[type=hidden]").attr( 'value' );
  $('#dialog > .pane').html( "<h2>User Provisioning for "  + domain + "</h2>" );
  $('#dialog > .pane').append( "<form id=\"timeform\"><input type=\"hidden\" name=\"time\" value=\"" + time + "\"/></form>" );
  $('#dialog > .pane').append( "<p>Here are the results of your provisioning test. If you would like to use this schedule, use the run button below.</p>" );
  var cnt = 0;
  $( 'Change', data ).each( function ( i ) {
    cnt++;
    var usr = $( this ).find( 'UserName').text();
    var first = $( this ).find( 'FirstName').text();
    var last = $( this ).find( 'LastName').text();
    var act = $( this ).find( 'Action').text();
    var reportStr = "User " + usr + " ( " + first + " " + last + " ) : " + act;
    $('#dialog > .pane').append( reportStr + "<br/>" );
  });
  if ( cnt == 0 )
    $('#dialog > .pane').append( "<strong>There were no changes to make this test.</strong>" );
  loadProvisioningWizard3( domain );
}

function loadProvisioningWizard3( domain )
{
  buttons = {
      "Run": function() { 
        //$('#dialog').dialog("close"); 
        ProvisioningStepFour( domain );
      },
      "Cancel": function() { 
        $('#dialog').dialog("close"); 
      },
      "Start Over": function() { 
        loadProvisioningWizard( domain ); 
      }
    }  
  
  rebuildProvisioningWizard ( buttons );
}


function ProvisioningStepFour( domain )
{
	$.post( "/CTK/UserProvisioningXML.php?domain=" + domain + "&step=3", $('#timeform').serialize(),
		function( data )
		{
      $('#dialog > .pane').html( "<h2>User Provisioning for "  + domain + "</h2>" );
      $('#dialog > .pane').append( "<p>Your provisioning job has been added to the queue. Please check the reports section to see the results when it completes. </p>" );
      loadProvisioningWizard4( domain );
		});
}

function loadProvisioningWizard4( domain )
{
  buttons = {
      "Finish": function() { 
        $('#dialog').dialog("close"); 
      }
  } 
  
  rebuildProvisioningWizard ( buttons );
}

function lCheck( )
{
  var user = $( '#lAdmin' ).attr( 'value' );
  var pass = $( '#lPwd' ).attr( 'value' );
  var domain = $( '#lDomain' ).attr( 'value' );
  
  $.post( "UtilitySettingVerifyXML.php?step=2", { 'domain' : domain, 'user': user, 'pass': pass }, 
		function ( data )
		{
			var result = getTagText( data, 'Result' );
				if (result == 1) {
					$( ".ui-icon-check" ).parent().css( 'border', '1px solid #24FF00' );
          $( '#dialog .unverified' ).empty( );
          document.getElementById("lDn").className = "text ui-widget-content ui-corner-all";
				} else {
					document.getElementById("lDn").className = "text ui-widget-content-error ui-corner-all";
          $( ".ui-icon-check" ).parent().css( 'border', '1px solid #FF0000' );
          $( '#dialog .unverified' ).text( 'There was an error in your LDAP settings.' );
				}
		}
	);
}

function rebuildProvisioningWizard( btns )
{
  $('#dialog').dialog("destroy");
  $('#dialog').dialog({
    autoOpen: false,
    width: 640,
    modal: true,
    buttons: btns
  });
  $('#dialog').dialog('open');
}



