/*
 * TBD: check on slashes in urls.  they require '/' as pd2_url_localpath
 */

// TBD: might need to make this an iframe
//
var sl_container_count = 0;
function view_asset(base, assetNum, targetID, forcePreview, fullsize)
{
	if(window.XMLHttpRequest) {
		xmlHttp = new XMLHttpRequest();
	} else {
		xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
	}

	var url = pd2_url_localpath + 'a?b=' + base + '&a=' + assetNum + '&m=' + targetID;

	if ((arguments.length > 3) && forcePreview) {
		url += '&p=1';
	}

	if ((arguments.length > 4) && fullsize) {
		url += '&fz=1';
	}

	// Synchronous, so pass "false" here.
	//
	xmlHttp.open("GET", url, false);

	xmlHttp.setRequestHeader("Referer", document.location);

	xmlHttp.send(null);
	
	var xmldom = xmlHttp.responseXML;
	var payloadElem = xmldom.getElementsByTagName('payload').item(0);
    
	// Now we have to pull the content out of there and stuff it in
	// to a new div.

	var rrr = document.getElementById(targetID);
	rrr.innerHTML = RicoUtil.getContentAsString(payloadElem);
}

// if fullsize is -1, this is a renewal
function BuyPD2Asset(base, assetNum, targetId, distributor, fullsize, couponID)
{
	if(window.XMLHttpRequest) {
		xmlHttp = new XMLHttpRequest();
	} else {
		xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
	}

	var url = pd2_url_localpath + 'try_buy';

	var infoString = 'b=' + base + '&a=' + assetNum + '&d=' + distributor;

	if (couponID) {
		infoString += '&c=' + couponID;
	}

	infoString += "&" + ddxParam();

	// Synchronous, so pass "false" here.
	//
	xmlHttp.open("POST", url, false);

	xmlHttp.setRequestHeader("Referer", document.location);
	xmlHttp.setRequestHeader("Content-Type", 
		"application/x-www-form-urlencoded; charset=UTF-8");

	xmlHttp.send(infoString);
	
	var xmldom = xmlHttp.responseXML;

	var formResult = xmldom.getElementsByTagName('form_result').item(0);
	
	var dialogText = formResult.getAttribute('message');		
	if (formResult.getAttribute('status') == 0) {
		if (confirm(dialogText)) {
			// do it.

			var bContextElem = xmldom.getElementsByTagName('buy_context').item(0);
			
			var bContext = RicoUtil.getContentAsString(bContextElem);

			if(window.XMLHttpRequest) {
				xmlHttp = new XMLHttpRequest();
			} else {
				xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
			}

			url = pd2_url_localpath + 'final_buy';

			infoString = 'b=' + base + '&a=' + assetNum + '&bc=' + bContext;

			xmlHttp.open("POST", url, false);
			xmlHttp.setRequestHeader("Referer", document.location);
			xmlHttp.setRequestHeader("Content-Type", 
				"application/x-www-form-urlencoded; charset=UTF-8");

			xmlHttp.send(infoString);
	
			xmldom = xmlHttp.responseXML;

			formResult = xmldom.getElementsByTagName('form_result').item(0);
			
			if (formResult.getAttribute('status') == 0) {

				// show the remixed asset if it has been created
				//
				var bElem = xmldom.getElementsByTagName('base');
				if (bElem && bElem.length) {
					var tBase = RicoUtil.getContentAsString(bElem.item(0));
					if (tBase) base = tBase;
				}
				var aElem = xmldom.getElementsByTagName('asset_num');
				if (aElem && aElem.length) {
					var tAssetNum = RicoUtil.getContentAsString(aElem.item(0));
					if (tAssetNum) assetNum = tAssetNum;
				}

				// redirect if redirect param is set
				//
				var rElem = xmldom.getElementsByTagName('redirect');
				if (fullsize === -1) {
					// if fullsize is -1, this is a renewal so the feedback
					// looks a little different
					//
					var buy_button = document.getElementById(targetId);
					var buy_button_parent = buy_button.parentNode;
					var newelm = document.createElement('span');
					newelm.innerHTML = 'Subscription Renewed!';
					buy_button_parent.appendChild(newelm);
					buy_button_parent.removeChild(buy_button);
					
					// if there is an elm with the expiration date in it
					// fix it up too
					//
					var exp_item = xmldom.getElementsByTagName('expiration_id');
					var exp_id = RicoUtil.getContentAsString(exp_item.item(0));
					var exp_elm = document.getElementById(exp_id);
					if (exp_elm) {
						exp_item = xmldom.getElementsByTagName('expiration_date');
						exp_elm.innerHTML = RicoUtil.getContentAsString(exp_item.item(0));
					}
				} else if (rElem && rElem.length) {
					document.location.href = RicoUtil.getContentAsString(rElem.item(0));
				} else if (!fullsize) {
					view_asset(base, assetNum, targetId, false, fullsize);
				} else {
					// need to refresh page to load owner's circle
					//
					location.reload(true);
				}
			} else {
				alert(formResult.getAttribute('message'));
			}
		} else {
			return;
		}
	} else if (formResult.getAttribute('status') == 1) {
		// check if we should jump to add funds
		//
		if (confirm(dialogText)) {
			var rElem = xmldom.getElementsByTagName('redirect');
            var redir_loc = RicoUtil.getContentAsString(rElem.item(0));
            document.location.href = redir_loc;
		} else {
			return;
		}
	} else {
		alert(dialogText);
	}
}

