if(typeof orato != 'object')
  orato = {};

// User Bar Area
orato.userBarLoginRegisterSlideUp = null;
orato.userBarLoginRegisterSlideDown = null;
orato.userBarLoginRegisterCurrentAnimation = null;
orato.userBarShowLogin = function(event) {
	orato.userBarLoginRegisterCurrentAnimation = orato.userBarLoginRegisterSlideUp;
	orato.userBarLoginRegisterCurrentAnimation.play();
	event.stopPropagation();
	event.preventDefault();
	dojo.stopEvent(event);
};
orato.userBarShowRegister = function(event) {
	userBarLoginRegisterCurrentAnimation = orato.userBarLoginRegisterSlideDown;
	userBarLoginRegisterCurrentAnimation.play();
	event.stopPropagation();
	event.preventDefault();
	dojo.stopEvent(event);
};
orato.showHintImage = function(event) {
	var e = event.target;
	if(e.value=='')
		dojo.addClass(e,'form-element-hint-'+e.name);
};
orato.hideHintImage = function(event) {
	var e = event.target;
	dojo.removeClass(e,'form-element-hint-'+e.name);
};
orato.subItemTimeouts = {};
orato.subItemTimeoutArg = {};
orato.openSubItem = {};
orato.initSubItems = function() {
	var groups = dojo.query('.show-toggle-group');
	for(var i=0;i<groups.length;i++) {
		var g = groups[i];
		var items = dojo.query('.click-sub-item',g);
		for (var j = 0; j < items.length; j++) {
			var item = items[j];
			if(dojo.hasClass(item,'selected'))
				orato.openSubItem[g] = item;
		}
		var items = dojo.query('.hover-sub-item',g);
		for (var j = 0; j < items.length; j++) {
			var item = items[j];
			if(dojo.hasClass(item,'selected'))
				orato.openSubItem[g] = item;
		}
	}
};
orato.getPath = function(elem) {
  var path = '';
  while(elem!=dojo.doc) {
    path = elem.nodeName+'.'+path;
    elem = elem.parentNode;
  }
  return path;
}
orato.showSubItem = function(event) {
  var e = event.currentTarget.parentNode;
  var elem = orato.subItemFind(e);
  var toggleParent = orato.subItemGetToggleParent(e);

  dojo.query('.selected',toggleParent).removeClass('selected');
  
  if(orato.subItemTimeouts[orato.getPath(elem)])
		clearTimeout(orato.subItemTimeouts[orato.getPath(elem)]);
	dojo.addClass(elem,'selected');
	orato.openSubItem[orato.getPath(toggleParent)] = elem;
};
orato.hideSubItem = function(event) {
	var e = event.currentTarget.parentNode;
	var elem = dojo.query('.hover-sub-item',e)[0];
  var path = orato.getPath(elem);
  orato.subItemTimeoutArg[path] = elem;
  var timeout = setTimeout("orato.nowYouCanHide('"+path+"')",500);
	orato.subItemTimeouts[path] = timeout;
};
orato.nowYouCanHide = function(path) {
	dojo.removeClass(orato.subItemTimeoutArg[path],'selected');
};
orato.subItemFind = function(elem) {
	var sub = dojo.query('.hover-sub-item',elem)[0];
	if(!sub) 
		sub = dojo.query('.click-sub-item',elem)[0];
	if(!sub)
		return orato.subItemFindUp(elem);
	return sub;
};
orato.subItemFindUp = function(elem) {
	var sub = orato.upClass(elem,'click-sub-item');
	if(!sub)
		sub = orato.upClass(elem,'hover-sub-item');
	return sub;
};
orato.subItemGetToggleParent = function(elem) {
	var toggleParent = orato.upClass(elem,'show-toggle-group');
	if(toggleParent)
		if (orato.openSubItem[toggleParent] == undefined) 
  		orato.openSubItem[toggleParent] = {};
	return toggleParent;
};
orato.hightlight = function(event) {
	var tr = orato.upNode(event.currentTarget,'tr')
	if(tr)
		dojo.addClass(tr,'highlight');
};
orato.unhightlight = function(event) {
	var tr = orato.upNode(event.currentTarget,'tr')
	if(tr)
		dojo.removeClass(tr,'highlight');	
};
orato.upNode = function(elem, nodeName){
	if(elem==document)
		return false;
	if (elem.nodeName.toLowerCase()==nodeName)
  	return elem;
  else 
  	return orato.upNode(elem.parentNode,nodeName);		
};
orato.upRemove = function(elem, nodeName){
	if(elem==document)
		return false;
	if (elem.nodeName.toLowerCase()==nodeName) {
		elem.parentNode.removeChild(elem);
  	return true;
	}
  else 
  	return orato.upRemove(elem.parentNode,nodeName);		
};
orato.upClass = function(elem,className) {
	if(elem==document)
		return false;
	if (dojo.hasClass(elem, className))
  	return elem;
  else 
  	return orato.upClass(elem.parentNode,className);		
};
orato.upId = function(elem,id) {
	if(elem==document)
		return false;
	if (elem.id == id)
  	return elem;
  else 
  	return orato.upClass(elem.parentNode,id);		
};

