if (!mc) {
    var mc = {};
    mc.app = {};
}
mc.app.FORM = {};
mc.app.FORM.inputPreview = function() {};
mc.app.FORM.selectSwitch = function() {};

/* ad builder wizard 
*
* called by /templates/adnetwork/build.tmpl
* called by /templates/coupon/coupon_wizard.tmpl
*
**********************/


/* selectSwitch
*
* connects a <SELECT> field to update a page element ID
* 
*********************/
mc.app.FORM.selectSwitch.prototype = {
    
    init: function () {
        },
    selectHandler: function (obj,e) {
    	var frmInput=getElement(cpnOffer.formInputId);
    	var txt=this.options[this.selectedIndex].text;
    	frmInput.value=txt;
    	getElement(cpnOffer.previewLineId).innerHTML=escapeHTML(txt);
    }
};

/* inputPreview
*
* connects an <INPUT type="TEXT"> or <TEXTAREA> field to update a page element ID
* 
*********************/
mc.app.FORM.inputPreview.prototype = {
	formInputId: null,
	previewLineId: null,
	formText: null,
	charLimit: undefined, /*optional*/
	init: function (formInputid,previewLineId,formText, /*optional*/ charLimit) {
		this.formInputId = formInputid;
		this.previewLineId = previewLineId;
		this.formText = formText;
		this.charLimit = charLimit || undefined;
//		debugger
    	try {
    		this.fillPreview();
            var keyPartial = partial(this.keyUpHandler,this);
            var focusPartial = partial(this.focusHandler,this);
            var blurPartial = partial(this.blurHandler,this);
    		connect( this.formInputId , "onkeyup" , keyPartial );
    		connect( this.formInputId , "onblur"  , blurPartial );
    		connect( this.formInputId , "onfocus" , focusPartial );
    		return true;
    	} catch (err) {
    		return false;
    	}
		return this;
	},
	fillPreview: function() {
    	try {
    		var x = getElement(this.previewLineId);
    		var y = getElement(this.formInputId);
    		if (y.value) {
    			x.innerHTML = escapeHTML(y.value);
    		} else {
    			x.innerHTML = escapeHTML(this.formText);
    		}
    		return true;
    	} catch (err) {
    		//this is an image-only or a google ad
    		return false;
    	}	   
	},
	keyUpHandler: function (obj,e) {
        var b = getElement(e.src().id);
    	var disp = getElement(obj.previewLineId);
    	if (b.value == '') {
    		disp.innerHTML = escapeHTML(obj.formText);
    	} else {
    		disp.innerHTML = escapeHTML(b.value);
    	}
    	if ( obj.charLimit && this.value.length > obj.charLimit) {
    		text = this.value.substring(0, obj.charLimit);
    		this.value = text;
    		return false;
    	}
    	return true;
    },
    focusHandler: function () {
       	this.style.backgroundColor = '#eaefef';
       	return true;
    },
    blurHandler: function (obj, e) {
    	this.style.backgroundColor = '#ffffff';
    	var disp = getElement(obj.previewLineId);
    	if (this.value == '') {
    		disp.innerHTML = escapeHTML(obj.formText);
    	} else {
    		disp.innerHTML = escapeHTML(this.value);
    	}
    	return true;
    }
};

/* Form Validation
**************************/
function validateForm(frm) {
	var isok = true;
	var msg = 'Please fill the empty fields:\n';
	var boxes = new Array();

	//boxes is array of the required fields and their error messages.
	boxes = {
		'headline':'Headline',
		'body':'Body',
		'linkdest':'Link Destination (Ad goes to)',
		'adname':'Ad Name',
		'adUrl':'Display URL'
		};
	if (adFormat == 'adGoogle') {
	    boxes['keywords'] = 
		'Select up to ten words or phrases for search keywords';
	}
	//special case for the radio fieldset
	var radiofield = 'linkdest';
	var forcpn = 'adForCpn';
	var forweb = 'adForWeb';
	
	for (word in boxes) {
		var x = eval("frm."+word);

		//validate radio field. Must check if a coupon or website has been entered.
		if(word == radiofield) {
			for (var i=0;i<x.length;i++)
			{
				if (x[i].checked) {
					if ((x[i].value == forcpn)||(x[i].value==forweb)) {
						var g=eval("frm." + x[i].value);
						isok = ((g.value == '-1')||(g.value==''))?false:isok;
						msg += '-- ' + '"Ad goes to" coupon or website' + '\n';
					}
				} 
			}
		}		
		//validate the required text boxes.
		else if (!x.value) {
			isok=false;
			msg += '-- ' + boxes[word] + '\n';
		}
	}
	


	if (isok) {
		return true;
	}
	else {
		alert(msg);
		log('validateForm pushed alert');
		return false;
	}
}