function ActivateAsset(base, assetNum, active, targetId)
{
	var xmlHttp;

	if(window.XMLHttpRequest) {
		xmlHttp = new XMLHttpRequest();
	} else {
		xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
	}

	url = pd2_url_localpath + 'activate_asset';
	
	var infoString = 'b=' + base + '&a=' + assetNum + '&s=' + active;

	xmlHttp.open("POST", url, false);
	xmlHttp.setRequestHeader("Content-Type", 
		"application/x-www-form-urlencoded; charset=UTF-8");
	xmlHttp.send(infoString);
	
	var xmldom = xmlHttp.responseXML;

	var formResult = xmldom.getElementsByTagName('form_result').item(0);

	if (formResult.getAttribute('status') == 0) {
		var activeEM = document.getElementById(targetId);
		var activeLink = document.getElementById(targetId + "-link");

		if (active) {
			activeLink.onclick = function() {
				return ActivateAsset(base, assetNum, 0, targetId);
			}
			activeEM.innerHTML = 'active';
		} else {
			activeLink.onclick = function() {
				return ActivateAsset(base, assetNum, 1, targetId);
			}
			activeEM.innerHTML = 'inactive';
		}
	} else {
		alert(formResult.getAttribute('message'));
	}

	return false;
}


function ExpireCoupon(base, assetNum, code)
{
	var xmlHttp;

	dialogText = "Are you sure you want to expire this coupon? Once you do, no one new will be able to use it.";

	if (!confirm(dialogText)) {
		return false;
	}

	if(window.XMLHttpRequest) {
		xmlHttp = new XMLHttpRequest();
	} else {
		xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
	}

	url = pd2_url_localpath + 'expire_coupon';
	
	var infoString = 'b=' + base + '&a=' + assetNum + '&c=' + code

	xmlHttp.open("POST", url, false);
	xmlHttp.setRequestHeader("Content-Type", 
		"application/x-www-form-urlencoded; charset=UTF-8");
	xmlHttp.send(infoString);
	
	var xmldom = xmlHttp.responseXML;

	var formResult = xmldom.getElementsByTagName('form_result').item(0);

	if (formResult.getAttribute('status') == 0) {
		var targetID = base + '-' + assetNum + '-' + code + '-exp_';
		var datePane = document.getElementById(targetID + 'date');
		var buttonPane = document.getElementById(targetID + 'but');

		datePane.innerHTML = 'just now';
		buttonPane.disabled = true;

	} else {
		alert(formResult.getAttribute('message'));
	}

	return false;
}


