var environment = "live";
if ( location.host == "web.devs004.intra" ) {
    environment = "devs";
} else if ( location.host == "web.test004.intra" ) {
    environment = "test";
}

var apiStatus = '';
var apiHOST = window.devenv_host || 'http://os.cloudme.com/v1';
var apiUSERID = '';
var apiXIOSGroupId = '';
var apiDRIVES = '';
var apiHomeDriveId = '';

// Fix for local dev
if ( environment == "devs") apiHOST = 'http://devs004.intra/v1';
if ( environment == "test") apiHOST = 'http://test004.intra/v1';

function checkLoggedIn() {
  if ( typeof storage !== 'undefined' && storage.isLoggedIn() ) {
    currentHost = location.host;
    // lang = currentLocation.split('/')[3];
    // Change the lang!!!
    loginUsername = storage.getValue("login.username");
    loginToken = storage.getValue("login.token");

    if (loginUsername != null && loginToken != null) {
      location.href = location.protocol + "//" + currentHost + "/webui";
      //location.href = "http://" + currentHost + "/webui";
      return true;
    }
    return false;
  }
}

// Check that we are on webui page
var currentPage = location.href.split('/')[4];
if ( currentPage && currentPage.substr(0,5) == "webui") {
    // add a lot of js and css files
    var currentHost = location.host;

    $(function() {

      if( $('#checkOutWebDesktopNotification').length > 0 ){
          $('#checkOutWebDesktopNotification').delay(2000).fadeIn(300);
      }

      initCloudMeAPI(
        function() { 
          states.cloudMeAPIStatus = 'ready';
          apiStatus = 'ready';
        },
        function(){
          states.cloudMeAPIStatus = 'failed';
          apiStatus = 'failed';
          alert('Failed to connect')
        }
      );
      waitForJS();
    });


} else {  
  // On DOM Ready
  //if( !checkLoggedIn() ) {
    //$(function() {
    //  initCloudMeAPI(
    //    function(){
    //      apiStatus = 'ready';
    //    },    
    //    function(){
    //      apiStatus = 'failed';
    //      alert('Failed to connect to baxide. Login might fail.');
    //    });
    //});
  //}
}

function waitForJS() {
  if (typeof controller === 'undefined' ||
    typeof baxide     === 'undefined' ||
    typeof view       === 'undefined' ||
    typeof topDomain  === 'undefined' ) {
    setTimeout(waitForJS, 2000);
  } else {
    jQuery.fn.hashchange.src = 'empty.php?d=' + topDomain;
    jQuery.fn.hashchange.domain = topDomain;
    jQuery(window).hashchange( function(e) {
        controller.hashNav();
    });
    controller.preInit();
  }
}

function addJSFile(src) {
    var scriptElement =  document.createElement('script');
    scriptElement.setAttribute('type', 'text/javascript');
    scriptElement.setAttribute('src', src);
    
    var head = document.getElementsByTagName('head')[0];
    head.appendChild(scriptElement);
}

function addCSSFile(href) {
    var styleElement =  document.createElement('link');
    styleElement.setAttribute('type', 'text/css');
    styleElement.setAttribute('rel', 'stylesheet');
    styleElement.setAttribute('href', href);
    
    var head = document.getElementsByTagName('head')[0];
    head.appendChild(styleElement);
}

        
function loadDesktop() {
    if (controller && controller.loadDesktop) {
        controller.loadDesktop();
    } else {
        window.location
      = "http://os.cloudme.com/";
    }        
}


function createSoapEnvelope(contents) {
  return '<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" ' +
    'SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">' +
    '<SOAP-ENV:Body>' + contents + '</SOAP-ENV:Body></SOAP-ENV:Envelope>';
}

function failedLogin(startup, msg) {
  $('#login_form').show();
  if( !startup ) {
    alert('Invalid Username or Password' + (msg ? '\n\n' + loginFailedMsg : ''));
  }
  $("#login_username").focus();
}

function resetPassword(){
  $('#password').val('');
  cloudme.ajax({
    type: 'DELETE',
    async: false,
    cache: false,
    processData: false,
    url: apiHOST + '?access_token=' + encodeURIComponent('loggedOUT'),
    username: '*',
    password: '/'
  });
}

function logout() {
    storage.clear();
}
//function login(username, password, callback, errback) {
//  cloudme.ajax({
//   type: 'POST',
//   async: true,
//   cache: false,
//   contentType: 'text/xml; charset=utf-8',
//   dataType: 'xml',
//   processData: false,
//   url: apiHOST,
//   username: username,
//   password: password,
//   data: createSoapEnvelope('<login/>'),
//   beforeSend: function(xhr) {
//     xhr.setRequestHeader('SOAPAction', 'login');
//   },
//   success: callback,
//   error: errback
//  });
//}

//function loggedIn_webui(response, textStatus, XMLHttpRequest) {
//  apiUSERID = $(response).find('userid').text();
//
//  keepLoggedIn = document.getElementById('keepLoggedIn').checked;
//  username =  $('#login_username').val(); 
//  password =  $('#login_password').val();
//
//  if( keepLoggedIn && storage.hasSupport() ){
//    storage.clear();
//
//    storage.setValue("login.username", username);
//    storage.setValue("login.token", password);
//    storage.setValue("isLoggedIn", "1");
//  } else {
//      storage.tempStore(username, password);
//  }
//  if( storage.hasSessionSupport() ){
//    window.sessionStorage.setItem("login.username", username);
//    window.sessionStorage.setItem("login.token", password);
//  }
//
//  utils.setCookie("isLoggedIn", "1");
//
//  // TODO: add lang support
//  currentHost = location.host;
//  location.href = location.protocol = "//" + currentHost + "/en/webui";
//  //location.href = "http://" + currentHost + "/webui";
//}

