var deleteChannel = function(cid, url, message, divId, fcn) {
	message = message || "Are you sure you want to delete this Slide Show?";
	if(confirm(message)) {
		asyncAction('channelajax', { xaction : 'removechannel',
										 cid : cid },
					function (theResponse) {
						if (theResponse.substring(0,4) == "PASS") {
							if (divId) {
								channelDiv = $(divId);
								chanParent = channelDiv.parentNode;
								chanParent.removeChild(channelDiv);
							} else if (url) {
								window.location = url;
							} else if (fcn) {							 
								fcn();
							} else { 
								doReload();
							}
						} else {
							alert(theResponse);
						}
					});
	}
	return false;
}

var castVote = function(iid) {
	this.iid = iid;
	asyncAction('channelajax',
		{'action': 'castvote', 
		 'iid' : iid } ,
			function(theResponse) {
				var tokens = theResponse.split(' ')
				if (tokens[0] == 'PASS') {
					var voteCount = $('vote_cnt' + this.iid);
					clearChildren(voteCount);
					createText(voteCount, tokens[1]);
				} else {
					alert(theResponse);
				}
			});
    return false;
};


var saveToChannel = function(cid) {
	var iid = $('savetoList').getAttribute('x:iid');
	//alert('cid = ' + cid + ' iid = ' + iid);
	asyncAction('channelajax',
				{'action': 'copyitem', 
				 'iid' : iid,
				 'cid' : cid } ,
			function(theResponse) {
				var tokens = theResponse.split(' ')
				if (tokens[0] == 'PASS') {
					dismissSaveList();
				} else {
					alert(theResponse);
				}
			});
    return false;
};

var dismissSaveList = function() {
	$('savetoList').style.display = 'none';
}


var submitFriendInvite = function(addresses, message, id, location, successFunction) {
	dismissEditPopup();
	asyncAction('userajax',
	{'action': 'invitefriend', 
		 'addresses' : addresses ,
		 'message' : message ,
		 'user_id' : id} ,
				function(theResponse){
					if (theResponse == 'PASS') {
						ShowUpdate(location, -80, -10, "Sent");
						if (successFunction) successFunction();
					}
					else if (theResponse.substring(0,12) == 'FAIL: Unauth') {
						window.location = '/signin';
					} else if (theResponse.substring(0,11) == 'FAIL:FORMAT') {
						alert(badAddressMessage);	
					} else {
						alert(theResponse);
					}
				});
    return false;
};

var submitGroupInvite = function(addresses, message, frm) {
	elemlocation = GetElementPosition(frm);
	alert(addresses + '\n' + message + '\n' + elemlocation);
	asyncAction('userajax',
	{'action': 'invitefriend', 
		 'addresses' : addresses ,
		 'message' : message } ,
				function(theResponse){
					if (theResponse == 'PASS') {
						ShowUpdate(location, -80, -10, "Sent");
					}
					else if (theResponse.substring(0,12) == 'FAIL: Unauth') {
						window.location = '/signin';
					} else if (theResponse.substring(0,11) == 'FAIL:FORMAT') {
						alert(badAddressMessage);	
					} else {
						alert(theResponse);
					}
				});
};


var submitChannelInvitation = function(addresses, message, id, location) {

	if(addresses == '' || addresses == 'Enter email to share with friends') {
		 alert('Please enter at least one address or Slide ID')
		 return false;
	}
	
	dismissEditPopup();
	asyncAction('channelajax',
	{'action': 'invitefriend', 
		 'cid' : id,
		 'addresses' : addresses ,
		 'message' : message } ,
				function(theResponse){
					if (theResponse == 'PASS') {
						ShowUpdate(location, -80, -10, "Sent");
					}
					else if (theResponse.substring(0,12) == 'FAIL: Unauth') {
						window.location = '/signin';
					} else if (theResponse.substring(0,11) == 'FAIL:FORMAT') {
						alert(badAddressMessage);	
					} else {
						alert(theResponse);
					}
				});
    return false;
};
var badAddressMessage = "Address must be in the format name@address.com";
var unsubscribeChannelFromGroupMessage = 'Are you sure you want to remove this Slide Show from this group?';

