var urls = new Object();
urls['tripod'] = "tripod.com";
urls['angelfire'] = "angelfire.com";
urls['webon'] = "ash.com";

function byteformatted(bytes){
        if (bytes >= 1073741824) {
             bytes = number_format(bytes / 1073741824, 2, '.', '') + ' Gb';
        } else { 
                if (bytes >= 1048576) {
                bytes = number_format(bytes / 1048576, 2, '.', '') + ' Mb';
        } else { 
                        if (bytes >= 1024) {
                bytes = number_format(bytes / 1024, 0) + ' Kb';
                } else {
                bytes = number_format(bytes, 0) + ' bytes';
                        };
                };
        };
  return bytes;
};
function number_format( number, decimals, dec_point, thousands_sep ) {
    // http://kevin.vanzonneveld.net
    // +   original by: Jonas Raoni Soares Silva (http://www.jsfromhell.com)
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +     bugfix by: Michael White (http://crestidg.com)
    // +     bugfix by: Benjamin Lupton
    // +     bugfix by: Allan Jensen (http://www.winternet.no)
    // +    revised by: Jonas Raoni Soares Silva (http://www.jsfromhell.com)    
    // *     example 1: number_format(1234.5678, 2, '.', '');
    // *     returns 1: 1234.57     
 
    var n = number, c = isNaN(decimals = Math.abs(decimals)) ? 2 : decimals;
    var d = dec_point == undefined ? "," : dec_point;
    var t = thousands_sep == undefined ? "." : thousands_sep, s = n < 0 ? "-" : "";
    var i = parseInt(n = Math.abs(+n || 0).toFixed(c)) + "", j = (j = i.length) > 3 ? j % 3 : 0;
    
    return s + (j ? i.substr(0, j) + t : "") + i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + t) + (c ? d + Math.abs(n - i).toFixed(c).slice(2) : "");
}

