function photo(){
    this.photo = false;
    this.photo_user = false;
    this.photo_user_list = false;
    this.photo_album = false;
    this.photo_album_list = false;
    this.photo_comment = false;
}

function album(){
    this.album = false;
}

function disable_form(){
    var form = document.thisform;
    for(var i = 0; i < form.length; i++){
        form[i].disabled = true;
    }

    Einputs = document.getElementsByTagName("input")
    for(var i in Einputs){
        Einputs[i].disabled = true;
    }
}


function msg(str){
    if (PH_LOCALE_MSG[str]) {
        str = PH_LOCALE_MSG[str];
    }
    return str;
}


var PH = {
    init: function(e)
    {
    },


    debug_print: function(str){
        $('debug').innerHTML += str;
    },


    debug_puts: function(str){
        $('debug').innerHTML += str+"<br>\n";
    },


    debug_print_r: function(variable, name){
        var msg = '<table>';
        if (name) {
            msg += '<tr><th align="left">'+name+':</th></tr>';
        }
        if (typeof variable == 'string') {
            variable = variable.escapeHTML();
        }
        msg += '<tr><td><pre>'+variable+"</pre></td></tr></table>\n";
        $('debug').innerHTML += msg;
    },


    xml2json: function(xml){
        var E = xml.documentElement;
        var json = {};
        json[E.nodeName] = PH.element2json(E);
        return json;
    },


    element2json: function(E){
        var retval = '';
        var cNodes = E.childNodes;
        var l = cNodes.length;

        if(!cNodes || !l){
            return '';
        }

        var flag_text = true;
        for(var i = 0; i < l; i++){
            var nType = cNodes[i].nodeType;
            if(nType == 3 || nType == 4){
                continue;
            }
            flag_text = false;
            break;
        }

        if(flag_text){
            retval = '';
            for(var i = 0; i < l; i++){
                retval += cNodes[i].nodeValue;
            }
        } else {
            retval = {};
            for(var i = 0; i < l; i++){
                var nType = cNodes[i].nodeType;
                var nName = cNodes[i].nodeName;
                if(nType == 3 || nType == 4){
                    continue;
                }
                retval[nName] = retval[nName] || [];
                retval[nName].push(PH.element2json(cNodes[i]));
            }
        }

        return retval;
    },
    

    ajax_get: function(url, options){
        var dd = new Date();
        dd.getTime();
        var opts = {
            method : 'get',
            requestHeaders: ['If-Modified-Since', dd.toGMTString()]
        };
        Object.extend(opts, options || {});
        return new Ajax.Request(url, opts);
    },

    ajax_post: function(url, options){
        var dd = new Date();
        dd.getTime();
        var opts = {
            method : 'post',
            requestHeaders: ['If-Modified-Since', dd.toGMTString()]
        };
        Object.extend(opts, options || {});
        return new Ajax.Request(url, opts);
    }
};


Event.observe(window, 'load', PH.init.bindAsEventListener(PH));


