YAHOO.namespace("muse");
var Dom = YAHOO.util.Dom;
var Event = YAHOO.util.Event;
var counter = 0;

if (!YAHOO.muse.wait) {
    //console.log("[[ wait  ]]");
    YAHOO.muse.wait = 
	new YAHOO.widget.Panel("wait",  
			       { 
				   width: "240px", 
				   fixedcenter: true, 
				   close: false, 
				   draggable: false, 
				   zindex:4,
				   modal: false,
				   visible: false
			       } 
			      );
    
    YAHOO.muse.wait.setHeader("Loading, please wait...");
    YAHOO.muse.wait.setBody("<img src=\"/images/rel_interstitial_loading.gif\"/>");
    YAHOO.muse.wait.render(document.body);
}

var Panel = {
    init: function(context, body) {
	//console.log("[[ buildContactPanel  " + context + "]]");

	YAHOO.muse.contactPanel = new YAHOO.widget.Panel( "contactPanel", {
	    visible: false,
	    width: "550px",
	    constraintoviewport: true,
	    close: true,
	    modal: false,
	    fixedcenter: true
	});
	
	YAHOO.muse.contactPanel.setHeader("MUSE Contact Edit");
	YAHOO.muse.contactPanel.setBody(body);
	YAHOO.muse.contactPanel.setFooter('');
	YAHOO.muse.contactPanel.render(document.body);
	var footer = document.getElementById("buttons");
	if(footer) { YAHOO.muse.contactPanel.appendToFooter(footer); }

	YAHOO.muse.contactPanel.show();

	if (context == 'edit') {
	    Events.submitPanelEdit();
	}

	if (context == 'add') {
	    Events.submitPanelAdd();
	}

	Events.cancel();
    }
};