function ResellAsset(base, id, resell, targetId)
{
	var xmlHttp;

	if(window.XMLHttpRequest) {
		xmlHttp = new XMLHttpRequest();
	} else {
		xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
	}

	url = pd2_url_localpath + 'resell_asset';

	var infoString = 'b=' + base + '&a=' + id + '&s=' + resell;

	xmlHttp.open("POST", url, false);
	xmlHttp.setRequestHeader("Content-Type", 
		"application/x-www-form-urlencoded; charset=UTF-8");
	xmlHttp.send(infoString);
	
	var xmldom = xmlHttp.responseXML;

	var formResult = xmldom.getElementsByTagName('form_result').item(0);

	if (formResult.getAttribute('status') == 0) {
		var resellEM = document.getElementById(targetId);
		var resellLink = document.getElementById(targetId + "-link");
		if (resell) {
			resellLink.onclick = function() {
				return ResellAsset(base, id, 0, targetId);
			}
			resellEM.innerHTML = 'active';
		} else {
			resellLink.onclick = function() {
				return ResellAsset(base, id, 1, targetId);
			}
			resellEM.innerHTML = 'inactive';
		}
	} else {
		alert(formResult.getAttribute('message'));
	}
	return false;
}

function ToggleSubscription(base, id, cancel, targetId, hard_cancel)
{
	if (cancel) {
		var dialog = "Are you sure you want to cancel subscription " + 
			"renewal for this fanflow?\n\nIf you are, click 'Ok' and " + 
			"your subscription will expire at the end of its current term.";

		if (!confirm(dialog)) return false;
	}

	var xmlHttp;
	if(window.XMLHttpRequest) {
		xmlHttp = new XMLHttpRequest();
	} else {
		xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
	}
	
	url = pd2_url_localpath + 'toggle_subscription';
	
	var infoString = 'b=' + base + '&a=' + id + '&s=' + cancel;
	
	xmlHttp.open("POST", url, false);
	xmlHttp.setRequestHeader("Content-Type", 
							 "application/x-www-form-urlencoded; charset=UTF-8");
	xmlHttp.send(infoString);
	
	var xmldom = xmlHttp.responseXML;
	
	var formResult = xmldom.getElementsByTagName('form_result').item(0);
	
	if (formResult.getAttribute('status') == 0) {
		var elm = document.getElementById(targetId);
		if (hard_cancel) {
			var elmParent = elm.parentNode;
			var newelm = document.createElement('span');
			newelm.innerHTML = 'Subscription<br/>Cancelled!';
			elmParent.appendChild(newelm);
			elmParent.removeChild(elm);
		} else if (cancel) {
			elm.onclick = function() {
				return ToggleSubscription(base, id, 0, targetId);
			}
			elm.innerHTML = 'resubscribe';
		} else {
			elm.onclick = function() {
				return ToggleSubscription(base, id, 1, targetId);
			}
			elm.innerHTML = 'unsubscribe';
		}
	} else {
		alert(formResult.getAttribute('message'));
	}

	return false;
}