function loginWebui() {

  keepLoggedIn = document.getElementById('keepLoggedIn').checked;
  username =  $('#login_username').val(); 
  password =  $('#login_password').val();
  setUserPwd(username, password);
  openFileExplorer();
}
function setUserPwd(username, password) {
  if( window.keepLoggedIn && storage.hasSupport() ){
    storage.clear();

    storage.setValue("login.username", username);
    storage.setValue("login.token", password);
    storage.setValue("isLoggedIn", "1");
  } else {
    storage.clear();
    storage.tempStore(username, password);
  }
  if( storage.hasSessionSupport() ){
    window.sessionStorage.setItem("login.username", username);
    window.sessionStorage.setItem("login.token", password);
  }

  utils.setCookie("isLoggedIn", "1");
}

function openFileExplorer() {
  // TODO: add lang support
  currentHost = location.host;
  //alert(currentHost);
  //location = "https://www.mycloud.com/";
  location = "http://" + currentHost + "/webui/";//https:
  //location = "https://" + currentHost + "/en/webui";
  return;
  //location.href = "http://" + currentHost + "/webui";
}

function loggedIn(response, textStatus, XMLHttpRequest) {

  apiUSERID = $(response).find('userid').text();
  $(response).find('group').each(function(){
    if( $(this).attr('name') == 'xios' ){
      apiXIOSGroupId = $(this).attr('id');
    }
  });
  apiDRIVES = $(response).find('drives');
  $(response).find('drives').children().each(function(){
    if( $(this).children('system').text() == 'home' ) {
      apiHomeDriveId = $(this).children('folderid').text();
      return false;
    }
  });

  // Set Config Values
  sys.setConfigText('/config/user;locale',$('#configLocale').val(),
    function(){
      //successfully saved locale value
      increaseProgressbar();
    },
    function(){}
  );

  sys.setConfigText('/config/user;country',$('#configLocation').val(),
    function(){
      //successfully saved location value
      increaseProgressbar();
    },
    function(){}
  );

  //Create profile (if selected)
  if( $('#configProfile:checked').length > 0 ){
    setupProfile();
    //tmp. prevent attempt to run profile multiple times
    window.name = 'profiled';
  }

}

function buttonClicked(startup) {
  var u = window.name.substring(0,window.name.indexOf('@'));
  var p = window.name.substring(window.name.indexOf('@')+1);
  
  if( u.length < 1 || p.length < 1 ){
      return false;
  }

  function tryLogin() {
    if( apiStatus == 'ready' ) {
        login(window.name.substring(0,window.name.indexOf('@')), window.name.substring(window.name.indexOf('@')+1), loggedIn, function(){failedLogin(startup);});
    } else if( apiStatus != 'failed' ){
        setTimeout(tryLogin, 1000);
    }
  }

  tryLogin();
}


