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;
    	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);
    	}
    	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 
*****************************/
