﻿/// <reference path="yui/utilities/utilities.js" />
/// <reference path="yui/container/container_core-min.js" />
/// <reference path="yui/menu/menu-min.js" />
/// <reference path="dhtml/yui/button/button-min.js" />
var RS = {};
RS.draw = {};
RS.util = {};
RS.effect = {};

RS.util.GetSpace = function (obj,target){
	iebody=(document.compatMode=="CSS1Compat")? document.documentElement : document.body
	var scrollt=(iebody.scrollTop)? iebody.scrollTop : window.pageYOffset;
	scrollt = scrollt || 0;
	var scrolll=(iebody.scrollLeft)? iebody.scrollLeft : window.pageXOffset;
	scrolll = scrolll || 0;
	//var docwidth=(iebody.clientWidth)? iebody.clientWidth : window.innerWidth;
	//var docheight=(iebody.clientHeight)? iebody.clientHeight: window.innerHeight;
	var docwidth=(window.innerWidth)? window.innerWidth : iebody.clientWidth;
	var docheight=(window.innerHeight)? window.innerHeight : iebody.clientHeight;
	target = target || document;
	if(typeof obj == ('string')){obj = target.getElementById(obj);}
	var curwidth = obj.offsetWidth; var curheight = obj.offsetHeight;
	var curleft = curtop = 0;
	if (obj.offsetParent) {
		curleft = obj.offsetLeft
		curtop = obj.offsetTop
		while (obj = obj.offsetParent) {
			curleft += obj.offsetLeft
			curtop += obj.offsetTop
		}
	}
	//alert([curleft,curtop,curwidth,curheight,docwidth,docheight,scrolll,scrollt]);
	return [curleft,curtop,curwidth,curheight,docwidth,docheight,scrolll,scrollt];
};

RS.util.JSON = {
	get:function(sURL,func){
		var handleSuccess = function(o){
			func(eval(o.responseText));
		};
		var handleFailure = function(o){
			alert('failed');
		};
		var callback = {
			success:handleSuccess,
			failure:handleFailure
		};
		var transObj = YAHOO.util.Connect.asyncRequest('GET',sURL,callback);
	}
};

RS.util.AJAX = {
	get:function(sURL,func){
		if(!RS.util.AJAX[sURL]){
			var handleSuccess = function(o){
				func(o.responseText);
				RS.util.AJAX[sURL] = o.responseText;
			};
			var handleFailure = function(o){
				alert('failed');
			};
			var callback = {
				success:handleSuccess,
				failure:handleFailure
			};
			var transObj = YAHOO.util.Connect.asyncRequest('GET',sURL,callback);
		}
		else{
			func(RS.util.AJAX[sURL]);
		}
	}
};

RS.util.ToJDate = function(d,sep){
	sep = sep || '/';
	var M = "" + (d.getMonth()+1); 
    var MM = "0" + M; 
    MM = MM.substring(MM.length-2, MM.length); 
    var D = "" + (d.getDate()); 
    var DD = "0" + D; 
    DD = DD.substring(DD.length-2, DD.length); 
    var YYYY = "" + (d.getFullYear());
    return MM+sep+DD+sep+YYYY;
};

