//Defines an Operating System level controller for the Web OS//Author: Brian R Miedlar (c) 2006 (miedlar.com)var _os=null;var OS=Class.create();OS.Path = function() { return 'clientscript/'; }; OS.Load=function(){if(!OS.Path){setTimeout(OS.Load,50);return;}_os=new OS();OS.OnLoadComplete();};OS.prototype={'initialize':function(){this.appVersion='0';this.debug=true;this.trace=false;this.startTime=new Date();this.lastTrace=this.startTime;this.timeoutCount=0;this.activeTaskHandler=null;this.sources=[];this.clientKey='anonymous';this.scriptsToLoad=[];this.loadedScripts=[];this.completedScripts=[];this.completeCallbacks=[];this.scriptLoadListeners=[];this.authenticationListeners=[];this.isAuthenticated=false;this.username=null;this.desktopKey='';this.invitesRemaining=0;this.pageLoading=true;this.activeInterface=false;this.progressHandle=null;this.queueLoading=false;this.remaining=0;this.updateRequests=$H([]);this.activeMessage=true;this.connected=true;this.workspaceElement=null;},'addScriptLoadListener':function(listenerCallback,associatedScripts){var loadListener=new Object();loadListener.callback=listenerCallback;loadListener.associatedScripts=associatedScripts;this.scriptLoadListeners.push(loadListener);},'addAuthListener':function(listenerCallback){this.authenticationListeners.push(listenerCallback);},'requireAll':function(caller,scripts,options){options=options||{};if(options.onComplete){this.scriptsToLoad.push(options.onComplete);}var loadScripts=scripts;if(options.extendedWatchScripts){var extendedScripts=options.extendedWatchScripts;for(var i=0;i<extendedScripts.length;i++){loadScripts.push(extendedScripts[i]);}}if(options.scriptLoadListener)this.addScriptLoadListener(options.scriptLoadListener,loadScripts);if(typeof scripts=='string'){this.scriptsToLoad.push(scripts);}else{$A(scripts.reverse()).each(function(script){if(!this.sources[script])this.scriptsToLoad.push(script);}.bind(this));}this.load();},'scriptLoaded':function(script){var scripts=[];$A(this.scriptsToLoad).each(function(src){if(src!=script)scripts.push(src);});this.scriptsToLoad=scripts;if(this.completeCallbacks[script]){this.completeCallbacks[script]();this.completeCallbacks[script]=false;}$A(this.scriptLoadListeners).each(function(listener){var iTotal=0;var iComplete=0;$A(listener.associatedScripts).each(function(script){if(this.completedScripts[script])iComplete++;iTotal++;}.bind(this));listener.callback(iComplete,iTotal);}.bind(this));},'loadNext':function(){if(!this.queueLoading)return;this.requireNext();setTimeout(function(){this.loadNext();}.bind(this),50);},'load':function(){if(this.queueLoading)return;this.queueLoading=true;this.loadNext();},'loadComplete':function(){this.queueLoading=false;},'requireNext':function(){if(this.scriptLoadListener)this.scriptLoadListener(this.scriptsToLoad.length);if(this.scriptsToLoad.length==0){this.loadComplete();return;}var next=this.scriptsToLoad[this.scriptsToLoad.length-1];if(typeof next=='function'){next();this.scriptsToLoad.pop();this.load();return;}this.require(next,function(){this.load();}.bind(this));},'require':function(src,onComplete){if(this.sources[src]){if(onComplete)setTimeout(onComplete,10);return;}this.sources[src]=true;if(!OS.Path){_os.showMessage('Error: Unknown JsOS');return;}var headTag=document.getElementsByTagName("head").item(0);var scriptTag=document.createElement("script");scriptTag.setAttribute('type','text/javascript');scriptTag.setAttribute('src',OS.Path()+src);headTag.appendChild(scriptTag);this.waitForLoadComplete(src,onComplete);},'getStylesheets':function(){var arrStyle=[];$A(document.getElementsByTagName('link')).each(function(link){if(link.getAttribute('type')!='text/css')throw $continue;arrStyle.push(link);});return arrStyle;},'applyStylesheet':function(src,media,onComplete){var activeSheet=null;var arrStyle=this.getStylesheets();$A(arrStyle).each(function(stylesheet){var iQueryIndex=src.indexOf('?');var sHref=src.substr(0,iQueryIndex);if(stylesheet.disabled)throw $continue;if(stylesheet.getAttribute('href')==sHref){activeSheet=stylesheet;throw $break;}});if(activeSheet){activeSheet.disabled=true;}var headTag=document.getElementsByTagName("head").item(0);var linkTag=document.createElement("link");linkTag.setAttribute('rel','stylesheet');linkTag.setAttribute('type','text/css');linkTag.setAttribute('media',media);linkTag.setAttribute('href',src+'?rnd='+Math.random()*123456);headTag.appendChild(linkTag);if(onComplete)onComplete(src);},'waitForLoadComplete':function(script,onComplete){if(this.isQueueLoading(script)){setTimeout(function(){this.waitForLoadComplete(script,onComplete);}.bind(this),10);return;}if(this.completedScripts[script])return;this.completedScripts[script]=true;if(onComplete)setTimeout(onComplete,10);},'isQueueLoading':function(script){if(!this.loadedScripts[script])return true;return false;},'onLoadComplete':function(script){this.loadedScripts[script]=true;this.scriptLoaded(script);},'requestUpdate':function(key,updateAction,waitTime,isInterval){if(!isInterval)isInterval=false;OS.Trace('RequestUpdate: key('+key+') wait-'+waitTime+' I:'+isInterval);if(!waitTime)waitTime=1200;if(waitTime<250)waitTime=250;if(this.updateRequests[key]){this.updateRequests[key].action=updateAction;this.updateRequests[key].isInterval=isInterval;var iteration=this.updateRequests[key].iteration;iteration++;this.updateRequests[key].iteration=iteration;if(!isInterval){setTimeout(function(){this.performUpdate(key,iteration);}.bind(this),waitTime);}return;}var request=new Object();request.key=key;request.action=updateAction;request.iteration=0;request.isInterval=isInterval;this.updateRequests[key]=request;setTimeout(function(){this.performUpdate(key,0);}.bind(this),waitTime);},'performUpdate':function(key,iteration){OS.Trace('PerformUpdate: key('+key+') iteration-'+iteration);var request=this.updateRequests[key];if(!request)return;if(request.iteration!=iteration&&!request.isInterval)return;if(this.activeInterface){setTimeout(function(){this.performUpdate(key,iteration);}.bind(this),500);return;}var request=this.updateRequests[key];this.updateRequests[key]=null;setTimeout(request.action,50);},'showMessage':function(msg){if(!$('Message'))return;this.activeMessage=msg;Element.update('MessageText',msg);if(!Element.visible('Message')){var ef=new Effect.Appear('Message');ef=null;}},'hideMessage':function(){var currentMessage=this.activeMessage;setTimeout(function(){if(!Element.visible('Message'))return;if(this.activeMessage!=currentMessage)return;this.activeMessage='';Effect.Fade('Message');}.bind(this),800);},'setAuthenticated':function(isAuthenticated,username,client,desktop,invites){this.isAuthenticated=isAuthenticated;this.username=username;this.clientKey=client;this.desktopKey=desktop;this.invitesRemaining=invites;$A(this.authenticationListeners).each(function(listener){listener(isAuthenticated,username);}.bind(this));}};OS.HandleEvent=function(service,eventCode,options){if(!options)options={};Client.DoRequest(service,{'onSuccess':options.onSuccess,'parameters':Object.extend({'eventCode':eventCode},options.parameters||{})});};OS.StartTask=function(eventCode,options){_dynamics.preloaderWaitCount=0;OS.HandleEvent(WebServices.Service_StartTask(),eventCode,options);};OS.StartFileTask=function(eventCode,options){OS.HandleEvent(WebServices.Service_Uploader_StartTask(),eventCode,options);};OS.GetProgress=function(eventCode,options){OS.HandleEvent(WebServices.Service_GetProgress(),eventCode,options);};OS.GetFileProgress=function(eventCode,options){OS.HandleEvent(WebServices.Service_Uploader_GetProgress(),eventCode,options);};OS.CancelTask=function(eventCode,options){OS.HandleEvent(WebServices.Service_CancelTask(),eventCode,options);};OS.GetTaskValue=function(eventCode,options){OS.HandleEvent(WebServices.Service_GetTaskValue(),eventCode,options);};OS.OnCallTimeout=function(result){_os.showMessage("Operation Timed Out");if(!_os.connected)return;_os.timeoutCount++;Client.DoRequest(WebServices.Service_Notify_Timeout(),{'onSuccess':function(result){},'onError':function(result){},'parameters':{'value':result.responseText}});};OS.OnCallError=function(result){if(!_os.connected)return;_os.showMessage("Error");Client.DoRequest(WebServices.Service_Notify_Error(),{'onSuccess':function(result){},'onError':function(result){},'parameters':{'value':result.responseText}});};OS.OnDisconnected=function(result){OS.Trace('Internet Disconnected');_os.showMessage("No Internet Connection");_os.connected=false;};OS.CreateElement=function(type,parent,id){var element=document.createElement(type);var eElement=$(parent).appendChild(element);if(id)eElement.id=id;return eElement;};OS.CreateDiv=function(parent,id){var eDiv=OS.CreateElement('div',parent,id);return eDiv;};OS.CreateList=function(parent,id){var eList=OS.CreateElement('ul',parent,id);return eList;};OS.AddListItem=function(parent,id){var eItem=OS.CreateElement('li',parent,id);return eItem;};OS.ResizeImage=function(img,regionWidth,regionHeight,onResize){if(!img.complete){setTimeout(function(){OS.ResizeImage(img,regionWidth,regionHeight,onResize);},300);return;}var localWidth=regionWidth;var localHeight=localWidth*(img.height/img.width);if(onResize)onResize(localWidth,localHeight);};OS.AddImage=function(parent,src,bNoPreload,bHardImage,options){options=Object.extend({},options||{});if(!bNoPreload)Dynamics.PreloadImage(options,src);var img=document.createElement('img');if(!bHardImage){var eImg=$(parent).appendChild(img);eImg.style.backgroundImage='url('+src+')';src='images/spacer.gif';}else{var eImg=$(parent).appendChild(img);if(options.onload)eImg.onload=function(){options.onload(eImg,parent)};if(options.onerror)eImg.onabort=function(){options.onabort(eImg,parent)};if(options.onerror)eImg.onerror=function(){options.onerror(eImg,parent)};}eImg.src=src;return eImg;};OS.SetImage=function(parent,src,bNoPreload,bHardImage,options){$(parent).removeChildren();parent.innerHTML='';return OS.AddImage(parent,src,bNoPreload,bHardImage,options);};OS.GetQuerystring=function(variable){var query=window.location.search.substring(1);var vars=query.split("&");for(var i=0;i<vars.length;i++){var pair=vars[i].split("=");if(pair[0]==variable){return pair[1];}}return null;};OS.OnLoadComplete=function(){if(!Prototype||!Element){setTimeout(OS.OnLoadComplete,300);return;}var sScriptDebug='firebug/firebug.js';if(!_os.debug)sScriptDebug='firebug/firebugx.js';_os.requireAll('os.js',[sScriptDebug],{'onComplete':function(){_os.onLoadComplete('os.js');}});};OS.DateDiff=function(d1,d2){return(Date.parse(d2)-Date.parse(d1));};OS.TimeFrom=function(d){var dNow=new Date();return OS.DateDiff(d,dNow);};OS.Trace=function(value){if(!_os.debug||!_os.trace)return;var dNow=new Date();var sDebug=OS.DateDiff(_os.lastTrace,dNow)+' ** '+value;_os.lastTrace=dNow;};OS.PageLoadComplete=function(){if(!_os){setTimeout(OS.PageLoadComplete,50);return;}document.getElementsByClassName('workspace','Site').each(function(element){_os.workspaceElement=element;});_os.pageLoading=false;};OS.GetSelectedRadio=function(radioGroupElement,radioClassName){var oValue=null;$A(document.getElementsByClassName(radioClassName,radioGroupElement)).each(function(option){if(option.checked){oValue={'element':option,'value':option.value,'label':'unknown'};throw $break;}});if(oValue){$A($(radioGroupElement).getElementsByTagName('label')).each(function(label){var eFor=label.getAttribute('for');if(eFor==oValue.element.id){oValue.label=label.innerHTML;throw $break;}});}return oValue;};OS.GetSelectedCheckboxes=function(checkboxGroupElement,checkboxClassName){var oValues=[];$A(document.getElementsByClassName(checkboxClassName,checkboxGroupElement)).each(function(option){if(option.checked){var oValue={'element':option,'value':option.value,'label':'unknown'};$A($(checkboxGroupElement).getElementsByTagName('label')).each(function(label){var eFor=label.getAttribute('for');if(eFor==oValue.element.id){oValue.label=label.innerHTML;throw $break;}});oValues.push(oValue);}});return oValues;};Behaviour.addLoadEvent(function(){OS.PageLoadComplete();});OS.CreateScript=function(sScriptId,sSrc){var oScript=document.createElement('script');oScript.setAttribute('type','text/javascript');oScript.setAttribute('src',sSrc);oScript.setAttribute('id',sScriptId);return oScript;};OS.SwapScript=function(sScriptId,sSrc){var eCurrentScript=$(sScriptId);var oScript=OS.CreateScript(sScriptId,sSrc);eCurrentScript.parentNode.replaceChild(oScript,eCurrentScript);OS.SwapScript.el=oScript;return true;};OS.CreateApplication=function(sControllerId,sScriptId){var appHtml='';appHtml+=('<div id="'+sControllerId+'">');appHtml+=('<scr'+'ipt id="'+sScriptId+'" language="JavaScript1.1"'+'></scr'+'ipt>');appHtml+=('</div>');return appHtml;};OS.Load();var Client=Class.create();Client.DoRequest=function(service,options){var onError=OS.OnCallError;if(options.onError)onError=options.onError;var onTimeout=OS.OnCallTimeout;if(options.onTimeout)onTimeout=options.onTimeout;var axRequest=new Ajax.Request(service,{method:'post',parameters:'client='+_os.clientKey+'&'+$H(options.parameters).toQueryString(),onSuccess:options.onSuccess,'onTimeout':onTimeout,'onFailure':onError});};