var share;
var selectedDoc;
var selectedList;
var selectedPage;
var LIMIT_ROWS_PER_PAGE = 10;
var myDB;

// currentUser is the user in the local database.
var currentUser;

function load()
{
    dashcode.setupParts();
    document.getElementById("searchfield").style.visibility = "hidden";
    initDatabase();
    currentUser = new User();
    currentUser = getUserFromDatabase();
    document.getElementById("loginError").innerHTML = "";
    var e = ReadCookie("SHARE_COOKIE");
    e = unescape(e);
    if (e != "") {
        var ee = e.split(":");
        var email = ee[0];
        var password = ee[1];
        currentUser.email = email;
        currentUser.password = password;
        if (email != null) {
            document.getElementById("email").value = currentUser.email;
            document.getElementById("password").value = currentUser.password;
        }
    }
}

function ReadCookie(cookieName) {
    var theCookie=""+document.cookie;
    var ind=theCookie.indexOf(cookieName);
    if (ind==-1 || cookieName=="") return ""; 
    var ind1=theCookie.indexOf(';',ind);
    if (ind1==-1) ind1=theCookie.length; 
    return unescape(theCookie.substring(ind+cookieName.length+1,ind1));
}

function login(event)
{
    var server = "http://javey.net/cgi-bin/";
    var email = document.getElementById("email").value;
    var password = document.getElementById("password").value;
    var rememberMe = document.getElementById("rememberMeCheckbox").value == "on";
    currentUser.rememberme = rememberMe;
    share = new Share(email, password, rememberMe, server);
    share.signIn();
    var stackLayout = document.getElementById('stackLayout').object;
    stackLayout.setCurrentView('waitToLogin');
    currentUser.email = email;
    currentUser.password = password;
}

function initDatabase() {
    if (window.openDatabase) {
        try {
            myDB = openDatabase("shareDB", "1.0", "My Share Database", 65536);
        } catch(e) {
            if (e == INVALID_STATE_ERR) {
                alert("Invalid database version.");
            } else {
                alert("Unknow error " + e + ".");
            }
        }
        createTables();
    }
}

function createTables() {
    // To wipe out the table (if you are still experimenting with schemas,
    // for example), enable this block. 
    if (0) {
        myDB.transaction(
            function (transaction) {
                transaction.executeSql('DROP TABLE user;');
        });
    }
    
    myDB.transaction(function (transaction) {
        var createUserTable = "CREATE TABLE IF NOT EXISTS USER(id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, email TEXT NOT NULL, password TEXT NOT NULL, name TEXT NOT NULL);";
        var insertDummyUser = "INSERT INTO user (name, email, password) VALUES('', '', '');";
        transaction.executeSql(createUserTable, [], nullDataHandler, dbErrorHandler);
        transaction.executeSql(insertDummyUser, [], nullDataHandler, dbErrorHandler);
    });
}

function dbErrorHandler(transaction, error) {
    alert("Oops. Client database error " + error.message + "(Code " + error.code + ")");
    // if you think the error is fatal, return true
    return false;
}


function nullDataHandler(transaction, error) {
    // this is used as a data handler for a request that should return no data
}

function getUserFromDatabase() {
    if (myDB == null) return currentUser;
    myDB.transaction(function (transaction) {
        var query = "SELECT * from user where id=1;";
        transaction.executeSql(query, [], loadUserData, dbErrorHandler);
    });
}

function loadUserData(transaction, results) {
    var data = results.rows.item(0);
    var name = data['name'];
    var email = data['email'];
    var password = data['password'];
    currentUser = new User();
    currentUser.name = name;
    currentUser.email = email;
    currentUser.password = password;
    document.getElementById("email").value = currentUser.email;
    document.getElementById("password").value = currentUser.password;
}