RS.util.PresentForm = function(){
	var eleForms;
	var clearFieldsetsAndLabels = function(){
		var eleDiv;
	 	var eleFieldsets;
	 	var eleLabels;
		for (i=0;eleForms[i];i++){
			eleFieldsets = eleForms[i].getElementsByTagName("fieldset");
			eleLabels = eleForms[i].getElementsByTagName("label");
			for(ii=0;eleFieldsets[ii];ii++){
				eleFieldsets[ii].className= '';
			}
			for(ii=0;eleLabels[ii];ii++){
				eleLabels[ii].className= '';
			}
		}
		if(document.getElementById('RS-FirstFormHelp')!=null){
			document.getElementById('RS-FirstFormHelp').className = '';
		}
	};
	var applyFunctionToFormElements = function(obj){
		for (i=0;obj[i];i++){
			if(obj[i].className != "button"){
				obj[i].onfocus = function (){
					clearFieldsetsAndLabels();
					this.parentNode.parentNode.parentNode.className = "fieldsetHighlight";
					if(this.previousSibling){
						try{
							this.previousSibling.className = "labelHighlight";
						}catch(Error){}
					}
					else if(this.nextSibling){
						try{
							this.nextSibling.className = "labelHighlight";
						}catch(Error){}
					}
				}
			}
		}
	};
	if (document.getElementsByTagName){
		eleForms = YAHOO.util.Dom.getElementsByClassName('RS-Form', 'form');
		for (i=0;eleForms[i];i++){
				eleInputs = eleForms[i].getElementsByTagName("input");
				eleTextAreas = eleForms[i].getElementsByTagName("textarea");
				eleSelects = eleForms[i].getElementsByTagName("select");
				applyFunctionToFormElements(eleInputs);
				applyFunctionToFormElements(eleTextAreas);
				applyFunctionToFormElements(eleSelects);
			}
	}
};

RS.util.LoadScript = function(url){
	var e = document.createElement("script");
	e.src = url;
	e.type="text/javascript";
	document.getElementsByTagName("head")[0].appendChild(e); 
};

RS.util.TitleToToolTip = function(){
	var titletags = YAHOO.util.Dom.getElementsBy(function(el){
		if(el.getAttribute('title')){
			el.setAttribute('tip',el.getAttribute('title'));
			el.removeAttribute('title');
			el.onmousemove = function(event){
				RS.draw.ToolTip.show(event,this.getAttribute('tip'))
			}
			el.onmouseout = function(){
				RS.draw.ToolTip.hide()
			}
			return false;
		}
	});
};

// DRAW

RS.draw.DropButtons = function(){
	var buttons = YAHOO.util.Dom.getElementsByClassName('drop-menu-button','select');
	RS.draw.DropButtons.buttons = [];
	RS.draw.DropButtons.click = function(type, args, item){
		var button = RS.draw.DropButtons.buttons[item.cfg.getProperty('text').split('<!--')[1].split('-->')[0]];
		//alert(item.cfg.getProperty('text').split('<!--')[1].split('-->')[0]);
		button.uib.set('label', item.cfg.getProperty('text'));
		document.getElementById(button.id).selectedIndex = item.index;
		var menu_items = item.parent.getItems()   
		for (var i = 0; i < menu_items.length; i++) {     
			menu_items[i].cfg.setProperty('checked', false);   
		}
		item.cfg.setProperty('checked', true);
	};
	//alert(buttons.length);
	for(i=0;buttons.length>i;i++){
		buttons[i].style.cssText = 'position: absolute; top: -2000px; visibility: hidden;';
		var items = buttons[i].options;
		RS.draw.DropButtons.buttons[i]={};
		RS.draw.DropButtons.buttons[i].items = [];
		RS.draw.DropButtons.buttons[i].id = buttons[i].id;
		
		for(ii=0;items.length>ii;ii++){
			if(!items[ii].selected){
				RS.draw.DropButtons.buttons[i].items[ii] = { text: items[ii].text+'<!--'+i+'-->', value: items[ii].value, onclick: { fn: RS.draw.DropButtons.click }, classname: 'drop-button-number'+i };
			}
			else{
				RS.draw.DropButtons.buttons[i].items[ii] = { text: items[ii].text+'<!--'+i+'-->', value: items[ii].value, onclick: { fn: RS.draw.DropButtons.click }, classname: 'drop-button-number'+i, checked: true };
			}
		}
		RS.draw.DropButtons.buttons[i].uib = new YAHOO.widget.Button({
												type: 'menu',
												label: buttons[i].options[buttons[i].selectedIndex].text,
												name: buttons[i].id,
												menu: RS.draw.DropButtons.buttons[i].items,
												container: buttons[i].parentNode });
		//RS.draw.DropButtons.buttons[i].uib.render();
	}
	
};

RS.draw.PushButton = function(obj,fn){
	
};