var detail = {
    init: function()
    {
        var Ewindow = $('detail');
        if (!Ewindow) return;
        Element.hide(Ewindow);
        Element.makePositioned(Ewindow.parentNode);
        Ewindow.parentNode.style.zIndex = 2;
    },

    show: function(photo_json,key,id)
    {
        if (!id) id = 'thumbnail';
        if (!photo_json || !photo_json.photo) return false;

        tmp_photo = photo_json.photo;
        tmp_photo_comment = photo_json.photo_comment;
        if (photo_json.photo_user_list) {
            tmp_photo_user_list = photo_json.photo_user_list;
        } else {
            tmp_photo_user_list = false;
            tmp_photo_user = photo_json.photo_user;
        }
        if (photo_json.photo_album_list) {
            tmp_photo_album_list = photo_json.photo_album_list;
        } else {
            tmp_photo_album_list = false;
            tmp_photo_album = photo_json.photo_album;
        }

        // photo
        var photo = {};
        if (tmp_photo[key]) {
            photo = tmp_photo[key];
        } else if (tmp_photo_comment[key]["photo"]) {
            photo = tmp_photo_comment[key]["photo"];
        } else {
            return false;
        }

        // photo user
        var photo_user = false;
        if (tmp_photo_user_list[photo["user_id"]]) {
            photo_user = tmp_photo_user_list[photo["user_id"]];
        } else if (tmp_photo_user) {
            photo_user = tmp_photo_user;
        }

        // photo album
        var photo_album = false;
        if (tmp_photo_album_list[photo["album_id"]]) {
            photo_album = tmp_photo_album_list[photo["album_id"]];
        } else if (typeof tmp_photo_album == 'undefined') {
            return;
        } else if (tmp_photo_album) {
            photo_album = tmp_photo_album;
        }

        // detail_xxx
        // title
        var detail_title = $('detail_title');
        if (detail_title) {
            detail_title.innerHTML = photo["html_pic_title"];
        }
        // date
        var detail_date = $('detail_date');
        if (detail_date) {
            detail_date.innerHTML = photo["date"];
        }
        // owner
        var detail_owner = $('detail_owner');
        if(photo_user && detail_owner){
            detail_owner.innerHTML = photo_user["nick_name_num"];
        } else {
            if (detail_owner) {
              detail_owner.style.display = "none";
            }
        }
        // album
        var detail_album = $('detail_album');
        if(photo_album && detail_album){
            detail_album.innerHTML = photo_album["name_num"];
        } else {
            if (detail_album) detail_album.style.display = "none";
        }
        // comment number
        var detail_comment_number = $('detail_comment_number');
        if (detail_comment_number) {
            detail_comment_number.innerHTML = photo["comment_num"];
        }
        // view number
        var detail_view_number = $('detail_view_number');
        if (detail_view_number) {
            detail_view_number.innerHTML = photo["view_num"];
        }
        // photo permission
        var detail_permission = $('detail_permission');
        var perm_msg2 = photo_album["perm_msg2"];
        if(photo["album_id"] == 0){ // default album
            if (photo_user) {
                switch (perm_msg2) {
                    case msg('Public to internet perm'):
                    case msg('Public to all perm'):
                    case msg('deny'):
                        break;
                    default:
                        perm_msg2 = msg('Public to friends perm');
                }       
            }else{
                perm_msg2 = "---";
            }
        }
        if (detail_permission) {
            detail_permission.innerHTML = perm_msg2;
        }
        // photo copyright
        var detail_cp = $('detail_cp');
        if (detail_cp) { detail_cp.innerHTML = photo_album["copyright"]; }

        // check detail window position
        var Ewindow = $('detail');
        if (!Ewindow) return;
        var Ethumbnail = $(id+key);
        var offsets = Position.cumulativeOffset(Ethumbnail);
        var windowSize = Element.getDimensions(Ewindow);
        var thumbSize  = Element.getDimensions(Ethumbnail);
        var x = offsets[0] + thumbSize['width'] * 1.04;
        var y = offsets[1];
        if(x + windowSize['width'] > Element.getDimensions(document.body)['width']) {
            x = Math.ceil(offsets[0] - thumbSize['width'] * 0.04 - windowSize['width']);
        }
        var baseOffset = Position.cumulativeOffset(Ewindow.parentNode);
        x -= baseOffset[0];
        y -= baseOffset[1];

        Ewindow.style.left = x+"px";
        Ewindow.style.top  = y+"px";
        Ewindow.style.zIndex  = 2;
        this.timer_id = setTimeout((function(){this._delayShow()}).bind(this), 674);
    },

    _delayShow: function ()
    {
       var Ewindow = $('detail');
       if (!Ewindow) return;
       Element.show(Ewindow);
    },
    
    hide: function()
    {
        var Ewindow = $('detail');
        if (!Ewindow) return;
        Element.hide(Ewindow);
        clearTimeout(this.timer_id);
    }

};

