function $T(element) {
  var t = $(element);
  return t == null ? t : t.innerHTML.gsub(/<\/?[^>]*>/, '');
}

function $M(element) {
  var m = $(element);
  return m == null ? m : m.innerHTML;
}

SmartAccordion = Class.create({
	initialize: function(triggerPattern,contentPattern,triggerElement,callbackHash) {
		this._trigger = triggerPattern;
		this._content = contentPattern;
		this._triggerElement = triggerElement;
		this._activeElements = $$(this._trigger);
		
		if (callbackHash) {
		  this._callbacks = callbackHash;
		}
		
		this._clickHandler = this.contentToggle.bind(this);
		this.attachToggles();
	},
	
	attachToggles: function() {
		var handler = this._clickHandler;
		this._activeElements.each(function(e) {
			e.observe('click', handler);
		});
	},
	
	contentToggle: function(event) {
		var trigger = event.findElement(this._triggerElement);
		var content = trigger.next(this._content);
		var direction = content.offsetHeight > 0 ? "close" : "open";
		this.handleContent(direction,content,false);
	},
	
	forceAll: function(direction) {
	  var handler = this.handleContent.bind(this);
	  var effects = $A();
	  var contentPattern = this._content;
	  this._activeElements.each(function(e) {
	    var content = e.next(contentPattern);
	    var contentIsOpen = content.offsetHeight > 0 ? true :false;
	    if (direction == "open" && !contentIsOpen) {
	      effects.push(handler("open", content, true));
	    }
	    
	    if (direction == "close" && contentIsOpen) {
	      effects.push(handler("close", content, true));
	    }
	  });
	  
    new Effect.Parallel(effects,{ duration: 0.5 });
	},
	
	handleContent: function(direction, content, syncEffect) {
	  var options = {};
	  var before = this._callbacks && this._callbacks.before ? this._callbacks.before + "(content)" : false;
	  var after = this._callbacks && this._callbacks.after ? this._callbacks.after + "(content)" : false;
	  
	  if (syncEffect) {
	    options.sync = true;
	  } else {
	    options.duration = 0.5;
	  }

	  if (before) options.beforeStart = eval(before);
	  if (after) options.afterFinish = eval(after);
	  
	  if (direction == "open") {
	    return Effect.BlindDown(content, options);
	  } else {
	    return Effect.BlindUp(content, options);
	  }
	}
});

savedSearch = {
  deleteSearch: function(anchor) {
    var anchor_id = anchor.id.gsub(/[\D]+/,'');
    new Ajax.Request('/numberstitles/savedSearchDelete', {
      parameters: { id: anchor_id },
      method: 'get',
      onSuccess: function(transport) {
        $(anchor).up('li').fade();
      }
    });
  },
  
  deleteNumber: function(anchor) {
    var anchor_id = anchor.id.gsub(/[\D]+/,'');
    new Ajax.Request('/numberstitles/savedNumberDelete', {
      parameters: { id: anchor_id },
      method: 'get',
      onSuccess: function(transport) {
        $(anchor).up('li').fade();
      }
    });
  }
};

typesize_sm = new Image();
typesize_sm.src = "/images/layout/typesize_sm.gif"; 

typesize_md = new Image();
typesize_md.src = "/images/layout/typesize_md.gif"; 

typesize_lg = new Image();
typesize_lg.src = "/images/layout/typesize_lg.gif"; 

browse     = new Image();
browse.src = "/images/icons/mode_browse.gif"; 

search     = new Image();
search.src = "/images/icons/mode_search.gif"; 


function classExists(cl) {
	if (document.styleSheets[0].cssRules) {
		rules = document.styleSheets[0].cssRules;
	} else if (document.styleSheets[0].rules) {
		rules = document.styleSheets[0].rules;
	}
	for (var j = 0; j < rules.length; j++) {
		selector = rules[j].selectorText;
		if (selector == '.' + cl) {
			return true;
		}
	}
	return false;
}