RS.draw.ToolTip = {
	show:function(e,text){
		var curPos = function(e){
			 if (!e) var e = window.event;
			 var cursor = {x:0, y:0};
			 if (e.pageX || e.pageY) {
				 cursor.x = e.pageX;
				 cursor.y = e.pageY;
			 }
			 else {
				 cursor.x = e.clientX +
					 (document.documentElement.scrollLeft ||
					 document.body.scrollLeft) -
					 document.documentElement.clientLeft;
				 cursor.y = e.clientY +
					 (document.documentElement.scrollTop ||
					 document.body.scrollTop) -
					 document.documentElement.clientTop;
			 }
			return cursor;
		};
		var ie=document.all && !window.opera
		var dom=document.getElementById
		iebody=(document.compatMode=="CSS1Compat")? document.documentElement : document.body
		var scrollAmount = (document.layers) ? window.pageYOffset : document.body.scrollTop;
		var docwidth=(ie)? iebody.clientWidth : window.innerWidth
		var docheight=(ie)? iebody.clientHeight : window.innerHeight
		if(!document.getElementById('rsui_tooltip_container')){
			var tooltip = document.createElement('DIV');
			tooltip.id = 'rsui_tooltip_container';
			//tooltip.style.position = 'absolute';
			
			document.getElementsByTagName('body')[0].insertBefore(tooltip,document.getElementsByTagName('body')[0].childNodes[0]);
			
		}
		if(!document.getElementById('rsui_tooltip_container').getElementsByTagName('table')[0]){
			var table = '<table border="0" cellspacing="0" cellpadding="0" class="rsuitooltip" style="visibility: hidden; position: absolute;"><tr><td width="8" height="8" class="tl"><span></span></td><td height="8" class="t"><span></span></td><td width="8" height="8" class="tr"><span></span></td></tr><tr><td width="8" class="l"><span></span></td><td valign="top" class="rsuitooltip-inner"><div class="content">';
			table = table + text;
			table = table + '</div></td><td width="8" class="r"><span></span></td></tr><tr><td width="8" height="8" class="bl"><span></span></td><td height="8" class="b"><span></span></td><td width="8" height="8" class="br"><span></span></td></tr></table>';
			document.getElementById('rsui_tooltip_container').innerHTML = table;
			var tableobj = document.getElementById('rsui_tooltip_container').getElementsByTagName('table')[0];
			
			
			if(tableobj.offsetWidth>250){
				tableobj.style.width = '250px';
			}		
			if(tableobj.offsetWidth + (curPos(e).x - 10)>docwidth){
			tableobj.style.left = (curPos(e).x - tableobj.offsetWidth + 15) + 'px';
			}
			else{
				tableobj.style.left = (curPos(e).x - 10) + 'px';
			}
			if(tableobj.offsetHeight - scrollAmount + (curPos(e).y + 5)>docheight){
			tableobj.style.top = (curPos(e).y - tableobj.offsetHeight - 15) + 'px';
			}
			else{
				tableobj.style.top = (curPos(e).y + 20) + 'px';
			}
			if(tableobj.offsetWidth>250){
				tableobj.style.width = '250px';
			}
			tableobj.style.visibility = 'visible';
		}
		else{
			var tableobj = document.getElementById('rsui_tooltip_container').getElementsByTagName('table')[0];
			
			if(tableobj.offsetWidth + (curPos(e).x - 10)>docwidth){
			tableobj.style.left = (curPos(e).x - tableobj.offsetWidth + 15) + 'px';
			}
			else{
				tableobj.style.left = (curPos(e).x - 10) + 'px';
			}
			if(tableobj.offsetHeight - scrollAmount + (curPos(e).y + 5)>docheight){
				tableobj.style.top = (curPos(e).y - tableobj.offsetHeight - 15) + 'px';
			}
			else{
				tableobj.style.top = (curPos(e).y + 20) + 'px';
			}
		}
	},
	hide:function(){
		if(document.getElementById('rsui_tooltip_container') != null){
			document.getElementById('rsui_tooltip_container').innerHTML = '';
		}
	}
};

