/* Emulate getElementById on document.all only browsers. Requires
   that IDs are unique to the page and do not coincide with NAME
   attributes on other elements:-
   Source: http://www.litotes.demon.co.uk/js_info/faq_notes/alt_dynwrite.html#getEl
*/
if((!document.getElementById) && document.all){
    document.getElementById = function(id){return document.all[id];};
}


function acs_Focus(form_name, element_name) {
    if (document.forms == null) return;
    if (document.forms[form_name] == null) return;
    if (document.forms[form_name].elements[element_name] == null) return;
    if (document.forms[form_name].elements[element_name].type == 'hidden') return;

    document.forms[form_name].elements[element_name].focus();
}


function acs_FormRefresh(form_name) {
    if (document.forms == null) return;
    if (document.forms[form_name] == null) return;
    if (document.forms[form_name].elements["__refreshing_p"] == null) return;

    document.forms[form_name].elements["__refreshing_p"].value = 1;
    document.forms[form_name].submit();
}


/* Copy-Paste functionality */
function acs_CopyText(text) {
    if (document.all) {
        holdtext.innerText = text;
        Copied = holdtext.createTextRange();
        Copied.execCommand("Copy");
    } else if (window.netscape) {
        netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');

        var clip = Components.classes['@mozilla.org/widget/clipboard;1'].createInstance(Components.interfaces.nsIClipboard);
        if (!clip) return;

        var trans = Components.classes['@mozilla.org/widget/transferable;1'].createInstance(Components.interfaces.nsITransferable);
        if (!trans) return;

        trans.addDataFlavor('text/unicode');

        var str = new Object();
        var len = new Object();

        var str = Components.classes["@mozilla.org/supports-string;1"].createInstance(Components.interfaces.nsISupportsString);

        var copytext = text;

        str.data = copytext;

        trans.setTransferData("text/unicode", str, copytext. length*2);

        var clipid = Components.interfaces.nsIClipboard;
        if (!clipid) return false;

        clip.setData(trans, null, clipid. kGlobalClipboard);
    }
}


/* Richtext Widget Support */

function acs_RichText_FormatStr (v) {
    if (!document.selection) return;
    var str = document.selection.createRange().text;
    if (!str) return;
    document.selection.createRange().text = '<' + v + '>' + str + '</' + v + '>';
}

function acs_RichText_InsertLink () {
    if (!document.selection) return;
    var str = document.selection.createRange().text;
    if (!str) return;
    var my_link = prompt('Enter URL:', 'http://');
    if (my_link != null)
        document.selection.createRange().text = '<a href="' + my_link + '">' + str + '</a>';
}

function acs_RichText_WriteButtons () {
    if (document.selection) {
        document.write('<table border="0" cellspacing="0" cellpadding="0" width="80">');
        document.write('<tr>');
        document.write('<td width="24"><a href="javascript:acs_RichText_FormatStr(\'b\')" tabIndex="-1"><img src="/resources/acs-subsite/bold-button.gif" alt="bold" width="24" height="18" border="0"></a></td>');
        document.write('<td width="24"><a href="javascript:acs_RichText_FormatStr(\'i\')" tabIndex="-1"><img src="/resources/acs-subsite/italic-button.gif" alt="italic" width="24" height="18" border="0"></a></td>');
        document.write('<td width="26"><a href="javascript:acs_RichText_InsertLink()" tabIndex="-1"><img src="/resources/acs-subsite/url-button.gif" alt="link" width="26" height="18" border="0"></a></td>');
        document.write('</tr>');
        document.write('</table>');
    }
}