// jquery dependent
function sl_init_preview_comment(form, suffix, base, asset_id, container) {
	if (form) {
		// wire the textarea to expand on a first click
		$('textarea', form).val("Post a Comment");
		$('textarea', form).one('click', function() {
			
			$(this).val("");	
			$(this).css('color', '#333');
			$(this).next().show(); // show the preview button
			$(this).animate({height:150, width:510}, 'fast', function(){
				this.select();
			});	
			$(this).prev().show('fast'); // bbcode
		});

		var form_url = pd2_url_localpath + 'preview_comment?' + ddxParam();
		var options = {
			url: form_url,
			dataType: 'xml',
			beforeSubmit: function(formData, jqForm, options) { 
				// check the comment has some text
				//
				if (!$('.comment_textarea',jqForm).val()) {
					alert('Comments generally contain some text.');
					return false;
				}

				return true; 
			},
			success: function(responseXML, status, jqForm) {
				var formResult = responseXML.getElementsByTagName( 'form_result' ).item(0);
				if (formResult.getAttribute('status') == 0) {
					// post form
					//
					var new_ui = $('payload',responseXML).text();
					var new_elm = $(new_ui);
					$(jqForm).after(new_elm);
					$(jqForm).hide();
					sl_init_post_comment($('form', new_elm), jqForm, suffix, base, asset_id, container);
					
					// cancel button
					//
					$('#preview_cancel', new_elm).bind('click',function(){
						$(new_elm).remove();
						$(jqForm).clearForm();
						$(jqForm).show();
						if (container) {
							$('#' + container).remove();
						}
					});

					// edit button
					//
					$('#preview_edit', new_elm).bind('click',function(){
						$(new_elm).remove();
						$(jqForm).show();
					});
					
				} else {
					error_or_premium_msg(formResult, base, asset_id);
				}
			},
			clearForm: false
		};
		$(form).ajaxForm(options);
	}
}

// jquery dependent
function sl_init_post_comment(form, old_form, suffix, base, asset_id, container) {
	if (form) {
		var form_url = pd2_url_localpath + 'final_comment';
		var options = {
			url: form_url,
			dataType: 'xml',
			success: function(responseXML, status, jqForm) {
				var formResult = responseXML.getElementsByTagName( 'form_result' ).item(0);
				if (formResult.getAttribute('status') == 0) {
					// update UI
					//
					var new_ui = $('payload',responseXML).text();
					if (container) {
						// if container is defined, this is a reply, so insert
						// the comment inline
						//
						$("#" + container).after(new_ui);
					} else {
						var response_id = $('response_id',responseXML).text();
						var response_container = document.getElementById(response_id);
						$(response_container).append(new_ui);
					}

					// init the new comment's handlers
					//
					var new_id = $('new_id',responseXML).text();
					sl_comment_init(document.getElementById(new_id));
					
					// post some fleeting feedback
					//
					var form = document.getElementById('comment_new_' + suffix);
					var feedback_id = 'sl_ajaxcontent_' + (++sl_container_count);
					var feedback = '<span id="'+feedback_id+'" class="ajax_feedback">Comment added</span>';
					$('.write_comment_footer',form).append(feedback);
					setTimeout("$('#"+feedback_id+"').remove()", 5000);

					$(jqForm).remove();
					$(old_form).show();
					$(old_form).clearForm();
					if (container) {
						$('#' + container).remove();
					}
				} else {
					alert(formResult.getAttribute('message'));
					$(jqForm).remove();
					$(old_form).show();
				}
			},
			clearForm: true
		};
		$(form).ajaxForm(options);
	}
}

function sl_comment_init(context){
	$('a.sl_rate_comment',context).bind('click',sl_rate_comment);
	$('a.sl_comment_reply',context).bind('click',sl_comment_reply);

	sl_lame_controls(context);

	// jump to anchor after images loads, possibly an interaction with
	// reflections?
	//
	setTimeout(function() {
		if (window.location.hash) {
			window.location.hash = window.location.hash;
		}
	}, 100);

}

