/*
 * http://gr0w.com/
 * Copyright (c) 2006 Jon Tan and Paul Whitrow
 * Other functions based on those by:Jeremy Keith http://adactio.com/
 */

/* 
 * Generic onload event function by Simon Willison http://simon.incutio.com/
 */


// updated with fix for IE7 runtime error
function addLoadEvent(func) {
    var oldonload = window.onload;
    if (typeof window.onload != 'function') window.onload = func;
    else {
        window.onload = function() {
            if (oldonload) oldonload();
            func();
        }
    }
}

function insertAfter(newElement,targetElement) {
  var parent = targetElement.parentNode;
  if (parent.lastChild == targetElement) {
    parent.appendChild(newElement);
  } else {
    parent.insertBefore(newElement,targetElement.nextSibling);
  }
}

function addClass(element,value) {
  if (!element.className) {
    element.className = value;
  } else {
    newClassName = element.className;
    newClassName+= " ";
    newClassName+= value;
    element.className = newClassName;
  }
}

// test to see if function and objects are available before allowing the function to continue

function objTest(){
if(!document.getElementById) return false;
var result=true;
for(var a=0;a<arguments.length;a++){
 if(!document.getElementById(arguments[a])){
  if(result){
   result=!result;
  }
 }
}
return result;
}


/* 
 * Highlight table rows onblur
 */

function highlightRows() {
  if(!document.getElementsByTagName) return;
  var rows = document.getElementsByTagName("tr");
  if(rows.length <= 0) return;
  for (var i=0; i<rows.length; i++) {
    rows[i].oldClassName = rows[i].className
    rows[i].onmouseover = function() {
      addClass(this,"highlight");
    }
    rows[i].onmouseout = function() {
      this.className = this.oldClassName
    }
  }
} 
addLoadEvent(highlightRows);


/* 
 * Clear form fields default value onblur
 * Commented  - interferring with return on form fields in the editor


function resetFields(whichform) {
  for (var i=0; i<whichform.elements.length; i++) {
    var element = whichform.elements[i];
    if ((element.type)&&(element.type == "submit")) continue;
    if ((element.type)&&(element.type == "reset")) continue;
    if ((element.type)&&(element.type == "radio")) continue;
    if ((element.type)&&(element.type == "checkbox")) continue;
    if ((element.type)&&(element.type == "textarea")) continue;
    if (!element.defaultValue) continue;
	if(element.value.indexOf("Insert")==-1) continue;
    element.onfocus = function() {
    if (this.value == this.defaultValue) {
      this.value = "";
     }
    }
    element.onblur = function() {
      if (this.value == "") {
        this.value = this.defaultValue;
      }
    }
  }
}

function prepareForms() {
  for (var i=0; i<document.forms.length; i++) {
    var thisform = document.forms[i];
    resetFields(thisform);
  }
}

addLoadEvent (prepareForms);
 */


/* 
 * Clear form fields default value onblur
 */

function prePrint(){
 if(document.getElementById('printpage')) document.getElementById('printpage').onclick=function(){ window.print();return false;}
}

addLoadEvent (prePrint);