/* END ad builder wizard end 
*****************************/

/* contact list manager 
*
* called by
*       /templates/contact/group_detail.tmpl, 
*       /templates/contact/groups.tmpl, 
*       /templates/contact/list_all.tmpl
*       /templates/contact/picker.tmpl
*
*****************************/

function submitEnter(myfield,e,btn)
{
var keycode;
if (window.event) keycode = window.event.keyCode;
else if (e) keycode = e.which;
else return true;
if (keycode == 13)
   {
	var x=getElement(btn);    
    x.click();
	return false;
   }
else
   return true;
}

//list_all.tmpl
function changeChunk(selectList) {
	var cs = selectList.options[selectList.selectedIndex].value;
	var startHdn = document.getElementById('startHdn');
	if (!startHdn) return;
	var start = startHdn.value;
	url = '/merchant/contact/list?start=' + start
		+ '&chunk=' +cs;
	document.location = url;
}
function setSubmitHiddenField(name) {
	var hdn = document.getElementById('Submit');
	if (!hdn)
		return;
	hdn.value = name
	return true;
}

//group_detail.tmpl
	function cmpnum(a,b) {return a-b;}
	var gids = new Array();

	function rmdup() {
		gids = gids.sort(cmpnum);
		var len = gids.length;
		var set = new Array();
		var newgids = new Array();
		var idx = null;
		for (var i = 0; i < len; i++) {
			idx = gids[i];
			if (typeof(set[idx]) == 'undefined') {
				set[idx] = idx;
				newgids.push(idx);
			}
		}
		gids = newgids;
	}

	function getGids() { return gids;}
	function remover(gid) {
		for (var i = 0; i < gids.length; i++) {
			var value = gids[i];
			if (value==gid) {
				gids.splice(i,1);
				break;
			}
		}
	}
	function doSubmit() {
		var form = document.getElementById('group_detail_form');
		if (!form)
			return;
		if (gids.length == 0) // nothing to do
			return;
		csv = gids.join(',');
		var input = document.getElementById("csv");
		if (!input)
			return;
		input.value = csv;
		form.appendChild(input);

		setSubmitHiddenField('Add Contacts By Id');
		form.submit();
	}

	function setSubmitHiddenField(name) {
		var hdn = document.getElementById('Submit');
		if (!hdn)
			return;
		hdn.value = name
		return true;
	}