function sl_lame_controls(context) {
	// NOOP on anything but a form
	var form_url = pd2_url_localpath + 'set_profile_record?' + ddxParam();
	var options = {
		url: form_url,
		dataType: 'xml',
		beforeSubmit: function(formData, jqForm, options) { 
			return true; 
		},
		success: function(responseXML, status, jqForm) {
			var formResult = responseXML.getElementsByTagName( 'form_result' ).item(0);
			if (formResult.getAttribute('status') == 0) {
				alert("Preferences saved. Reloading comments with new preferences.");
				if (typeof iStream != 'undefined') {
					$(context).trigger('reload');
				} else {
					location.reload(true);
				}
			} else {
				alert(formResult.getAttribute('message'));
			}
		},
		error: function(res) {
			alert("could not save commenting controls");
		},
		clearForm: false
	};
	$('.controls > form', context).ajaxForm(options);

	// wire lame control expander link
	$('.expander', context).bind('click', function(){
		var ex = this;
		$('.controls', context).slideToggle('slow', function() {
			if ($(this).is(':visible')) {
				$(ex).html('<em>[hide comment preferences]</em>');
			} else {
				$(ex).html('<em>[show comment preferences]</em>');
			}
		});
		return false;
	});
}

function sl_comment_reply() {

	var url = this.href;
	var queryString = url.replace(/^[^\?]+\??/,'');
	var params = tb_parseQuery( queryString );
	var suffix = params['b'] + '_' + params['a'] + '_' + params['c'];

	if (!document.getElementById('comment_reply_' + suffix)) {
		// add a container
		//
		sl_container_count++;
		var new_name = 'sl_ajaxcontent_' + sl_container_count;
		var indent = (parseInt(params['indent']) + 1);
		if (indent > 8) indent = 8;
		var new_str = '<li class="sl_ajaxcontent indent_'+indent+'" id="' + new_name + '"> </li>';  
		var elm_id = 'comment_' + suffix;
		$(document.getElementById(elm_id)).after(new_str);
	

		// populate the container
		//
		$("#" + new_name).load(url, function(){
			var cancel = document.getElementById('cancel_reply_' + suffix);
			$(cancel, this).bind('click',function(){
				$("#" + new_name).remove();
				return false;
			});
		
			var form = document.getElementById('comment_reply_' + suffix);
			sl_init_preview_comment(form, suffix, params['b'], params['a'], new_name);
		});
	}
	
	return false;
}

function sl_rate_comment() {
	var url = this.href + "&" + ddxParam();
	var xmlHttp = $.ajax({url: url, dataType: "xml", async: false});
	var xmldom = sl_get_xmldom(xmlHttp);
	var formResult = xmldom.getElementsByTagName( 'form_result' ).item(0);

	var url = this.href;
	var queryString = url.replace(/^[^\?]+\??/,'');
	var params = tb_parseQuery( queryString );

	if (formResult.getAttribute('status') == 0) {
		var elm = document.getElementById('comment_rating_'+params['b']+'_'+params['a']+'_'+params['c']);
		if (elm) {
			$(elm).empty();
			var tmp_new = $('payload',xmldom).text();
			$(elm).html(tmp_new);
		}

		var elm2 = document.getElementById('comment_rating_summary_'+params['b']+'_'+params['a']+'_'+params['c']);
		if (elm2) {
			$(elm2).empty();
			var tmp_new2 = $('payload2',xmldom).text();
			$(elm2).html(tmp_new2);
		}

	} else {
		error_or_premium_msg(formResult, params['b'], params['a']);
	}	
	
	return false;
}

function
error_or_premium_msg(formResult, base, assetNum)
{
	var statusCode = formResult.getAttribute('status');
	var msg = formResult.getAttribute('message');

	if (statusCode == -1) {
		alert(msg);
	} else if (statusCode == -2) {
		if (confirm(msg)) {
			var launchURL = pd2_url_localpath + 'pop_pay?b=' + base + '&a=' + 
				assetNum + '&TB_iframe=true&height=600&width=750';
			tb_show(null, launchURL, false);
		}
	}
}

