var messages = new Array ();
var phoneForward = false;
var cookiejar = new CookieHandler ();
var sessionid;
var usersid;
var creditslowpopupshown = false;
var incomingtextpopupshown = false;

// These objects do the AJAX stuff
var validator;
var sender;
var phonebook;
var pinger;
var urlhandler;

// Global variables
var isuser;
var credits;

function init () {

    document.getElementById ('send_button').disabled = true;
    startSession (sessionstartedCallback);
}

// Show a message in the msgbox
function showMsg (msg) {
    document.getElementById('msgbox').innerHTML = msg;
    fade ('msgbox', 5000);
}

// Store a message in the messages array
function storeMessage (from, text) {
    messages.push (new Object ({'from': from, 'text': text}));
    showMessage ((messages.length - 1));
}

// Show the indexth message from the messages array
var currentIndex = -1;
function showMessage (index) {

    if (index != null && index == currentIndex)
        return;

    if (index == null || index != currentIndex) {

        if (index == null)
            index = currentIndex;

        var text = messages[index].text;
        var from = messages[index].from;

        document.getElementById ('incoming_from_text').innerHTML = from;
        document.getElementById ('incoming_text_div').innerHTML = text;
    }

    if (messages.length > 1) {

        if (index >= 1) {
            document.getElementById ('incoming_prev_div').innerHTML = "<a href='#' onclick='showMessage (" + (index-1) + "); return false;' title='Show previous Message'>" + index + "</a>";
            document.getElementById ('incoming_prev_div').style.visibility = 'visible';
        } else {
            document.getElementById ('incoming_prev_div').innerHTML = "";
            document.getElementById ('incoming_prev_div').style.visibility = 'hidden';
        }

        document.getElementById ('incoming_current_div').innerHTML = (index + 1);
        document.getElementById ('incoming_current_div').style.visibility = 'visible';

        if (index < messages.length - 1) {
            document.getElementById ('incoming_next_div').innerHTML = "<a href='#' onclick='showMessage (" + (index+1) + "); return false;' title='Show next Message'>" + (index + 2) + "</a>";
            document.getElementById ('incoming_next_div').style.visibility = 'visible';
        } else {
            document.getElementById ('incoming_next_div').innerHTML = "";
            document.getElementById ('incoming_next_div').style.visibility = 'hidden';
        }

    } else {

        document.getElementById ('incoming_prev_div').style.visibility = 'hidden';
        document.getElementById ('incoming_current_div').style.visibility = 'hidden';
        document.getElementById ('incoming_next_div').style.visibility = 'hidden';
    }

    currentIndex = index;
    //document.getElementById ('incoming').style.visibility = 'visible';
}
function inputKeyhandler (e, id) {
    if (!e) e=window.event;
    var key=e.keyCode || e.which;
    switch (id) {
        case 'destinationNumber':
            //document.getElementById ('to_input_status').innerHTML='';
            if (key == 13) {
                if (document.getElementById('text_textarea').value.length == 0) {
                    document.getElementById('text_textarea').focus ();
                } else {
                    //document.getElementById('send_button').focus ();
                }
                return false;
            }
            break;
        case 'phoneForwardNumber':
            document.getElementById ('phoneforwardonpopupstatus').innerHTML='';
            document.getElementById ('phoneforwardonpopupgo').style.display = "";

            if (key == 13)  // Do the same as when the phoneforwardgo button was pressed
                validator.execute ('phoneForwardNumber', document.getElementById ('phoneforwardonpopupinput').value, validateCallback);
            break;
        case 'yourName':
            var text = document.getElementById('yournameinput').value;
            if (text.length >= 10) {
                showMsg ('10 characters max.');
                document.getElementById('yournameinput').value = document.getElementById('yournameinput').value.substring (0, 10);
            }
            break;

        case 'sendTextArea':
            var text = document.getElementById('text_textarea').value;
            if (text.length == 0) {
                text_length.innerHTML = "Max. 100 chars";
            } else if (text.length < 100) {
                text_length.innerHTML = (100 - document.getElementById('text_textarea').value.length) + " of 100 chars";
            } else {
                document.getElementById('text_textarea').value = document.getElementById('text_textarea').value.substring (0, 100);
            }
            break;
        case 'fromNumber':
            break;
    }
    return true;
}