var detail_album = {
    init: function()
    {
        var Ewindow = $('detail_albuminfo');
        if (!Ewindow) return;
        Element.hide(Ewindow);
        Element.makePositioned(Ewindow.parentNode);
        Ewindow.parentNode.style.zIndex = 2;
        var detail_album_cp_switch = $('detail_album_cp_switch');
        this.prev = detail_album_cp_switch.innerHTML;
    },

    show: function(album_json,key,id)
    {        
        if (!id) id = 'detail_album_thumbnail';
        if (!album_json || !album_json.album) return false;

        tmp_album = album_json.album;

        // album
        var album = {};
        if (tmp_album[key]) {
            album = tmp_album[key];
        }else {
            return false;
        }

        // detail_xxx
        // album permission
        var detail_album_permission = $('detail_album_permission');
        var perm_msg2 = album["perm_msg2"];
        if (detail_album_permission) {
            detail_album_permission.innerHTML = perm_msg2;
        }
        // order type
        var detail_album_order_type = $('detail_album_order_type');
        if (detail_album_order_type){
            detail_album_order_type.innerHTML = album["html_order_type"];
        }
        // copyright
        var detail_album_cp_switch = $('detail_album_cp_switch');
        if(album["copyright"]) {
            detail_album_cp_switch.innerHTML = this.prev;
            var detail_album_copyright = $('detail_album_copyright');
            if (detail_album_copyright) {
                detail_album_copyright.innerHTML = album["copyright"];
            }
        }else {
            detail_album_cp_switch.innerHTML = "";
        }
        // description
        var detail_album_description = $('detail_album_description');
        if (detail_album_description ) {
            detail_album_description.innerHTML = album["description_for_detail"];
        }
        // check detail window position
        var Ewindow = $('detail_albuminfo');
        if (!Ewindow) return;
        var Ethumbnail = $(id+key);
        var offsets = Position.cumulativeOffset(Ethumbnail);
        var windowSize = Element.getDimensions(Ewindow);
        var thumbSize  = Element.getDimensions(Ethumbnail);
        var x = offsets[0] + thumbSize['width'] * 0.89;
        var y = offsets[1];

        if(x + windowSize['width'] > Element.getDimensions(document.body)['width']) {
            x = Math.ceil(offsets[0] - thumbSize['width'] * 0.04 - windowSize['width']);
        }
        var baseOffset = Position.cumulativeOffset(Ewindow.parentNode);
        x -= baseOffset[0];
        y -= baseOffset[1];

        Ewindow.style.left = x+"px";
        Ewindow.style.top  = y+"px";
        Ewindow.style.zIndex  = 2;
        this.timer_id = setTimeout((function(){this._delayShow()}).bind(this), 674);
    },

    _delayShow: function ()
    {
       var Ewindow = $('detail_albuminfo');
       if (!Ewindow) return;
       Element.show(Ewindow);
    },
    
    hide: function()
    {
        var Ewindow = $('detail_albuminfo');
        if (!Ewindow) return;
        Element.hide(Ewindow);
        clearTimeout(this.timer_id);
    }

};