function emailobj(email, type, dest, used, quota, percent, sendcount, sendlimit){
    this.email = email;
    this.account = email.split("@")[0];
    this.domain = email.split("@")[1];
    this.type = type;
    this.passdest = dest;
    this.used = used;
    this.quota = quota;
    this.percent = percent;
    this.sendcount = sendcount;
    this.sendlimit = sendlimit;
    this.sendpercent = parseFloat(this.sendcount)/parseFloat(this.sendlimit) * 100;

    this.HTML = function(){
        var email = new Bubble(this.account, "ok");
        email.icon = "icon_email_"+this.type+".png";
        email.title = "<span>" + this.email + "</span>";
        email.form_onsubmit = "saveEmail(\""+this.email+"\");return false;"; 
        hidden = new Hash("domain", this.domain, "account", this.account, "type", this.type);
        
        //var myhtml = "<div style='float: right;' class='click'><input type='image' src='/images/btn_save.png' alt='save'/><input type='button' onclick='revertEmail(\""+this.email+"\")' value='cancel'/></div>";
        //myhtml += "<p>" + this.email ;
        switch(this.type){
          case "forwards":{  
              email.closed = "closed";
              email.title += "<span> forwards to </span><input type='text' value='" + this.passdest +"' name='passdest'/></p>"; 
              email.title += hidden.hiddenFields(); 
              email.buttons += "<input type='image' src='/images/btn_save.png' alt='save'/><img type='button' src='/images/btn_delete_account.png' onclick='deleteEmail(\""+this.email+"\")' alt='Delete Account'/>";
              break; }
          case "pop":{ 
              email.title += " [ <a href='/service/email/check_email?domain="+this.domain+"&account="+this.account+"'>Login</a> ]";
              var pop_table = new infoTable();
              pop_table.addRow("account", "User Name", (this.account == "*"? "* (default)" : this.account) );
              pop_table.addRow("passwordedit", "Password", "<a href='javascript:void(0)' onclick='editPassword(this)' >change password</a>");
              pop_table.addRow("password", "New Password", "<input type='password' value='" + this.passdest +"' name='passdest'/>", 1);
              pop_table.addRow("password", "Confirm Password", "<input type='password' value='" + this.passdest +"' name='passdest2'/>", 1);
              email.body += hidden.hiddenFields(); 
              email.body += pop_table.HTML(); 
              email.body += "<br/>";
              email.body += "<div class='inner bk-blank outline'>";
              var sendicon = "good";
              if (this.sendpercent > 60){
                  sendicon = "bad";
              } else if (this.sendpercent > 30){
                  sendicon = "warn";
              }
              var quotaicon = "good";
              if (this.percent > 60){
                  quotaicon = "bad";
              } else if (this.percent > 30){
                  quotaicon = "warn";
              }
              //    email.body += "<p><span class='bold "+(sendicon=="bad"?"red":"")+"'>Daily sending limits :</span> <img class='emailwarn' src='/images/icon_"+sendicon+".png'/>  ("+this.sendcount+" of "+this.sendlimit+" emails sent today)</p>"; 
              email.body += "<p><span class='bold "+(quotaicon=="bad"?"red":"")+"'>Email storage quota :</span> <img class='emailwarn' src='/images/icon_"+quotaicon+".png'/>  ("+byteformatted(this.used)+" of "+byteformatted(this.quota)+" used)</p>"; 
              email.body += "</div><br/>";
              //var sendquota = makeQuota(this.sendcount, this.sendlimit, "Emails", null,"mini");
              //email.title += sendquota;
              //email.body += "<br style='clear:both;'/>";
              email.body += "<div class='click editbuttons'><input type='image' src='/images/btn_save.png' alt='save'/> <img type='button' src='/images/btn_delete_account.png' onclick='deleteEmail(\""+this.email+"\")' alt='Delete Account'/></div>";
              break; }
          case "alias":{  
              email.closed = "closed";
              email.title += "<span> is an Alias for </span><input type='text' value='" + this.passdest +"' name='passdest'/></p>"; 
              email.title += hidden.hiddenFields(); 
              email.buttons += "<input type='image' src='/images/btn_save.png' alt='save'/> <img type='button' src='/images/btn_delete_account.png' onclick='deleteEmail(\""+this.email+"\")' alt='Delete Account'/>";
              break; }
        }

        return email.HTML();
    }; 
 
}


function smultiply(character, times){
var out = ""
for (x=0;x<times;x++){
out += character;
}
return out;
}