var Events = {	
    submitPanelEdit: function() {
	Event.purgeElement(Dom.get('submit_button'));
	Event.addListener('submit_button', 'click', function(e) { 
	    Event.preventDefault(e);
	    //console.log("[[ submitPanelEdit ]]");
	    var sUrl = "/cgi-bin/contactEdit.cgi";
	    var post = 'limit=production';
	    var publisher_id = Dom.get('publisher_id');
    
	    var form = document.forms['contact_edit'];
	
	    var contact_id = Dom.get('contact_id');
	    post += '&context=edit&contact_id=' +  escape(contact_id.value) + "&publisher_id=" + escape(publisher_id.value) + "&action=submit";
	    if (document.forms['contact_edit']) {
		var els = document.forms['contact_edit'].elements;
		for (var i = 0; i < els.length; i++) {
		    if (els[i].id == 'contact_id') {
			continue;
		    } else {
			if (els[i].nodeType == 1) {
			    if (els[i].value) {
				post += '&' + els[i].name + '=' + escape(els[i].value);
			    }
			}
		    }
		}
	    }
	
	    request(sUrl, 'contactPanel', 'edit', post);
	    YAHOO.muse.wait.show();
	}, YAHOO.muse.contactPanel,true);
    },

    submitPanelAdd: function() {
	Event.purgeElement(Dom.get('submit_button_add'));
	Event.addListener('submit_button_add', 'click', function(e) { 
	    Event.preventDefault(e);
	    //console.log("[[ submitPanelAdd ]]");
	    var sUrl = "/cgi-bin/contactEdit.cgi";
	    var post = 'limit=production';
	    var publisher_id = Dom.get('publisher_id');	    
	    var form = document.forms['contact_edit'];
	    post += "&context=add&action=submit&publisher_id=" + escape(publisher_id.value);
            if (document.forms['contact_edit']) {
                var els = document.forms['contact_edit'].elements;
                for (var i = 0; i < els.length; i++) {
                    if (els[i].id == 'contact_id') {
                        continue;
                    } else {
                        if (els[i].nodeType == 1) {
                            if (els[i].value) {
                                post += '&' + els[i].name + '=' + escape(els[i].value);
                            }
                        }
                    }
                }
            }

	    request(sUrl, 'contactPanel', 'add', post);
	    YAHOO.muse.wait.show();
	}, YAHOO.muse.contactPanel,true);
	
    },

    cancel: function() {
	Event.addListener('cancel_button', 'click', function(e) {
	    Event.preventDefault(e);
	    YAHOO.muse.contactPanel.hide();
	}, YAHOO.muse.contactPanel,true);	
    },

    clickEditContact: function() {
	//Event.purgeElement(Dom.get('edit_button'));
	Event.addListener('edit_button', 'click', function(e) { 
	    Event.preventDefault(e);
	    //console.log("[[ clickEditContact ]]");
	    var sUrl = "/cgi-bin/contactEdit.cgi";
	    var post = 'limit=production';
	    var publisher_id = Dom.get('publisher_id');
	    var form = document.forms['contact_edit'];
	    var contact_id = Dom.get('contact_id');
	    post += '&publisher_id=' + escape(publisher_id.value) + '&contact_id=' +  escape(contact_id.value) + '&action=edit';
	    if (document.forms['contact_edit']) {
		var els = document.forms['contact_edit'].elements;
		for (var i = 0; i < els.length; i++) {
		    if (els[i].id == 'contact_id') {
			continue;
		    } else {
			if (els[i].nodeType == 1) {
			    if (els[i].value) {
				post += '&' + els[i].name + '=' + escape(els[i].value);
			    }
			}
		    }
		}
	    }

	    request(sUrl, 'contactPanel', 'edit', post);
	    YAHOO.muse.wait.show();
	});
    },

    clickAddContact: function() {
	//Event.purgeElement(Dom.get('add_button'));
	Event.addListener('add_button', 'click', function(e) { 
	    Event.preventDefault(e);
	    //console.log("[[ clickAddContact ]]");
	    var sUrl = "/cgi-bin/contactEdit.cgi";
	    var post = 'limit=production';
	    var publisher_id = Dom.get('publisher_id');
	    var form = document.forms['contact_edit'];
	    post += "&publisher_id=" + escape(publisher_id.value) + "&action=add";
	    if (document.forms['contact_edit']) {
		var els = document.forms['contact_edit'].elements;
		for (var i = 0; i < els.length; i++) {
		    if (els[i].id == 'contact_id') {
			continue;
		    } else {
			if (els[i].nodeType == 1) {
			    if (els[i].value) {
				post += '&' + els[i].name + '=' + escape(els[i].value);
			    }
			}
		    }
		}
	    }	    	    
	    request(sUrl, 'contactPanel', 'add', post);
	    YAHOO.muse.wait.show();
	});
    },

    changeContact: function() {
	Event.addListener('contact_id', 'change', function(e) {
	    Event.preventDefault(e);
	    //console.log("[[ changeContact ]]");
	    var sUrl = "/cgi-bin/contactEdit.cgi";
	    var publisher_id = Dom.get('publisher_id');	    
	    var contact_id = Dom.get('contact_id');
	    var post = '&publisher_id=' + escape(publisher_id.value) + '&contact_id=' +  escape(contact_id.value) + "&action=view";
	    request(sUrl, 'contactView', 'view', post);    
	    YAHOO.muse.wait.show();
	});
    }

};

