/* uty.js - utillyty Copyright (C) 2010 Attilio Pavone GNU General Public License version 3 */ // tilly 10/12/2009 var UTY_DIRTYPE_FOLDER=0; var UTY_DIRTYPE_FILE=1; var UTY_SORT_ASC=1; var UTY_SORT_DESC=2; var UTY_ERR_NONE=0; var UTY_ERR_WARN=1; var UTY_ERR_USR=2; var UTY_ERR_APP=3; var UTY_ERR_SYS=4; var UTY_BROWSER_IE="Microsoft Internet Explorer"; var UTY_KEY_CODE_RETURN=13; var UTY_KEY_CODE_LEFT=37; var UTY_KEY_CODE_UP=38; var UTY_KEY_CODE_RIGHT=39; var UTY_KEY_CODE_DOWN=40; var UTY_KEY_CODE_BACK=8; var UTY_KEY_CODE_F1=112; var UTY_KEY_CODE_PAGE_UP=33; var UTY_KEY_CODE_PAGE_DOWN=34; var _uty_document_onselectstart; function uty_trim(str,chars){ return uty_ltrim(uty_rtrim(str,chars),chars); } function uty_ltrim(str, chars){ chars=chars||"\\s"; return str.replace(new RegExp("^["+chars+"]+","g"),""); } function uty_rtrim(str,chars){ chars=chars||"\\s"; return str.replace(new RegExp("["+chars+"]+$","g"),""); } function uty_starts(haystack,needle){ return(haystack.match("^"+needle)==needle); } function uty_ends(haystack,needle){ return(haystack.match(needle+"$")==needle); } function uty_aindex(array,value){ var index; for(index in array){ if(array[index]==value)return index; } return undefined; } function uty_aremove(array,value,count){ if(count===undefined)count=1; var index=uty_aindex(array,value); if(index!==undefined)array.splice(index,count); } function uty_select(input,start,end){ if(typeof(input)==='string')input=document.getElementById(input); //v1.0 input.focus(); if(start===undefined)return; if(!end)end=input.value.length; if(input.createTextRange){ var selRange=input.createTextRange(); selRange.collapse(true); selRange.moveStart('character',start); selRange.moveEnd('character',end); selRange.select(); }else if(input.selectionStart){ input.selectionStart=start; input.selectionEnd=end; }else if(input.setSelectionRange&&input.dispatchEvent){ if(input.value.length>0){ var evt=document.createEvent("KeyboardEvent"); if(!evt.initKeyEvent)return; input.setSelectionRange(start,start+1); evt.initKeyEvent("keypress",true,true,null,false,false,false,false,0,input.value.charCodeAt(start)); input.dispatchEvent(evt); var tmpend=end; if(end==input.value.length)tmpend-=1; input.setSelectionRange(tmpend,tmpend+1); evt=document.createEvent("KeyboardEvent"); evt.initKeyEvent("keypress",true,true,null,false,false,false,false,0,input.value.charCodeAt(tmpend)); input.dispatchEvent(evt); } input.setSelectionRange(start,end); } } function uty_text(element,text){ if(text){ if(element.innerText!==undefined)element.innerText=text; else if(element.textContent!==undefined)element.textContent=text; } return(element.innerText||element.textContent)||""; } function uty_window_x(elevent){ var left=0; if(elevent.parentNode){//domNode var parent=elevent; do{ left+=parent.offsetLeft; }while(parent=parent.offsetParent); parent=elevent.parentNode; do{ if(elevent.style&&(elevent.style.position=='fixed'))break; if(parent.scrollLeft)left-=parent.scrollLeft; elevent=parent; }while(parent=parent.parentNode); }else if(elevent.clientX){//domEvent left=elevent.clientX; } return left; } function uty_window_y(elevent){ var top=0; if(elevent.parentNode){ var parent=elevent; do{ top+=parent.offsetTop; }while(parent=parent.offsetParent); parent=elevent.parentNode; do{ if(elevent.style&&(elevent.style.position=='fixed'))break; if(parent.scrollTop)top-=parent.scrollTop; elevent=parent; }while(parent=parent.parentNode); }else if(elevent.clientY){ top=elevent.clientY; } return top; } function uty_window_scroll_x(newValue){ if(typeof(window.pageYOffset)=='number'){//Netscape if(newValue!==undefined)window.pageXOffset=newValue; return window.pageXOffset; }else if(document.body&&document.body.scrollLeft){//w3c if(newValue!==undefined)document.body.scrollLeft=newValue; return document.body.scrollLeft; }else if(document.documentElement&&document.documentElement.scrollLeft){//IE6+ xhtml doctype if(newValue!==undefined)document.documentElement.scrollLeft=newValue; return document.documentElement.scrollLeft; } return 0; } function uty_window_scroll_y(newValue){ if(typeof(window.pageYOffset)=='number'){ if(newValue!==undefined)window.pageYOffset=newValue; return window.pageYOffset; }else if(document.body&&document.body.scrollTop){ if(newValue!==undefined)document.body.scrollTop=newValue; return document.body.scrollTop; }else if(document.documentElement&&document.documentElement.scrollTop){ if(newValue!==undefined)document.documentElement.scrollTop=newValue; return document.documentElement.scrollTop; } return 0; } function uty_page_x(elevent){ if(elevent.pageX)return elevent.pageX;//mozilla event var left=uty_window_x(elevent); if(elevent.style&&(elevent.style.position=='fixed'))return left; return left+uty_window_scroll_x(); } function uty_page_y(elevent){ if(elevent.pageY)return elevent.pageY; var top=uty_window_y(elevent); if(elevent.style&&(elevent.style.position=='fixed'))return top; return top+uty_window_scroll_y(); } function uty_window_width(){ if(typeof(window.innerWidth)=='number'){//Non-IE return window.innerWidth; }else if(document.documentElement&&(document.documentElement.clientWidth||document.documentElement.clientHeight)){ return document.documentElement.clientWidth;//IE6+ xhtml doctype }else if(document.body&&(document.body.clientWidth||document.body.clientHeight)){ return document.body.clientWidth;//IE4 } return 0; } function uty_window_height(){ if(typeof(window.innerWidth)=='number'){ return window.innerHeight; }else if(document.documentElement&&(document.documentElement.clientWidth||document.documentElement.clientHeight)){ return document.documentElement.clientHeight; }else if(document.body&&(document.body.clientWidth||document.body.clientHeight)){ return document.body.clientHeight; } return 0; } function uty_center_in_window(element){ var width=element.offsetWidth?element.offsetWidth:0; var height=element.offsetHeight?element.offsetHeight:0; var left=(uty_window_width()-width)/2; var top=(uty_window_height()-height)/2; element.style.position='fixed'; element.style.left=left+"px"; element.style.top=top+"px"; } function uty_window_add_event(event,listener){ if(window.addEventListener){//w3c window.addEventListener(event,listener,false); }else if(document.addEventListener){//opera document.addEventListener(event,listener,false); }else if(window.attachEvent){//IE window.attachEvent('on'+event,listener); }else{ return false; } } function uty_window_remove_event(event,listener){ if(window.removeEventListener){//w3c window.removeEventListener(event,listener,false); }else if(document.removeEventListener){//opera document.removeEventListener(event,listener,false); }else if(window.detachEvent){//IE window.detachEvent('on'+event,listener); }else{ return false; } } function uty_window_add_onload(func,code){ if((uty_window_add_event('load',func)===false)&&code){ //older browsers(mac/ie5...) if(typeof window.onload=='function'){ var existing=onload; window.onload=function(){existing();eval(code);}; }else{ window.onload=func; } } } function uty_post(url,content,callback){ var xhr=new XMLHttpRequest(); xhr.open("POST",url,true); xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded"); xhr.setRequestHeader("Content-length",content.length); xhr.setRequestHeader("Connection","close"); xhr.onreadystatechange=function(){ if(xhr.readyState==4){ if(callback)callback(xhr.status,xhr.statusText,xhr.responseText); } } xhr.send(content); return xhr; } function uty_document_disable_onselectstart(disable){ if(navigator.appName==UTY_BROWSER_IE){ if(disable){ if(typeof(document.onselectstart)=='function')_uty_document_onselectstart=document.onselectstart; document.onselectstart=function(){return false;}; }else{ document.onselectstart=_uty_document_onselectstart?_uty_document_onselectstart:"return true";//sic } } return !disable; } function uty_selection_clear(){ if(document.selection&&document.selection.empty) document.selection.empty(); else if(window.getSelection) window.getSelection().removeAllRanges(); } function uty_key_code(event){ if(!event) event=window.event; if(event){ if (event.keyCode)return event.keyCode; if (event.which)return event.which; if (event.charCode)return event.charCode; } return 0; } function uty_stop_propagation(event){ if (!event) event = window.event; if (event) { event.cancelBubble = true; if (event.stopPropagation) event.stopPropagation(); } } function uty_format_number(value,decimals,decPoint,thousandsSep){ if(decimals===0||decimals==='0')value=Math.round(value); str=value+''; var i=''; var d=''; var p=str.indexOf('.'); if(p>0){ i=str.substr(0,p); d=str.substr(p+1); }else{ i=str; } if(d.length>decimals){ var last=parseInt(d.substr(decimals,1)); var dd=parseInt(d.substr(0,decimals)); if(last>5)dd++; d=dd+''; if(d.length>decimals){//rest ii=parseInt(i); ii++; i=ii+''; d=d.substr(1); } } d=uty_str_rpad(d,'0',decimals); var ret=''; if (thousandsSep){ for(p=0;p2)tmp=tmp.substr(2); ret+=uty_str_lpad(tmp,'0',2); break; case 'Y': ret+=uty_str_lpad(value.getFullYear()+'','0',4); break; case 'H': ret+=uty_str_lpad(value.getHours()+'','0',2); break; case 'i': ret+=uty_str_lpad(value.getMinutes()+'','0',2); break; case 's': ret+=uty_str_lpad(value.getSeconds()+'','0',2); break; default: ret+=c; } } return ret; } function uty_parse_date(str,format){ if(!format)return Date.parse(str); var ret=new Date(2000,0,1,0,0,0);//a leap year var p=0; for(var i=0;i=0) str=str.replace(oldStr,newStr); return str; }