function
rateAsset(base, assetNum, rating)
{
	var xmlHttp;

	if(window.XMLHttpRequest) {
		xmlHttp = new XMLHttpRequest();
	} else {
		xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
	}

	url = pd2_url_localpath + 'rate_asset';

	var infoString = 'b=' + base + '&a=' + assetNum + '&r=' + rating;
	infoString += "&" + ddxParam();

	xmlHttp.open("POST", url, false);
	xmlHttp.setRequestHeader("Content-Type", 
		"application/x-www-form-urlencoded; charset=UTF-8");
	xmlHttp.send(infoString);

	var xmldom = sl_get_xmldom(xmlHttp);

	var formResult = xmldom.getElementsByTagName( 'form_result' ).item(0);

	if (formResult.getAttribute('status') == 0) {
		var payloadElem = xmldom.getElementsByTagName('payload').item(0);
		var rating_id = 'asset_rating_control_' + base + '_' + assetNum;
		var ratingsPane = document.getElementById(rating_id);

		var new_rp = $(RicoUtil.getContentAsString(payloadElem));	
		$(ratingsPane).after(new_rp);
		$(ratingsPane).remove();	

		var summaryElem = xmldom.getElementsByTagName('summary').item(0);
		var summary_id = 'asset_rating_summary_' + base + '_' + assetNum;
		var summaryPane = document.getElementById(summary_id);
		if (summaryPane) {
			$(summaryPane).after(RicoUtil.getContentAsString(summaryElem));	
			$(summaryPane).remove();
		}
	} else {
		error_or_premium_msg(formResult, base, assetNum);
	}	
	return false;
}

function addFileBrowser() {
	var elm = document.getElementById('file-browse-container');
	elm.innerHTML = "<input name='file' id='file' type='file' value='' />";
}

// after document.domain has been set some browsers deny 
// access to responseXML, but not responseText, hence...
//
function sl_get_xmldom(xmlHttp){
	var xmldom;
	try {
		xmldom = xmlHttp.responseXML;
		var formResult = xmldom.getElementsByTagName('pd2xml');
	} catch(e) {
		if (window.ActiveXObject) {
			xmldom = new ActiveXObject('Microsoft.XMLDOM');
			xmldom.async = 'false';
			xmldom.loadXML(xmlHttp.responseText);
		}
		else
			xmldom = (new DOMParser()).parseFromString(xmlHttp.responseText, 'text/xml');
	}
	return xmldom;
}

function PopProcessingWait() {
	$('#funds-submit').attr('disabled', true).blur()
		.val('Processing, please wait')
		.addClass('button-green button-processing');
	return true;
}

function PopProcessingReady() {
	return true;
}

function waitOnProcessing() {
	$('#blockui_msg').show();
	$.blockUI({ message: $('#blockui_msg')});

	return true;
}
function removeUIBlock() {
	$.unblockUI({ message: $('#blockui_msg')});
}
window.waitOnProcess = waitOnProcessing;
window.removeUIBlock = removeUIBlock;

var RicoUtil = {
   getContentAsString: function( parentNode ) {
      return parentNode.xml != undefined ? 
         this._getContentAsStringIE(parentNode) :
         this._getContentAsStringMozilla(parentNode);
   },

  _getContentAsStringIE: function(parentNode) {
     var contentStr = "";
     for ( var i = 0 ; i < parentNode.childNodes.length ; i++ ) {
         var n = parentNode.childNodes[i];
         if (n.nodeType == 4) {
             contentStr += n.nodeValue;
         }
         else {
           contentStr += n.xml;
       }
     }
     return contentStr;
  },

  _getContentAsStringMozilla: function(parentNode) {
     var xmlSerializer = new XMLSerializer();
     var contentStr = "";
     for ( var i = 0 ; i < parentNode.childNodes.length ; i++ ) {
          var n = parentNode.childNodes[i];
          if (n.nodeType == 4) { // CDATA node
              contentStr += n.nodeValue;
          }
          else {
            contentStr += xmlSerializer.serializeToString(n);
        }
     }
     return contentStr;
  }

}