RS.draw.AppCanvas = function(obj,content,vars){
	var width = vars.width || '400px';
	var height = vars.height || 'auto';
	if(vars.constr){
		var constr = typeof vars.constr == ('object') ? vars.constr : document.getElementById(vars.constr);
	}
	if(vars.cover){
		var cover = typeof vars.cover == ('object') ? vars.cover : document.getElementById(vars.cover);
		if(!cover.id){
			cover.id = 'RS-CoverHolder'+ Math.random();
		}
	}
	// If object does not exist, else do nothing
	//
	//vars: width, height, constr, cover
	//
	
	var centerEl = function(o){
		//if(!o){
		o = document.getElementById('RS-App-Canvas');
		//}
		var s = RS.util.GetSpace(o);
		var c = constr ? RS.util.GetSpace(constr) : false;
		var center = function(){
			if(!c){
				o.style.left = (s[4]/2) - (s[2]/2) + 'px';
				if(s[5]-s[3] > 0){
					o.style.top=s[7]+s[5]/2-s[3]/2+'px';
				}
				else{
					o.style.top = s[7] + 'px';
				}
			}
			else{
				o.style.left = (c[2]/2) - (s[2]/2) + 'px';
				var newTop = s[7]+s[5]/2-s[3]/2;
				
				if(newTop+s[3] > c[1] + c[3] && s[3]<c[3]){
				//alert('this');
					o.style.top = c[1] + c[3] - s[3] + 'px';
				}
				else if(c[1]<newTop){
					o.style.top = newTop + 'px';
				}
				else{
					o.style.top = c[1] + 'px';
				}
			}
			o.setAttribute('center',1);
		};
		if(o.getAttribute('center')==0){
			center();
		}
		else{
			if(!c){
				if(s[5]-s[3] > 0){
					center();
				}
			}
			else{
				if(s[3]+c[1] < s[5] || s[3]<c[3] && s[3]<s[5]){
					center();
				}
			}
		}
	};
	
	var growEl = function(o,start,end){
		var growfrom = start;
		var growto = end;
		(function(){
			if(!document.getElementById('RS-Display-TracerDiv')){
				var newdiv = document.createElement('div');
				newdiv.id = 'RS-Display-TracerDiv';
				document.getElementsByTagName('body')[0].insertBefore(newdiv,document.getElementsByTagName('body')[0].childNodes[0]);
			}
		})();
		var tracerObj = document.getElementById('RS-Display-TracerDiv');
		tracerObj.style.cssText = 'position: absolute; background-color: transparent; border: 1px solid #d8d8d8; z-index: 10;';
		var tracerAnim = new YAHOO.util.Anim(tracerObj,{
				left: { from: growfrom[2], to: growto[2]},
				top: { from: growfrom[3], to: growto[3]},
				width: { from: growfrom[0], to: growto[0]-2},
				height: { from: growfrom[1], to: growto[1]-2},
				opacity: { from: 60, to: 100}
			},0.3);
			tracerAnim.onComplete.subscribe(function(){
				o.style.visibility = "visible";
				tracerObj.style.display = "none";
				tracerObj.parentNode.removeChild(tracerObj);
				try{
					o.getElementsByTagName('input')[0].focus();
				}catch(Error){}
			});
			tracerAnim.animate();
	};
	
	var flashMe = function(id){
		var times = 2;
		var toblink = document.getElementById(id);
		var attributes = {
			backgroundColor: { to: '#FF0000' }
		};
		var attributestwo = {
			backgroundColor: { to: '#FFFFFF' }
		};
		var anim = new YAHOO.util.ColorAnim(toblink, attributes,.1);
		var animtwo = new YAHOO.util.ColorAnim(toblink, attributestwo,.1);
		function pulse(){
    		if(times>0){
    		times--;
				anim.animate();
				function anim2(){
					animtwo.animate();
				}
				window.setTimeout(anim2, 110);
				window.setTimeout(pulse, 220);
			}
		}
		pulse();
	};
	
	RS.draw.AppCanvas.CoverSizer = function(el){
		var con = RS.util.GetSpace(document.getElementById(el.getAttribute('conid')));
		return con;
	};
	
	var coverMe = function(display){
		var endvis = 60;
		var startvis = 0;
		var cspace = RS.util.GetSpace(cover);
		if(display == true){
			if(!document.getElementById('RS-Display-CoverDiv')){
				var newdiv = document.createElement('div');
				newdiv.id = 'RS-Display-CoverDiv';
				if(vars.flash){
					newdiv.setAttribute('flashID',vars.flash);
					newdiv.onclick = function(){
						flashMe(this.getAttribute('flashID'));
					}
				}
				if(document.all){
					newdiv.setAttribute('conid',cover.id);
					document.getElementsByTagName('body')[0].insertBefore(newdiv,document.getElementsByTagName('body')[0].childNodes[0]);
					newdiv.style.cssText = 'background-color: #000; position: absolute; top: 0; left: 0; bottom: 0; width: 100%; height: 100%; left: expression(RS.draw.AppCanvas.CoverSizer(this)[0] +\'px\'); top: expression(RS.draw.AppCanvas.CoverSizer(this)[1] +\'px\'); width: expression(RS.draw.AppCanvas.CoverSizer(this)[2] +\'px\'); height: expression(RS.draw.AppCanvas.CoverSizer(this)[3] +\'px\'); z-index: 3; display: none;';
					
				}
				else{
					newdiv.style.cssText = 'background-color: #000; position: absolute; top: 0; left: 0; bottom: 0; width: 100%; height: 100%; z-index: 3; display: none;';
					cover.style.position = 'relative';
					cover.appendChild(newdiv);
				}
				
				function show(){
					newdiv.style.filter = "alpha(opacity=" + startvis + ")";
					newdiv.style.opacity = "." + startvis;
					newdiv.style.display = "block";
					startvis = startvis + 10;
					if (startvis < endvis){
						window.setTimeout(show, 5);
					}
				}
				show();	
			}
		}
		else{
			var thisDiv = document.getElementById('RS-Display-CoverDiv');
			function hide(){
				thisDiv.style.filter = "alpha(opacity=" + endvis + ")";
				thisDiv.style.opacity = "." + endvis;
				endvis = endvis - 10;
				if (endvis > startvis){
					window.setTimeout(hide, 5);
				}
				else{
					//thisDiv.parentNode.style.position = '';
					thisDiv.style.display = "none";
					thisDiv.parentNode.removeChild(thisDiv);
				}
			}
			hide();	
		}
	};
	
	var displayEl = function(){
		var a = document.createElement('div');
		a.id = 'RS-App-Canvas';
		a.className = 'RS-App-Canvas';
		a.setAttribute('center',0);
		a.style.cssText = 'position: absolute; visibility: hidden; z-index: 9; width: '+width+';';
		if(typeof content == ('object')){
			a.appendChild(content);
		}
		else{
			a.innerHTML = content;
		}
		a.onclick = function(){
		//RS.draw.AppCanvas.remove();
		}
		document.getElementsByTagName('body')[0].insertBefore(a,document.getElementsByTagName('body')[0].childNodes[0]);
		centerEl(a);
		var aspace = RS.util.GetSpace(a);
		var ospace = typeof obj == 'object' ? RS.util.GetSpace(obj) : [aspace[4]/2,aspace[5]/2,0,0,aspace[4],aspace[5],aspace[6],aspace[7]];
		growEl(a,[ospace[2],ospace[3],ospace[0],ospace[1]],[aspace[2],aspace[3],aspace[0],aspace[1]]);
		if(vars.cover){coverMe(true);}
		YAHOO.util.Event.addListener(window, 'resize', centerEl);
		YAHOO.util.Event.addListener(window, 'scroll', centerEl);
		//addEvent(window, 'resize', centerEl);
		//addEvent(window, 'scroll', centerEl);
		
	};
	
	if(!document.getElementById('RS-App-Canvas')){
		displayEl();
	}
	
	RS.draw.AppCanvas.remove = function(){
		var r = document.getElementById('RS-App-Canvas');
		//removeEvent(window, 'resize', centerEl);
		//removeEvent(window, 'scroll', centerEl);
		YAHOO.util.Event.removeListener(window, 'resize', centerEl);
		YAHOO.util.Event.removeListener(window, 'scroll', centerEl);
		r.innerHTML = '';
		r.parentNode.removeChild(r);
		coverMe(false);
		//delete RS.draw.AppCanvas.center;
	};
	//RS.draw.AppCanvas.center = centerEl;
	//[curleft,curtop,curwidth,curheight,docwidth,docheight,scrolll,scrollt]

};