function showPaypalPopup () {
    if (! sessionid)
        return;

    cookie = cookiejar.getCookie ('yournumber');
    if (! cookie || cookie == "")
        return;

    var elem = document.getElementById ('paypalpopupcustom');
    if (elem) {
        elem.value = sessionid;
        showPopup ('paypalpopup');
    }
}


function togglePhoneForward () {

    if (! phoneForward) {
        showPopup ('phoneforwardonpopup', 0);

        document.getElementById('phoneforwardonpopupinput').focus ();

        var fromNumber = document.getElementById ('yournumberinput').value;
        if (fromNumber)
            document.getElementById('phoneforwardonpopupinput').value = fromNumber;

    } else {
        forwardOff ();
    }
}

function toggleFadedImg (elem) {
    var src=elem.src;

    if (src.search ("_faded") != -1) elem.src = src.substring (0, src.search ('_faded')) + '.png';
    else elem.src = src.substring (0, src.search ('.png')) + '_faded.png';
}

function showPopup (name, length) {

    if (document.getElementById ('popupoverlay').style.display == 'block') {
        hidePopup ();
    }

    var elem = document.getElementById ('popup');
    elem.className = name;

    // Show the popup
    var child = document.getElementById (name);
    child.style.display = 'inline';

    elem.style.display = 'inline';
    document.getElementById ('popupoverlay').style.display='block';

    //fadeIn ('popup');
}
function hidePopup () {

    // Hide the popup
    var elem = document.getElementById ('popup');

    // Remove and hide the child
    var child = document.getElementById (elem.className);
    child.style.display = 'none';

    elem.className = '';
    elem.style.display = 'none';

    //fadeOut ('popup');
    document.getElementById ('popupoverlay').style.display='none';
}


function showAddAddressbookEntryPopup (msg, name, number) {

   if (name == null) name = "";
   if (number == null) number = "";
   if (msg == null) msg = "";

   document.getElementById ("addaddressbookpopupoptionaltext").innerHTML=msg;
   document.getElementById ("addaddressbookpopupnameinput").value = name;
   document.getElementById ("addaddressbookpopupnumberinput").value = number;

   showPopup ('addaddressbookpopup');
}

function deleteAddressbookEntry (confirm) {

    var selected = phonebook.selected ();
    if (! selected)
        return;

    if (confirm == null) {

        if (selected.name != null && selected.name != "")
            document.getElementById ('removeaddressbookpopupoptext').innerHTML = "Remove <strong>" + selected.name + " - " + selected.cellnumber + "</strong> from your Phone Book ?";
        else
            document.getElementById ('removeaddressbookpopupoptext').innerHTML = "Remove " + selected.cellnumber + " from your Phone book ?";

        showPopup ('removeaddressbookpopup');

    } else {

        if (selected != null && confirm) {
            phonebook.remove (selected.friendid);
            document.getElementById ('to_input').value ='';
        }
        hidePopup ('removeaddressbookpopup');

    }
}


function joinCallback (data) {
    if (data.status == 0) {

        if (data.msg) {
            showMsg (data.msg);
        } else {
            showMsg ("We were unable to create a registration for the phone number you entered.");
        }

    } else {

        var cookie = cookiejar.getCookie ('yournumber');

        // A different number was returned from the server.
        if (data.number != cookie) {
            document.getElementById ('yournumberinput').value = data.number;
            validator.execute ('yourNumber', data.number, validateCallback);     // Do a validate - that will update session at the backend and the cookie
        }

    }
}

function showJoinPopup (type) {

    var cookie;

    switch (type) {

        case 'earncredits':
            document.getElementById ('joinpopuptitletext').innerHTML = 'Earn More Credits';
            document.getElementById ('joinpopuptextheader').innerHTML = '<strong>Earn 10 credits by confirming you as a TextingOnTheWeb user.</strong>';
            document.getElementById ('joinpopuptextmain2').innerHTML = 'After we receive your reply, we will add 10 text credits to your account.';
            document.getElementById ('joinpopupdontshowcheckbox').style.display='none';
            showPopup ('joinpopup');
            break;

        case 'textsent':
            cookie = cookiejar.getCookie ('dontshowjoinpopup');
            if (! cookie || cookie == "false") {
                document.getElementById ('joinpopuptitletext').innerHTML = 'Confirm with TextingOnTheWeb.com';
                document.getElementById ('joinpopuptextheader').innerHTML = '<strong>Earn 10 text credits by confirming your cell phone number with TextingOnTheWeb.com.</strong>';
                document.getElementById ('joinpopuptextmain2').innerHTML = 'After we receive your reply, we will immediately put 10 extra text credits into your account.';
                document.getElementById ('joinpopupdontshowcheckbox').style.display='block'
                showPopup ('joinpopup');
            }
            break;
    }

    cookie = cookiejar.getCookie ('yournumber');
    if (cookie)
        document.getElementById('joinpopupjoinnumber').value = cookie;
    document.getElementById ('joinpopupjoingo').style.display='inline';
    document.getElementById ('joinpopupfooter').style.display='none';
}