//picker.tmpl
	function onloadHandler() {
		var getter = null;
		if (window.opener)
			getter = window.opener.getGids;

		if (!getter)
			return;
		gids = getter();

            	var elts = document.getElementsByName('contactlist');
       	        if (!elts || elts == [])
			return;
		len = elts.length;
		for (var i = 0 ; i < len; i++) {
			var val = elts[i].value;
			for (var j = 0; j < gids.length; j++) {
				var gid = gids[j];
				if (val == gids[j]) {
					elts[i].checked = true;
					break;
				}
			}
		}
	}

	function removeHandler(checkbox) {
		var remover = null;
		if (window.opener) 
			remover = window.opener.removeValue;
		if (!remover) return;
		if (checkbox.checked == false) {
			value = checkbox.value;
			remover(value);
		}
	}

	function doneHandler() {
		submitHandler('contactlist');
	        var x = document.form.contactlist;
	        var cb = null;
		if (window.opener)
			cb = window.opener.contactPickerCallback;
		if (cb)
			cb('Done');
		window.close();
        	return true;
	}

	function submitHandler(name) {
		var cb = null;
        	if (window.opener)
                cb = window.opener.contactPickerCallback;
	        var elts = document.getElementsByName(name);
		if (!elts || elts == []) {
			return;
		}
		len = elts.length;
		result = '';
		j = 0;
		for (var i = 0 ; i < len; i++) {
			if (elts[i].checked) {
				if (j>0)
					result += ',';
				result += elts[i].value;
				j++;
//			    elts[i].checked = false;
			}
		}
		update_total(j);
		if (cb) {
			cb(result);
		} else {
			alert('submitHandler() picker error ' + result);
			log('submitHandler() picker error');
		}
//		window.close();		
		return result;
	}	

	function update_total(j) {
		var accumulator = getElement('accumulator');
		if (!accumulator) return false;
		var curr = accumulator.value;
		if (typeof(curr) == 'string')
			curr = parseInt(curr);
		curr += j;
		accumulator.value = curr;

		var div = getElement('accumlatedMessage');
		if (!div) return false;
		var text = curr + 
			' contacts will be added when you click Done';
		if (curr == 0)
			text = '';
		if (curr == 1)
			text = 'One contact will be added when you click Done';
//		div.innerHTML = text;
	}

	function nav(url) {
		submitHandler('contactlist'); // auto add checked contacts
	    	var accumulator = getElement('accumulator');
		if (!accumulator) {
			return;
		}
		var curr = accumulator.value;
		url += '&accumulated=' + curr;
		document.location = url;
	}

/* end contact list manager 
*****************************/

/* BEGIN reg wizard 
*****************************/
mc.app.SIGNUP = {};
mc.app.SIGNUP.radio = function(){};
mc.app.SIGNUP.radio.prototype = {
    srcId:null,
    signals:null,
    val:null,
    _onchange:null,
    init:function(args) {
        this.srcId=args.srcId;
        this._onchange= args.onchange || this.eventDefault;
        this.val = args.val || null;
        this.signals = this.connectSignals();
        return this;
    },
    eventDefault:function(evt) {
        //you should override _onchange in to get the desired behavior
        log('[mc.app.SIGNUP.radio] eventDefault selected value: ', $(evt.src().id).value);        
    },
    connectSignals:function(){
        var temp = function(obj,src) {
            connect(src,'onclick', obj, "_onchange");
        };
        temp(this,this.srcId);
        return null;
    }
}

mc.app.SIGNUP.styleSwitch = function(){};
mc.app.SIGNUP.styleSwitch.prototype = {
    srcId:null, //req'd
    //must have either tgtId or (tgtClass + tgtTagName)
    tgtId:null, 
    tgtClass:null,
    tgtTagName:null || 'div',
    signals:null,
    _onchange:null,
    init: function (args) {
        this.srcId = args.srcId || null;
        this.tgtId = args.tgtId || null;
        this._onchange = args.onchange || this.changeDefault;

        this.signals = this.connectSignals();
        return this;
    },
    changeDefault:function(evt) {
        //you should override _onchange in to get the desired behavior
        log('selected value: ', $(evt.src().id).value);
    },
    connectSignals:function(){
        var temp = function(obj,src) {
            connect(src,'onchange', obj, "_onchange");
            connect(src,'onselect', obj, "_onchange");
            connect(src,'onblur', obj, "_onchange");
        };            
        try {
            temp(this,this.srcId);
            return signals;
        } catch (ex) {
            var inputs = getElementsByTagAndClassName(this.tgtTagName,this.tgtClass);
            var connectFunc = partial(temp,this);
            var signals = map(connectFunc,inputs);
            return signals;
        }
    }
};