var Image_Thumbnail = Class.create();
Image_Thumbnail.prototype = {
    initialize: function(img, input, options)
    {
        this.setOptions(options);

        var img  = $(img);
        this.img = img;
        this._saveImageInfo();

        var input  = $(input);
        this.input = input;
        Event.observe(input, 'change', this.show.bind(this))
    },


    setOptions: function(options)
    {
        this.options = {
            suffixes: {
                gif:  true,
                jpeg: true,
                jpg:  true,
                png:  true
            }
        }
        Object.extend(this.options, options || {});
    },


    _saveImageInfo: function()
    {
        var img = this.img;
        if (!img.width) {
            setTimeout((function(){this._saveImageInfo()}).bind(this), 1000);
            return;
        }
        var img_org    = document.createElement('img');
        this.img_org   = img_org;
        img_org.src    = img.src;
        img_org.width  = img.width;
        img_org.height = img.height;
    },


    show: function()
    {
        var filename = this.input.value;
        if (!this.isValidSuffix(filename)) {
            this.showOriginal();
            return false;
        }

        var img_tmp = document.createElement('img');
        filename = filename.replace(/\\/g, '/');
        img_tmp.src = 'file:///'+filename;
        this.img_tmp = img_tmp;
        if (/MSIE/.test(navigator.userAgent) && !window.opera) {
            this._show();
        } else {
            Event.observe(img_tmp, 'load', this._show.bind(this));
        }
    },


    isValidSuffix: function(filename)
    {
        filename.match(/\.([^.]*)$/);
        return this.options.suffixes[RegExp.$1];
    },


    showOriginal: function()
    {
        var img     = this.img;
        var img_org = this.img_org;
        img.src     = img_org.src;
        img.width   = img_org.width;
        img.height  = img_org.height;
    },


    _show: function()
    {
        var img        = this.img;
        var img_tmp    = this.img_tmp;
        var max_length = this.img_org.width;
        var ox         = img_tmp.width;
        var oy         = img_tmp.height;

        if ((img_tmp.width >= img_tmp.height) && (ox > max_length)) {
            ox = max_length;
            oy = img_tmp.height * max_length / img_tmp.width;
        } else if (img_tmp.height > max_length) {
            ox = img_tmp.width * max_length / img_tmp.height;
            oy = max_length;
        }

        img.src    = img_tmp.src;
        img.width  = ox;
        img.height = oy;

        var filename = img.src;
        if (filename.slice(filename.length - 3).toLowerCase() == 'png') {
            if (navigator.userAgent.indexOf('MSIE') != -1
                && typeof document.body.style.maxHeight == 'undefined') {
                // for IE6 (PNG-24 alpha channel)
                filename = img.src;
                img.src = '/img/empty.gif';
                img.style.filter = "progid:DXImageTransform.Microsoft."
                                 + "AlphaImageLoader(src='" + filename + "',sizingmethod=scale)";
            }
        }
    }
}

/*javascript for Bubble Tooltips by Alessandro Fulciniti
- http://pro.html.it - http://web-graphics.com */

var PopupHelp = Class.create();
PopupHelp.prototype = {
    initialize : function() {
        var links,i,h;
        h=document.createElement("span");
        h.id="btc";
        h.setAttribute("id","btc");
        h.style.position="absolute"; 
        document.getElementsByTagName("body")[0].appendChild(h);
        elements = document.getElementsByTagName("img");
        for(i=0;i<elements.length;i++){
	    if(elements[i].className == "help"){
	        this.prepare(elements[i]);
            }
        }
    },
    prepare : function(el){
        var tooltip,t,b,s,l;
        t=el.getAttribute("title");
        el.removeAttribute("title");

        tooltip=this.CreateEl("span","tooltip");

        s=this.CreateEl("span","top");
        s.appendChild(document.createTextNode(t));
        tooltip.appendChild(s);

        tooltip.style.filter="alpha(opacity:93)";
        tooltip.style.KHTMLOpacity="0.93";
        tooltip.style.MozOpacity="0.93";
        tooltip.style.opacity="0.93";

        el.tooltip=tooltip;
        
        el.onmouseover= function(e){
            $("btc").appendChild(this.tooltip);
        }        
        el.onmouseout = function(e){
            var d= $("btc");
            if(d.childNodes.length>0)
                d.removeChild(d.firstChild);
        }
        el.onmousemove = function(e){
            var posx=0,posy=0;
            if(e==null) e=window.event;
            if(e.pageX || e.pageY) {
                posx=e.pageX; posy=e.pageY;
            }
            else if(e.clientX || e.clientY){
                if(document.documentElement.scrollTop){
                    posx=e.clientX+document.documentElement.scrollLeft;
                    posy=e.clientY+document.documentElement.scrollTop;
                }
                else {
                    posx=e.clientX+document.body.scrollLeft;
                    posy=e.clientY+document.body.scrollTop;
                }
            }
            $("btc").style.top=(posy+10)+"px";
            $("btc").style.left=(posx-20)+"px";
        }
    },        
    CreateEl : function(t,c){
        var x=document.createElement(t);
        x.className=c;
        x.style.display="block";
        return(x);
    } 
}