var xiosAPI = function(){
/**
  setUserConfig allows you to set config entries
  @URL = => "/config/user/person;fullname"
  @configData = => "Goran Panic"
**/
this.setConfigText = function( configURL, configData, callback, errback ){
  cloudme.ajax({
   type: 'PUT',
   async: true,
   cache: false,
   contentType: 'text/plain; charset=utf-8',
   dataType: 'text',
   processData: false,
   url: apiHOST+'/users/'+apiUSERID+''+configURL,
   username: window.name.substring(0,window.name.indexOf('@')),
   password: window.name.substring(window.name.indexOf('@')+1),
   data: configData,
   success: callback,
   error: errback
  });
}

/**
  Create a new folder
  (with name and ACL permissions)

  @acl => JSON object with ACL structure
**/

/**
  JSON ACL Object Structure Structure
  (All provided values should be strings)
  * At least one needs to have changeACl. "the owner"

  var aclObj =
  {"acl":
    [
    {"type": "user", "id": "user_id", "read": "boolean", "write": "boolean", "del": "boolean", "changeACL": "boolean"},
    {"type": "group", "id": "user_id", "read": "boolean", "write": "boolean", "del": "boolean", "changeACL": "boolean"},
    {"type": "user", "id": "user_id", "read": "boolean", "write": "boolean", "del": "boolean", "changeACL": "boolean"}
    ]
  };


**/

this.newFolder = function( folderId, name, acl, callback, errback ){
  if (!folderId) return false; //sanity check
  if (!name) name = 'New Folder';

  var cAcl = '';
  var aclLen = acl.acl.length;
  var m = '';
  if ( acl.acl.length > 0){
    for( var i=0; i<aclLen; i++){
      m = acl.acl[i];
      cAcl += '<'+m.type+' id="'+m.id+'" read="'+m.read+'" write="'+m.write+'" delete="'+m.del+'" changeACL="'+m.changeACL+'"/>';
    }
  }

  cloudme.ajax({
   type: 'POST',
   async: true,
   cache: false,
   dataType: 'xml',
   contentType: 'text/xml',
   processData: false,
   url: apiHOST,
   username: window.name.substring(0,window.name.indexOf('@')),
   password: window.name.substring(window.name.indexOf('@')+1),
   data: createSoapEnvelope(
      '<newFolder>'
       +'<folder id="'+folderId+'"/>'
       +'<childFolder>'+name+'</childFolder>'
       +'<acl>'
         +cAcl
       +'</acl>'
     +'</newFolder>'),
   beforeSend: function(xhr) {
     xhr.setRequestHeader('SOAPAction', 'newFolder');
   },
   success: callback,
   error: errback
  });
  return true;
}

/**
Returns the folder XML of a specific folder
**/
this.getFolderXML = function(folderId, callback, errback){
  if (!folderId) return false; //sanity check

  cloudme.ajax({
   type: 'POST',
   async: true,
   cache: false,
   dataType: 'xml',
   contentType: 'text/xml',
   processData: false,
   url: apiHOST,
   username: window.name.substring(0,window.name.indexOf('@')),
   password: window.name.substring(window.name.indexOf('@')+1),
   data: createSoapEnvelope('<getFolderXML><folder id="'+folderId+'"/></getFolderXML>'),
   beforeSend: function(xhr) {
     xhr.setRequestHeader('SOAPAction', 'getFolderXML');
   },
   success: callback,
   error: errback
  });
  return true;
}

this.getFolderAcl = function(folderId, callback, errback){
  if (!folderId) return false; //sanity check

  cloudme.ajax({
   type: 'POST',
   async: true,
   cache: false,
   dataType: 'xml',
   contentType: 'text/xml',
   processData: false,
   url: apiHOST,
   username: window.name.substring(0,window.name.indexOf('@')),
   password: window.name.substring(window.name.indexOf('@')+1),
   data: createSoapEnvelope('<getFolderACL><folder id="'+folderId+'"/></getFolderACL>'),
   beforeSend: function(xhr) {
     xhr.setRequestHeader('SOAPAction', 'getFolderACL');
   },
   success: callback,
   error: errback
  });
}
/**
  Sets a single ACL element for a folder (group or user ACL persmission)


  "p" should be an array with the following structure:

  [0] string type of permission receive         "user"|"group"
  [1] string userId, groupId
  [2] string read permission
  [3] string write permission
  [4] string delete permission
  [5] string changeACL permission
  [6] string aclTag (from getFolderAcl)
**/
this.setFolderAcl = function(folderId, p, callback, errback){
  if (!folderId && p.constructor==Array ) return false; //sanity check

  cloudme.ajax({
   type: 'POST',
   async: true,
   cache: false,
   dataType: 'xml',
   contentType: 'text/xml',
   processData: false,
   url: apiHOST,
   username: window.name.substring(0,window.name.indexOf('@')),
   password: window.name.substring(window.name.indexOf('@')+1),
   data: createSoapEnvelope(
     +'<setFolderACL>'
       +'<folder id="'+folderId+'"/>'
       +'<acl tag="'+p[6]+'">'
         +'<'+p[0]+' id="'+p[1]+'" read="'+p[2]+'" write="'+p[3]+'" delete="'+p[4]+'" changeACL="'+p[5]+'"/>'
       +'</acl> '
     +'</setFolderACL>'),
   beforeSend: function(xhr) {
     xhr.setRequestHeader('SOAPAction', 'setFolderACL');
   },
   success: callback,
   error: errback
  });
}

this.createDocument = function(filename, mime, folderId, fileContent, acl, callback, errback){
  if (!folderId) return false; //sanity check
  if (filename == '') filename = 'New Document.xml';

  var cAcl = '';
  var aclLen = acl.acl.length;
  var m = '';
  if ( acl.acl.length > 0){
    for( var i=0; i<aclLen; i++){
      m = acl.acl[i];
      cAcl += '<'+m.type+' id="'+m.id+'" read="'+m.read+'" write="'+m.write+'" delete="'+m.del+'" changeACL="'+m.changeACL+'"/>';
    }
  }

  cloudme.ajax({
   type: 'POST',
   async: true,
   cache: false,
   dataType: 'xml',
   contentType: 'text/xml',
   processData: false,
   url: apiHOST,
   username: window.name.substring(0,window.name.indexOf('@')),
   password: window.name.substring(window.name.indexOf('@')+1),
   data: createSoapEnvelope(
     '<createDocument>'
       +'<folder id="'+folderId+'"/>'
       +'<atom:entry xmlns:atom="http://www.w3.org/2005/Atom">'
         +'<atom:title>'+filename+'</atom:title>'
         +'<atom:content type="'+mime+'">'
           +fileContent
         +'</atom:content>'
       +'</atom:entry>'
       +'<acl>'
         +cAcl
       +'</acl>'
     +'</createDocument>'),
   beforeSend: function(xhr) {
     xhr.setRequestHeader('SOAPAction', 'createDocument');
   },
   success: callback,
   error: errback
  });
}

/**
  Extract meta data from Document and save it.
  (This only works with CloudMe specific XML documents.)
**/
this.extractMetaData = function(folderId, documentId, callback, errback){
  if (!folderId || !documentId) return false;

  cloudme.ajax({
   type: 'POST',
   async: true,
   cache: false,
   dataType: 'xml',
   contentType: 'text/xml',
   processData: false,
   url: apiHOST,
   username: window.name.substring(0,window.name.indexOf('@')),
   password: window.name.substring(window.name.indexOf('@')+1),
   data: createSoapEnvelope(
     '<extractMetadata>'
     +'<folder id="'+folderId+'"/>'
     +'<document id="'+documentId+'"/>'
    +'</extractMetadata>'),
   beforeSend: function(xhr) {
     xhr.setRequestHeader('SOAPAction', 'extractMetadata');
   },
   success: callback,
   error: errback
  });
  return true;

}


this.saveMetadata = function(folderId, documentId, atomXMLdata, callback, errback){
  if (!folderId || !documentId) return false;

  cloudme.ajax({
   type: 'POST',
   async: true,
   cache: false,
   dataType: 'xml',
   contentType: 'text/xml',
   processData: false,
   url: apiHOST,
   username: window.name.substring(0,window.name.indexOf('@')),
   password: window.name.substring(window.name.indexOf('@')+1),
   data: createSoapEnvelope(
     '<saveMetadata>'
       +'<folder id="'+folderId+'"/>'
       +'<document id="'+documentId+'"/>'
       +'<content>'
         +'<atom:entry xmlns:atom="http://www.w3.org/2005/Atom" xmlns:os="http://a9.com/-/spec/opensearch/1.1/" xmlns:dc="http://xcerion.com/directory.xsd" xmlns:ni="http://xcerion.com/noindex.xsd">'
           +atomXMLdata
         +'</atom:entry>'
       +'</content>'
    +'</saveMetadata>'),
   beforeSend: function(xhr) {
     xhr.setRequestHeader('SOAPAction', 'saveMetadata');
   },
   success: callback,
   error: errback
  });
  return true;
}
};