function changeSize(sz) {
	element = document.getElementById('typesize');
	element.src = eval('typesize_' + sz + '.src');
	selectorName = '';
	cookieName   = 'txtsz';
	if (document.styleSheets[0].cssRules) {
		rules = document.styleSheets[0].cssRules;
	} else if (document.styleSheets[0].rules) {
		rules = document.styleSheets[0].rules;
	}
	
	for (var r = 0; r < rules.length; r++) {
		selector = rules[r].selectorText;
		var p = false;
		if (selector.substring(0,1) == '#') {
		  p = true;
			selectorName = selector.substring(1,selector.length);
		} else if (selector.substring(0,5) == '*[ID"') {
		  p = true
			selectorName = selector.substring(5,selector.length-2);
		}
		if (p) {
  		if (selectorName.length && classExists(selectorName + '-' + sz) ) {
  		  if (document.getElementById(selectorName)) {
    			document.getElementById(selectorName).className = selectorName + '-' + sz;
    			if (readCookie(cookieName) != sz) {
    				createCookie(cookieName,sz,3650);
    			}
  			}
  		}
  	}
  }
}

function setDefaultSize() {
	size = readCookie('txtsz');
	if (size != null && document.getElementById('typesize')) {
		changeSize(size);
	}
}

function switchmode(mode) {
	element     = document.getElementById('mode');
	embrowse    = document.getElementById('leftnav');
	emsearch    = document.getElementById('leftsearch');

    if (element) element.src = eval(mode + '.src');
    if (embrowse) embrowse.style.display = 'none';
	emsearch.style.display = 'none';
	show  = eval('em' + mode);
	show.style.display = 'inline';
}


function getMousePos(e) {
    if (!e) var e = window.event;
	if (e.pageX || e.pageY) {
		mouseX = e.pageX;
		mouseY = e.pageY;
	} else if (e.clientX || e.clientY) {
	    var scrollLeft = document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft;
	    var scrollTop  = document.documentElement.scrollTop  ? document.documentElement.scrollTop  : document.body.scrollTop;
		mouseX = e.clientX + scrollLeft;
		mouseY = e.clientY + scrollTop;
	}
}

function findPosX(obj) {
	var curleft = 0;
	if (obj.offsetParent)
	{
		while (obj.offsetParent)
		{
			curleft += obj.offsetLeft;
			obj = obj.offsetParent;
		}
		if (obj) {
			curleft += obj.offsetLeft;
		}
	}
	else if (obj.x)
		curleft += obj.x;
	return curleft;
}

function findPosY(obj) {
	var curtop = 0;
	if (obj.offsetParent)
	{
		while (obj.offsetParent)
		{
			curtop += obj.offsetTop;
			obj = obj.offsetParent;
		}
		if (obj) {
			curtop += obj.offsetTop;
		}
	}
	else if (obj.y)
		curtop += obj.y;
	return curtop;
}

function email_sending() {
	$('emailform').style.visibility = 'hidden';
	$('emailsending').style.display = 'inline';
}

function email_sent() {
	new Effect.BlindUp('emailbox', {duration: 0.2});
	$('emailform').style.visibility = 'visible';
	$('emailsending').style.display = 'none';
}

function toggleEmailBox(e) {
	var posx = 0;
	var posy = 0;
	var box = document.getElementById('emailbox');
	notes.value = '';

	if (box.style.display != 'none') {
		email_sent();
		return false;
	}
	
	if (!e) var e = window.event;
	if (e.pageX || e.pageY) {
			posx = e.pageX;
			posy = e.pageY;
	} else if (e.clientX || e.clientY) {
			posx = e.clientX + document.body.scrollLeft;
			posy = e.clientY + document.body.scrollTop;
	}
	targ = getEventTarget(e);
	box.style.left    = (posx-147) + "px";
	box.style.top     = (posy+6) + "px";
	new Effect.BlindDown('emailbox', {duration: 0.2});
	return false;
}

function toggleFloatingBox(e) {
        var posx = 0;
        var posy = 0;
        var box = document.getElementById('savebox');
        var notes = document.getElementById('notes');
        notes.value = '';

        if (box.style.display != 'none') {
        	new Effect.BlindUp('savebox',{duration: 0.2});
        	return false;
        }
        
        if (!e) var e = window.event;
        if (e.pageX || e.pageY) {
                posx = e.pageX;
                posy = e.pageY;
        } else if (e.clientX || e.clientY) {
                posx = e.clientX + document.body.scrollLeft;
                posy = e.clientY + document.body.scrollTop;
        }
		targ = getEventTarget(e);
		document.getElementById('mfid').value = targ.id.substring(4);
        box.style.left    = (posx-147) + "px";
        box.style.top     = (posy+6) + "px";
        new Effect.BlindDown('savebox', {duration: 0.2});
		return false;
}