function Bubble(name, type, icon, closed){
    this.name = name;
    this.type = type;
    this.icon = icon;
    if (closed) {
        this.closed = closed;
    } 
    this.title = "";
    this.body = "";
    this.buttons = "";
    this.form_id = "";
    this.form_onsubmit = "";

    this.HTML = function(){
        var html = "<form "+(this.form_id != ""? " id='"+this.form_id+"'" : "")+" onsubmit='"+this.form_onsubmit+"'><div id='"+this.name+"' class='bubble bubblebody bk-"+this.type+"light outline ui-corner-all-wide "+this.closed+"'>";
        if (this.title != "") {
            html += "<div class='bubbletitle bk-"+this.type+"dark outline ui-corner-all-wide'>";
            html += "<span class='icon'>"+(this.icon!=""?"<img src='/images/"+this.icon+"'/>":" ")+"</span>";
            html += "<span class='name'>"+this.title+"</span>";
            html += "<span class='buttons'>"+this.buttons;
            if (this.body != ""){
                html += "<img class='arrow' onclick='toggleInfo(this)' src='/images/icon_arrow_"+(this.closed == null ? "up" : "down" )+".png'/>";
            }
            html += "</span>";
            html += "</div>";
        }
        if (this.body != ""){
            html += "<div class='bubblebodytext' "+(this.closed=="closed"?"style='display:none;'":"")+">";
            html += this.body; 
            html += "</div>";
        }
        html += "</div></form>";
        return html;
    };
/*
    this.HTMLobj = function(){
        var myobj = document.createElement('form');
        myobj.id = this.form_id;
        myobj.onsubmit = this.form_onsubmit;
        var divobj = document.createElement('div');
        divobj.id = this.name;
        divobj.class="bubble bubblebody bk-"+this.type+"light outline ui-corner-all-wide "+this.closed;
        

        var html = "<form "+(this.form_id != ""? " id='"+this.form_id+"'" : "")+" onsubmit='"+this.form_onsubmit+"'><div id='"+this.name+"' class='bubble bubblebody bk-"+this.type+"light outline ui-corner-all-wide "+this.closed+"'>";
        if (this.title != "") {
            html += "<div class='bubbletitle bk-"+this.type+"dark outline ui-corner-all-wide'>";
            html += "<span class='icon'>"+(this.icon!=""?"<img src='/images/"+this.icon+"'/>":" ")+"</span>";
            html += "<span class='name'>"+this.title+"</span>";
            html += "<span class='buttons'>"+this.buttons;
            if (this.body != ""){
                html += "<img class='arrow' onclick='toggleInfo(this)' src='/images/icon_arrow_"+(this.closed == null ? "up" : "down" )+".png'/>";
            }
            html += "</span>";
            html += "</div>";
        }
        if (this.body != ""){
            html += "<div class='bubblebodytext' "+(this.closed=="closed"?"style='display:none;'":"")+">";
            html += this.body; 
            html += "</div>";
        }
        html += "</div></form>";
        return html;
    };
*/
    this.HTML2 = function(){
        var html = "<form "+(this.form_id != ""? " id='"+this.form_id+"'" : "")+" onsubmit='"+this.form_onsubmit+"'><div id='"+this.name+"' class='bubble bubblebody bk-"+this.type+"light outline ui-corner-all-wide "+this.closed+"' style='text-align:left;'>";
        html += "<span class='icon' style='float:left'>"+(this.icon!=""?"<img src='/images/"+this.icon+"'/>":" ")+"</span>";
        html += "<div class='' style='text-align:left'>";
        html += "<span class='name'>"+this.title+"</span>";
        html += "<span class='buttons'>"+this.buttons;
        html += "</span>";
        html += "</div>";
        html += "<div class='bubblebodytext' "+(this.closed=="closed"?"style='display:none;'":"")+">";
        html += this.body; 
        html += "</div>";
        html += "</div></form>";
        return html;
    };
}