/* cookie functions */
function setCookie(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 getCookie(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 false;
}

function delCookie(name){
 setCookie(name,"",-1);
}

function repStr(str,txt,by) {
 var strLength=str.length,txtLength=txt.length;
 if((strLength==0) || (txtLength==0))return str;
 var i=str.indexOf(txt);
 if((!i) && (txt!=str.substr(0,txtLength)))return str;
 if(i==-1)return str;
 var newstr=str.substr(0,i) + by;
 if(i+txtLength < strLength){newstr+=repStr(str.substring(i+txtLength,strLength),txt,by)}
 return newstr;
}

function insertAtCursor(myField, myValue){
 //IE support
 if (document.selection) {
  myField.focus();
  var sel = document.selection.createRange();
  sel.text = myValue;
  myField.focus();
 }
 //MOZILLA/NETSCAPE support
 else if (myField.selectionStart || myField.selectionStart == '0') {
  var startPos = myField.selectionStart;
  var endPos = myField.selectionEnd;
  var scrollTop = myField.scrollTop;
  myField.value = myField.value.substring(0, startPos)
                + myValue 
                + myField.value.substring(endPos, myField.value.length);
  myField.focus();
  myField.selectionStart = startPos + myValue.length;
  myField.selectionEnd = startPos + myValue.length;
  myField.scrollTop = scrollTop;
 } else {
  myField.value += myValue;
  myField.focus();
 }
} 

function emoticons(el){
 if(!document.getElementById('emoticons')) return;
 var smholder=document.getElementById('emoticons');
 var img=smholder.getElementsByTagName('img');
 for(var a=0; a < img.length; a++) img[a].className='jsemote';
 // any changes made here will need to be mirrored in the [lang].php file
 AttachEvent(img[0], 'click', function(){insertAtCursor(document.getElementById(el),':)')}, false);
 AttachEvent(img[1], 'click', function(){insertAtCursor(document.getElementById(el),':D')}, false);
 AttachEvent(img[2], 'click', function(){insertAtCursor(document.getElementById(el),':(')}, false);
 AttachEvent(img[3], 'click', function(){insertAtCursor(document.getElementById(el),'x(')}, false);
 AttachEvent(img[4], 'click', function(){insertAtCursor(document.getElementById(el),';)')}, false);
 AttachEvent(img[5], 'click', function(){insertAtCursor(document.getElementById(el),':O')}, false);
 AttachEvent(img[6], 'click', function(){insertAtCursor(document.getElementById(el),':P')}, false);
 AttachEvent(img[7], 'click', function(){insertAtCursor(document.getElementById(el),':I')}, false);
 AttachEvent(img[8], 'click', function(){insertAtCursor(document.getElementById(el),':|')}, false);
 AttachEvent(img[9], 'click', function(){insertAtCursor(document.getElementById(el),':S')}, false);
 AttachEvent(img[10],'click', function(){insertAtCursor(document.getElementById(el),'8)')}, false);
}

//addLoadEvent(emoticons);

function AttachEvent(obj,evt,fnc,useCapture){
 if (!useCapture) useCapture=false;
 if (obj.addEventListener){
  obj.addEventListener(evt,fnc,useCapture);
  return true;
 } else if (obj.attachEvent) return obj.attachEvent("on"+evt,fnc);
 else{
  MyAttachEvent(obj,evt,fnc);
  obj['on'+evt]=function(){ MyFireEvent(obj,evt) };
 }
 return false;
} 

//The following are for browsers like NS4 or IE5Mac which don't support either
//attachEvent or addEventListener
function MyAttachEvent(obj,evt,fnc){
 if (!obj.myEvents) obj.myEvents={};
 if (!obj.myEvents[evt]) obj.myEvents[evt]=[];
 var evts = obj.myEvents[evt];
 evts[evts.length]=fnc;
}

function MyFireEvent(obj,evt){
 if (!obj || !obj.myEvents || !obj.myEvents[evt]) return;
 var evts = obj.myEvents[evt];
 for (var i=0,len=evts.length;i<len;i++) evts[i]();
}


/*
Expandable Textareas
dotjay, 2006
based on the script by Gez Lemon, 2006
http://juicystudio.com/experiments/textarea.php
*/

// function to create elements circumventing XHTML/DOM compliance
function createElement(element) {
	element = element.toLowerCase();
	if (typeof document.createElementNS != 'undefined')
		return document.createElementNS('http://www.w3.org/1999/xhtml', element);
	if (typeof document.createElement != 'undefined')
		return document.createElement(element);
	return false;
}

function wrapElement(el,wrapWith) {
	insertAfter(wrapWith,el)
	wrapWith.appendChild(el)
}

function initExpandableTextareas(){
	if (!document.getElementsByTagName || !document.getElementById || !document.createElement || !document.createTextNode) return;
	var objAreas = document.getElementsByTagName('textarea');
	var objLabels = document.getElementsByTagName('label');
	var objSpan, strLabel;

	// Attaach an event handler for each form
	var numAreas = objAreas.length;
	for (var i=0; i<numAreas; i++){
		if (!objAreas[i].className.match("expandable")) continue;

		var newDiv = createElement("div");
		addClass(newDiv,"expandable-textarea");
		wrapElement(objAreas[i],newDiv);
		strLabel = getLabel(objAreas[i], objLabels);

		/*
		controls = createElement('ul');
		addClass(controls,'controls'); // for IE
		
		controlItem = createElement("li");
		controlItem.appendChild(addAnchor(objAreas[i], strLabel, 1));
		controls.appendChild(controlItem);

		controlItem = createElement("li");
		controlItem.appendChild(addAnchor(objAreas[i], strLabel, 2));
		controls.appendChild(controlItem);
		*/

		var controls = createElement("div");
		addClass(controls,'controls'); // for IE
		controls.appendChild(addAnchor(objAreas[i], strLabel, 1));
		controls.appendChild(addAnchor(objAreas[i], strLabel, 2));

		objAreas[i].parentNode.insertBefore(controls, objAreas[i]);
	}
}

function addAnchor(objArea, strLabel, iAction){
	var objAnchor = document.createElement('a');

	objAnchor.setAttribute('href', '#' + objArea.getAttribute('id'));
	objAnchor.onclick = function(event){return increaseArea(event, objArea, iAction);};
	objAnchor.onkeypress = function(event){return increaseArea(event, objArea, iAction);};
	if (iAction == 1){
		addClass(objAnchor,"increase");
		var img = createElement("img");
		img.setAttribute('src','../dashboard/img/icon20_plus.gif');
		img.setAttribute('alt','Increase area for ' + strLabel);
		objAnchor.appendChild(img);
	}else{
		addClass(objAnchor,"decrease");
		var img = createElement("img");
		img.setAttribute('src','../dashboard/img/icon20_minus.gif');
		img.setAttribute('alt','Decrease area for ' + strLabel);
		objAnchor.appendChild(img);
	}

	return objAnchor;
}

function getLabel(objField, objLabels){
	var numLabels = objLabels.length;
	for (var i=0; i<numLabels; i++){
		if (objLabels[i].htmlFor == objField.id) return objLabels[i].firstChild.nodeValue;
	}

	return 'unknown';
}

function increaseArea(objEvent, objArea, iAction){
	// Allow keyboard navigation over links
	if (objEvent && objEvent.type == 'keypress'){
		if (objEvent.keyCode != 13 && objEvent.keyCode != 32) return true;
	}

	var iRows = parseInt(objArea.getAttribute('rows'), 10);

	if (iAction == 1){
		if (iRows < 50) iRows += 5;
	}else{
		if (iRows > 5) iRows -= 5;
	}

	objArea.setAttribute('rows', iRows);
	return false;
}

addLoadEvent(initExpandableTextareas);


function insertTag(tag){
 var txt=document.getElementById('tags').value;
 if(txt.length > 0){
  txt=",";
 }else{
  txt="";
 }
  document.getElementById('tags').value+=(txt+tag);
}

function toggleItem(type,action){
 if (!document.getElementById('existingtagslist')) return false;
 var obj=document.getElementById(type);
 if(obj.style.display){
  if(obj.style.display=='block'){
   obj.style.display='none';
   action.className='toggleshow';
  }else{
   obj.style.display='block';
   action.className='togglehide';
  }
 }else{
  obj.style.display='block';
  action.className='togglehide';
 }
}

function trim(stringToTrim) {
 return stringToTrim.replace(/^\s+|\s+$/g,"");
}

function initToggleLayers(){
 if (!document.getElementById('existingtagslist')) return false;
 var etl=document.getElementById('existingtagslist');
 var togtags=document.getElementById('togtags').value;
 var toghelp=document.getElementById('toghelp').value;
 var togassets=document.getElementById('togassets').value;
 var imageshelp=document.getElementById('imageshelp').value;

 // create toggle links for tags and assets
 var ul=document.createElement("ul");
 ul.className="togglelinks";
 ul.innerHTML="<li><a class=\"toggleshow\" href=\"javascript:;\" onclick=\"toggleItem('existingtagslist',this);this.blur();\" title=\""+togtags+"\">"+togtags+"</a></li>\n<li><a class=\"toggleshow\" href=\"javascript:;\" onclick=\"toggleItem('tagshelp',this);this.blur();\" title=\""+toghelp+"\">"+toghelp+"</a></li>\n";
 insertAfter(ul,document.getElementById('tagsmarker'));

 var ul=document.createElement("ul");
 ul.className="togglelinks";
 ul.innerHTML="<li><a class=\"toggleshow\" href=\"javascript:;\" onclick=\"toggleItem('assetslayers',this);this.blur();\" title=\""+togassets+"\">"+togassets+"</a></li>\n<li><a class=\"toggleshow\" href=\"javascript:;\" onclick=\"toggleItem('imageshelplayer',this);this.blur();\" title=\""+toghelp+"\">"+toghelp+"</a></li>\n";
 insertAfter(ul,document.getElementById('assetsmarker'));

 // create paragraph for tags help text
 var h3=etl.getElementsByTagName('h3')[0];
 var p=document.createElement('p');
 p.innerHTML=document.getElementById('tagshelptxt').value;
 insertAfter(p,h3);

 // convert existing tags list to clickable links for field insertion
 var taglist=etl.getElementsByTagName('li');
 for(var a=0; a<taglist.length; a++){
  var t=taglist[a].innerHTML;
  var link='<a href="javascript:;" rel="tag" onclick="insertTag(\''+trim(t)+'\');this.blur();">'+trim(t)+'</a>';
  taglist[a].innerHTML=link;
 }

 // hide objects by default
 var obj=document.getElementById('existingtagslist').style.display='none';
 var obj=document.getElementById('tagshelp').style.display='none';
 var obj=document.getElementById('imageshelplayer').style.display='none';
 var obj=document.getElementById('assetslayers').style.display='none';
}

addLoadEvent(initToggleLayers);

function imageData(path,alt,cls,size,date){
 document.getElementById('useimage').value='<img src="'+path+'" alt="'+repStr(alt,'"','&#34;')+'" class="'+cls+'" />';
 var imagedesc=document.getElementById('imagedescdata');
 var imageclass=document.getElementById('imageclassdata');
 imagedesc.innerHTML="<em>"+(imagedesc.getElementsByTagName('em')[0].innerHTML)+"</em>"+alt;
 imageclass.innerHTML="<em>"+(imageclass.getElementsByTagName('em')[0].innerHTML)+"</em>"+cls;
}

function findPosX(obj){
 var curleft = 0;
 if(obj.offsetParent){
  while(obj.offsetParent){
   curleft += obj.offsetLeft;
   obj = obj.offsetParent;
  }
 }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;
  }
 }else if(obj.y){
  curtop += obj.y;
 }
 return curtop;
}