function acs_RichText_Or_File_InputMethodChanged(form_name, richtext_name, radio_elm) {
    if (radio_elm == null) return;
    if (document.forms == null) return;
    if (document.forms[form_name] == null) return;

    if ( radio_elm.value == 'file' ) {
        document.forms[form_name].elements[richtext_name+".text"].disabled = true;
        document.forms[form_name].elements[richtext_name+".mime_type"].disabled = true;
        document.forms[form_name].elements[richtext_name+".file"].disabled = false;
    } else {
        document.forms[form_name].elements[richtext_name+".text"].disabled = false;
        document.forms[form_name].elements[richtext_name+".mime_type"].disabled = false;
        document.forms[form_name].elements[richtext_name+".file"].disabled = true;
    }
}

 /* RTE functions */ 	 
 function acs_rteSubmitForm() { 	 
         updateRTEs(); 	 
         return true; 	 
 } 	 
  	 
 function acs_rteInit(form_name) { 	 
 // sets onsubmit to function for the given form name 	 
     if (document.forms == null) return; 	 
     if (document.forms[form_name] == null) return; 	 
     document.forms[form_name].onsubmit = acs_rteSubmitForm; 	 
 } 	 
 

/* HTMLArea (part of Richtext Widget) Support */

function acs_initHtmlArea(editor_var, elementid) {
    editor_var.generate();
    return false;
}

/* List Builder Support */

function acs_ListFindInput() {
  if (document.getElementsByTagName) {
    return document.getElementsByTagName('input');
  } else if (document.all) {
    return document.all.tags('input');
  }
  return false;
}

function acs_ListCheckAll(listName, checkP) {
  var Obj, Type, Name, Id;
  var Controls = acs_ListFindInput(); if (!Controls) { return; }
  // Regexp to find name of controls
  var re = new RegExp('^' + listName + '..+');

  checkP = checkP ? true : false;

  for (var i = 0; i < Controls.length; i++) {
    Obj = Controls[i];
    Type = Obj.type ? Obj.type : false;
    Name = Obj.name ? Obj.name : false;
    Id = Obj.id ? Obj.id : false;

    if (!Type || !Name || !Id) { continue; }

    if (Type == "checkbox" && re.exec(Id)) {
      Obj.checked = checkP;
    }
  }
}

function acs_ListBulkActionClick(formName, url) {
  if (document.forms == null) return;
  if (document.forms[formName] == null) return;

  var form = document.forms[formName];

  form.action = url;
  form.submit();
}

function acs_KeypressGoto(theUrl, event) {
	var key;
    	if (event) {
	      if (event.which == 13) {
	        location.href = theUrl;
      	      }
    	}
}

// ------------------------------------------------------------------------
// Functions specific to clasohm.com

function Go(url, bhistory){
    if (url != ""){
	if (bhistory)
	    document.location.href = url;
	else
	    document.location.replace(url);
    }
}

function ToggleAll(chkbox_name, form_name, initiator_name) {
    if (document.forms[form_name].select_all) {
	if (document.forms[form_name].select_all.checked) {
	    SelectAll(chkbox_name, form_name);
	} else {
	    UnSelectAll(chkbox_name, form_name);		
	}
    } else {
	if (document.forms[form_name].elements[initiator_name]) {
	    if (document.forms[form_name].elements[initiator_name].checked) {
		SelectAll(chkbox_name, form_name);
	    } else {
		UnSelectAll(chkbox_name, form_name);
	    }		
	}
    }
}

function SelectAll(chkbox_name, form_name) {
    var i;

    for (i=0; i < document.forms[form_name].elements.length; i++) {
	if (document.forms[form_name].elements[i].name == chkbox_name) {
	    document.forms[form_name].elements[i].checked = true;
	}
    }
}

function UnSelectAll(chkbox_name, form_name) {
    var i;

    for (i=0; i < document.forms[form_name].elements.length; i++) {
	if (document.forms[form_name].elements[i].name == chkbox_name) {
	    document.forms[form_name].elements[i].checked = false;
	}
    }
}

function toggleRadio(thisField,thisValue) {
    radioSet = eval(thisField)
    for (i = 0; i < radioSet.length; i++) {
        if (radioSet[i].value == thisValue)
	    radioSet[i].checked = true;
    }
}