function
ddxParam()
{
	var ddxCgi = 'ddx';
	var ddxCookie = 'PD2_SID';
	var working = ddxCgi + '=';

	// This routine stolen from the rhino book
	var allCookies = document.cookie;

	var pos = allCookies.indexOf(ddxCookie);
	if (pos != -1) {
		var start = pos + 8;
		var end = allCookies.indexOf(";", start);
		if (end == -1) {
			end = allCookies.length;
		}
		var value = allCookies.substring(start, end);
		value = unescape(value);

		working += value;
	}

	return working;
}

function tb_parseQuery ( query ) {
   var Params = {};
   if ( ! query ) {return Params;}// return empty object
   var Pairs = query.split(/[;&]/);
   for ( var i = 0; i < Pairs.length; i++ ) {
      var KeyVal = Pairs[i].split('=');
      if ( ! KeyVal || KeyVal.length != 2 ) {continue;}
      var key = unescape( KeyVal[0] );
      var val = unescape( KeyVal[1] );
      val = val.replace(/\+/g, ' ');
      Params[key] = val;
   }
   return Params;
}

// requires jquery
function smsCharCount() {
	var format = '%1 chars (sms max is 130)';
	var container = $('#sms_char_count');
	var title = $('#sms_title');
	var txt = $('#text');
	var l = 0;
	if (title && title.length) l += title.val().length;
	if (txt && txt.length) l += txt.val().length;
	container.html(format.replace(/%1/, l));
}

var g_mole = 'mole2.html';
var slajaxcontent_height = false;
function assetResizeFrame(target) {				
	var height = document.body.clientHeight;
	// secondary resizes won't fire without 'or' clause
	//
	if (!slajaxcontent_height || (height > slajaxcontent_height)) {
		slajaxcontent_height = height;
		try {
			var oldDomain = document.domain;
			document.domain = 'nogo-fail-mozilla.assetbar.com';
			document.domain = "assetbar.com";
			if (top.sl_ajaxcontentCB) {
				top.sl_ajaxcontentCB(target, height);
			}
			document.domain = oldDomain;
		} catch(e) {
			var mole_dna = '<iframe class="mole" name="mole" id="mole" ';
			mole_dna += 'style="visibility:hidden; width: 5px; height: 5px;;"> </iframe>';  
			var mole_hole = $(mole_dna);
			var mole = mole_hole.get()[0];
			$(document.body).append(mole_hole);
			mole_hole.bind('load', function(){
				mole.contentWindow.leakHeight(target, height);
			});
			mole_hole.attr('src', g_mole);
		}
	}
}

function accept_checkbox_toggle(cb) {
	var elm = document.getElementById('join_button');
	if (cb.checked) {
		elm.className = 'button-green';
		elm.disabled = false;
	} else {
		elm.className = 'button-green';
		elm.disabled = true;
	}
}

function markFree(base, assetNum) {

	if(window.XMLHttpRequest) {
		xmlHttp = new XMLHttpRequest();
	} else {
		xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
	}

	var free_cb = document.getElementById('mark-free-check-' + base + '-' + assetNum);

	var url = pd2_url_localpath + 'mark_free?b=' + base + '&a=' + assetNum + '&f=' + 
		free_cb.checked;
	
	// Synchronous, so pass "false" here.
	//
	xmlHttp.open("GET", url, false);

	xmlHttp.send(null);
	
	var xmldom = sl_get_xmldom(xmlHttp);

	var formResult = xmldom.getElementsByTagName( 'form_result' ).item(0);
    
	if (formResult.getAttribute('status') == 0) {
		// fleeting bullshit
		// post some fleeting feedback
		//
		
		var feedback = document.createElement("p");
		var feedbackID = "cpanel-fb-" + base + assetNum;
		feedback.setAttribute("id", feedbackID);
		feedback.innerHTML = "Change saved!";
		var cpanel = document.getElementById('cpanel-' + base + "-" + assetNum);
		cpanel.appendChild(feedback);
		setTimeout("var elm = document.getElementById('" +
			feedbackID + "'); $(elm).remove()", 5000);
		return true;
	} else {
		alert(formResult.getAttribute('message'));
		return false;
	}
}