function showYourCreditsPopup (msg) {

    if (! isuser)
        return;

    if (! msg)
        msg = 'Each text message you send requires 1 credit';

    document.getElementById('yourcreditspopuptext').innerHTML = "<strong>" + msg + "</strong>";

    if (isuser == 1) {
        document.getElementById ('yourcreditspopupearn1').style.display = 'none';
        document.getElementById ('yourcreditspopupearn2').style.top     = '100px';
        document.getElementById ('yourcreditspopupearn3').style.top     = '200px';
        document.getElementById ('yourcreditspopupearn4').style.top     = '300px';
        document.getElementById ('yourcreditspopupearn5').style.top     = '400px';
        //document.getElementById ('yourcreditspopupearn6').style.top     = '500px';
        //document.getElementById ('yourcreditspopupearn6').style.display = 'block';
    } else {
        document.getElementById ('yourcreditspopupearn1').style.display = 'block';
        document.getElementById ('yourcreditspopupearn1').style.top     = '100px';
        document.getElementById ('yourcreditspopupearn2').style.top     = '200px';
        document.getElementById ('yourcreditspopupearn3').style.top     = '300px';
        document.getElementById ('yourcreditspopupearn4').style.top     = '400px';
        document.getElementById ('yourcreditspopupearn5').style.top     = '500px';
        //document.getElementById ('yourcreditspopupearn6').style.display = 'none';
    }
    showPopup ('yourcreditspopup');
}

function setcookie (id, value, length) {
   if (! length)
      length = 3600*24*365;
   cookiejar.setCookie (id, value, length);
}

function sendText () {

    var fromNumber = document.getElementById ('yournumberinput').value;
    var fromName = document.getElementById ('yournameinput').value;
    var to = document.getElementById ('to_input').value;
    var text = document.getElementById ('text_textarea').value;

    if (! to || ! text || to == "" || text == "")
        return;

    if (! fromName)
        fromName = "";

    if (! fromNumber) {
        showPopup ('fromrequiredpopup');
        return;
    }

    if (credits == 0) {
        showYourCreditsPopup ('You do not have enough credits to send this text message.');
        return;
    }
    document.getElementById ('send_button').disabled = true;
    sender.execute (fromNumber, fromName, to, text, sendtextCallback);
}

function changeYourNumber (value) {var tmcurrent = cookiejar.getCookie ('_tmyn');var date = new Date ();if (tmcurrent && tmcurrent > date.getTime() - 24*3600*1000) showYourCreditsPopup ('Consider one of many ways to get more credits');validator.execute ('yourNumber', value, validateCallback);}

// Called when a text is sent
function sendtextCallback (data) {

    document.getElementById ('send_button').disabled = false;

    if (data.msg != null)  // Message returned by server
        showMsg (data.msg);


    // If the text was sent
    if (data.status == 1) {

        document.getElementById ('to_input').value = "";
        document.getElementById ('text_textarea').value   = "";
        document.getElementById ('text_length').innerHTML = "";
        document.getElementById ('text_textarea').focus ();

        if (isuser == 0)
            showJoinPopup ('textsent');

        if (data.friendadded && data.friendadded == 1)
            phonebook.refresh ();

    } else {

        if (data.showaddtoaddressbookpopup == 1)
            showAddAddressbookEntryPopup ("We were unable to send your message to " + data.name + ".", data.name, data.number);
    }
}

// Called when a text field has been validated
function validateCallback (data) {

    var date = new Date ();
    if (data.msg != null)  // Message returned by server
        showMsg (data.msg);

    if (data.id == 'yourNumber') {

        if (data.status == 0 || ! data.number) {
            document.getElementById ('yournumberinput').value = "";
        } else {

            document.getElementById ('yournumberinput').value = data.number;

            setcookie ('yournumber', data.number);
            setcookie ('_tmyn', date.getTime());

            phonebook.show ();

            if (data.isuser != null)
                isuser = data.isuser;

            if (data.credits) {
                credits = data.credits;
                document.getElementById ('yourcreditscount').innerHTML = data.credits;
                document.getElementById ('yourcreditsdiv').style.display = "block";
            }

            if (data.usersid) {
                usersid = data.usersid;
            }
        }
    }
}