function setupProfile(){
var profileFolderId = 0;
var activityFolderId = 0;
var filesFolderId = 0;
var photosFolderId = 0;
var subProfileFolderId = 0;
var aclObj = '';

//Fetch profile data
var pdBirthMonth = $('#pdBirthMonth').val();
var pdBirthDay = $('#pdBirthDay').val();
var pdBirthYear = ( pdBirthMonth == '' && pdBirthDay == '' ) ? $('#pdBirthYear').val() : ''; //if only default value...
var pdDetailsRelation = $('#pdDetailsRelationship').val();
var pdDetailsFood = $('#pdDetailsFood').val();
var pdDetailsArtist = $('#pdDetailsMusic').val();
var pdDetailsMovie = $('#pdDetailsMovie').val();
var pdDetailsTV = $('#pdDetailsTV').val();
var pdDetailsBook = $('#pdDetailsBook').val();
var pdDetailsSport = $('#pdDetailsSport').val();

function createProfileContent(){
  //These can only be executed once the "Profile" folder is created!

  // Create "Profile" folder in Profile Folder
  aclObj =
  {'acl': [
    {'type': 'user', 'id': apiUSERID, 'read': 'true', 'write': 'true', 'del': 'true', 'changeACL': 'true'},
    {'type': 'group', 'id': apiXIOSGroupId, 'read': 'true', 'write': 'false', 'del': 'false', 'changeACL': 'false'}
  ]};

  sys.newFolder(profileFolderId, 'Profile', aclObj,
    function(a,b,c){
      increaseProgressbar();
      subProfileFolderId = $(a).find('newFolderId').text();
    },
    function(){}
  );

  // Create "Activity" folder in Profile Folder
  aclObj =
  {'acl': [
    {'type': 'user', 'id': apiUSERID, 'read': 'true', 'write': 'true', 'del': 'false', 'changeACL': 'true'},
    {'type': 'group', 'id': apiXIOSGroupId, 'read': 'true', 'write': 'false', 'del': 'false', 'changeACL': 'false'}
  ]};

  sys.newFolder(profileFolderId, 'Activity', aclObj,
    function(a,b,c){
      increaseProgressbar();
      activityFolderId = $(a).find('newFolderId').text();
    },
    function(){}
  );

  // Create "Files" folder in Profile Folder
  // Uses same ACL as folder above
  sys.newFolder(profileFolderId, 'Files', aclObj,
    function(a,b,c){
      increaseProgressbar();
      filesFolderId = $(a).find('newFolderId').text();
    },
    function(){}
  );

  // Create "Photos" folder in Profile Folder
  // Uses same ACL as folder above
  sys.newFolder(profileFolderId, 'Photos', aclObj,
    function(a,b,c){
      increaseProgressbar();
      photosFolderId = $(a).find('newFolderId').text();
    },
    function(){}
  );

  // Create Profile document
  var fc = [
'<profile version="1.0">',
  '<cloudlet active="true" folder="'+subProfileFolderId+'" name="Profile" order="1" public="true">',
    '<cloudlet active="true" index="true" name="About" public="true">',
      '<month public="true">'+pdBirthMonth+'</month>',
      '<day>'+pdBirthDay+'</day>',
      '<year public="true">'+pdBirthYear+'</year>',
      '<city public="true"></city>',
      '<message public="true"/>',
      '<homepage public="true"/>',
      '<lastsong public="false"/>',
      '<facebook/>',
      '<twitter/>',
      '<email/>',
      '<bornCity public="true"/>',
      '<bornCountry public="false"/>',
      '<bornLatitude public="false"/>',
      '<bornLongitude public="false"/>',
    '</cloudlet>',
    '<cloudlet active="true" name="Presentation" order="1" public="true"/>',
    '<cloudlet active="true" folder="0" name="Visitors" order="0" public="true"/>',
    '<cloudlet active="true" index="false" public="true" name="Details" order="1">',
      '<relation>'+pdDetailsRelation+'</relation>',
      //'<occupation>'+pdDetailsOccupation+'</occupation>',
      '<occupation/>',
      //'<fashion>'+pdDetailsFashion+'</fashion>',
      '<fashion/>',
      '<food>'+pdDetailsFood+'</food>',
      '<artist>'+pdDetailsArtist+'</artist>',
      '<movie>'+pdDetailsMovie+'</movie>',
      '<tv>'+pdDetailsTV+'</tv>',
      '<book>'+pdDetailsBook+'</book>',
      '<sport>'+pdDetailsSport+'</sport>',
      //'<like>'+pdDetailsLike+'</like>',
      '<like/>',
    '</cloudlet>',
    '<cloudlet active="true" name="Groups" order="0"/>',
  '</cloudlet>',
  '<cloudlet active="true" folder="'+activityFolderId+'" name="Activity" order="3" public="true"/>',
  '<cloudlet active="true" folder="0" name="Guestbook" order="2" public="true"/>',
  '<cloudlet active="true" folder="'+filesFolderId+'" name="Files" order="8"/>',
'</profile>'].join('');

    sys.createDocument('Profile.xml', 'text/xml', profileFolderId, fc, aclObj,
    function(a,b,c){
      increaseProgressbar();
      var folderId = $(a).find('[nodeName="dc:folder"]').text();
      var documentId = $(a).find('[nodeName="dc:document"]').text();

      var entryConstruct = [
        '<atom:title>Public.xml</atom:title>',
        '<atom:link type="text/xml" rel="alternate"/>',
        '<atom:content type="text/xml"/>',
        '<dc:root>profile</dc:root>',
        '<dc:day>'+pdBirthDay+'</dc:day>',
        '<dc:month>'+pdBirthMonth+'</dc:month>',
        '<dc:year>'+pdBirthYear+'</dc:year>',
        '<dc:city/>',
        '<ni:message/>',
        '<ni:homepage/>',
        '<ni:twitter/>',
        '<ni:facebook/>',
        '<dc:lastsong/>',
        '<dc:bornCity/>',
        '<dc:bornCountry/>',
        '<dc:bornLatitude/>',
        '<dc:bornLongitude/>',
        '<ni:presentation/>',
        '<ni:presentationOrder>1</ni:presentationOrder>',
        '<ni:presentationActive>true</ni:presentationActive>',
        '<ni:visitorsActive>true</ni:visitorsActive>',
        '<ni:visitorsOrder>0</ni:visitorsOrder>',
        '<ni:detailsOrder>1</ni:detailsOrder>',
        '<ni:detailsActive>true</ni:detailsActive>',
        '<ni:detailsRelation>'+pdDetailsRelation+'</ni:detailsRelation>',
        //'<ni:detailsOccupation>'+pdDetailsOccupation+'</ni:detailsOccupation>',
        '<ni:detailsOccupation/>',
        //'<ni:detailsFashion>'+pdDetailsFashion+'</ni:detailsFashion>',
        '<ni:detailsFashion/>',
        '<ni:detailsFood>'+pdDetailsFood+'</ni:detailsFood>',
        '<ni:detailsArtist>'+pdDetailsArtist+'</ni:detailsArtist>',
        '<ni:detailsMovie>'+pdDetailsMovie+'</ni:detailsMovie>',
        '<ni:detailsTv>'+pdDetailsTV+'</ni:detailsTv>',
        '<ni:detailsBook>'+pdDetailsBook+'</ni:detailsBook>',
        '<ni:detailsSport>'+pdDetailsSport+'</ni:detailsSport>',
        //'<ni:detailsLike>'+pdDetailsLike+'</ni:detailsLike>',
        '<ni:detailsLike/>',
        '<ni:activityFolder>'+activityFolderId+'</ni:activityFolder>',
        '<ni:activityActive>true</ni:activityActive>',
        '<ni:activityOrder>3</ni:activityOrder>',
        '<ni:guestbookActive>true</ni:guestbookActive>',
        '<ni:guestbookOrder>2</ni:guestbookOrder>'
      ].join('');

      sys.saveMetadata(folderId, documentId, entryConstruct,
        function(a,b,c){
          increaseProgressbar();
        },
        function(){}
      );

    },
    function(){});
  }

  // Create Profile folder in xios root
  aclObj =
  {'acl': [
    {'type': 'user', 'id': apiUSERID, 'read': 'true', 'write': 'true', 'del': 'true', 'changeACL': 'true'},
    {'type': 'group', 'id': apiXIOSGroupId, 'read': 'true', 'write': 'false', 'del': 'false', 'changeACL': 'false'}
  ]};

  sys.newFolder(apiHomeDriveId, 'Profile', aclObj,
    function(a,b,c){
      increaseProgressbar();
      profileFolderId = $(a).find('newFolderId').text();
      createProfileContent(); // create rest of the profile content
    },
    function(){}
  );
}