function subdomain(item, domain){
    var subdomparent = this;
    this.domain = domain;
    this.type = item.type;
    this.host = item.host;
        //optional
        this.member = membername;
        this.subdir = "";
        this.dest = "http://";
        this.type = item.type; 
    if (item.type == "tripod" || item.type == "angelfire"){
        this.member = (item.state != "" ? item.state + "/":"") + item.member;
        this.state= item.state;
        this.url= urls[item.type];
        if (item.dest.indexOf("/") != -1){
            if (this.state != ""){
                if (item.dest.indexOf("/", item.dest.indexOf("/")+1) != -1){
                    this.subdir = item.dest.substring(item.dest.indexOf("/", item.dest.indexOf("/")+1)+1,1000);
                } else {
                    this.subdir = '';
                }
            } else {
                this.subdir = item.dest.substring(item.dest.indexOf("/")+1,1000);
            }
        } else {
            this.subdir = '';
        }
        //this.subdir = (item.subdir == null? "": item.subdir);
        this.dest = item.dest;
    } else if (item.type == "frame" || item.type == "redirect" || item.type=="forwarding"){
        if (item.masking == "0") {
            this.type = "redirect";
        } else {
            this.type = "frame";
        }
        this.dest = item.dest;
    } else if (item.type == "ip" || item.type == "cname"){
        this.dest = item.dest;
    }
    
    this.changeType = function(newtype){ 
        if (newtype == "angelfire" || newtype == "tripod") {
            this.subdir = "";
        }
        this.type = newtype; 
    };
//    this.changeHost = function(newhost){ this.type = newhost; this.url = urls[newhost]; };

    this.makeDest = function(){
        if (this.state != ''){
           // membername = this.state + '/' + this.member;
            return this.url + "/" + this.member + "/" + this.subdir;
        } else {
            return this.member + "." + this.url +  "/" + this.subdir ;
        }
    };
     
    this.HTML = function(open){
        var sub = new Bubble(this.host, "ok");
        sub.icon = "icon_globe.png";
        sub.title = this.host + "." + this.domain;
        sub.form_id = "myform";
        if (this.type != "ash"){
            sub.form_onsubmit = "saveSubdomain(this);return false;";
        }
        myhtml = "  <input type='hidden' name='domain' value='"+this.domain+"'/>\
                    <input type='hidden' name='type' value='"+this.type+"'/>\
                    <input type='hidden' name='oldhost' value='"+this.host+"'/>\
                    <input type='hidden' name='subdir' value='"+this.subdir+"'/>\
                    <p>";
                    
        if (this.host != "www") {
            //myhtml += "<input type='text' name='host' size='15' maxlength='63' value='" + this.host + "' style='text-align:right'/>." + this.domain ;
            if (open != "open"){
                sub.closed = "closed" ;
            }
            myhtml += "<input type='hidden' name='host' value='"+this.host+"'/>";
            myhtml += this.host + "." + this.domain ;
        } else {
            myhtml += "<input type='hidden' name='host' value='"+this.host+"'/>";
            myhtml += this.host + "." + this.domain ;
        }


        switch(this.type){
            case "tripod": myhtml += " is <span class='dropplace'/>"+this.__makeDrop__() ; break;
            case "angelfire": myhtml += " is <span class='dropplace'/>"+this.__makeDrop__() ; break;
            case "ash": myhtml += " is hosted with Webon and can be managed with the <a href='http://webon.angelfire.lycos.com/sitemanager'>Webon Sitemanager</a>." ; break;
            case "parked": myhtml += " is a <span class='dropplace'/>"+this.__makeDrop__()+" page."; break;
            case "frame": myhtml += " is <span class='dropplace'/>"+this.__makeDrop__()+" to <input type='text' name='dest' value='"+ (isURL(this.dest)? this.dest : "http://")+"'/>"; break;
            case "redirect": myhtml += " is "+this.__makeDrop__()+" to <input type='text' name='dest' value='"+ (isURL(this.dest) ? this.dest : "http://") +"'/>"; break;
            case "ip": myhtml += " is "+this.__makeDrop__()+" to <input type='text' name='dest' value='"+ (isIP(this.dest)? this.dest : "") +"'/>"; break;
            case "cname": myhtml += " is "+this.__makeDrop__()+" to <input type='text' name='dest' value='"+ this.dest +"'/>"; break;
        }

        myhtml +=" </p>";
        if (this.type == "tripod" || this.type == "angelfire") { 
            if (this.member == "") { this.member = user[this.type + "alias"]; }
            //if (this.member == "") { this.member = "none"; }
            var minfo_table = new infoTable();
            minfo_table.addRow("hmname", this.type.replace(/\w/,this.type.charAt(0).toUpperCase())+" User Name","<span class='hmembername'>"+this.member+" <input type='hidden' name='member' value='"+this.member+"'/><a href='javascript:void(0);' onclick='changeMembername(    \""+this.host+"\",\""+this.member+"\")'>edit</a></span>");
            
            minfo_table.addRow("pass", "Password","<input type='password' name='password' value='' />",1);

            var a_table = new infoTable();
            a_table.addRow("hmname", "Assignment","<span class='assignmenthost'>"+ makeDest(this.type,this.member) + "</span>/<span class='dest'>"+this.subdir+"</span><a href='javascript:void(0);' class='editfolderlink' onclick='getDirs(\""+this.host+"\");$(this).hide();'>edit</a>");
            a_table.addRow("folders", "Folders","<ul class='subdirs'></ul>",1);

              myhtml += "<p>"+minfo_table.HTML()+"<br/>"+a_table.HTML()+"<br/></p>" ; 
        }
//     alert(inputtest.extractContents);
//     myhtml+= inputtest.HTML;

       myhtml += "<div class='click editbuttons'>"+(this.type!="ash"?"<input type='image' src='/images/btn_save.png' alt='save'/> ":"") + (this.host != "www" ? "<img type='button' src='/images/btn_delete.png' onclick='deleteSubdomain(\""+this.host+"\")' alt='Delete Subdomain'/>" : "" ) + "</div>";
        sub.body = myhtml;
        /*
        x = document.createElement('div');
        x.id = 'tmp';
        x.style.display = 'none';
        x.innerHTML = sub.HTML();
        
        $("body").append(x);
        $("span.dropplace").after(this.__makeDrop__()).remove();

        //x.appendChild(inputtest);
        y = x.innerHTML;
        $("div#tmp").remove();
        return y;
        //sub.appendChild(inputtest);
        */


        return sub.HTML();
        //return myhtml;
    };

    this.__makeDrop__ = function (){
        var types = new Hash('tripod','Hosted with Tripod','angelfire' ,'Hosted with Angelfire' ,'parked' ,'Coming Soon' ,'frame' ,'Forwarding (via frame)' ,'redirect' ,'Forwarding (via redirect)') ;           
        var atypes = new Hash('ip',"A Record (IP pointing)", 'cname',"Canonical Name (CNAME)");           
        /*
        var edrop = document.createElement('select');
        edrop.class = 'typeselect';
        edrop.name = 'type';
        edrop.onchange = function(){
    alert("new one");
        if (this.value=="advanced") {
            toggle_advanced("Simple");
        } else {
            if (this.value == "angelfire" || this.value == "tripod") {
                this.subdir = "";
            }
            subdomparent.type = this.value; 
            $("#" + subdomparent.host).after(subdomparent.HTML()).remove();
        }
    };
    */
            var editdrop = '<select class="typeselect" name="type" onchange="changeType(\''+this.host+'\',this.value)">';

            for (var item in types.items) {
  /*              var opt = document.createElement('option');
                opt.value = item;
                opt.text = types.items[item];
                if (this.type == item){
                    opt.selected = true;
                }
                edrop.appendChild(opt);
    */
                editdrop += "<option value='" + item + "' " + (this.type == item ? "selected" : "") + ">"+types.items[item]+"</option>";
            }

            if (state == "advanced" || atypes.hasItem(this.type)){
                for (var item in atypes.items) {
  /*                  var opt = document.createElement('option');
                    opt.value = item;
                    opt.text = types.items[item];
                    if (this.type == item){
                        opt.selected = true;
                    }
                    edrop.appendChild(opt);
*/
                    editdrop += "<option value='" + item + "' " + (this.type == item ? "selected" : "") + ">"+atypes.items[item]+"</option>";
                }
            } else {
            /*
                var opt = document.createElement('option');
                opt.value = item;
                opt.text = types.items[item];
                edrop.appendChild(opt);
*/
                editdrop += "<option value='advanced'>Advanced Options</option>";
            }
    
        editdrop += '</select>';
        //return edrop;
        //$("body").append(edrop);
        return editdrop;
    };

    this.changeTypeold = function(newtype){
    //alert("old");
    this.value=newtype;
        if (this.value=="advanced") {
            toggle_advanced("Simple");
        } else {
            if (this.value == "angelfire" || this.value == "tripod") {
                this.subdir = "";
            }
            subdomparent.type = this.value; 
            //updateSubdomain(subdomparent.host);
            $("#" + subdomparent.host).after(subdomparent.HTML("open")).remove();
        }
    };


    this.changeType = function(){
    alert("new one");
        if (this.value=="advanced") {
            toggle_advanced("Simple");
        } else {
            if (this.value == "angelfire" || this.value == "tripod") {
                this.subdir = "";
            }
            subdomparent.type = this.value; 
            $("#" + subdomparent.host).after(subdomparent.HTML()).remove();
        }
    };

}