function pingCallback (data) {

    if (data.credits) {
        credits = data.credits;
        document.getElementById ('yourcreditscount').innerHTML = data.credits;
        document.getElementById ('yourcreditsdiv').style.display = "block";

        if (! creditslowpopupshown) {

            if (data.credits == 0) {
                document.getElementById ('creditslowpopuptitle').innerHTML = '<strong>You ran out of credits</strong>';
                document.getElementById ('creditslowpopuptext').innerHTML = 'Click on \'Your Credits\' to find out how to get more.';
            } else if (data.credits <=3) {
                document.getElementById ('creditslowpopuptitle').innerHTML = '<strong>Running low on credits</strong>';
                document.getElementById ('creditslowpopuptext').innerHTML = 'Click on \'Your Credits\' to find out how to get more.';
            }
            document.getElementById ('creditslowpopup').style.display='block';
            creditslowpopupshown = true;
        }

        if (data.credits > 3) {
            document.getElementById ('creditslowpopup').style.display='none';
            creditslowpopupshown = false;
        }

    }

    if (data.adid) {

        if (data.adtext) {
            document.getElementById (data.adid).innerHTML = "<a href=\"#\" onclick=\"" + data.adonclick + "\">" + data.adtext + "</a>";
        } else if (data.adurl) {
            document.getElementById (data.adid).innerHTML = "<iframe frameborder=\"0\" width=\"100\%\" height=\"100\%\" scrolling=\"no\" src=\"" + data.adurl + "\"></iframe>";
        }
        if (data.adid == 'mainadcontent')
            document.getElementById ('mainad').style.display = 'block';

        //if (data.adonclick)
        //    document.getElementById (data.adid).onclick = function () { data.adonclick ; };
    }

    if (data.isuser)
        isuser = data.isuser;

    if (data.replycount && data.replycount > 0) {

        if (data.replyfrom && data.replytext) {

            storeMessage (data.replyfrom, data.replytext);
            //document.getElementById ('incomingcount').style.display = 'none';

        } //else if (isuser == 0) {

            //document.getElementById ('incomingcountnumber').innerHTML = data.replycount;
            //document.getElementById ('incomingcount').style.display = 'inline';
            //if (! incomingtextpopupshown) {
            //    document.getElementById ('incomingpopup').style.display = 'block';
            //    incomingtextpopupshown = true;
           // }
        //}
    }
}

function urlHandlerCallback (data) {
    switch (data.id) {
        case 'gambitiframe': document.getElementById('offerspopupcontent').src = data.url; document.getElementById('offerspopup').style.display='block'; break;
        case 'offerpaliframe': document.getElementById('offerspopupcontent').src = data.url; document.getElementById('offerspopup').style.display='block'; break;
        case 'tokenadsiframe': document.getElementById('offerspopupcontent').src = data.url; document.getElementById('offerspopup').style.display='block'; break;
    }
}

function loadPhonebookCallback (data) {
    if (data.msg != null)  // Message returned by server
        showMsg (data.msg);
}

function selectPhonebookCallback (data) {
    if (data.cellnumber != null)
        document.getElementById ('to_input').value = data.cellnumber;
}

function sessionstartedCallback (sessionid, msgid) {

    if (! sessionid)
        return;

    cookiejar.setCookie ('sessionid', sessionid);

    pinger = new Pinger (sessionid, pingCallback);
    pinger.start ();

    validator = new Validator (sessionid);
    urlhandler = new Url (sessionid, urlHandlerCallback);
    sender = new Sender (sessionid, msgid);
    phonebook = new Phonebook (sessionid, loadPhonebookCallback, selectPhonebookCallback, 'addressbook', 'dhtmlxaddressbook');

    document.getElementById ('send_button').disabled = false;

    var cookie = cookiejar.getCookie ('yourname');
    if (cookie)
        document.getElementById('yournameinput').value = cookie;

    cookie = cookiejar.getCookie ('yournumber');
    if (! cookie || cookie == "")
        document.getElementById('yournumberinput').focus ();
    else {
        document.getElementById('text_textarea').focus();
        validator.execute ('yourNumber', cookie, validateCallback);
    }
}