var sys = new xiosAPI;

function increaseProgressbar(){
  if( $('#configProfile:checked').length == 1 ){
    $('<div class="progressCell"></div>').appendTo('#registerFeed');
  } else {
    $('<div class="progressCellBig"></div>').appendTo('#registerFeed');
  }

  var feedItems = $('#registerFeed').children().length;
  if( feedItems == 2 && $('#configProfile:checked').length < 1 || feedItems == 8 ){
    $('#registerFeed').hide();
    $('#registerFeedText').hide();
    $('#registerFeedText2').show();
    $('#registerFeedInformation').show();
    return;
  }
}


//Helper Functions

/**
 *  Support form
 **/
function checkSupportForm(){
  var submit = true;
  var $email = $('#support_email');
  var $msg = $('#support_message');

  if ( $email.val().length < 2 || !isEmail($email.val()) ){
    $email.addClass('incorrect');
    submit = false;
  } else {
    $email.removeClass('incorrect');
  }

  if( $msg.val().length < 1 ){
    $msg.addClass('incorrect');
    submit = false;
  } else {
    $msg.removeClass('incorrect');
  }

  return (submit);
}

/**
 * DMCA Form Validation
 **/
function checkDMCAform(){
  $('.form_row').focus().css('background-color','');
  var formError = false;
  $('.input, .textarea').each(function(){
    if( $(this).val().length < 1 ){
      $(this).addClass('incorrect').focus();
      formError = true;
      return false;
    }
  });

  if( formError ) return !formError;

  if( !isEmail($('#email').val()) ){
    $('#email').addClass('incorrect').focus();
    formError = true;
  }

  if( formError ) return !formError;

  if( !isEmail($('#name2').val()) ){
    $('#name2').addClass('incorrect').focus();
    formError = true;
  } else {
    if( $('#email').val() != $('#name2').val() ){
      $('#name2').addClass('incorrect').focus();
      formError = true;
    }
  }

  if( formError ) return !formError;

  if( $('input[name="cb1"]:checked').length < 1 ){
    $('input[name="cb1"]').focus().parent().css('background-color','red');
    formError = true;
  }
  if( formError ) return !formError;

  if( $('input[name="cb2"]:checked').length < 1 ){
    $('input[name="cb2"]').focus().parent().css('background-color','red');
    formError = true;
  }
  if( formError ) return !formError;

  if( $('input[name="cb3"]:checked').length < 1 ){
    $('input[name="cb3"]').focus().parent().css('background-color','red');
    formError = true;
  }
  if( formError ) return !formError;

  if( $('input[name="cb4"]:checked').length < 1 ){
    $('input[name="cb4"]').focus().parent().css('background-color','red');
    formError = true;
  }

  $('<input type="hidden" id="humanCheck" name="human" value="human"/>').appendTo('form[name=dmca]');
  return !formError;
}

var reg_ajax_timer;