function is_keystroke_interesting(event) {
	// j - 106
	// k - 107
	// l - 108
	// ; - 59, umlat-o - 246
	// h - 104
	// n - 110
	
	if (((event.which > 105) && (event.which < 109)) ||
		 (event.which == 59) ||
		 (event.which == 246) ||
		 (event.which == 104) ||
		 (event.which == 110)) {

		var orig_target;
		if (event.originalTarget) {
			orig_target =  event.originalTarget;
		} else {
			orig_target =  event.target;
		}
		
		if ((orig_target.nodeName != 'INPUT') &&
			(orig_target.nodeName != 'TEXTAREA')) {
			return true;
		}  
	}
	
	return false;
}

function open_permalink(self) {
	$('em', self).hide();
	$('input', self).show();	
}

function guess_readable_url() {
	var ff_name, i, curchar, working, out, readable;	

	// pull value from ff name box
	ff_name = document.getElementById('title').value;
	ff_name = ff_name.toLowerCase();

	// walk through strin, lowercasing everything, dropping punctuation, dashes, etc.
	working = "";
	for (i = 0; i < ff_name.length; i++) {
		curchar = ff_name.charAt(i);
		if (curchar == ' ') {
			if (working.charAt(working.length - 1) != '-') {
				out = '-';
			} else {	
				out = "";
			}
		// NB: if you change this list of chars, make sure pd2_readable_url.php::guess 
		// gets changed or deleted too.
		//
		} else if (curchar == "'" || curchar == "\"" || curchar == "," ||
			curchar == "%" || curchar == "+" || curchar == "^" || 
			curchar == "~" || curchar == "*" || curchar == ".") {
			out = "";
		} else {
			out = curchar;
		}

		working += out;
	}

	// send new value to readble text box

	readable = document.getElementById('readable');
	readable.value = working;
}

function create_coupon_account() {
	$('#coupon-terms').remove();
	$('#show-coupon-signup').remove();

	var form_div = $('#coupon-signup-form').show();

	var form_url = pd2_url_localpath + 'create_user';
	
	var options = {
		url: form_url,
		dataType: 'xml',
		beforeSubmit: function(formData, jqForm, options) { 
			var email_addr = $("input[name='email_addr']", jqForm).val();
			if (!email_addr) {
				$('#coupon-signup-errors').html('Please choose a username');
				return false; 
			}
			var pwd = $("input[name='password']", jqForm).val();
			if (!pwd) {
				$('#coupon-signup-errors').html('Please enter a password');
				return false; 
			}
			var con = $("input[name='confirm']", jqForm).val();
			if (!con) {
				$('#coupon-signup-errors').html('Please retype your password');
				return false; 
			}

			if (con != pwd) {
				$('#coupon-signup-errors').html('Your passwords do not match');
				return false; 
			}

			var realmail = $("input[name='realmail']", jqForm).val();
			if (!realmail) {
				$('#coupon-signup-errors').html('Please enter a valid email address.');
				return false; 
			}
			
			$('#coupon-signup-errors').html('');
			return true; 
		},
		success: function(responseXML, status, jqForm) {
			var formResult = responseXML.getElementsByTagName( 'form_result' ).item(0);
			if (formResult.getAttribute('status') == 0) {
				var base = $("input[name='base']", jqForm).val();
				var assetNum = $("input[name='assetNum']", jqForm).val();
				var targetID = base + "-" + assetNum;
				var couponID = $("input[name='couponID']", jqForm).val();
				
				BuyPD2Asset(base, assetNum, targetID, 0, 1, couponID);
				
			} else {
				$('#coupon-signup-errors').html(formResult.getAttribute('message'));
			}
		},
		clearForm: false
	};

	$('form', form_div).ajaxForm(options);	
}