RS.draw.DialogBox = function(orig,content,title,vars){
	//RS.draw.AppCanvas(this,'Some Content!!!!',{
	//		cover:document.getElementsByTagName('body')[0]
	//	});
	if(!content){
		return false;
	}
	var writeContent = function(c){
		contentarea.innerHTML = c;
		//if(RS.draw.AppCanvas.center){
		//	RS.draw.AppCanvas.center();
		//}
		document.getElementsByTagName('body')[0].style.cursor = '';
		drawthis();
	};
	
	title = title || 'Dialog Box';
	var container = document.createElement('div');
	container.id = 'RS-DialogBox';
	var titlebar = document.createElement('h3');
	titlebar.className = 'titlebar';
	titlebar.innerHTML = title;
	var close = document.createElement('a');
	close.className = 'close';
	close.href= '#';
	close.innerHTML = 'Close';
	close.onclick = function(){
		RS.draw.AppCanvas.remove();
		return false;
	}
	var contentarea = document.createElement('div');
	contentarea.className = 'content';
	container.appendChild(titlebar);
	container.appendChild(contentarea);
	container.appendChild(close);
	var drawthis = function(){
		if(vars.width){
			RS.draw.AppCanvas(orig,container,{
					cover:document.getElementsByTagName('body')[0],
					flash:'RS-DialogBox',
					width:vars.width
				});
		}
		else{
			RS.draw.AppCanvas(orig,container,{
					cover:document.getElementsByTagName('body')[0],
					flash:'RS-DialogBox'
				});
		}
		if(vars.callback){
			vars.callback();
		}
	}
	if(vars.type == 'html'){
		contentarea.innerHTML = content;
		drawthis();
	}
	else if(vars.type == 'innerhtml'){
		contentarea.innerHTML = document.getElementById(content).innerHTML;
		drawthis();
	}
	else if(vars.type == 'obj'){
		contentarea.appendChild(content);
		drawthis();
	}
	else{
		document.getElementsByTagName('body')[0].style.cursor = 'wait';
		RS.util.AJAX.get(content,writeContent);
	}
	
	
	//setTimeout(drawthis,500);
};