mc.app.SIGNUP.regWizard = function() {};
mc.app.SIGNUP.regWizard.prototype = {
    typingHandles:null,
    prefixStr:null,
    inputClass:null,
    checkClass:null,
    preserveHTML:null,
    init: function (args) {
        //'desc','webUrl','hours','tags','categoryListing'
        if(!args) {return this;}
        this.inputClass = args.inputClass || null;
        this.checkClass = args.checkClass || null;
        this.prefixStr = args.prefixStr || null;
        this.preserveHTML = args.preserveHTML || null;
        this.typingHandles = this.getInputs(this.inputClass);
        return this;
    },
    getInputs: function(className) {
        var inputs = concat(getElementsByTagAndClassName('input', className),getElementsByTagAndClassName('textarea', className));

        //i want connect(object,'onkeyup',updateTheBox)
        //hook up all the inputs to the typing actions
        var temp = function(obj,src) {
            connect(src,'onkeyup', obj, "updateBox");
            connect(src,'onblur', obj, "updateBox");
        };
        var connectFunc = partial(temp,this);
        var signals = map(connectFunc,inputs);
        return signals;
    },
    updateBox: function(evt) {
        //map input fields to preview box
        var src = evt.src().id;
        var tgt = src.replace(this.prefixStr,'');
        if ( findValue(this.preserveHTML,src) > -1 ) {
            //preserve line breaks
            var strHTML = $(src).value;
            var test = strHTML.split('\n');
            strHTML = test.join('<br />');
            $(tgt).innerHTML = strHTML;
        } else {
            $(tgt).innerHTML = $(src).value;            
        }
    },
    getCategorySkinImage:function(skinKey) {
		switch (skinKey) {
		    case 'gardening':
		        html = '<img src="/static/imgs/categoryListing/homeGarden.png" alt="" width="122" height="99" style="position:absolute;margin-left:191px;margin-top:-31px;" />';
		        break;
		    case 'restaurants':
		        html = '<img src="/static/imgs/categoryListing/restaurants3.png" alt="" width="100" height="76" style="position:absolute;margin-left:212px;margin-top:-14px;" />';
		        break;
		    case 'restaurants2':
		        html = '<img src="/static/imgs/categoryListing/restaurants2.png" alt="" width="150" height="69" style="position:absolute;margin-left:190px;margin-top:-4px;" />';
		        break;
		    case 'profServices':
                html = '<img src="/static/imgs/categoryListing/profServices2.png" alt="" width="115" height="85" style="position:absolute;margin-left:212px;margin-top:-10px;" />';
		        break;
		    default:
		        html = '';
		        break;
        }
        return html;
    },
    switchStyleOnChange:function (evt) {
		var newid = evt.src().options[evt.src().selectedIndex].className;
		//change style be replacing original tgtId with selected value
		$(this.tgtId).id = newid;
		var normalOnly = getElementsByTagAndClassName('div','normalTemplatesOnly');
		var catOnly = getElementsByTagAndClassName('div','catTemplatesOnly');
		if (newid == 'categoryDefault') {
			removeElementClass(newid, 'categoryImg');
			map(showElement, normalOnly);
			map(hideElement, catOnly);
            $('forImg').innerHTML = '';
		} else {
			addElementClass(newid, 'categoryImg');
			map(hideElement , normalOnly);
			map(showElement , catOnly);
		    var selvalid = $(evt.src().id);
		    var skinKey = selvalid.options[selvalid.selectedIndex].value;
            html = new mc.app.SIGNUP.regWizard().init().getCategorySkinImage(skinKey);
            $('forImg').innerHTML = html;
		}
		this.tgtId = newid;
		return        
    },
    afterFileChoose:function(evt) {
        log(evt.src().value);
        tgt = $(evt.src().id);
        if ($(tgt.id+'chose')) {return true;}
        appendChildNodes( tgt.parentNode, SPAN({"id":tgt.id+'chose'},'File Added') );
    }    
}
/* END reg wizard 
*****************************/


/*
*** EXAMPLE USAGE ***
<div onclick="importer.popup('replaceme')">Click me</div>
<textarea id="replaceme" rows="5" cols="40"></textarea>
*/

function mcImporterWindow(url) {
    this._url = url;
    return this;
}
mcImporterWindow.prototype = {
	_cb: null,
	_url:null,
	_addresslist: {},
	_updatefield: null,
	_cb_adresses: function () {
		var namestr = [];
		for (x in importer._addresslist) {
			namestr.push('"'+ importer._addresslist[x] + '" <' + x + '>');
		}
		$(importer._updatefield).value += namestr.join(',');
	},

	popup: function (updatefield) {
		var w = 460;
		var h = 430;
		var url = this._url;
		var winopts = "toolbar=no,location=no,directories=no,status=yes,";
		winopts = winopts + "menubar=no,scrollbars=yes,resizable=yes,";
		winopts = winopts + "width=" + w + ",height=" + h;
		popupWin = window.open(url,"ContactImporter",winopts);
		this._updatefield = updatefield;
		popupWin.focus();
		return false;
	}
}

