/** BROWSER DETECT **/
var browserVersion=0;
var IE=false;
var FF=false;
if (navigator.appVersion.indexOf("MSIE")!=-1) browserVersion=parseFloat(navigator.appVersion.split("MSIE")[1]);
if (browserVersion>=5.5) IE=true;

browserVersion=0;
if(navigator.userAgent.indexOf("Firefox")!=-1) browserVersion = parseInt(navigator.userAgent.charAt(navigator.userAgent.indexOf("Firefox")+8));
if(browserVersion>0) FF=true;

var eyeCandyLevel = 2; // 0: none, 1:compat, 2:high(IE)

/* pulling/fading */
var activeDiv;
var destHeight;
var savedHeights = new Array();

function push(divId) {
	activeDiv = document.getElementById('node'+divId);
	document.getElementById('nodeButton'+activeId).className = 'rootCloseMe';
	destHeight = savedHeights[divId]*1;
	var speed = 200 / activeDiv.offsetHeight;
	if (window.pullAction)
	    clearInterval(pullAction);
	if (window.pushAction)
	    clearInterval(pushAction);
	pushAction = setInterval("pushDiv()", speed);
}

function pull(divId, height) {
	activeDiv = document.getElementById('node'+divId);
	document.getElementById('nodeButton'+activeId).className = 'rootOpenMe';
	activeDiv.style.height = activeDiv.offsetHeight;
	var speed = 200 / activeDiv.offsetHeight;
	savedHeights[divId] = parseInt(activeDiv.style.height);
	destHeight = height;
	if (window.pullAction)
	    clearInterval(pullAction);
	if (window.pushAction)
	    clearInterval(pushAction);
	pullAction = setInterval("pullDiv()", speed);
}

function pullDiv() {
	if (activeDiv.offsetHeight > destHeight && activeDiv.offsetHeight > 30) {
	    activeDiv.style.height = (parseInt(activeDiv.style.height) - 30)+'px';
	}
	else if (window.pullAction) {
	    clearInterval(pullAction);
	    activeDiv.style.height = destHeight;
	}
}

function pushDiv() {
	if (activeDiv.offsetHeight < destHeight)
	{
	    activeDiv.style.height = (parseInt(activeDiv.style.height) + 30)+'px';
	}
	else if (window.pushAction)
	{
	    activeDiv.style.height = destHeight;
	    clearInterval(pushAction);
	}
}
function rect() {
	this.x = 0;
	this.y = 0;
	this.w = 0;
	this.h = 0;
}
function zoom(id, startRect, endRect, millisec) {
	if(eyeCandyLevel == 0) {
	    setTimeout("changeZoom({x:" + endRect.x + ", y:"+endRect.y+", w:"+endRect.w+", h:"+endRect.h+"}, '" + id + "')", millisec);
	    return;
	}
	// for now, zoom in 10 steps
	var speed = Math.round(millisec / 10);
	var step = new rect();
	step.x = ((endRect.x-startRect.x)/ 10);
	step.y = ((endRect.y-startRect.y)/ 10);
	step.w = ((endRect.w-startRect.w)/ 10);
	step.h = ((endRect.h-startRect.h)/ 10);
	var timer = 0;
	changeZoom(startRect, id)
	setTimeout("changeZoom({x:" + endRect.x + ", y:"+endRect.y+", w:"+endRect.w+", h:"+endRect.h+"}, '" + id + "')", millisec);
	for(i = 1; i < 10; i++)
	{
	    var r = new rect();
	    r.x = startRect.x + timer*step.x;
	    r.y = startRect.y + timer*step.y;
	    r.w = startRect.w + timer*step.w;
	    r.h = startRect.h + timer*step.h;
	    setTimeout("changeZoom({x:" + r.x + ", y:"+r.y+", w:"+r.w+", h:"+r.h+"}, '" + id + "')", (timer * speed));
	    timer++;
	}
}
function changeZoom(r, id) {
	try {
	    var object = document.getElementById(id).style;
	} catch(err) {
	    return;
	}
	if(!object)
	    return;
	object.top = r.y;
	object.left= r.x;
	object.width= r.w;
	object.height= r.h;
}
function opacity(id, opacStart, opacEnd, millisec) {
	if(eyeCandyLevel == 0) {
	    setTimeout("changeOpac(" + opacEnd + ",'" + id + "')",millisec);
	    return;
	}
	// for now, fade in 10 steps
	var speed = Math.round(millisec / 10);
	var timer = 0;
	changeOpac(opacStart, id)
	setTimeout("changeOpac(" + opacEnd + ",'" + id + "')",millisec);

	if(opacStart > opacEnd) {
	    for(i = 9; i > 0; i--)
	    {
	        setTimeout("changeOpac(" + i*10 + ",'" + id + "')",(timer * speed));
	        timer++;
	    }
	} else if(opacStart < opacEnd) {
	    for(i = 1; i < 10; i++)
	    {
	        setTimeout("changeOpac(" + i*10 + ",'" + id + "')",(timer * speed));
	        timer++;
	    }
	}
}