function toggleSearchBox(e) {
        var posx = 0;
        var posy = 0;
        var box = document.getElementById('savesearchbox');
        var notes = document.getElementById('notes');
        notes.value = '';

        if (box.style.display != 'none') {
        	new Effect.BlindUp('savesearchbox',{duration: 0.2});
        	return false;
        }
        
        if (!e) var e = window.event;
        if (e.pageX || e.pageY) {
                posx = e.pageX;
                posy = e.pageY;
        } else if (e.clientX || e.clientY) {
                posx = e.clientX + document.body.scrollLeft;
                posy = e.clientY + document.body.scrollTop;
        }
		targ = getEventTarget(e);
		document.getElementById('mfid').value = targ.id.substring(4);
        box.style.left    = (posx-147) + "px";
        box.style.top     = (posy+6) + "px";
        new Effect.BlindDown('savesearchbox', {duration: 0.2});
		return false;
}


function getEventTarget(e) {
		if (!e) var e = window.event;
		if (e.target) targ = e.target;
		else if (e.srcElement) targ = e.srcElement;
		if (targ.nodeType == 3) // defeat Safari bug
			targ = targ.parentNode;
		return targ;
}

function showSavedTrash(e) {
        var posx = 0;
        var posy = 0;
        targ = getEventTarget(e);
        var icon = document.getElementById(targ.id.substring(0,10) + 'trash');
		
		document.getElementById('ntid').value = targ.id.substring(11);
		posx = findPosX(targ);
		posy = findPosY(targ);
        icon.style.left    = (posx-16) + "px";
        icon.style.top     = (posy-4) + "px";
        icon.style.display = '';
}

var notesTemp = new Array();

function editNotes(e) {
		targ = getEventTarget(e);
		if (notesTemp[targ.id] && notesTemp[targ.id].length > 0) return;
		document.getElementById('savedtrash').style.display = 'none';
		notesTemp[targ.id] = targ.innerHTML;
		targ.innerHTML = '<textarea rows="3" cols="15" style="font-size: 11px;" id="textarea_' + targ.id + '" wrap="virtual">' + targ.innerHTML + '</textarea>';
		document.getElementById('textarea_' + targ.id).onblur  = closeEditNotes;
		document.getElementById('textarea_' + targ.id).onclick = null;
		document.getElementById('textarea_' + targ.id).focus();
		targ.onclick = null;
}

function closeEditNotes(e) {
		targ = getEventTarget(e);
		document.getElementById('savedtrash').style.display = 'none';
		notesTemp[targ.parentNode.id] = '';
		notes = 'notes=' + targ.value;
		new Ajax.Request('/users/update_saved_notes/' + targ.id.substring(19), {method:'post',asynchronous:true, parameters:notes, evalScripts:true})
		targ.parentNode.onclick   = editNotes;
		targ.parentNode.innerHTML = targ.value;
}

function hideIcons() {
	document.getElementById('edittrash').style.display = 'none';
}

function showRevisionForm() {
	document.getElementById('requestrevisionform').style.display = 'inline';
}

/**
 *These are used to reveal and hide URL and File fields
 *when requesting a revision
**/
function forwardState(el)
{
	if(isNaN(el.currentState))
	{
		el.currentState=-1;
	}
	if(el.currentState < el.childNodes.length-1)
	{
		el.currentState++;
		new Effect.Appear(el.childNodes[el.currentState]);
		setChildFieldsDisabled(el.childNodes[el.currentState], false);
	}
}

function rewindState(el)
{
	if(isNaN(el.currentState))
	{
		el.currentState=el.childNodes.length;
	}
	if(el.currentState > -1)
	{
		new Effect.Fade(el.childNodes[el.currentState]);
		setChildFieldsDisabled(el.childNodes[el.currentState], true);
		el.currentState--;
	}
}

