Object.extend(Event, {
    _domReady : function() {
        if (arguments.callee.done) return;
	arguments.callee.done = true;

	if (Event._timer) clearInterval(Event._timer);
	Event._readyCallbacks.each(function(f) { f() });
	Event._readyCallbacks = null;
    },
    onReady : function(f) {
        if (!this._readyCallbacks) {
	    var domReady = this._domReady;
	    if (domReady.done) return f();
	    if (document.addEventListener)
	      document.addEventListener("DOMContentLoaded", domReady, false);

	    /*@cc_on @*/
	    /*@if (@_win32)
	    var dummy = location.protocol == "https:" ? "https://javascript:void(0)" : "javascript:void(0)";
	    document.write("<script id=__ie_onload defer src='" + dummy + "'><\/script>");
	    document.getElementById("__ie_onload").onreadystatechange = function() {
	    if (this.readyState == "complete") { domReady(); }
	    };
	    /*@end @*/

	    if (/WebKit/i.test(navigator.userAgent)) {
	      this._timer = setInterval(function() {
		if (/loaded|complete/.test(document.readyState)) domReady();
	      }, 10);
	    }

	    Event.observe(window, 'load', domReady);
	    Event._readyCallbacks = [];
	}
	Event._readyCallbacks.push(f);
    }
});

Event.onReady(init);

var gift_descriptions = '';
var sender_default = '';
function init() {

	// using getElementById b/c
	// these two statements below cause an object problem.
    // $('gift_preview').style.display = "block";
    // $('gift_details_gift').style.display = "none";

	// document.getElementById('gift_preview').style.display = "block";
	// document.getElementById('gift_details_gift').style.display = "none";

    gift_descriptions = document.getElementsByClassName("gift_item_description");

    var gifts = document.getElementsByClassName("gift");
    for( var i = 0; i <= gifts.length; i++) {
        if (gifts[i]) {
            //var img = gifts[i].getElementsByTagName('img')[0];
            //gifts[i].style.height = img.height+'px';
            //gifts[i].style.width  = img.width+'px';
            // Click to select
            Event.observe(gifts[i], 'click',     toggle_gift_item.bindAsEventListener(gifts[i]));
            // Hover/Focus to view descriptions
            Event.observe(gifts[i], 'mouseover', show_gift_item_description.bindAsEventListener(gifts[i]));
            Event.observe(gifts[i], 'focus',     show_gift_item_description.bindAsEventListener(gifts[i]));
            // Clear shown description
            Event.observe(gifts[i], 'mouseout',  hide_gift_item_descriptions);
            Event.observe(gifts[i], 'blur',      hide_gift_item_descriptions);
        }
    }

    // sender_default = $('gift_preview_sender_info').cloneNode(true);
    // Event.observe('sender', 'keyup',   gift_preview_sender);
    // Event.observe('sender', 'change',  gift_preview_sender);

    // Preview the gift message:
    // Event.observe('gift_message', 'keyup',   gift_preview_message);
    // Event.observe('gift_message', 'keydown', gift_preview_message);
    // Event.observe('gift_message', 'change',  gift_preview_message);

    // $('store_loading').style.display = "none";
    // $('store_details').style.display = "block";
}

function hide_gift_item_descriptions() {
    for ( var i = 0; i <= gift_descriptions.length; i++) {
        if (gift_descriptions[i]) { gift_descriptions[i].style.display = "none"; }
    }
}

function show_gift_item_description(e, gift_elmt) {
    hide_gift_item_descriptions();
    $(this.id+"_description").style.display = "block";
}

function toggle_header(e, header){
    var header = Event.element(e);
    var container = header.parentNode;
    var blind = container.getElementsByClassName('blind');

    Effect.toggle(blind[0],'blind');
}

var selected_gift_item_id;
function toggle_gift_item(e, gift_elmt) {
    if (selected_gift_item_id) {
        if (selected_gift_item_id == this.id) { return false; }

        selected_gift_item = document.getElementById(selected_gift_item_id);
        selected_gift_item.className = "gift gift_unselected";

        selected_gift_item_input = document.getElementById(selected_gift_item_id+"_input");
        selected_gift_item_input.checked = false;
    }
    $('gift_details_gift').style.display = "none";
    //Effect.Fade($('gift_details_gift'), {queue: 'front'});

    selected_gift_item_id = this.id;
    this.addClassName('gift_selected');

    selected_gift_item_input = document.getElementById(this.id+"_input");
    selected_gift_item_input.checked = "checked";
    //selected_gift_item_input.type = "hidden";

    zealie_price = document.getElementById(this.id+"_zprice");
    update_zealie_balance(zealie_price.value);

    $('gift_details_gift_img').src = $(selected_gift_item_id+"_full_img").value;
    $('gift_details_gift').style.display = "block";
    $('gift_details_gift_description').innerHTML = $(selected_gift_item_id+"_description").innerHTML;
    $('gift_preview_img').src = $(selected_gift_item_id+"_preview_img").value;
}

function update_zealie_balance(zealie_price) {
    var current_zealie_balance = document.getElementById('current_zealie_balance');
    if (current_zealie_balance) {
        var mult = 1;
        if (petPicker.selected) {
            mult = petPicker.selected.keys().length;
        }
        // If we don't have a recip yet, let's assume a minimum of 1:
        if (mult == 0) { mult = 1; }

        current_zealie_balance = current_zealie_balance.value;
        new_zealie_balance = current_zealie_balance - (zealie_price * mult);

        $('gift_credit_balance_cost').innerHTML = (zealie_price * mult);
        if (mult > 1) {
            $('gift_credit_balance_cost').innerHTML += ' ('+zealie_price;
            $('gift_credit_balance_cost').innerHTML += '<tt>x</tt>' + mult+')';
        }

        // Update the tally:
        zealie_balance_post_purchase = $('gift_credit_balance_after');
        if (new_zealie_balance < 0) {
            zealie_balance_post_purchase.addClassName('redline');
        } else {
            zealie_balance_post_purchase.removeClassName('redline');
        }
        zealie_balance_post_purchase.innerHTML = new_zealie_balance;
    }
}

function gift_preview_sender(evt) {
    var sender_tuple = $('sender').options[$('sender').selectedIndex].value;
    $('gift_preview_sender_info').style.display = "none";
    $('gift_preview_sender_info').innerHTML = '';

    var runner = new Ajax.Request('/gifts/ajax/id_tuple_lookup.php', {
        method: 'get',
        parameters: { 'tuple': sender_tuple },
        requestHeaders: { 'Accept': "application/json" },
        onSuccess: function (transport) {
            var data = transport.responseText.evalJSON();
            var html_display = $(document.createElement('div'));
            html_display.innerHTML = data.html_display;
            $('gift_preview_sender_info').appendChild(html_display);
            Effect.Appear($('gift_preview_sender_info'));
        },
        onFailure: function() {
            $('gift_preview_sender_info').innerHTML = sender_default.innerHTML;
            Effect.Appear($('gift_preview_sender_info'));
        }
    });
}

function gift_preview_message(evt) {
    var msg = $('gift_message').value;
    msg = msg.replace(/\n/g, "<br />");

    $('gift_preview_message_bubble_text').innerHTML = msg;
}