/* LocalPlus city search 
*****************************/
	function mcLocalPlusSearch(url, args) {
	this._target = args['target'];
	this._val = getElement(args['val']).value;
	if (this._val) {
		var d = loadJSONDoc(url,{lpsearch:this._val});
		cb = bind(function (result) {
							var createOptions = function(opt) {return OPTION({'value':opt.id}, opt.city);};
							var foo = map(createOptions, result);
							replaceChildNodes(this._target, foo);
							return 0;}, this);
		d.addCallback(cb);
	}
	return 0;
}
/* END LocalPlus city search 
*****************************/

/* invitation/connection highlighter 
*****************************/
mc.invite_highlighter = {
	init: function (elt) {
		log('loaded');
		var elts = getElementsByTagAndClassName('input','checkbox');
		map(mc.invite_highlighter.highlight, elts);
		var elts = getElementsByTagAndClassName('div','invitePerson');
		map(mc.invite_highlighter.highlight, elts);
	},
	obj_highlight: [],
	obj_stay: [],
	checkbox: function (evt) {
		x = getFirstParentByTagAndClassName(evt.src(),'div','invitePerson');
		if (evt.src().checked) {
			addElementClass(x,'sticky');
		} else {
			removeElementClass(x,'sticky');
		}
	},
	yes: function (x) { swapElementClass(x.src(),'nohighlight','highlight'); },
	no:  function (x) { swapElementClass(x.src(),'highlight','nohighlight'); },
	sticky: function(evt) {
		elt = getFirstElementByTagAndClassName('input', 'checkbox', evt.src());
		if (hasElementClass(evt.src(), 'sticky')) {
			removeElementClass(evt.src(),'sticky');
			elt.checked = false;
		} else {
			addElementClass(evt.src(),'sticky');
			elt.checked = true;
		}
	},
	highlight: function (elt) {
		if (elt.tagName == 'INPUT') {
			//mc.invite_highlighter.obj_highlight.push( connect(elt, 'onchange', mc.invite_highlighter, 'checkbox') );
		} else if (elt.tagName == 'DIV') {
			mc.invite_highlighter.obj_highlight.push( connect(elt, 'onmouseenter', mc.invite_highlighter, 'yes') );
			mc.invite_highlighter.obj_highlight.push( connect(elt, 'onmouseleave', mc.invite_highlighter, 'no') );
			mc.invite_highlighter.obj_highlight.push( connect(elt, 'onclick', mc.invite_highlighter, 'sticky') );
		}
	},
	invite: function(elt) {
		if (window.location.protocol=="https:") {
			_url = "/secure/merchant/invite/importMembersSubmit";
		} else {
			_url = "/merchant/invite/importMembersSubmit";
		}
		try {
			var p = getFirstParentByTagAndClassName(elt.src(), 'div', 'invitePerson');
			hiddenInput = getFirstElementByTagAndClassName('input', 'hidden', p);
			sourceInput = getFirstElementByTagAndClassName('input', 'source', p);
			buttonInput = getFirstElementByTagAndClassName('input', 'buttonGreen', p);
			buttonInput.onclick = null;

			var qs  = queryString({'cid':hiddenInput.value, 'btnid':buttonInput.id, 'src':sourceInput.value});
			log(qs);
			var d = doXHR(_url, { method:'POST', 
								headers: {"Content-Type":"application/x-www-form-urlencoded"},
								sendContent:qs});
			d.addCallback(function(result) {
				x = evalJSON(result.responseText);
				button = getElement(x.button);
				button.value='Sent';
				removeElementClass(x.button, 'buttonGreen');
				try {
					_gaq.push(['dash._trackEvent', 'invite', 'addressbook', 'members', 'send']);
				} catch (err) {
					log('mc.invite_highlighter.invite', err);
				}
			});
		} catch (err) {
			log('invite error', err);
		}
	},
	initbuttons: function (elt) {
		var elts = getElementsByTagAndClassName('div','invitePerson');
		map(mc.invite_highlighter.highlightbutton, elts);
	},
	highlightbutton: function (elt) {
			mc.invite_highlighter.obj_highlight.push( connect(elt, 'onmouseenter', mc.invite_highlighter, 'yes') );
			mc.invite_highlighter.obj_highlight.push( connect(elt, 'onmouseleave', mc.invite_highlighter, 'no') );
			mc.invite_highlighter.obj_highlight.push( connect(getFirstElementByTagAndClassName('input', 'buttonGreen', elt), 'onclick', mc.invite_highlighter, 'invite') );
	}};