function setChildFieldsDisabled(el, is_disabled)
{
	inputs = el.getElementsByTagName('input');
	for(var i = 0; i < inputs.length; i++)
	{
		 inputs[i].disabled = is_disabled;
	}
	selects = el.getElementsByTagName('select');
	for(var i = 0; i < selects.length; i++)
	{
		 selects[i].disabled = is_disabled;
	}
}

function disableUrlAndAttachmentFields()
{
	$urls = $('request-urls');
	$attachments = $('request-attachments');
	
	if($urls)
	{
		setChildFieldsDisabled($urls, true);
	}
	if($attachments)
	{
		setChildFieldsDisabled($attachments, true);
	}
	
}

function doSearchFromParams(query, context, descriptions, saved_qid) {
	if (!saved_qid) {
		var saved_qid = '';
	}
	if (descriptions && descriptions != 'false') {
		desc = 1;
	} else {
		desc = 0;
	}
	$('querytext').value = query;
	switchmode('search');
	var params = 'query=' + query + '&context=' + context + '&qid=' + saved_qid + '&descriptions=' + desc;
	doSearch(params);
}

function doSearch(params) {
	searching();
	new Ajax.Updater('nt-center', '/numberstitles/search?' + params, {asynchronous:true, evalScripts:true, onComplete:function(request){$('search_loading').hide()}, onLoading:function(request){$('search_loading').show()}});

}

function saveSearch(query, context, descriptions, count) {
	var params = 'query=' + query + '&context=' + context + '&descriptions=' + descriptions + '&count=' + count;
	new Ajax.Updater('saved_searches_wrapper', '/users/save_search?' + params, {asynchronous:true, evalScripts:true, onComplete:function(request){$('search_loading').hide()}, onLoading:function(request){$('search_loading').show()}});
}

function searching() {
	var html  = '<div id="breadcrumbs">Please wait</div>';
	html += '<table class="current-title" border="0" cellpadding="0" cellspacing="0">';
	html += '<tr class="title">';
	html += '	<td class="left-column" valign="top">Searching</td>';
	html += '	<td class="right-column">for &#8220;' + $('querytext').value + '&#8221; . . .</td>';
	html += '</tr>';
	html += '<tr class="includes">';
	html += '	<td class="left-column"></td>';
	html += '	<td class="right-column"></td>';
	html += '</tr>';
	html += '<tr class="numbersandtitles">';
	html += '	<td class="left-column"></td>';
	html += '	<td class="right-column"><br/></td>';
	html += '</tr>';
	html += '<tr class="numbersandtitles">';
	html += '	<td class="left-column">';
	html += '		<br/><br/><br/><br/><br/><br/><br/><br/>';
	html += '	</td>';
	html += '	<td class="right-column">';
	html += '		<br/><br/><br/><br/><br/><br/><br/><br/>';
	html += '	</td>';
	html += '</tr>';
	html += '</table>';
	$('nt-center').innerHTML = html;
	$('search_loading').show();
}


function finishUpload(id,rid) {
	$('UploadProgressBar' + id).style.display = 'none';
	new Ajax.Updater('fileslist', '/revision_requests/upload_file/' + rid, {asynchronous:true, evalScripts:true});
}

function beginUpload(id) {
	$('UploadProgressBar' + id).style.display = 'inline';
	$('submitUpload' + id).style.display = 'none';
}

function submitForm(id) {
	form = $(id);
	form.submit();
}

function mediaWindow(url) {
	window.open(url,'mediawindow','width="640,height="480"');
}

function createCookie(name,value,days) {
        if (days)
        {
                var date = new Date();
                date.setTime(date.getTime()+(days*24*60*60*1000));
                var expires = "; expires="+date.toGMTString();
        }
        else var expires = "";
        document.cookie = name+"="+value+expires+"; path=/";
}

function readCookie(name) {
        var nameEQ = name + "=";
        var ca = document.cookie.split(';');
        for(var i=0;i < ca.length;i++)
        {
                var c = ca[i];
                while (c.charAt(0)==' ') c = c.substring(1,c.length);
                if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
        }
        return null;
}

function eraseCookie(name) {
        createCookie(name,"",-1);
}

function updateRememberMe() {
	if ($('remember_me').checked === false) {
		eraseCookie('p_id');
	}
}