var Contact = {
    init: function() {
	//console.log("[[ Contact.init ]]");
	var sUrl = "/cgi-bin/contactEdit.cgi";
	var publisher_id = Dom.get('publisher_id');	    
	var contact_id = Dom.get('contact_id');
	var post = '&publisher_id=' + escape(publisher_id.value) + '&contact_id=' +  escape(contact_id.value) + "&action=view";
	if (contact_id != null) {
	    request(sUrl, 'contactView', 'view', post);    
	}
    },

    buttons: function() {
// <form method="get" action="?">
// <ul class="buttons">
//     <li><input name="contact" id="edit_button" value="edit" type="submit"></li>
//     <li><input name="contact" id="add_button" value="add" type="submit"></li>
// </ul>
// </form>

	var contact_buttons = document.getElementById('contact_buttons');
	if (contact_buttons) {
	    var p = contact_buttons.parentNode;
	    p.removeChild(contact_buttons);
	}

	var contact_id = Dom.get('contact_id').value;
	var form = document.createElement('form');
	form.setAttribute('method', 'get');
	form.setAttribute('action', 'contactEdit.cgi');
	var ul = document.createElement('ul');
	ul.setAttribute('class', 'buttons');

	if(contact_id > 0) {
	    var li1 = document.createElement('li');
	    var edit = document.createElement('input');
	    edit.setAttribute('type', 'submit');	
	    edit.setAttribute('value', 'edit');	
	    edit.setAttribute('id', 'edit_button');	
	    edit.setAttribute('name', 'contact');	
	    li1.appendChild(edit);
	    ul.appendChild(li1);
	}
	var li2 = document.createElement('li');
	var add = document.createElement('input');
	add.setAttribute('type', 'submit');	
	add.setAttribute('value', 'add');	
	add.setAttribute('name', 'contact');	
	add.setAttribute('id', 'add_button');	
	li2.appendChild(add);
	ul.appendChild(li2);
	form.appendChild(ul);

	var buttonDiv = document.createElement('div');
	buttonDiv.setAttribute('id', 'contact_buttons');
	buttonDiv.appendChild(form);

	var pub_contact_menu = Dom.get('pub_contact_menu');
	var parent = pub_contact_menu.parentNode;
	Dom.insertAfter(buttonDiv, pub_contact_menu);
    }
};

var handleSuccess = function(o) {
    //console.log("[[ success -- " + o.argument.action + " -- counter: " + ++counter + "  ]]");
    //console.log("status: " + o.status);

    if(o.responseText !== undefined){
	YAHOO.muse.wait.hide();
	var responseText = o.responseText;
	var sep = "__";
	var parts = responseText.split(sep); 
	var resp = parts[0];
	var contact_id = parts[1];
	var context = parts[2];
	if (o.argument.action == 'contactPanel') {
	    Panel.init(o.argument.context, resp);
	    // if context eq add, replace pub dropdown
	    // and select added contact
	    if(o.argument.context == 'add' && !isNaN(contact_id)) {
		refreshContactMenu(contact_id);
	    }else if(o.argument.context == 'edit' && !isNaN(contact_id)) {
		refreshContactMenu(contact_id);
	    }
	} else if (o.argument.action == 'contactView') {
	    replaceContactView(resp);
	}
    }
    Contact.buttons();
    YAHOO.util.Event.onAvailable('add_button', Events.clickAddContact);
    YAHOO.util.Event.onAvailable('edit_button', Events.clickEditContact);
 };

var refreshContactMenu = function(contact_id) {
    var post = 'contact_id=' + contact_id + '&publisher_id=' + Dom.get('publisher_id').value + '&action=contactList';
//    request('/cgi-bin/contactEdit.cgi', 'contactPanel', 'view', post);
//    alert(post);
    YAHOO.util.Connect.asyncRequest('POST', '/cgi-bin/contactEdit.cgi', {
	success: function(o) {
	    var pubContactMenu = Dom.get("pub_contact_menu");
	    pubContactMenu.innerHTML = o.responseText;
	    Contact.init();
	    YAHOO.util.Event.onAvailable('contact_id', Events.changeContact);
	},
	failure: handleFailure
    }, post);

};

var replaceContactView = function(response) {
    //console.log("[[ replaceContactView  ]]");
    var contact_data = Dom.get('contact_data');
    var parent = contact_data.parentNode;
    var new_contact_data = document.createElement('div');
    new_contact_data.setAttribute('id', 'contact_data');
    new_contact_data.innerHTML = response;
    parent.replaceChild(new_contact_data, contact_data);
}


var handleFailure = function(o) {
    //console.log("[[ failure  ]]");
    YAHOO.muse.wait.hide();
    Panel.init(o.responseText);
}

var request = function(sUrl, formAction, formContext, post) {
    //console.log("[[ request ]]");
    //console.log("POST: " + post);
    YAHOO.util.Connect.asyncRequest('POST', sUrl, {
	success: handleSuccess,
	failure: handleFailure,
	argument: { 
	    action: formAction,
	    context: formContext
	}
    }, post);
};

Event.onDOMReady(function() {
    Contact.init();
    YAHOO.util.Event.onAvailable('contact_id', Events.changeContact);
});