orato.countChar = function(event) {
	var elem = (event.currentTarget != undefined) ? event.currentTarget : event;
	var count = elem.value.length;
	dojo.byId(elem.name+'-char-count').innerHTML = count+' characters';
};
orato.countWord = function(event) {
	var count = event.currentTarget.value.split(/\b/).length;
	dojo.byId(event.currentTarget.name+'-word-count').innerHTML = 'approx. '+count+' words';
};
orato.catchControlS = function(event) {
	if ((event.metaKey || event.ctrlKey) && event.heyChar=="s") {
  	event.stopPropagation();
		event.preventDefault();
		dojo.stopEvent(event);
  }
};
orato.nullAction = function(event) {
};
orato.duplicateRow = function(event) {
	if(!dojo.hasClass(event.currentTarget,'last-row'))
		return false;
	var records = 0;
	var tr = orato.upNode(event.currentTarget,'tr');
	dojo.query('input',tr).forEach(function(node, index, arr){
		if(node.value != '')
			records++;
	});
	if(records==0)
		return false;
	var newRow = dojo.clone(tr);
	dojo.query('.last-row',tr).removeClass('last-row');
	dojo.place(newRow,tr,'after');
	dojo.query('input',newRow).forEach(function(node, index, arr){
		node.value = '';
	});
	dojo.behavior.apply();
	return true;
};
orato.catchLink = function(event) {
	var href = event.currentTarget.getAttribute('href').replace(/^http:\/\/[^\/]*\//,'');
	if(href.charAt(0) == '#') {
		var elem = event.currentTarget;
		var stop = false;
		switch(href.substring(1)) {
			case 'edit-details':
				var formDiv = orato.upClass(elem,'form-area').getAttribute('id');
				var url = formDiv.replace(/_/g,'/');
				if(formDiv != undefined) {
					dojo.xhrGet({
						"url":url,
						"handleAs":'text',
						load: function(data) {
							dojo.place(data,formDiv,'only');
							dojo.behavior.apply();
						}
					});
				}
				stop = true;
				break;
			case 'save-details':
				var formDiv = orato.upClass(elem,'form-area').getAttribute('id');
				var form = orato.upNode(elem,'form');
				var url = form.getAttribute('action');
				if(formDiv != undefined) {
					dojo.xhrPost({
						url:url,
						load: function(data){
							dojo.byId(formDiv).innerHTML = data;
							dojo.behavior.apply();
							orato.formChanged = false;
						},
						form:form
					});
				}
				stop = true;
				break;
			case 'reject-comment':
				stop=true;
				var tr = orato.upNode(event.currentTarget,'tr');
				var id = tr.getAttribute('id').replace('comment-id-','');
				var comment = dojo.query('.comment', tr)[0].innerHTML;
				if(confirm('Are you sure you want to remove this comment\n'+comment)) { 
					var url = 'article/reject-comment/cid/'+id;
					dojo.xhrGet({
						"url":url,
						load: function(data) {
							elem = dojo.byId('comment-id-'+data);
							elem.parentNode.removeChild(elem);
						}
					});
				}
				break;

		}
		if(stop) {
			event.stopPropagation();
			event.preventDefault();
			dojo.stopEvent(event);
			event.returnValue = false;
			return false;
		}
	}
};
orato.showHoverImage = function(event) {
	var elem = event.currentTarget;
	var href = elem.getAttribute('href');
	var rawHref = href;
	href = href.replace(/^http:\/\/[^\/]*\//,'');
	href = href.replace(/^\//,'');
  var ul = orato.upNode(elem,'ul');
	dojo.query('.selected',ul).removeClass('selected');
	var li = orato.upNode(elem,'li');
	dojo.addClass(li,'selected');
  var a = orato.prevToNode(ul,'a');
  if(a===null)
    var img = orato.prevToNode(ul,'img'); 
  else
    var img = dojo.query('img',a)[0];
	var id = img.getAttribute('id');
	if(images[id] != undefined && images[id][href] != undefined) {
	  img.src = images[id][href];
	  a.href = rawHref;
	}
};
orato.prevToNode = function(elem,nodeName) {
	if(elem.nodeName.toLowerCase() == nodeName)
		return elem;
	else if(elem.previousSibling != null)
		return orato.prevToNode(elem.previousSibling, nodeName);
	else
		return false;
};
orato.scrollCategoryLeftPos = 0;
orato.scrollCategoryLeft = function(event) {
	orato.scrollCategoryLeftPos = Math.min(0,orato.scrollCategoryLeftPos+(342*3));
	dojo.fx.slideTo({
  		node: "category-scroller-slider",
  		duration: 500,
  		left: orato.scrollCategoryLeftPos,
  		top: 30
  	}).play();
};
orato.scrollCategoryRight = function(event) {
	orato.scrollCategoryLeftPos = Math.max(-2394,orato.scrollCategoryLeftPos-(342*3));
	dojo.fx.slideTo({
  		node: "category-scroller-slider",
  		duration: 500,
  		left: orato.scrollCategoryLeftPos,
  		top: 30
  	}).play();
};
orato.createNextKeyword = function(event) {
	var elem = event.currentTarget;
	if(!dojo.hasClass(elem,'last-keyword'))
		return false;
	var dd = elem.parentNode;
	var newElem = dojo.clone(elem);
	var oldName = newElem.getAttribute('name');
	var oldNum = parseInt(oldName.replace(/^([^0-9]+)([0-9]+)$/,'$2'));
	var num = oldNum+1;
	var name = oldName.replace(/^([^0-9]+)([0-9]+)$/,'$1')+""+num;
	newElem.setAttribute('name',name);
	newElem.id = name;
	
	var newDt = dojo.doc.createElement('dt');
	var newDd = dojo.doc.createElement('dd');
	
	dojo.place(newDt,dd,'after');
	dojo.place(newDd,newDt,'after');
	dojo.place(newElem,newDd,'top');
	
	dojo.removeClass(elem,'last-keyword');
	
	dojo.behavior.apply();
};
orato.recordRecommend = function(event) {
	dojo.xhrGet({
		"content":{"url":dojo.doc.location.href,"target":event.currentTarget.href},
		"url":"article/recommend",
		load: function(data) {
			return true;
		}
	});
};

orato.formChangeData = {};
orato.formChanged = 0;
orato.unsavedMessage = '';
orato.stopUnload = function(event) {
	if(!orato.formChanged)
		return;
  var msg = '';
  inFlash = false;
	try {
		if(event.pageX != undefined) {
			var px = event.pageX;
			var py = event.pageY;
			dojo.query('.media-upload-container').forEach(function(node, index, nodeList){
				var coords = dojo.coords(node,true);
				if(px >= coords.x && px <= (coords.x + coords.w) && py >= coords.y && (py <= coords.y + coords.h))
					inFlash = true;
			});
		}
	} catch(e) {
		// Ignore	
	}
  if(!inFlash) {
		if(orato.unsavedMessage!='')
	    var msg = orato.unsavedMessage;
		else
			var msg = 'You have unsaved changes on this page. If you continue these changes will be lost.';
	
    event.returnValue = msg;
    return msg;
  }
};
dojo.connect(window, "onbeforeunload", orato, "stopUnload");

// Add Behaviors
dojo.addOnLoad(function() {
	if (dojo.byId("user_forms") != null) {
  	orato.userBarLoginRegisterSlideUp = dojo.fx.slideTo({
  		node: "user_forms",
  		duration: 500,
  		left: 0,
  		top: -25
  	});
  	orato.userBarLoginRegisterSlideDown = dojo.fx.slideTo({
  		node: "user_forms",
  		duration: 500,
  		left: 0,
  		top: 0
  	});
  	//console.log(typeof hasLoggedIn);
  	if(typeof hasLoggedIn != 'undefined') {
  	  orato.userBarLoginRegisterCurrentAnimation = orato.userBarLoginRegisterSlideUp;
  	  orato.userBarLoginRegisterCurrentAnimation.play();
  	}
	}
	
	if(dojo.isFF)
		dojo.byId('user-agent-css-override').href='css/ff.css';
	else if(dojo.isSafari && dojo.isSafari>=4)
		dojo.byId('user-agent-css-override').href='css/safari-4.css';
	else if(dojo.isSafari)
		dojo.byId('user-agent-css-override').href='css/safari.css';

	orato.initSubItems();
	
	dojo.behavior.add({
		'#user_login_link': {
			onclick:orato.userBarShowLogin
		},
		'#user_register_link': {
			onclick:orato.userBarShowRegister
		},
		'.form-element-hint': {
			onfocus:orato.hideHintImage,
			onblur:orato.showHintImage
		},
		'.show-subitem-on-hover': {
			onmouseover: orato.showSubItem,
			onmouseout: orato.hideSubItem
		},
		'.hover-sub-item': {
			onmouseover: orato.showSubItem,
			onmouseout: orato.hideSubItem
		},
		'.show-subitem-on-click': {
			onclick: orato.showSubItem
		},
		'.highlight-hover > tr': {
			onmouseover:orato.hightlight,
			onmouseout:orato.unhightlight,
			found:function(elem) { console.log(elem); }
		},
		'.show-image-on-hover > li > a': {
			onmouseover:orato.showHoverImage
		},
		'.char-count': {
			onkeyup:orato.countChar,
			found:orato.countChar
		},
		'.word-count': {
			onkeyup:orato.countWord
		},
		'body': {
			onkeydown:orato.catchControlS
		},
		'a': {
			onclick:orato.catchLink
		},
		'.last-row': {
			onblur:orato.duplicateRow
		},
		'.last-keyword': {
			onfocus:orato.createNextKeyword
		},
		'#category-left-button': {
			onclick:orato.scrollCategoryLeft
		},
		'#category-right-button': {
			onclick:orato.scrollCategoryRight
		},
		'.jump-to-year > li': {
			onclick:function(event) {
				var elem = event.currentTarget;
				var ul = orato.upNode(elem,'ul');
				dojo.query('.jump-to-year > .current').removeClass('current');
				dojo.addClass(elem,'current');
				dojo.query('.jump-to-month > .current').removeClass('current');
				dojo.query('.year-'+elem.innerHTML).addClass('current');
			}
		},
		'.reader-recommend': {
			onclick:orato.recordRecommend
		},
		"#center-wrapper input[type='text']":{
			found:function(elem){orato.formChangeData[elem.name]=elem.value},
			onkeyup:function(event){var elem=event.currentTarget;orato.formChanged+=(orato.formChangeData[elem.name]!=elem.value?1:-1)}
		},
		"#center-wrapper input[type='checkbox']":{
			found:function(elem){orato.formChangeData[elem.name]=elem.checked;},
			onclick:function(event){var elem=event.currentTarget;orato.formChanged+=(orato.formChangeData[elem.name]!=elem.checked?1:-1);}
		},
		"form":{
			onsubmit:function(){orato.formChanged=0;}
		}
	});
//	console.log('Applying Behaviors');
	dojo.behavior.apply();
	(function() { var f = document.getElementById('cse-search-box'); if (!f) { f = document.getElementById('searchbox_demo'); } if (f && f.q) { var q = f.q; var n = navigator; var l = location; if (n.platform == 'Win32') { q.style.cssText = 'border: 1px solid #ff0000; padding: 2px;'; } var b = function() { if (q.value == '') { q.style.background = '#FFFFFF url(../images/i-search-bg.png) left bottom no-repeat'; } }; var f = function() { q.style.background = '#ffffff'; }; q.onfocus = f; q.onblur = b; if (!/[&?]q=[^&]/.test(l.search)) { b(); } } })(); 
});

function setFormFieldValue(id,value) {
	var elem=dojo.byId(id);
	if(orato.formChangeData[elem.name]==undefined)
		orato.formChangeData[elem.name]=dojo.byId(id).value;
	orato.formChanged=(orato.formChangeData[elem.name]!=value);	
  document.getElementById(id).value = value;
  return void(0);
}
function addImageCaption(id,idmedia) {
  if(dojo.doc.getElementById('caption_'+idmedia) == null) {
    dojo.xhrGet({
      "url":'upload/caption/idmedia/'+idmedia,
      load: function(data) {
        dojo.place(data,id,'last');
      }
    });
  }
  return void(0);
}
function removeImageCaption(idmedia) {
  if(dojo.doc.getElementById('caption_'+idmedia) != null) {
    var elem = dojo.doc.getElementById('caption_'+idmedia);
    elem.parentNode.removeChild(elem);
  }
  return void(0);
}
function setFocus(id) {
//  alert(dojo.doc.getElementById(id).outerHTML);
  if(dojo.isIE)
    window.document[id].focus();
  else
    dojo.doc.getElementById(id).focus();
//  
}
function resizeObject(id,value) {
	document.getElementById(id).height = value+'px';
	return void(0);
}
function setCaption(id,caption) {
  document.getElementById(id).innerHTML = caption; 
}