PHState = {
    get: function(COD){
        var url = '/xml/state_list/'+COD;
        var ajax = PH.ajax_get(url, {onComplete: PHState.set});
    },

    set: function(request){
        var json = PH.xml2json(request.responseXML);
        var info = json['info'];
        var state_list = info['state_list'];
        if (state_list) {
            $('mailing_address').disabled = false;
            $('mailing_address').options.length = 0;
            for (var i = 0; i < state_list.length; i++) {
                var option = document.createElement("option");
                option.text = state_list[i]['state_val'];
                option.value = state_list[i]['state_id'];
                if (state_list[i]["check"] == "selected") {
                    option.selected = true;
                }
                Try.these(
                    function() { $('mailing_address').add(option); },
                    function() { $('mailing_address').appendChild(option); }
                );
            }
        } else {
            PHState.disable();
        }
    },

    del: function(){
        $('mailing_address').options.length = 1;
    },

    disable: function(){
        PHState.del();
        $('mailing_address').options[0] = new Option(msg('Unable to select'), null);
        $('mailing_address').disabled = true;
    }
}

function copy_to_clipboard(value)
{
    if (!window.clipboardData) {
        if (clipbrd) {
            clipbrd.copyText(value);
            alert(msg('copied to clipboard'));
            return;
        }
        return;
    }
    window.clipboardData.setData("text", value);
    alert(msg('copied to clipboard'));
}

PH.show_search_keyword_description = function(id, desc) {
  var obj = $(id);
  if (obj.value == desc) {
    obj.style.color = "#aaa";
  } else {
    obj.style.color = '#000';
  }
  Event.observe(window, 'load', function() {
    var val = obj.value;
    if (val == null || val == '') {
      obj.style.color = '#aaa';
      obj.value = desc;
    }
    Event.observe(obj, 'focus', function() {
      if (obj.value == desc) {
        obj.style.color = '#000';
        obj.value = '';
      }
    });
    Event.observe(obj, 'blur', function() {
      if (obj.value == '') {
        obj.style.color = '#aaa';
        obj.value = desc;
      }
    });
    var form = obj;
    while (true) {
      form = form.parentNode;
      if (form.tagName.toLowerCase() == 'form') {
        break;
      }
    }
    Event.observe(form, 'submit', function() {
      if (obj.value == desc) {
        obj.value = '';
      }
    });
  });
}

PH.reload_page = function() {
  location.reload();
}

Function.prototype.later = function(ms) {
  var self = this;
  return function() {
    var args = arguments;
    var this_obj = this;
    var res = {
      complete: false,
      cancel: function() { clearTimeout(func_id); }
    };
    var later_func = function() {
      self.apply(this_obj, args);
      res.complete = true;
    };
    var func_id = setTimeout(later_func, ms);
    return res;
  };
}

function sprintf(pattern) {
  var args = arguments;
  var i = 0;
  var replacer = function(str) {
    return (typeof args[i++] == "undefined" || args[i] == null) ? "" : args[i];
  };
  return pattern.replace(/%(s|d)/g, replacer);
}


// google adsense
var google_adnum = 0;

function google_ad_request_done(google_ads) {
  if (google_ads.length == 0) {
    return;
  }
  var html = "";
  if (google_ads[0].type == "image") {
    html += '<div>' +
            '<a href="' + google_ads[0].url + '" ' + 
            'title="go to ' + google_ads[0].visible_url + '">' +
            '<img border="0" src="' + google_ads[0].image_url + '" ' +
            'width="' + google_ads[0].image_width + '" ' +
            'height="' + google_ads[0].image_height + '">' +
            '</a>' +
            '</div>';
  } else {
    for (var i = 0; i < google_ads.length; i++) {
      html += '<div>' +
              '<a class="ad_title" href="' + google_ads[i].url + '">' + google_ads[i].line1 + '</a>' +
              '<a class="ad_url" href="' + google_ads[i].url + '">' + google_ads[i].visible_url + '</a>' +
              '<br>' +
              '<span class="ad_text">' + google_ads[i].line2 + google_ads[i].line3 + '</span>' +
              '</div>';
      if (google_ads[0].bidtype == "CPC") {
        google_adnum += google_ads.length;
      }
    }
  }
  var by = '<a href="' + google_info.feedback_url + '" class="ad_header">Ads by Google</a><br>';
  html = by + html;
  document.write(html);
}


//-->