function changeOpac(opacity, id) {
	try {
	    var object = document.getElementById(id).style;
	} catch(err) {
	    return;
	}
	if(!object)
	    return;
	object.display='inline';
	if(opacity==0)
	    object.display='none';
	object.opacity = (opacity / 100);
	object.MozOpacity = (opacity / 100);
	object.KhtmlOpacity = (opacity / 100);
	object.filter = "progid:DXImageTransform.Microsoft.Alpha(opacity=" + opacity + ")";
}

/* helpers */

function RunCommand(cmd) {
	var scriptElem = document.createElement('script');
	scriptElem.setAttribute('src','/editor/'+cmd);
	scriptElem.setAttribute('defer','true');
	scriptElem.setAttribute('type','text/javascript');
	document.getElementsByTagName('head')[0].appendChild(scriptElem);
}


function findPosX(obj)
{
	var curleft = 0;
	if (obj.parentElement && 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.parentElement && obj.offsetParent)
	{
	    while (obj.offsetParent)
	    {
	        curtop += obj.offsetTop
	        obj = obj.offsetParent;
	    }
	}
	else if (obj.y)
	    curtop += obj.y;
	return curtop;
}

var mouseX = 0;
var mouseY = 0;
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)  {
	    mouseX = e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;
	    mouseY = e.clientY + document.body.scrollTop + document.documentElement.scrollTop;
	}
}
function trimWhiteSpaces(source)
{
	var temp = new Array();

	temp = source.split("\n");
	source = temp.join("");
	temp = source.split(" ");
	source = temp.join("");
	temp = source.split("\t");
	source = temp.join("");

	return source;
}

function joinWhiteSpaces(source)
{
	var temp = new Array();

	temp = source.split("\n");
	source = temp.join(" ");
	temp = source.split("\t");
	source = temp.join(" ");

	return source;
}

function jsUnescape(source)
{
	var temp= new Array();

	temp= source.split("&quot;");
	source = temp.join("\"");
	temp = source.split("&apos;");
	source = temp.join("\'");
	temp= source.split("&amp;");
	source = temp.join("&");
	temp = source.split("&lt;");
	source = temp.join("<");
	temp = source.split("&gt;");
	source = temp.join(">");

	return source;
}

function underline(tagname) {
	var labels = document.getElementsByTagName(tagname);
	for (var i = 0; i < labels.length; i++) {
	    var accesskey = labels[i].getAttribute('accesskey');
	    if (accesskey) {
	        var link = labels[i];
	        var linktext = link.childNodes[0].nodeValue;
	        var keypos = linktext.indexOf(accesskey);
	        var firstportion = linktext.substring(0,keypos);
	        var keyportion = linktext.substring(keypos,keypos+1);
	        var lastportion = linktext.substring(keypos+1,linktext.length);
	        link.childNodes[0].nodeValue = firstportion;
	        var s = document.createElement("span");
	        s.className='shortcut';
	        var span = link.appendChild(s);
	        var keyt = document.createTextNode(keyportion);
	        span.appendChild(keyt);
	        var lastt = document.createTextNode(lastportion);
	        link.appendChild(lastt);
	    }
	}
}
/* CSS methods */
function CSSToggle(cssClass,cssName,on,off) {
	var cssRules;
	if (document.all) cssRules = 'rules';
	else if (document.getElementById) cssRules = 'cssRules';

	for (var S = 0; S < document.styleSheets.length; S++)
	    for (var R = 0; R < document.styleSheets[S][cssRules].length; R++)
	        if (document.styleSheets[S][cssRules][R].selectorText == cssClass){
	            if(document.styleSheets[S][cssRules][R].style[cssName] == on)
	                document.styleSheets[S][cssRules][R].style[cssName] = off;
	            else
	                document.styleSheets[S][cssRules][R].style[cssName] = on;
	            return;
	            }
}

function CSSUpdate(cssClass,cssName,cssValue) { //http://www.shawnolson.net/a/503/
	var cssRules;
	if (document.all) cssRules = 'rules';
	else if (document.getElementById) cssRules = 'cssRules';

	for (var S = 0; S < document.styleSheets.length; S++){
	    for (var R = 0; R < document.styleSheets[S][cssRules].length; R++){
	        if (document.styleSheets[S][cssRules][R].selectorText == cssClass) {
	            document.styleSheets[S][cssRules][R].style[cssName] = cssValue;
	            return;
	            }
	    }
	}
}
function setStyle(objId, style, value){
alert('set style '+objId);
   document.getElementById(objId).style[style]= value;
}