function changeBoxAndHighlight(cboxName, labelId, highlightClass, plainClass) {
    cbox = document.getElementsByName(cboxName)[0];
    label = document.getElementById(labelId);

    cbox.checked = !cbox.checked;

    if (cbox.checked)
	label.className = highlightClass;
    else
	label.className = plainClass;
}

function labelHighlight(cboxName, labelId, highlightClass, plainClass) {
    cbox = document.getElementsByName(cboxName)[0];
    label = document.getElementById(labelId);

    if (cbox.checked)
	label.className = highlightClass;
    else
	label.className = plainClass;
}

function initLabelHighlight(formName, cboxName, labelName, highlightClass) {
    form = document.getElementsByName(formName)[0];
    reCboxName = new RegExp(cboxName + "(.+)");

    for (i = 0; i < form.elements.length; i++) {
	if (reCboxName.exec(form.elements[i].name)) {
	    cbox = document.getElementsByName(form.elements[i].name)[0];
	    if (cbox.checked)
		document.getElementById(labelName + RegExp.$1).className = highlightClass;
	}
    }
}


// ------------------------------------------------------------------------
// Keyboard Shortcuts

var lastKey;

function onKeyPress(ev) {
    if (!ev)
	ev = window.event;

    if (ev.type == "keypress" && !ignoreInput(ev)) {
	var keyCode;
	if (ev.which)
	    keyCode = ev.which;
	else if (ev.keyCode)
	    keyCode = ev.keyCode;

	var prevLastKey = lastKey;
	lastKey = null;

	if (prevLastKey == 103) {
	    // Something prefixed with g
	    return handlePrefixG(ev, keyCode);
	} else {
	    return handleCommonKeys(ev, keyCode);
	}
    } else
	return true;
}

function handleCommonKeys(ev, keyCode) {
    if (keyCode == 47) {
	// / - jump to search field
	var searchField = document.getElementsByName('q')[0];
	if (searchField.value == 'Search') searchField.value='';
	searchField.focus();
	cancelEvent(ev);
	return false;
    } else if (keyCode == 103) {
	// g - initiate goto sequence
	lastKey = 103;
	cancelEvent(ev);
	return false;
    } else if (keyCode == 106) {
	// j - previous page
	var prevLink = document.getElementById("prev_link");
	if (prevLink != null) {
	    document.location.href = prevLink.href;
	    cancelEvent(ev);
	    return false;
	}
    } else if (keyCode == 107) {
	// k - next page
	var nextLink = document.getElementById("next_link");
	if (nextLink != null) {
	    document.location.href = nextLink.href;
	    cancelEvent(ev);
	    return false;
	}
    }

    return true;
}

function handlePrefixG(ev, keyCode) {
    if (keyCode == 103) {
	// g - goto Gallery
	location.pathname = "/photodb/";
	cancelEvent(ev);
	return false;
    } else if (keyCode == 105) {
	// i - goto main index
	location.pathname = "/";
	cancelEvent(ev);
	return false;
    } else
	return true;
}

function cancelEvent(ev) {
    if (ev.preventDefault) { 
	ev.preventDefault(); 
	ev.stopPropagation(); 
    } else
	event.returnValue = false;
}

function ignoreInput(ev) {
    if ((typeof ev.ctrlKey != 'undefined') ? ev.ctrlKey : ev.modifiers & Event.CONTROL_MASK > 0)
	return true;

    if ((typeof ev.altKey != 'undefined') ? ev.altKey : ev.modifiers & Event.ALT_MASK > 0)
	return true;

    if ((typeof ev.metaKey != 'undefined') && ev.metaKey)
	return true;
    else if((typeof Event != 'undefined') && (ev.modifiers & Event.META_MASK > 0))
	return true;

    var el = ev.target || ev.srcElement;
    var upperTagName = el.tagName.toUpperCase();

    if (el && el.tagName) {
	if (upperTagName == "SELECT" || upperTagName == "TEXTAREA")
	    return true;

	if (upperTagName == "INPUT" && el.type.toUpperCase() == "TEXT")
	    return true;
  }

  return false;
}