/* END invitation/connection highlighter 
*****************************/

/* imported invitation/connection sender 
*****************************/
mc.import_inviter = {
	_url:"/secure/merchant/invite/importNonmembersSubmit", 
	email:function(button, id) {
		var em = getElement(id).value;
		var qs  = queryString({'button':button, 'email':em});
		log(qs);
		var d = doXHR(mc.import_inviter._url, { method:'POST', 
							headers: {"Content-Type":"application/x-www-form-urlencoded"},
							sendContent:qs});
		getElement(button).value = 'Sending';
		d.addCallback(mc.import_inviter._cb);
		try {
			_gaq.push(['dash._trackEvent', 'invite', 'addressbook', 'nonmembers', 'send']);
		} catch (err) {
			log('mc.import_inviter.email', err);
		}
	},
	emailAll:function() {
		btns = getElementsByTagAndClassName('input','btnall');
		vals = getElementsByTagAndClassName('input','invall');
		map(function(b) {b.value='Sending';}, btns);
		emaillist = map(itemgetter("value"), vals);
		
		var qs  = queryString({'emailall':emaillist});
		var d = doXHR(mc.import_inviter._url, { method:'POST', 
							headers: {"Content-Type":"application/x-www-form-urlencoded"},
							sendContent:qs});
		d.addCallback(mc.import_inviter._cb_all);
	},
	_cb:function(result) {
		x = evalJSON(result.responseText);
		button = getElement(x.button);
		button.value='Sent';
		button.onclick = '';
		removeElementClass(x.button, 'buttonGreen');
	},
	_cb_all:function(result) {
		btns = getElementsByTagAndClassName('input','btnall');
		map(function (button) {
				button.value = 'Sent';
				button.onclick = '';
				removeElementClass(button, 'buttonGreen');
				invall = $('inviteall');
				invall.onclick = '';
				removeElementClass(invall, 'buttonGreen');
			}, btns); 
	}
};
/* END invitation/connection highlighter 
*****************************/

mc.connections = {
	action_url:'/merchant/invite/actionAjax',
	accept:function (id) {
		var qs = queryString( {'id':id,'func':'accept'});
		this._execute(qs);
	},
	ignore:function (id) {
		var qs = queryString( {'id':id,'func':'ignore'});
		this._execute(qs);
	},
	_execute:function (qs) {
		var d = doXHR(this.action_url, {
				method:'POST',
				sendContent:qs,
				headers: {"Content-Type":"application/x-www-form-urlencoded"}
				});
		d.addCallback(this._success_cb);
		d.addErrback(this._error_cb);
	},
	_error_cb:function (data) {
		log('_error_cb')
	},
	_success_cb:function (data) {
		data = evalJSON(data.responseText);
		log('_success_cb looks good', data);
		inviteId = data['id'];
		if (data['func'] == 'accept') {
			txt="Accepted";
		} else if (data['func'] == 'ignore') {
			txt="Ignored";
		}
		getElement('row_' + inviteId).innerHTML = txt;
	}
}

/* status api */
 