function Trim(source) {
  source = source.replace( /^\s+/g, "" );// strip leading
  return source.replace( /\s+$/g, "" );// strip trailing
}

function getCookie(name)
{
 var cookie = document.cookie;
 var prefix = name + "=";
 var begin = cookie.indexOf("; " + prefix);
 //if its the only cookie
 if (begin == -1)
 {
  begin = cookie.indexOf(prefix);
  if (begin != 0) return null;
 }
 else
 {
  //go two characters one for ";" and one for space " "
  begin += 2;
 }
 //find the length of the cookie
 var end = document.cookie.indexOf(";", begin);
 if (end == -1)
 {
  end = cookie.length;
 }
 //return the value
 return cookie.substring(begin + prefix.length, end);
}
function GetQuerystring(key)
{
 var qs = false;
 try {
  var qs=location.search.substring(1,location.search.length);
 } catch (e) {}

 if (!qs || qs.length == 0) return;
 qs = qs.replace(/\+/g, ' ');
 var args = qs.split('&');
 for (var i=0;i<args.length;i++)
 {
  var pair = args[i].split('=');
  name = unescape(pair[0]);
  if(name==key) {
   if (pair.length == 2)
	return unescape(pair[1]);
   else
	return false;
  }
 }
 return false;
}

/** SYSTEM METHODS **/
var EventStore = new Array();
function EventItem(obj, eName, handler) {
	this.obj = obj;
	this.eName = eName;
	this.handler = handler;
}
function AttachEvent(elementObj, eventName, eventHandlerFunctionName)
{
	var item = new EventItem(elementObj, eventName, eventHandlerFunctionName);
	EventStore[EventStore.length] = item;
	if(!elementObj) {
	    return;
	}
	if (elementObj.addEventListener)
	{
	    elementObj.addEventListener(eventName, eventHandlerFunctionName, false);
	}
	else if (elementObj.attachEvent)
	{
	    elementObj.attachEvent('on' + eventName, eventHandlerFunctionName);
	}
	else
	{
	    var currentEventHandler = elementObj['on' + eventName];
	    if (currentEventHandler == null)
	    {
	        elementObj['on' + eventName] = eventHandlerFunctionName;
	    }
	    else
	    {
	        elementObj['on' + eventName] = function(e) {
	            currentEventHandler(e);
	            eventHandlerFunctionName(e);
	        }
	    }
	}
}
function DetachEvent(elementObj, eventName, eventHandlerFunctionName)
{
	if(!elementObj) {
	    return;
	}
	if (elementObj.removeEventListener)
	{
	    elementObj.removeEventListener(eventName, eventHandlerFunctionName, false);
	}
	else if (elementObj.attachEvent)
	{
	    elementObj.detachEvent('on' + eventName, eventHandlerFunctionName);
	}
	else
	{
	    var currentEventHandler = elementObj['on' + eventName];
	    elementObj['on' + eventName] = function(e) { return true; }
	}
}
function CancelEvent(evt) {
	if (!evt) var evt = window.event;
	if (!evt) return false;
	if(evt.preventDefault)
	    evt.preventDefault();
	if (IE) {
	    evt.cancelBubble = true;
	    evt.returnValue = false;
	}
	if (evt.stopPropagation)
	    evt.stopPropagation();
	return false;
}
function tellerror(msg, url, linenumber){
window.status = msg+' '+url+' Line '+linenumber
//alert('...grmblblblm...\n'+msg+'\n'+url+'\nLine '+linenumber);
return true;
}
function SetQueryStringParameter(url, name, value) {
	if(location.search)
	{
var names = new Array();
var values = new Array();
var done = false;
var i=0;
var queryString;
if(url.indexOf('?') > 0) {
queryString = url.substring(0,url.indexOf('?'))+"?";
url = url.substring(url.indexOf('?')+1);
}
else {
queryString = url+"?";
url="";
}
var vals = unescape(url.replace(/\+/g," ")).split("&");
for(i=0;i<vals.length;i++)
{
vals[i]=vals[i].split("=");
if(!vals[i][0] || !vals[i][1] || vals[i][0].length < 1 || vals[i][1].length < 1)
continue;
names[i] = vals[i][0];
if(names[i] == name) {
values[i] = value;
done = true;
}
else {
values[i] = vals[i][1];
}
}
if(!done) {
names[i] = name;
values[i] = value;
}
	    for(i=0;i<names.length;i++)
	        queryString = queryString + names[i] + "=" + values[i] + "&";
	    return queryString;
	}
}
function SetBkg(img, src)
{
	if(!img)
	    return;
	if(IE)
	    img.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + src + "',sizingMethod='scale')";
	else
	    img.src = src;
	    //img.style.background = 'url('+src+')';
}