function obj2str ( obj ) {
  $("body").append("<div id='mytmpdiv' style='ddsplay:none;'></div>");
  $("#mytmpdiv").append(obj);
  x = $("#mytmpdiv").html();
  $("#mytmpdiv").remove();
  return x;
}


function isURL(url){

    if (url.indexOf(".") > 0){
        if (url.lastIndexOf(".") != url.length-1){
            return 1;
        }
    }
    return null;
}

function isIP(ip){
    octs = ip.split('\.');
    if ((octs.length-1) == 3){
        for(var oct in octs){
            if (parseInt(octs[oct]) != octs[oct]){
                return null;
            }
        }
        return 1;
    }
    return null;
}

function changeMembername(host, membername){
    $("#" +host+ " .hmembername").html("<input type='text' name='member' value='" + membername +"' onkeyup='checkName(\""+host+"\",this.value)'/>");
    $("#" +host+ " form").find(".dest").text("");
    $("#" +host+ " form").find("input[name='subdir']").val("");
    checkName(host,membername);
}

function checkName(host, membername){
    if (membername.toLowerCase() != user[mysubdomains[host].type + "alias"].toLowerCase()){
        $("#" +host+ " .pass").show()
    } else {
        $("#" +host+ " .pass").hide()
    }
    $("#" +host+ " .assignmenthost").html(makeDest(mysubdomains[host].type,membername)); 
}