mc.status={
    now:null,
	save_url:'/merchant/status/save',
	save_comment_url:'/merchant/status/save_comment',
	delete_comment_url:'/merchant/status/delete_comment',	
	JSON:null,
	options_open_timeout_id:null,
	view_single_status:null,
    single_status_dom_id:null,
    initialized:false,
    loader:'<a title="Updating..."><img src="/static/imgs/loader.gif" alt="Updating..." style="width:16px; height:16px" /></a>',
    status_update:null,
    default_msg:"",
	init:function(date ){
        this.JSON = YAHOO.lang.JSON;
        
        // initialize the current date w/ server time
        this.now=this.parse_date(date);

        //initialize all the dates value with 'ago'
        this.format_all_dates()


        if (this.view_single_status) {
            this.show_comments(this.single_status_dom_id);
        }else{
            // show last commet
            this.show_last();
            
            this.status_update = $('status_update');
            this.status_update.style.fontWeight='normal';
            this.status_update.style.height='14px'
            this.status_update.value = this.default_msg;
            //$('status_options').style.visibility='hidden';
            
            connect('status_save', 'onclick', function(){
             mc.status.save();
            })
        
            connect('status_update', 'onclick', function(){
             mc.status.show_options();
            })
            connect('status_update', 'onblur', function(){
                mc.status.options_open_timeout_id=window.setTimeout('mc.status.hide_options()', '300');
            })
            connect('status_update', 'onkeydown', function(e){
                mc.status.hide_options();
                var evt = e || window.event;
                if (evt._event.keyCode==13) {
                    mc.status.save();
                } // save if enter was pressed
        
            })
        
            var link; var links = getElementsByTagAndClassName('a', 'status_option');
            for(var i=0;i<links.length; i++){
                    link = links[i];
                    link.href="#status"
                    connect(link, 'onclick', function() {
                     var el = $('status_update');
                     el.value = this.innerHTML.replace('...',' ');
                     el.focus();
                     mc.status.hide_options();
                     textLimit(el, 140, {'counterID':'status_update_counter'})
                 })
            }
        }
        this.initialized = true;

	},
	init_network_activity:function(date){
	    
        this.JSON = YAHOO.lang.JSON;

        // initialize the current date w/ server time
        this.now=this.parse_date(date);

        //initialize all the dates value with 'ago'
	    if (!this.initialized) {
            this.format_all_dates();
        }

        
        this.initialized = true;        
	},
	
	format_all_dates:function(){
		var date; var dates = getElementsByTagAndClassName('span', 'time_lapse');
		for(var i=0;i<dates.length; i++){
            date = dates[i];
            this.format_date(date);
		}
	},
	
	format_date:function(date){
        date.innerHTML = this.parse_date(date.innerHTML.trim()).getDiffFormat(this.now);
	},
	parse_date:function(date){
        var parts, dt, tm;
        parts = date.split(' ')
        dt = parts[0].split('-')
        tm = parts[1].split(':')
        return new Date(dt[0], parseInt(dt[1], 10) - 1, dt[2], tm[0], tm[1], tm[2]);
	},
	
	show_last:function(){
	    if ($('status_last').innerHTML.trim() != '') {
	        $('status_last_wrap').style.display = 'inline';
	        $('status_clear').style.display = 'inline';
	    }
	    
	},
	hide_last:function(){
        $('status_last_wrap').style.display = 'none';
        $('status_clear').style.display = 'none';
	},

	show_options:function(){
	    if (this.status_update.value===this.default_msg){
	        this.status_update.value='';
	    }
	    this.options_open = true;
		$('status_options').style.visibility='visible';
	},
	hide_options:function(){
        this.options_open = false;
		$('status_options').style.visibility='hidden';
	},
	clear:function(){
		//not sure if this should delete the current status or the update field? $('status_update').value
	},
	show_comments:function(id){
	    var display = $(id + '_comments').style.display
	    if (display=='none'){
	        blindDown(id + '_comments',{duration:0.5});
	    }
	    mc.status.show_comment_form(id)
	},
	
	show_comment_form:function(id){
        var display = $(id + '_comment_form').style.display
	    if (display=='none') {
		    blindDown(id + '_comment_form',{duration:0.5});
		}
	},
    hide_comment_form:function(id) {
        $(id + '_comment').value = '';
		blindUp(id + '_comment_form',{duration:0.5});        
    },

	save:function(){
        // turn back on save btn
        $('status_save').disabled = true;
	    var el = $('status_update');
	    var body = el.value;
	    if (body == ''){
	        alert('To post an update, please enter a status message.')
	        $('status_save').disabled = false;
	        return
	    }
	    var qs = queryString( {'body':body.scrub(), 'bust':Math.random()});
		var d = doXHR(this.save_url, {
		         method:'POST',
	    sendContent:qs,
	    headers: {"Content-Type":"application/x-www-form-urlencoded"}
		});
		d.addCallback(this.save_cb);
		d.addErrback(this.save_cb_error);
		el.value = 'Updating...'; // clear status field
	},
	save_cb:function(result){
	    // debugger
	    var r = YAHOO.lang.JSON.parse(result.responseText)
        var pre = $('preinsert');
        pre.innerHTML = r.data;
        var parent = $('newsFiltered');
        // parent.innerHTML = '';
        var _status = $(r.dom_id)
        pre.removeChild(_status)
        _status.style.display='none'
        if (parent.childNodes.length) {
            YAHOO.util.Dom.insertBefore(_status, parent.childNodes[0])
        } else {
            parent.appendChild(_status)
        }
        blindDown(_status.id,{duration:0.5});
        //format the date string
        var last_created = $(r.dom_id + "_created");
        mc.status.now = mc.status.parse_date(r.now);
        // status.format_all_dates();
        mc.status.format_date(last_created);
        
        // update last status
        $('status_last').innerHTML = r.body + ' <span class="time_lapse">' + last_created.innerHTML + '</span>';
        mc.status.show_last();
        
        // turn back on save btn
        $('status_save').disabled = false;
        mc.status.status_update.value = mc.status.default_msg;
        $('status_update_counter').innerHTML = '140';
	},
	save_cb_error:function(result){
        $('status_save').disabled = false;
        log('save_cb_error');
	},

	save_comment:function(id){
	    var status_id = id.split('_')[1];
	    var body = $(id.replace('_save','')).value;
	    var qs = queryString( {'status_id':status_id, 'body':body.scrub(), 'bust':Math.random()});
		var d = doXHR(this.save_comment_url, {
		         method:'POST',
	             sendContent:qs,
	             headers: {"Content-Type":"application/x-www-form-urlencoded"}
		});
		d.addCallback(this.save_comment_cb);
		d.addErrback(this.save_comment_cb_error); 
	},
	save_comment_cb:function(result){
        var r = YAHOO.lang.JSON.parse(result.responseText)
        var pre = $('preinsert');
        pre.innerHTML = r.data;
        
        var parent = $(r.status_dom_id + '_comments');
        var comment = $(r.status_dom_id + '_' + r.comment_dom_id);
        pre.removeChild(comment)
        if (parent.childNodes.length) {
            YAHOO.util.Dom.insertBefore(comment, parent.childNodes[parent.childNodes.length-1])
        } else {
            parent.appendChild(comment)
        }
        //format the date string
        mc.status.now = mc.status.parse_date(r.now);
        mc.status.format_date($(r.status_dom_id + '_' + r.comment_dom_id + "_created"))
        // status.format_all_dates();
        
        // hide comment box
        mc.status.hide_comment_form(r.status_dom_id)
	},
	save_comment_cb_error:function(result){
	    alert('save_comment_cb_error')
	},

	delete_comment:function(comment_id){
	    var qs = queryString( {'comment_id':comment_id, 'bust':Math.random()});
		var d = doXHR(this.delete_comment_url, {
		         method:'POST',
	    sendContent:qs,
	    headers: {"Content-Type":"application/x-www-form-urlencoded"}
		});
		d.addCallback(this.delete_comment_cb);
		d.addErrback(this.delete_comment_cb_error); 
	},
	delete_comment_cb:function(result){
        var r = YAHOO.lang.JSON.parse(result.responseText)
        var comment = $(r.status_dom_id + '_' + r.comment_dom_id);
        comment.innerHTML = r.data;
	},
	delete_comment_cb_error:function(result){
	    alert('delete_comment_cb_error')
	},
	end:function(){}
}

// posts the moderator only form for topics
function update_forum_moderator_only(el){
    $('moderator_only_post_id').value = el.id.split('-')[0]
    $('moderator_only_value').value = (el.checked) ? 'true' : ''
    $('moderator_only_form').submit()
}