function updateUserInDatabase() {
    if (myDB == null) return;
    myDB.transaction(function (transaction) {
        var updateUser = "UPDATE user SET name=?, email=?, password=? WHERE id=?;";
        var array = new Array();
        array.push(currentUser.rememberme?currentUser.name:"");
        array.push(currentUser.rememberme?currentUser.email:"");
        array.push(currentUser.rememberme?currentUser.password:"");
        array.push(1);
        transaction.executeSql(updateUser, array, nullDataHandler, dbErrorHandler);
    });

}

function setStatus(str) 
{
    document.getElementById("statusText").innerText = str;
}

function extendList(list, dataArray) {
    selectedList = list;
    list.search = null;
    list.reloadData = shareReloadData;
    list.currentPage = 1;
    list.numberOfRowsPerPage = parseInt(document.getElementById("rowsPerPage").value);
    list.numberOfPages = Math.ceil(dataArray.length / list.numberOfRowsPerPage);
    var pageNav = "";
    if (list.numberOfPages > 1) {
        pageNav = "<a href='javascript:gotoPrevPage()'>Prev</a>&nbsp;&nbsp;";
        for (var i = 1; i < list.numberOfPages+1; i++) {
            pageNav += "<a class='pageLink' href='javascript:gotoPage(" + i + ")'>" + i + "</a> . ";
        }
        if (pageNav != "") {
            pageNav = pageNav.substring(0, pageNav.lastIndexOf(" . "));
            pageNav += "&nbsp;&nbsp;<a href='javascript:gotoNextPage()'>Next</a>";
        }
    }
    document.getElementById('pageNav').innerHTML = pageNav;
}

function listFiles(event) 
{
    document.getElementById("searchfield").style.visibility = "visible";
    var ml = document.getElementById("myFilesList").object;
    ml.search = null;
    ml.reloadData = shareReloadData;
    ml.currentPage = 1;
    ml.numberOfRowsPerPage = parseInt(document.getElementById("rowsPerPage").value);
    var stackLayout = document.getElementById('stackLayout').object;
    var browser = document.getElementById('browser').object;
    if (event.target.innerText == "My Files") {
        ml.setDataArray(myFiles);
        extendList(ml, myFiles);
        browser.goForward(document.getElementById('myFiles'), "My Files");
    } else if (event.target.innerText == "My Links") {
        ml.setDataArray(myLinks);
        extendList(ml, myLinks);
        browser.goForward(document.getElementById('myFiles'), "My Links");
    } else if (event.target.innerText == "My Folders") {
        ml.setDataArray(myFolders);
        extendList(ml, myFolders);
        browser.goForward(document.getElementById('myFiles'), "My Folders");
    } else if (event.target.innerText == "Administration") {
        browser.goForward(document.getElementById('admin'), "Administration");
        document.getElementById("searchfield").style.visibility = "hidden";
    }
}


function getFileDetails(event) {
    if (event.target) {
        //document.getElementById("searchfield").style.visibility = "hidden";
        var browser = document.getElementById('browser').object;
        var stackLayout = document.getElementById('stackLayout').object;

        var doc = event.target.object.value;
        selectedDoc = doc;

        var docUrl = share.get_doc_request_url(doc.nodeId, "src", escape(doc.name)) ;

        var mdate = new Date();
        mdate.setTime(doc.modifiedDate);
        
        document.getElementById('docOwnerField').innerText = "Owner: " + doc.ownerName;
        document.getElementById('docModifiedOnField').innerText = "Modified Date: " + mdate.toString();
        document.getElementById('docSizeField').innerText = "Size: " + doc.fileSize + " bytes";
        document.getElementById('docPagesField').innerText = "Number of pages: " + doc.flashPreviewPageCount;
        document.getElementById('docName').innerHTML = "Name: <a href='" + docUrl + "'>" + doc.name + "</a>";
        document.getElementById('docThumbnail').innerHTML = "<a href='" + docUrl + "'>" + "<img src='" + doc.thumbnailUrl + "'</a>";
        var shareLevel = "Open Access";
        if (doc.shareLevel == 0) shareLevel = "Not Shared";
        else if (doc.shareLEvel == 1) shareLevel = "Limited access";
        else if (doc.shareLevel == 2) shareLevel = "Open access";
        
        document.getElementById('docShareLevelField').innerText = "Share Level: " + shareLevel;
        
        var ownerEmail = document.getElementById('docOwnerEmailButton').object;
        ownerEmail.setSubject(doc.name);
        ownerEmail.setEmailAddress(doc.owner);
        
        document.getElementById('sharedWith').innerHTML = (doc.recipients != "") ? "Shared with: " + doc.recipients : "";
        
        browser.goForward(document.getElementById('fileDetails'), "File Details");
    }
}