var unsubscribeChannelMessage = 'Are you sure you want to remove this Slide Show?';

var unsubscribeChannel = function(cid, user_id, msg, fnc) {
	if(confirm(msg || unsubscribeChannelFromGroupMessage)) {
		asyncAction('channelajax',
			{ action :  'unsub',
			  cid : cid },
					function (ans) {
						fnc ? fnc() : window.location.reload();
					});
	}
	return false;
};



var asyncSubscribe = function(element, pcid, issub, channel_name) {
	asyncAction('channelajax',
		{ action : (issub ? 'sub' : 'unsub'),
		  pcid : pcid },
				function () {
					setToggleButtons("subscribeButton", pcid, issub);
					var msg = (issub ?
							   (" You added "  + channel_name + " to your Screensaver.") : 
							   (" You removed " + channel_name + " from your Screensaver."));
					ShowUpdate(element, 0, 0, msg);
				} );
	return false
}

function setToggleButtons(buttonClass, cid, setting) {
	var sbuttons = getElementsByTagAndClassName('*', buttonClass + cid)
	for (var i = 0; i < sbuttons.length; i++) {
		setDisplayForElement(setting ? "none" : "", sbuttons[i]);
	}
	
	var ubuttons = getElementsByTagAndClassName('*', 'un' + buttonClass + cid)
	for (var i = 0; i < sbuttons.length; i++) {
			setDisplayForElement(setting ? "" : "none", ubuttons[i]);
	}


}

var publicizeSubscription = function(cid, publicf, obj) {
	asyncAction('channelajax',
		{'action': 'publicizesub', 
		 cid : cid,
		 publicsub : publicf });
	ShowUpdate(obj.id, 30, -20, 'Updating...')
	return false;
};

var setChannelUnsafe = function(cid, isUnsafe, obj) {
	asyncAction('channelajax',
		{'xaction': 'adminprops',
		 cid : cid,
		 safe : (isUnsafe ? "X" : " ")  });
	ShowUpdate(obj, 30, -20, 'Updating...')
	return false;
};


var alterGroup = function(user_id, gid, display_name, description, join_privacy, view_privacy, 
						  slideid) {
    var values = { display_name: display_name,
				   description:  description,
				   join_privacy: join_privacy,
				   view_privacy: view_privacy,
				   category: 'G' };

	if (gid == 0) values['nickname'] = slideid;
	
	postURL("/user/" + gid, values,
			function (ans) {
				if (ans.substring(1,12) == 'FAIL: nickn') {
					alert('Your Group Slide ID is already in use, please try another ID');
					return false;
				}

				if (ans.substring(1,12) == 'FAIL: email') {
					alert('Your Group Slide ID is already in use, please try another nickname');
					return false;
				}

				if (ans.substring(1,5) == 'FAIL'){
					alert('Sorry, unexpected error');
					return false;
				}
	
				group = evalJSON(ans);
				if(gid == 0) {
				postURL(	"/user/" + user_id + "/groups", 
						{ group_id: group[0].id }, 
						function (ans){
							window.location = group[0].profile_url
						});
				} else {
					window.location = group[0].profile_url
				}
			});	
	return false;
};

var makeNicknameFromEmail = function(em) {
   var nick = em.substring(0, em.indexOf("@"));
   return nick.replace("+", "-");
};

var makeNicknameFromName = function(nm) {
	nm = nm.replace(/_/g, ".").replace(/\W+/g, "-").toLowerCase();
	nm = nm.replace(/^[-0-9]+/, '').replace(/-+$/,"");
	return nm.substring(0,32);
};