// EFFECTS
RS.effect.Fade = function(id, options){
	var speed = Math.round(options.time / 100) || Math.round(500 / 100); 
	if(options.inout == 'out' || !options.inout){
		var opstart = 100, opend = 0;
	}
	else if(options.inout == 'in'){
		var opstart = 0, opend = 100;
	}
	var timer = 0;
	
	if(opstart > opend) { 
        for(i = opstart; i >= opend; i--) { 
            setTimeout("RS.effect.Fade.changeOp(" + i + ",'" + id + "')",(timer * speed)); 
            timer++; 
        } 
        if(options.hide){
			setTimeout("document.getElementById('"+id+"').style.visibility = 'hidden'",(timer * speed));
        }
        if(options.callback){
			setTimeout(callback,(timer * speed));
        }
    } else if(opstart < opend) { 
		if(options.unhide){
			setTimeout("document.getElementById('"+id+"').style.visibility = 'visible'",(timer * speed));
        }
        for(i = opstart; i <= opend; i++) 
            { 
            setTimeout("RS.effect.Fade.changeOp(" + i + ",'" + id + "')",(timer * speed)); 
            timer++; 
        } 
        if(options.callback){
			setTimeout(callback,(timer * speed));
        }
    }
};

RS.effect.Fade.changeOp = function(opacity, id){
	var object = document.getElementById(id).style; 
		object.opacity = (opacity / 100); 
		object.MozOpacity = (opacity / 100); 
		object.KhtmlOpacity = (opacity / 100); 
		object.filter = "alpha(opacity=" + opacity + ")"; 
};