function delete_doc(event) {
    if (confirm("Are you sure that you wish to delete this document?")) {
        share.delete_doc(selectedDoc);
        var stackLayout = document.getElementById('stackLayout').object;
        stackLayout.setCurrentView('waitToLogin');
        setStatus("Sending request to Acrobat.com...");
    }
}

function rename_doc(event) {
    var new_name = prompt("What's the new name?", selectedDoc.name);
    if (new_name != null) {
        share.rename_doc(selectedDoc.nodeId, new_name);
        var stackLayout = document.getElementById('stackLayout').object;
        stackLayout.setCurrentView('waitToLogin');
        setStatus("Sending request to Acrobat.com...");
    }
}

function setShareDetails(event)
{
    var ml = document.getElementById("recipientList").object;
    ml.setDataArray(selectedDoc.recipientsArray);
    var browser = document.getElementById('browser').object;
    browser.goForward(document.getElementById('share'), "Share Details");
}


function delete_recipient(event)
{
    if (confirm("Are you sure that you wish to remove this recipient?")) {
        alert("TBD");
    }
}


function delete_all_files(event)
{
    if (confirm("Are you sure that you want to delete all of your files?")) {
        var stackLayout = document.getElementById('stackLayout').object;    
        stackLayout.setCurrentView('waitToLogin');
        setStatus("Sending request to Acrobat.com...");
        for (var i = 0; i < myFiles.length; i++) {
            var doc = myFiles[i][1];
            var last = i != myFiles.length - 1;
            share.delete_doc(doc, last);
        }
    }
}

function gotoPage(page) {
    selectedList.currentPage = page;
    selectedList.reloadData();
    selectedPage = page;
}

function gotoPrevPage() {
    if (selectedList.currentPage > 1) {
        gotoPage(selectedList.currentPage - 1);
    }
}

function gotoNextPage() {
    if (selectedList.currentPage < selectedList.numberOfPages) {
        gotoPage(selectedList.currentPage + 1);
    }
}

function delete_all_links(event)
{
    if (confirm("Are you sure that you want to delete all of your links?")) {
        alert("TBD");
    }
}


function reloadOrganizer(event)
{
    var stackLayout = document.getElementById('stackLayout').object;
    stackLayout.setCurrentView('waitToLogin');
    document.getElementById("activityIndicator").style.visibility = "visible";
    share.getMyFilesList();
}

function addShareDialog(event)
{
    var stackLayout = document.getElementById('stackLayout').object;
    stackLayout.setCurrentView('addShare');    
}

function addShare(event) 
{
    var level = 0;
    if (document.getElementById("radiobuttonPublicShare").checked) {
        level = 2;
    } else if (document.getElementById("radiobuttonPrivateShare").checked) {
        level = 1;
    }
    var message = document.getElementById("shareMessage").value;
    var emails = document.getElementById("shareEmail").value;
    var stackLayout = document.getElementById('stackLayout').object;
    stackLayout.setCurrentView('waitToLogin');
    setStatus("Sending request to Acrobat.com...");
    share.add_share(selectedDoc.nodeId, level, message, emails);
}

function searchList(event)
{
    var s = document.getElementById("searchfield").value;
    selectedList.search = s;
    selectedList.currentPage = 1;
    selectedList.reloadData();
}