var saveChannel =  function(ownerId, channelName, ebay, ebay_search, rss, publish) {
	postURL("/channel", {
		owner_user_id:ownerId, 
		name:channelName,
		ebay:ebay,
		ebay_search:ebay_search,
		rss: rss,
		publish: publish || 'n'},
			function (result) {
				result = evalJSON(result);
				window.location = result[0].url;
			}
		);
	return false;
}

var displayError = function(msg) {
	$('loading').style.display = "none";
	$('loadingtext').src = "/images/blank.gif";
	$('ebayForm').style.display = "block";
	
	var msgParts = msg.split('\"');
	
	if (msgParts.pop() == ' was not found in our database.') {					
		msg = 'The user "' + msgParts.pop() + '" is not a valid eBay User ID';
	}
	
	clearChildren('errormsg');
	createText($('errormsg'), "ERROR: " + msg);
	$('errorarea').style.display = "block";
}

var createChannel =  function(ownerId, channelName, ebay, ebay_search, rss, publish) {

	if (ebay != "" || ebay_search != "") {
		$('errorarea').style.display = "none";
		$('loadingtext').src = "/images/load_text.gif";
		$('loading').style.display = "block";
		$('ebayForm').style.display = "none";
	}

	postURL("/channel", {
		owner_user_id:ownerId, 
		name:channelName,
		ebay:ebay,
		ebay_search:ebay_search,
		rss: rss,
		publish: publish || 'n'},
			function (result) {
				tokens = eval(result)[0];
				var rc = tokens['rc'];
				if (rc == 0) {
					document.location = tokens['url'];
				} else if (rc == 1) {
					displayError(tokens['msg']);
					$('seller_id').focus();
				} else {
					result = evalJSON(result);
					window.location = result[0].url;
				}
			}
		);
	return false;
}

var setKaradaCookie = function(key, value, days){
	if (days){
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}else {
		//session only
		var expires = "";
	}	
	var karada = readKaradaCookie();
	var kMap = {};
	if (!karada) {
		kMap[key] = escape(value);
	}else{
		kMap = getKaradaMap(karada);	
		kMap[key] = escape(value);
	}
	writeKaradaCookie(mapToStr(kMap), expires);
	return true;
}

var clearKaradaCookieKey = function(key){
	var karada = readKaradaCookie();
	if (!karada) return true;
	var kMap = getKaradaMap(karada);
	
	if (!(kMap[key])) return true;
	delete kMap[key];
	writeKaradaCookie(mapToStr(kMap))
	return true;
};

var clearKaradaCookie = function(){
	writeKaradaCookie('', '');
	return true;
};

var getKaradaCookie = function(){
	return readKaradaCookie();
}

var getKaradaCookieValue = function(key){

	var karada = readKaradaCookie();
	var kMap = getKaradaMap(karada);
	if (kMap) {
		return kMap[key];
	} else {
		return "";
	}
};

//karada util methods
var readKaradaCookie = function() {
	var cname = 'karada.' + base_base_domain;	
	var cstart = document.cookie.indexOf(cname + '=');
	if (cstart == -1) return null;
	cstart = cstart + cname.length + 1;
	var cend = document.cookie.indexOf(';', cstart);
	if (cend == -1) cend = document.cookie.length;

	return unescape(document.cookie.substring(cstart, cend));
};

var writeKaradaCookie = function(karada, expires){
	document.cookie = 'karada.' + base_base_domain + '=' + karada + "; expires=" + expires + "; path=/" + "; domain=." + base_base_domain;
	return true
};

var getKaradaMap = function(karada){
	if (!(karada)) return null;
	var kMap = {};
	var kparts = karada.split('|');
	for (var i = 0; i < kparts.length; ++i){
		var s = kparts[i].split(':')
		kMap[s[0]] = s[1];
	} 
	return kMap;
};

var mapToStr = function(h){
	var s = "";
	for (var i in h){
		s = s + i + ":" + h[i] + "|";
	}
	s = s.slice(0, -1);
	return s;
};

