var isIE  = (document.all) ? true : false;
var isDOM = (document.getElementById) ? true : false;

var klGeneric = {
	defBusyMsg 		: 'Processing, Please Wait...',
	busyMsg 		: '',
	skipAjax		: false,
	invokeField 	: '',
	invokeFunction 	: '',
	
	Goto : function (Url, win) { if (win) { newWin = top.window.open(Url,'_blank'); } else { self.location.href = Url; } },
	topGoto : function (Url) { if (top) {  if (top.kUI.winMngr.activeWindow()) { setTimeout(klGeneric.cancel,10); } top.location.href = Url; } else { self.location.href = Url; } },
	
	cancel : function (Obj) {
		var activeKUI = (kUI && kUI.winMngr.activeWindow()) ? kUI : (parent.kUI && parent.kUI.winMngr.activeWindow()) ? parent.kUI : (top.kUI) ? top.kUI : null;
		if (activeKUI) {
			if (activeKUI.winMngr.activeWindow()) {
				var activeWin = activeKUI.winMngr.stack.windows.last();
				activeWin.options.reload = (Obj && Obj.reload===true) ? true : false;
				activeWin.close(null, Obj);
			}
		}
		if (Obj && Obj.msg) {
			var cancelWin = new activeKUI.Window({
			title:(Obj.title || 'Please Note!'),
			content:Obj.msg,
			style:'padding:10px',
			width:250,height:null,
			shaded:false,
			timer:Obj.timer||2000
		});
		}
	},
	
	alert: function(Obj) {
		var activeKUI = (top.kUI) ? top.kUI : kUI;
		var alertWin = new activeKUI.Window({ 
			title:(Obj.title || 'Please Note!'),
			html:Obj.msg,
			width:Obj.width || 250,
			height:Obj.height || null,
			close:Obj.close || true,
			style:Obj.style || 'padding:20px;',
			shaded:Obj.shaded || false,
			timer:Obj.timer || null
		});
	},
	
	process : function(Obj) {
		Obj = (Obj || {});
		var processWin = new kUI.Window({ 
			title:(Obj.title || 'Processing...'),
			html:Obj.html || '<div class="anim"></div>Processing, Please Wait!',
			width:300, height:null,
			close:Obj.close || false,
			style:Obj.style || 'padding:10px;',
			shaded:Obj.shaded || false,
			timer:Obj.timer || null
		});
	},
	
	SelectState : false,
	SelectAll : function(Prefix, parentObj) 
	{ 
		var pObj = (typeof(parentObj!='undefined')) ? $(parentObj) : document.forms[0];
		var Chks = Form.getInputs(pObj,'checkbox'); 
		klGeneric.SelectState = klGeneric.allSelected = !klGeneric.SelectState; 
		if (typeof(Prefix)=="undefined") { Prefix="Dl_"; }
		Chks.each( function(idx) { 
			ChkTxt=idx.name.substring(0,Prefix.length);
			if (ChkTxt==Prefix && !idx.disabled) { idx.checked = klGeneric.SelectState; }
		});
	},
	
	tblSelectAll : function(parentObj, state)
	{
		if ($(parentObj)) {
			var rows = $(parentObj).select('tbody tr');
			rows.each(function(Obj){
				switch (state)
				{
					case 1:
						//All
						Obj.addClassName('selected');
						Obj.down('input').setValue(true);
						break;
					case 0:
						//None
						Obj.removeClassName('selected');
						Obj.down('input').setValue(false);
						break;
					case -1:
						//Invert
						Obj.toggleClassName('selected');
						Obj.down('input').setValue(!Obj.down('input').checked);
						break;
				}
			});
		}
	},
	
	tblSelectOne : function(Obj,chk) { 
		var row = $(Obj).up('tr');
		row.toggleClassName('selected');
		if (chk==1)
		{
			var state = (row.hasClassName('selected')) ? true : false;
			row.down('input').setValue(state);
		}
	},
	
	tblGetSelected : function(Obj) {
		return ($(Obj)) ? $(Obj).select('tr.selected') : [];
	},
	
	classSelect : function(parentObj, objType, state) {
		var objs = $(parentObj).select(objType);
		if (objs.size()>0)
		{
			switch (state)
			{
				case 1: objs.invoke('addClassName','selected'); break;
				case 0: objs.invoke('removeClassName','selected'); break;
				case -1: objs.invoke('toggleClassName','selected'); break;
			}
		}
	},
	
	classGetSelected : function(parentObj, objType) {
		var objs = $(parentObj).select(objType);
		return (objs.size()>0) ? objs : [];
	},

	SelectClass : function(className, parentObj) 
	{ 
		var pObj = (typeof(parentObj!='undefined')) ? $(parentObj) : document.forms[0];
		var Chks = $(pObj).select('.'+className); 
		klGeneric.SelectState =! klGeneric.SelectState; 
		Chks.each( function(idx) { 
			if (!idx.disabled) { idx.checked = klGeneric.SelectState; }
		});
		if (klGeneric.SelectState) { klGeneric.allSelected = true; }
	},
	
	allSelected : false,
	markChk : function(Obj) { if (!Obj.checked) { klGeneric.allSelected = false; }},
	
	getList : function (Prefix, Obj) {
		var itemList=[], Elmnts=[];
		var objParent = ($(Obj)) ? $(Obj) : document.forms[0];
		Chks = Form.getInputs(objParent,'checkbox');
		Hidd = Form.getInputs(objParent,'hidden');
		Elmnts = Chks.concat(Hidd);
		if (typeof(Prefix)=="undefined") { Prefix="Dl_"; }
		Elmnts.each( function(idx) { SubName=idx.name.substring(0,Prefix.length); 
		if ((idx.checked||String(idx.getAttribute('rel'))=='checked') && SubName==Prefix) { 
			itemList[itemList.length]=idx.name;
		}});
		return itemList;
	},
	
	getClassList : function (parent, className) {},
	
	getClassType : function (parent, tagName, Prefix) {
		var itemList = [];
		var Elmnts = $(parent).getElementsBySelector(tagName);
		if (Elmnts) {
			$A(Elmnts).each( function(idx) { SubName=idx.name.substring(0,Prefix.length); 
			if ((idx.checked||String(idx.getAttribute('rel'))=='checked') && SubName==Prefix) { 
				itemList[itemList.length]=idx.name;
			}});
			return itemList;
		}
	},
	
	flvPrev : function (fileID, dispType, title_str, w, h) {
		w = (Object.isNumber(w)) ? w : 640;
		h = (Object.isNumber(h)) ? h : 480;
		var flvPrevWin = new top.kUI.Window({
			title:title_str,
			src:'/play/'+fileID,
			width:parseInt(w,10), height:parseInt(h,10),
			shaded:true
		});
	},
	
	picPrev : function (Obj) {
		if ((!$(Obj.field) || $F(Obj.field)==='') && (!Obj.fullpath || Obj.fullpath.empty())) {
			klGeneric.alert({msg:'No image selected!',title:'Error Found!',timer:2500});
		}
		else {
			var imgSrc = (!Obj.fullpath) ? Obj.path+$F(Obj.field) : Obj.path+Obj.fullpath;
			var preloadImg = new Image();
			$(preloadImg).observe('load', function() { 
				imgWidth 	= preloadImg.width;
				imgHeight	= preloadImg.height;
				
				var winDims = document.viewport.getDimensions();
				var winObj = {
					width 	: imgWidth,
					height 	: imgHeight,
					pan   	: false
				};
				if (Number(imgWidth)>(winDims.width-60)) {
					winObj.pan = true; winObj.width = (winDims.width-60);
				}
				if (Number(imgHeight)>(winDims.height-60)) {
					winObj.pan = true; winObj.height = (winDims.height-60);
				}
				
				var winParams = {
					title:Obj.title || 'Preview',
					shaded:false
				};
				
				var Params = (winObj.pan) ? {
					src:'/preview/img/'+imgSrc, 
					style:'padding:5px',
					width:winObj.width, height:winObj.height 
				} : {
					img:imgSrc, imgw:winObj.width, imgh:winObj.height,
					width:null, height:null,
					style:'padding:10px 0 10px 0',
					imgtitle:imgSrc.split('/').last()
				};
				
				var prevParams = Object.extend(winParams, Params || {});
				var picPrevWin = new top.kUI.Window(prevParams);
				
			}, false).observe('error', function(){
				klGeneric.alert({msg:'Image not found!',title:'Error Found!',timer:2500});
			});
			preloadImg.src = imgSrc;
		}
	},
	
	overID 		: 'overlay',
	overZ		: 500,
	overlay 	: function (Obj) {
		var objID	= (Obj.ObjID)					? Obj.ObjID		: klGeneric.overID;
		var animate = (Obj.animate!='undefined') 	? Obj.animate 	: 1;
		var state 	= (Obj.state!='undefined') 		? Obj.state 	: 1;
		var func 	= (Obj.func)					? Obj.func 		: (state===0) ? ($(objID)) ? $(objID).remove() : null : null;
		var afterFunc	= (Obj.afterFinish)			? Obj.afterFinish : null;
		var viewPort	= document.viewport.getDimensions();
		var bodyHeight	= $(document.documentElement).getHeight();
		var className	= (Obj.transparent)			? 'overlay overlayTrans' : 'overlay';
		
		if (state!==0)
		{
			if (!$(objID)) {
				var objOverlay 	= Builder.node('div',{id:objID, className:className, style:'display:none;'});
				$(objOverlay).observe('click', func, false);
				$(document.body).insert({bottom:objOverlay});
			}
			var height = (viewPort.height>bodyHeight) ? viewPort.height : bodyHeight;
			$(objID).setStyle({height:height+'px'});
			if (animate && (Effect!==false)) { var overEffect = new Effect.Appear(objID, { duration: 0.5, from: 0.0, to: 0.4, afterFinish:afterFunc }); }
			else { $(objID).show(); } 
			$(objID).observe("mousewheel", function(event){Event.stop(event);}, false);
			$(objID).observe("DOMMouseScroll", function(event){Event.stop(event);}, false);

		}
		Try.these(afterFunc);
	},
	
	hideSelects: function(viz) {
		if (Prototype.Browser.IE) {
			selects = $A(document.getElementsByTagName('select'));
			if (selects) { selects.each(function(Obj) { $(Obj).setStyle({visibility:(viz) ? 'hidden' : 'visible'}); }); }
		}
	},
	
	pageRefresh : function () { self.location.href = self.location.href; },
	
	getPageSize : function () {
		var xScroll, yScroll;
		if (window.innerHeight && window.scrollMaxY) {	
			xScroll = document.body.scrollWidth;
			yScroll = window.innerHeight + window.scrollMaxY;
		} else if (document.body.scrollHeight > document.body.offsetHeight){ 
			xScroll = document.body.scrollWidth;
			yScroll = document.body.scrollHeight;
		} else { 
			xScroll = document.body.offsetWidth;
			yScroll = document.body.offsetHeight;
		}
		
		var windowWidth, windowHeight;
		if (self.innerHeight) { 
			windowWidth = self.innerWidth;
			windowHeight = self.innerHeight;
		} else if (document.documentElement && document.documentElement.clientHeight) { 
			windowWidth = document.documentElement.clientWidth;
			windowHeight = document.documentElement.clientHeight;
		} else if (document.body) { 
			windowWidth = document.body.clientWidth;
			windowHeight = document.body.clientHeight;
		}	
		var pageHeight = 0;
		if(yScroll<windowHeight) 	{ pageHeight = windowHeight; } else { pageHeight = yScroll; }
		var pageWidth = 0;
		if(xScroll<windowWidth) 	{ pageWidth = windowWidth; } else { pageWidth = xScroll; }
		var arrayPageSize = [pageWidth,pageHeight,windowWidth,windowHeight]; 
		return arrayPageSize;
	},
	
	getPageScroll : function() {
		var yScroll;
		if (self.pageYOffset) { yScroll = self.pageYOffset; }
		else { 
			if (document.documentElement && document.documentElement.scrollTop) { yScroll = document.documentElement.scrollTop; } 
			else { if (document.body) { yScroll = document.body.scrollTop; } } 
		}
		var arrayPageScroll = ['',yScroll];
		return arrayPageScroll;
	},

	reZebra : function (ObjID, options) {
        var ColorClass = '';
		var tag = (options && options.selector) ? options.selector : 'li';
		var ObjList = $(ObjID).select(tag);
		if (ObjList && ObjList.size()) {
			ColorClass = (ObjList.first().hasClassName('odd')) ? "even" : "odd";
            ObjList.each( function(node) {
				ColorClass = (ColorClass!="odd") ? "odd" : "even";
				node.className = ColorClass;
				$(node).observe("mouseover", function() { $(this).addClassName("highlight"); });
				$(node).observe("mouseout", function() { $(this).removeClassName("highlight"); });
			});
		}
	},
	
	cancelForm : function(divID, alertMsg) {
		function showAlert() { if (alertMsg) { inlineAlertMsg(alertMsg.title, alertMsg.msg, alertMsg.timer); } }
		Effect.SlideUp(divID, {duration:1.5, queue:'end', afterFinish:showAlert });
	},
	
	inAction : function (txt, state) {
		var inActionTxt = '';
		if ($('inAction'))
		{
			switch (state)
			{
				case 0:
					if (Effect) { var fadeEffect = new Effect.Fade('inAction', {duration:1.0}); }
					else { $('inAction').className = 'noactivity'; }
					break;
				case 1:
					inActionTxt = (txt.empty()) ? 'Processing, Please Wait...' : txt;
					$('inAction').className = 'activity';
					$('inAction').update(inActionTxt).show();
					break;
			}
		}
	},

	fixedAction : function (txt, state) {
		var fixedActionTxt = '';
		if (!$('fixedAction'))
		{
			var divElmnt = Builder.node('div', {id:'fixedAction', className:'noactivity'});
			var objBody = document.getElementsByTagName("body").item(0);
			objBody.appendChild(divElmnt);
		}
		if (state==1)
		{
			if (txt==='') { inActionTxt = 'Processing, Please Wait...'; }
			else { inActionTxt = txt; }
			$('fixedAction').innerHTML = inActionTxt;
			$('fixedAction').className = 'fixedactivity';
		}
		else
		{
			$('fixedAction').className = 'noactivity';
		}
	},
	
	toggleChk : function (Obj) {
		if ($(Obj).hasClassName('chk')) { $(Obj).removeClassName('chk'); }
		else { $(Obj).addClassName('chk'); }
	},
	
	toggleAll : function (parentObj, togObj) {
		var Elmnts = $(parentObj).select('.member');
		if ($(togObj).hasClassName('togOn')) { 
			Elmnts.each(function(idx){ if (!$(idx).hasClassName('chk')) { $(idx).addClassName('chk'); } }); 
			$(togObj).className = 'togOff';
			$(togObj).innerHTML = 'Remove assignment from all groups';
		}
		else { 
			Elmnts.each(function(idx){ $(idx).removeClassName('chk'); }); 
			$(togObj).className = 'togOn';
			$(togObj).innerHTML = 'Assign to all groups';
		}
	},
	
	getMemberIDs : function (parentObj) {
		var members = [];
		var Elmnts = $(parentObj).select('.member');
		Elmnts.each(function(idx) { if ($(idx).hasClassName('chk')) { members.push(idx.id.substring(1)); }});
		if (members.length>0) { return members.join(","); }
	},
	
	hideAlerts : function (parentObj) {
		var alertClasses = ['info', 'alert'];
		alertClasses.each( function (className) {
			$(parentObj).select('div.'+className).each(function (idx){ $(idx).hide(); });
		});
	},

	switchTab : function (ObjID, parentID) {
		var Tabs = $A($(parentID).getElementsByTagName("li"));
		Tabs.each( function (node) { 
			if ($(node).className=='selected' && node.id!=("tab"+ObjID)) { 
				$(node).className = '';
				$($(node).id.substring(3)).setStyle({display:"none"}); 
			}
		});
		$("tab"+ObjID).className = 'selected';
		$(ObjID).setStyle({display:"block"}); 
	},
	
	switchDiv : function(obj, objID) {
		if ($(obj))
		{
			var relObj = (typeof($(obj).readAttribute("rel"))=="string") ? $(obj).readAttribute("rel").evalJSON() : null;
			var objArray = (relObj.Switch) ? relObj.Switch : null;
			if (objArray) {
				$A(objArray).each(function(idx) {
					if ('swc-'+objID!=idx && $(idx)) { $(idx).hide(); }
					else { if ($(idx)) { $(idx).show(); objFocus = idx; } }
				});
				setTimeout(function(){if($(objID)){$(objID).activate();}},10);
			}
		}
	},
	
	divToggle : function(parentObj, Obj, Suffix) {
		var selDiv = $(parentObj).down('div.selected');
		if ($(selDiv)) { $(selDiv).removeClassName('selected').hide(); }
		if ($(Obj+Suffix)) { $(Obj+Suffix).addClassName('selected').show(); }
	},
	
	cookieSet : function(name,value,seconds) {
		if (seconds) {
			d = new Date();
			d.setTime(d.getTime() + (seconds * 1000));
			expiry = '; expires=' + d.toGMTString();
		} else { expiry = ''; }
		document.cookie = name + "=" + value + expiry + "; path=/";
	},
	
	cookieGet : function(name) { 
		nameEQ = name + "=";
		ca = document.cookie.split(';');
		for (i=0; i<ca.length; i++) 
		{
			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 null;
	},
	
	cookieUnset: function(name) { Cookie.set(name,'',-1); }
};

function addFormStatus()
{
	var form 		= document.forms[0];
	fStatus 		= document.createElement('input');
	fStatus.type	= 'hidden';
	fStatus.id		= 'FormStatus';
	fStatus.name	= 'FormStatus';
	form.appendChild(fStatus);
}

function subVal(Val,Msg)
{
	if (Val!=="") { 
		if (typeof(Msg)!="undefined") { klGeneric.process({msg:Msg}); }
		if (!$('FormStatus')) { addFormStatus(); }
		$('FormStatus').value = Val;
		document.forms[0].submit();
	}
}

try { document.execCommand('BackgroundImageCache', false, true); } catch(e) {}
Ajax.Responders.register({
	onCreate : function() {
		Ajax.activeRequestCount++;
		var procTxt = (klGeneric.busyMsg.empty()) ? klGeneric.defBusyMsg : klGeneric.busyMsg;
		klGeneric.inAction(procTxt, 1);
	},
	
	onComplete : function() {
		Ajax.activeRequestCount--;
		klGeneric.inAction('', 0);
		klGeneric.busyMsg = '';
	}
});