function checkRegForm() {
  var incorrect = false;
  //reset tmp.var
  if( window.name && window.name != '' ){
    window.name = '';
  }

  //Humans only
  if( $('#humanCheck').length < 1 ){
    $('<input type="hidden" id="humanCheck" name="human" value="human"/>').appendTo('form[name=register]');
  }

  if($('#firstname').val().length > 0) {
    $('#firstname').removeClass('incorrect');
  } else {
    $('#firstname').addClass('incorrect');
    incorrect = true;
  }

  if($('#lastname').val().length > 0) {
    $('#lastname').removeClass('incorrect');
  } else {
    $('#lastname').addClass('incorrect');
    incorrect = true;
  }

  if( $('.username_check').children('.available').css('display') == 'block' ){
    $('#username').removeClass('incorrect');
  } else {
    $('#username').addClass('incorrect');
    incorrect = true;
  }

  if($('#username').val().length > 0) {
    //$('#username').removeClass('incorrect');
  } else {
    $('#username').addClass('incorrect');
    incorrect = true;
  }

  if( $('#password').val().length < 5 ){
    $('#password').addClass('incorrect');
    incorrect = true;
  } else {
    $('#password').removeClass('incorrect');
  }

  if( $('#email').val().length < 1 || !isEmail( $('#email').val() ) ) {
    $('#email').addClass('incorrect');
    incorrect = true;
  } else {
    $('#email').removeClass('incorrect');
  }

  if( $('#EULA:checked').length < 1 ){
    $('#EULA').parent().addClass('incorrect');
    incorrect = true;
  } else {
    $('#EULA').parent().removeClass('incorrect');
  }

  if( !window.name ){
    window.name = $('#username').val().toLowerCase()+'@'+$('#password').val();
  }

  if( incorrect ){
    return false;
  } else {
    $('#register_form_submit').hide();
    $('#register_form_submitLoader').show();
    setUserPwd($('#username').val(), $('#password').val());
    //setUserPwd("daniel_j2", "daniel_j2");
    return true;
  }
}


function isEmail(address){
  if (!address) return false;
  var pos = address.lastIndexOf('@');
  return pos > 0 && (address.lastIndexOf('.') > pos) && (address.length - pos > 4) && (address.length - address.lastIndexOf('.') > 2);
}


function detectIE(){
  if( $.browser.msie ){
    switch( $.browser.version ){
      case '5.5':
        return 5.5;
      case '6.0':
        return 6;
      case '7.0':
        return 7;
      case '8.0':
        return 8;
      case '9.0':
        return 9;
      default:
        return false;
    }
  } else {
    return false;
  }
}

/**
 * URL Parameter.
 * (used on my.cloudme.com/user/public)
 **/
function urlParam( p ){
  p = p.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
  var regexString = "[\\?&]"+p+"=([^&#]*)";
  var regex = new RegExp( regexString );
  var r = regex.exec( window.location.href );

  if( r == null ) return "";
  else return r[1];
}

if( urlParam('mode') == 'slideshow' ){
  $('.imageclass').lightBox();
  $('.imageclass:first').trigger('click');
}

/*
  Used by my.cloudme.com
*/
function getQueryParams() {
  try {
    if( location.href.indexOf("?") == -1 ) new Object();
    var query = location.href.split("?")[1]; // ?pname=asdasdas etc...
    var qps = query.split("&");
    var params = new Object();
    for( var i=0; i < qps.length; i++ ) {
      var p = qps[i].split("=");
      var pname = p[0];
      var pvalue = p[1];
      params[pname] = pvalue;
    }
    return params;
  } catch ( e ) {}
  return new Object();
}

function bodyLoad(){
  var qparams = getQueryParams();
  var currentTab = qparams["tab"];
  var level = qparams["level"];
  // Select correct tab
  if( currentTab && 1 == 2 ){
    $('.iTab').css({'opacity':'1','filter':'alpha(opacity=100)'});
    $("#tab"+currentTab).css({'opacity':'0.5','filter':'alpha(opacity=50)'});
    $("#middleContent > *").css('display', 'none');

    if( currentTab ) {
      if( level ) { // Files
        $("#"+currentTab + level).css("display","inline");
        var pname = qparams["pname"];
        $("#" + currentTab.toLowerCase() + level + "_pname").html(unescape(pname))
      }
    }
    if( currentTab ) {
      if( !level ) {
        $("#"+currentTab).css("display","inline");
      }
    }
  }
}


function QP(param){
  var QP = window.location.toString().split('?');
  if( !QP[1] ) return '';
  var params = QP[1].split('&');
  var key = '';
  var val = '';
  for( var i = 0;i<params.length;i++ ){
    key = params[i].split('=');
    if( key[0] == param ) val = key[1];
  }
  return val;
}