function Hash()
{
        this.length = 0;
        this.items = new Array();
        for (var i = 0; i < arguments.length; i += 2) {
                if (typeof(arguments[i + 1]) != 'undefined') {
                        this.items[arguments[i]] = arguments[i + 1];
                        this.length++;
                }
        }
        this.hasItem = function(in_key){
            return typeof(this.items[in_key]) != 'undefined';
        }

        this.hiddenFields = function(){
            var fields = "";
            for (x in this.items) {
                fields +="<input type='hidden' name='"+x+"' value='"+this.items[x]+"'/>" ;
            }
            return fields;
        };
}
                
function infoTable(){
    this.rows = new Array();
    this.specialcol = null;
    this.addRow = function(rowclass,field,info,hidden){
        var row = new infoTableRow(rowclass,field,info,hidden);
        this.rows.push(row);
    };

    this.HTML = function(){
        var html = "<table border='0' cellspacing='0' class='outline'>";
        for (x in this.rows){
            html += this.rows[x].HTML(this.specialcol);
            if (this.specialcol) { this.specialcol = " "; }
        }
        html += "</table>";
        return html;
    };

}

function infoTableRow(rowclass, field, info, hidden){
    this.rowclass= rowclass;
    this.field = field;
    this.info = info;
    this.hidden = hidden;
    this.HTML = function(special){
        var html = "<tr class='"+rowclass+"' "+(this.hidden==1?"style='display:none;'":"")+">";
        html += "<td class='labels bk-okdark rightoutline'>"+field+":</td>";
        if (special) {
            if (special != " "){
                html += "<td class='info bk-blank' rowspan='100'>"+special+"</td>";
            }
        } else {
            html += "<td class='info bk-blank'>"+info+"</td>";
        }
        html += "</tr>";
        return html;
    };
}

subdomain.prototype.clone = function() {
  var newObj = (this instanceof Array) ? [] : {};
  for (i in this) {
    if (i == 'clone') continue;
    if (this[i] && typeof this[i] == "object") {
      newObj[i] = this[i].clone();
    } else newObj[i] = this[i]
  } return newObj;
};

emailobj.prototype.clone = function() {
  var newObj = (this instanceof Array) ? [] : {};
  for (i in this) {
    if (i == 'clone') continue;
    if (this[i] && typeof this[i] == "object") {
      newObj[i] = this[i].clone();
    } else newObj[i] = this[i]
  } return newObj;
};