//DOM Ready
$(function() {
  //iOS label click fix
  if (navigator.userAgent.match(/iPhone/i) || navigator.userAgent.match(/iPod/i) || navigator.userAgent.match(/iPad/i)) {
    $(document).ready(function () {
      $('label[for]').click(function () {
        var el = $(this).attr('for');
        if ($('#' + el + '[type=radio], #' + el + '[type=checkbox]').attr('selected', !$('#' + el).attr('selected'))) {
          return;
        } else {
          $('#' + el)[0].focus();
        }
      });
    });
  }
  
  //Pop App ask
  var ua = (navigator.userAgent || navigator.appVersion);
  if( window.name != 'popMobile' ){
    var $popElem = 0;
    if (ua.indexOf('Mobile Safari') > 0 && ua.indexOf('Android') < 0 || ua.indexOf('iPhone') > 0 && ua.indexOf('Safari') > 0 && ua.indexOf('Android') < 0){
      var $popElem = $('#popiPhone');
    } else if(ua.indexOf('Safari') > 0 && ua.indexOf('Android') > 0){
      var $popElem = $('#popiAndroid');
    }
    if( $popElem != 0 && $popElem.length > 0 ){
      var popText = $popElem.text();
      var popLink = $popElem.attr('data-url');
      var popQuestion = confirm(popText);
      if( popQuestion ){
        location.href = popLink;
      }
      window.name = 'popMobile';
    }
  }
  utils.setBrowserClass();

  if( $('#updateBookmarkNotification').length > 0 ){
    $('#updateBookmarkNotification').show(100);
  }
  
  if( detectIE() != 6 ){
    $(window).scroll(function() {
      //only on screens large enough
      if( window.innerHeight > $('#appMenuBox').height()+160 ){
        if( $(window).scrollTop() > 90 ){ 
          $('#appMenuBox').css({'position':'fixed','margin-top':'-90px'});
        } else {
          $('#appMenuBox').css({'position':'relative','margin-top':'0px'});
        }
      }
    });
  }

  if( window.loginFailed ) {
    failedLogin(false, window.loginFailedMsg);
  }

  /**
   * Front Page
   **/
   $('#login_btn').click(function(){
     //Check for and redirect Safari Mobile & Android Devices to use CloudMe Lite
     /*var ua = (navigator.userAgent || navigator.appVersion);
     if( ua.indexOf('Mobile Safari') > 0 || ua.indexOf('Safari') > 0 && ua.indexOf('Android') > 0 || ua.indexOf('iPhone') > 0 && ua.indexOf('Safari') ){
       $('#overlay').show();
       location.href = 'http://cloudme.com/m';
       return;
     }*/

     //tmp. fix for IE6
     if( detectIE() != 6 ){
       var $loginForm = $('#login_form');
       if( $loginForm.css('display') == 'none' ){
         $('.overlay').show();
         $loginForm.show();
         $('#login_username').focus();
       } else {
         $('.overlay').hide();
         $loginForm.hide();
       }
     } else {
       window.location.href = 'http://os.cloudme.com/remote.html';
     }
   });

   //$('#loginForm').action = "https://" + currentHost + "/en/webui";


   //Body click catcher
   $('.overlay').click(function(){
     var $loginForm = $('#login_form');
     if( $loginForm.css('display') != 'none' ){
       $loginForm.hide();
     }
     $(this).hide();
   });

   //Load avatar
   $('#login_username').blur(function(){
     if( $(this).val().length > 0 ){
       $('#loginAvatar img').remove();
       $('#loginAvatarTrans').css('opacity',100)
       $('#loginAvatar').append('<img src="/lib/avatar.php?user='+$(this).val()+'" onload="$(this).trigger(\'avatarLoaded\')"/>');
     } else {
       $('#loginAvatar img').remove();
     }
   });

  $('#loginAvatar img').live('avatarLoaded', function(){
     $('#loginAvatarTrans').animate({
      opacity: 0.05
    }, 1000, function() {});
  });


  // Hide stuff when clicking on page
  $('body')
    .mouseup(function() {
      $('#language_box').hide();
    });

  var $loginSubmit = $('#login_submit');
  if( $loginSubmit.length > 0 ){

    //if( window.name && window.name != '' && window.name.indexOf(':') != -1 ){
      //window.name = '';
    //}

    //$('#login_password, #login_username').keypress(function(evt){
    //  var key = (evt.which) ? evt.which : evt.keyCode;
    //  if( key == 13 ) $('#login_submit').focus().click();
    //});

    $loginSubmit.click(function() {
      var usr = $('#login_username').val().toLowerCase();
      var pwd = $('#login_password').val();
      if( usr.length < 1 ){
        alert('Missing username'); return;
      }
      if( pwd.length < 1 ){
        alert('Missing password'); return;
      }
      $('#login_form').hide();
      loginWebui();
      return false;

//      function tryLogin() {
//          if( apiStatus == 'ready' ) {
//              login(usr, pwd, loggedIn_webui, function(){failedLogin(false);});
//          } else if( apiStatus != 'failed' ){
//              setTimeout(tryLogin, 1000);
//          }
//      }
//
//      tryLogin();
        
        /*
      var access = (!QP('login')) ? 'http://os.cloudme.com' : QP('login');

      window.name = $.base64Encode(usr)+':'+$.base64Encode(pwd);
      if( access.length > 0) window.location = unescape(access) + '/';
      else window.location = 'http://os.cloudme.com/';
        */
      return false;
    });

    //Reset login data
    $('#login_username').val('');
    $('#login_password').val('');
  }


  /**
   * FAQ Search
   **/
  $('#faqSearch').keypress(function(e){
    var key = (e.which) ? e.which : e.keyCode;
    if( key == 13 ){
      $('#faqSearchSubmit').click();
    }
  });

  $('#faqSearchSubmit').click(function (){
    var s = $('#faqSearch').val();

    if( s.length > 0){
      $('dt').hide();
      $('dd').hide();
      $('h3.qa_headline').hide();

      var $dts = $('dt').filter(function() {
        return new RegExp(s, "i").test($(this).text());
      });
      $dts.show();
      $dts.next().show();
      $dts.parent().prev('h3').show(); //show category headline

      var $dds = $('dd').filter(function() {
        return new RegExp(s, "i").test($(this).text());
      });
      $dds.show();
      $dds.prev().show();
      $dds.parent().prev('h3').show(); // show category headline
    } else {
      $('dt').show();
      $('dd').show();
      $('h3.qa_headline').show();
    }
  });

  $('.faq_link').click(function (){
    $(this).parent().parent().children('input').toggle();
  });



  /**
   *  Register page
   **/

  $('#register_form_next').click(function(){
    if( !checkRegForm() ) return;
    $(this).hide();
    $('#register_form_submit').show();
    $('#signupPage1').hide();
    $('#signupPage2').show();
    $('#signupBack').show();
    $('#register_form_submitLoader').hide();
  });
  
  // Finish account creating
  if( $('#configProfile')[0] && window.name != 'profiled' && window.name.indexOf('@') > -1 ){
    initCloudMeAPI(
      function(){
        apiStatus = 'ready';
      },

      function(){
        apiStatus = 'failed';
        alert('Failed to finish account setup. Bad connection.');
    });
    buttonClicked();
  } else if ($('#configProfile')[0]) {
    window.name = '';
    //additional information has already been stored. 
    $('#registerFeed').hide();
    $('#registerFeedText').hide();
    $('#registerFeedText2').show();
    $('#registerFeedInformation').show();
  }
  
  if($('#signup_location')[0]){
    $.ajax({
      url: '/geoip.php',
      type: 'get',
      success: function(response) {
        if( response == "" ) {
          response = (guessedLocale.length == 2 ? setLang : guessedLocale).substring(3).toLowerCase();
        }
        $('#signup_location').val(response);
        if( $('#signup_location').val() != response ) {
          $('#signup_location').val("us");
        }
      }
    });

    //determine default language based on current WWW languge
    var currentLang = window.location.href;
    var lang = currentLang.split('/')[3];
    var setLang = null, guessedLocale;
    var navLang = window.navigator.language || window.navigator.browserLanguage;
    if( navLang.substring(0, 2).toLowerCase() == lang ) {
      setLang = guessedLocale = navLang;
    } else if( lang == "en" ) {
      setLang = guessedLocale = navLang;
    } else {
      guessedLocale = navLang;
    }

    function isSupported(la) {
      var supportedLangs = ["in_ID","ca_ES","cs_CZ","da_DK","de_DE","et_EE","en_GB","en_US","es_ES","fr_FR","it_IT","lt_LT","hu_HU","nl_NL","no_NO","pl_PL","pt_BR","pt_PT","ro_RO","sk_SK","sr_RS","sv_SE","tl_PH","vi_VN","tr_TR","el_GR","ru_RU","uk_UA","zh_CN","ja_JP","zh_TW"];
      for( var i = 0, len = supportedLangs.length; i < len; i++ ) {
        if( supportedLangs[i] == la ) {
          return true;
        }
      }
      return false;
    }

    function setLanguage(la) {
      if( !setLang || setLang.length == 2 || !isSupported(setLang) ) {
        switch( la ) {
          case 'en': setLang = 'en_US'; break;
          case 'ca': setLang = 'ca_ES'; break;
          case 'dk': setLang = 'da_DK'; break;
          case 'de': setLang = 'de_DE'; break;
          case 'es': setLang = 'es_ES'; break;
          case 'fr': setLang = 'fr_FR'; break;
          case 'it': setLang = 'it_IT'; break;
          case 'nl': setLang = 'nl_NL'; break;
          case 'no': setLang = 'no_NO'; break;
          case 'pl': setLang = 'pl_PL'; break;
          case 'pt': setLang = 'pt_BR'; break;
          case 'ro': setLang = 'ro_RO'; break;
          case 'ru': setLang = 'ru_RU'; break;
          case 'sr': setLang = 'sr_RS'; break;
          case 'sv': setLang = 'sv_SE'; break;
          case 'tl': setLang = 'tl_PH'; break;
          case 'tr': setLang = 'tr_TR'; break;
          case 'zh-cn': setLang = 'zh_CN'; break;
          default: setLang = 'en_US'; return false; break;
        }
      }
      return true;
    }
    if( !setLang || !setLanguage(setLang.substring(0, 2).toLowerCase()) ) {
      setLanguage(lang);
    }

    $('#signup_language').val(setLang);
  }

  /**
   *  Button UI
   **/
  $('.button')
    .mouseover(function(){
    $(this).children('.left').addClass('bHover');
    })
    .mouseout(function(){
      $(this).children('.left').removeClass('bHover');
      $(this).mouseup();
    })
    .mousedown(function(){
      $(this).children('.left').css({'border-color':'#aaa #ddd #ddd #aaa'});
      return false;
    })
    .mouseup(function(){
      $(this).children('.left').css({'border-color':'#ddd #aaa #aaa #ddd'});
  });


  /**
   * Easy Upload
   **/
  if( $('#ezFrontScreenHolder').length > 0 ){
    $('#ezFrontScreenHolder a').lightBox();
  }

  /**
   * Form Handling
   **/
   $('.input, .textarea').focus(function(){
     $(this).removeClass('incorrect');
   });

  /**
   * Registration
   **/
  if($('.register_form').length > 0) {
    $('#username').keyup(function(){
      var username = $('#username').val();
      if(username.length > 0) {
        if(reg_ajax_timer) {
          clearTimeout(reg_ajax_timer);
        }

        reg_ajax_timer = setTimeout(function() {
          $.ajax({
            url: '/ajax/username_check.php?username=' + username,
            type: 'get',
            success: function(response){
              $('.username_check_username').html(username);
              if( response == 'available' && username.indexOf('#') < 0 ) {
                $('.username_check').children('div').hide();
                $('.username_check').children('.available').show();
              } else if( response == 'illegal' || username.indexOf('#') > -1 ){
                $('.username_check').children('div').hide();
                $('.username_check').children('.illegal').show();
              } else if( response == 'occupied' ){
                $('.username_check').children('div').hide();
                $('.username_check').children('.occupied').show();
              }
              //$('#username_link').removeClass('username_available username_illegal username_occupied').addClass('username_' + response);
              //$('#username_link').show();
              //$('#userProfileUrl').removeClass('available illegal occupied').addClass(response);
              //$('#userProfileUrl').show();
            }
          });
        }, 200);
      } else {
        $('.username_check').children('div').hide();
      }
    });

    $('#profile').change(function(){
      if( $('#profile:checked')[0] ){
        $('#register_form_submit').hide();
        $('#register_form_next').show();
      } else {
        $('#register_form_next').hide();
        $('#register_form_submit').show();
      }
    });

    $('#signupBack').click(function(){
      $(this).hide();
      $('#register_form_submit').hide();
      $('#register_form_next').show();
      $('#signupPage2').hide();
      $('#signupPage1').show();
    });
  }
  
  

  /**
   *  Language Menu
   **/
  $('#language_box li').hover(
    function(){
      $(this).addClass('selctedMenuItem');
    },
    function(){
      $(this).removeClass('selctedMenuItem');
  });

  $('#language_option').click(function() {
    $('#language_box').toggle();
  });

});
