/*
* jslous.js ver.2.0 extend mag.js
* 
* Revision : 261
*
* Coded by magnum 2008-2009
* Copyright (c) 2008-2009 magnum@objective.jp
* Released dual licensed under the terms of MIT and GPL licenses.
*
* No dependency on external libraries
*
* Tested Browsers :
*   Internet Explorer 6/Windows XP
*   Internet Explorer 7/Windows XP,Vista
*   Safari 3/Mac OS X 10.5
*   Safari 4/Mac OS X 10.5
*   FireFox 2/Mac OS X 10.5
*   FireFox 3/Mac OS X 10.5
*
* $Date: 2009-04-20$
*/
/*@cc_on 
var doc = document;
eval('var document = doc');
@*/
(function(){
 var window = this;
 var _jslous = window.jslous;
 var _$ = window.$;
 var ready_ie = '$';
 /* constructor */
 var jslous = window.jslous = window.$ = function(selector,current){ return new jslous.func.initirizer(selector,current); };
 
 jslous.func = jslous.prototype = {
  initirizer : function(selector,current){
   selector = selector || document;
   if(selector.nodeType){
    this[0] = selector;
    this.length = 1;
    return this;
   }else if(typeof selector == "string"){
    current = current || document;
    return jslous().query(selector,current);
   }else if(jslous.is_func(selector)){
    return jslous(document).ready(selector);
   }else{
    return this.obj2array(jslous.initArray(selector));
   }
  },
  stacks : function(elm,selector){
   var result = jslous(elm);
   result.prv = this;
   if(selector){ result.selector = selector; }
   return result;
  },
  undo : function(){ return this.stacks(this.prv,this.selector); },
  item : function(n){ return n === undefined ? jslous.initArray(this) : this[n]; },
  each : function(callback,args){ return jslous.each(this,callback,args); },
  map : function(callback){
   return this.stacks(jslous.map(this,function(elm,i){
	return callback.call(elm,i,elm);
   }));
  },
  obj2array : function(elm){
   this.length = 0;
   Array.prototype.push.apply(this,elm);
   return this;
  },
  elmunique : function(elms){
   var ret = [];
   try{
    for(var i = 0,len = elms.length;i < len;i++){
     if(!elms[i].getAttribute('uid')){
      elms[i].setAttribute('uid',uid());
      ret.push(elms[i]);
     }
    }
    for(var i = 0,len = ret.length;i < len;i++){ ret[i].removeAttribute('uid'); }
   }catch(e){}
   return ret;
  },
  query : function(selector,current){ return this.stacks(jslous.unique(this.obj2array(jslous.query(selector,current))),selector); },
  push : function(selector){ return this.stacks(this.elmunique(jslous.merge(this.item(),typeof selector === "string" ? jslous(selector) : jslous.initArray(selector)))); },
  filter : function(selector){ return this.stacks(this.elmunique(jslous.filter(selector,this.prv)),selector); },
  parent : function(elmName){
   var res = [],elmName = jslous.is_str(elmName) ? elmName:false;
   this.each(function(){
    var current = this,parent = current.parentNode;
    if(parent.nodeType == 1 && !elmName){ res.push(parent); }
    if(elmName && elmName){
     while(parent.tagName.toLowerCase() != elmName.toLowerCase()){
      parent = parent.parentNode;
      if(parent.tagName.toLowerCase() == 'body'){
       parent = false;
       break; 
      }
     }
     if(parent != false){ res.push(parent); }     
    }    
   });
   return this.stacks(this.elmunique(res),this.selector);
  },
  childs : function(selector){
   var ret = [];
   this.each(function(){
    var childs = jslous.query(selector,this);
    for(var i = 0,len = childs.length;i < len;i++){ ret.push(childs[i]); }
   });   
   return this.stacks(this.elmunique(ret),selector);
  },
  style : function(obj){
   this.each(function(){ jslous.css.setstyles(this,obj); });
   return this.stacks(this,this.selector);
  },
  attr : function(obj){
   this.each(function(){ jslous.node.setattr(this,obj); });
   return this.stacks(this,this.selector);
  },
  ready : function(selector){
   jslous.ready(selector);
   return this.stacks([],'');
  },
  req : function(url,method,$key,func,res){
   jslous.ajax(url,method,$key,func,res);
   return this.stacks(this,this.selector);
  },
  motion : function(obj){
   jslous.motion(this,obj);
   return this.stacks(this,this.selector);
  },
  sphere : function(obj){
   jslous.sphere(this,obj);
   return this.stacks(this,this.selector);
  },
  gloss : function(obj){
   jslous.gloss(this,obj);
   return this.stacks(this,this.selector);
  },
  reflec : function(obj){
   jslous.reflec(this,obj);
   return this.stacks(this,this.selector);
  },
  curl : function(obj){
   jslous.curl(this,obj);
   return this.stacks(this,this.selector);
  },
  corner : function(obj){
   jslous.corner(this,obj);
   return this.stacks(this,this.selector);
  },
  verticalslider : function(obj){
   jslous.verticalslider(this,obj);
   return this.stacks(this,this.selector);
  },
  horizontalslider : function(obj){
   jslous.horizontalslider(this,obj);
   return this.stacks(this,this.selector);
  },
  editer : function(obj){
   jslous.editer(this,obj);
   return this.stacks(this,this.selector);
  },
  camelize : function(str){ return jslous.camelize(str); },
  deCamelize : function(str){ return jslous.deCamelize(str); }
 }
 
 jslous.func.initirizer.prototype = jslous.func;
 jslous.extend = jslous.func.extend = function(){
  var target = arguments[0] || {},i = 1,length = arguments.length,deep = false,options;
  if(typeof target === 'boolean'){
   deep = target;
   target = arguments[1] || {};
   i = 2;
  }
  if(typeof target !== "object" && !jslous.is_func(target)){ target = {}; }
  if(length == i){ target = this; --i; }
  for(;i < length;i++){
   if((options = arguments[i]) != null){
	for(var name in options){
	 var src = target[name],copy = options[name];
	 if(target === copy){ continue; }
	 if(deep && copy && typeof copy === "object" && !copy.nodeType ){
	  target[name] = jslous.extend(deep,src || (copy.length != null ? []:{}),copy);
     }else if(copy !== undefined){
	  target[name] = copy;
	 }
	}
   }
  }
  return target;
 };

 var toString = Object.prototype.toString;
 /* Core */
 jslous.extend({
  noConflict : function(deep){
   window.$ = _$;
   if(deep){ window.jslous = _jslous; }
   ready_ie = 'jslous';
   return jslous;
  },
  is_bool : function(obj){ return toString.call(obj) === '[object Boolean]'; },
  is_num : function(obj){ return toString.call(obj) === '[object Number]'; },
  is_str : function(obj){ return toString.call(obj) === '[object String]'; },
  is_array : function(obj){ return toString.call(obj) === '[object Array]'; },
  is_func : function(obj){ return toString.call(obj) === '[object Function]'; },
  is_obj : function(obj){ return toString.call(obj) === '[object Object]'; },
  is_xml : function(elm){ return elem.nodeType === 9 && elm.documentElement.nodeName !== "HTML" || !!elm.ownerDocument && jslous.is_xml(elm.ownerDocument); },
  query : function(selector,current){ return jslous.html.query(selector,current); },
  filter: function(selector,current){ return jslous.html.filter(selector,current); },
  initArray : function(array){
   var result = [];
   if(array != null){
	var i = array.length;
	if(i == null || typeof array === "string" || jslous.is_func(array) || array.setInterval){
	 result[0] = array;
	}else{
	 while(i){ result[--i] = array[i]; }
	}
   }
   return result;
  },
  each : function(obj,callback,args){
   var name, i = 0,length = obj.length;
   if(args){
	if(length === undefined){
	 for(name in obj){ if(callback.apply(obj[name],args) === false){ break; } }
	}else{
	 for(; i < length;){ if(callback.apply(obj[i++],args) === false){ break; } }
    }
   }else{
	if(length === undefined){
	 for(name in obj){ if(callback.call(obj[name],name,obj[name]) === false ){ break; } }
	}else{
	 for(var value = obj[0];i < length && callback.call(value,i,value ) !== false; value = obj[++i]){}
	}
   }
   return obj;
  },
  map : function(elms,callback){
   var ret = [];
   for(var i = 0,length = elms.length;i < length;i++){
	var value = callback(elms[i],i);
    if(value != null){ ret[ret.length] = value; }
   }
   return ret.concat.apply([],ret);
  },
  merge : function(first,second){
   var i = 0,elm,pos = first.length;
   while((elm = second[i++]) != null){ first[pos++] = elm; }
   return first;
  },
  unique : function(array){
   var ret = [],done = {};
   try{
    for(var i = 0,length = array.length;i < length;i++){
     var id = jslous.data(array[i]);
     if(!done[id]){
	  done[id] = true;
	  ret.push(array[i]);
	 }
    }
   }catch(e){ ret = array; }
   return ret;
  },
  objrandom : function(obj){
   var objarray = [];
   for(var f in obj){ objarray.push(f); }
   return objarray[Math.floor(Math.random()*objarray.length)];
  },
  objclone : function(obj){
   var ret = {};
   for(var p in obj){ ret[p] = obj[p]; }
   return ret;
  },
  camelize : function(str){ return str.replace(/-([a-z])/g,function($0,$1){ return $1.toUpperCase(); }); },
  deCamelize : function(str){ return str.replace(/[A-Z]/g,function($0){ return '-'+$0.toLowerCase(); }); },
  motion : function(elms,obj){
   jslous.each(elms,function(opt){
    var trg = this;
    jslous.func.motion.Listener(trg.style,jslous.objclone(opt));
   },[obj]);
   return this;
  },
  sphere : function(elms,obj){
   jslous.each(elms,function(opt){
    var trg = this;
    jslous.canvas.globe.Listener(trg,jslous.objclone(opt));
   },[obj]);
   return this;
  },
  gloss : function(elms,obj){
   jslous.each(elms,function(opt){
    var trg = this;
    jslous.canvas.gloss.Listener(trg,jslous.objclone(opt));
   },[obj]);
   return this;
  },
  reflec : function(elms,obj){
   jslous.each(elms,function(opt){
    var trg = this;
    jslous.canvas.reflect.Listener(trg,jslous.objclone(opt));
   },[obj]);
   return this;
  },
  curl : function(elms,obj){
   jslous.each(elms,function(opt){
    var trg = this;
    jslous.canvas.curl.Listener(trg,jslous.objclone(opt));
   },[obj]);
   return this;
  },
  corner : function(elms,obj){
   jslous.each(elms,function(opt){
    var trg = this;
    jslous.canvas.corner.Listener(trg,jslous.objclone(opt));
   },[obj]);
   return this;
  },
  verticalslider : function(elms,obj){
   jslous.each(elms,function(opt){
    var trg = this;
    jslous.func.slider.vertical(trg,jslous.objclone(opt));
   },[obj]);
  },
  horizontalslider : function(elms,obj){
   jslous.each(elms,function(opt){
    var trg = this;
    jslous.func.slider.horizontal(trg,jslous.objclone(opt));
   },[obj]);
  },
  editer : function(elms,obj){
   jslous.each(elms,function(opt){
    var trg = this;
    jslous.wysiwyg.Listener(trg,jslous.objclone(opt));
   },[obj]);
  },
  ajax : function(url,method,$key,func,res,changed){
   var req,response;
   try{
    req = new ActiveXObject("Msxml2.XMLHTTP");
   }catch(e){
    try{
     req = new ActiveXObject("Microsoft.XMLHTTP");
    }catch(e){
     req = false;
    }
   }
   if(!req && typeof XMLHttpRequest != "undefined"){ req = new XMLHttpRequest(); }
   if(req){
    req.onreadystatechange = function(){
     var funckey = req.readyState;
     if(changed && jslous.is_obj(changed) && jslous.is_func(changed[funckey])){ changed[funckey](); }
     if(req.readyState == 4 && req.status == 200){
      response = (res == 'xml' ? req.responseXML:req.responseText);
      func(response);
     }
    }
    req.open(method,url);
    req.setRequestHeader('Content-Type','application/x-www-form-urlencoded; charset=UTF-8');
    req.send($key);
   }
  }
 });
 
 var uid = function(){ return +new Date(); },nid = 0,wData = {};
 
 /* data cache */
 jslous.extend({
  cache : {},
  save : function(elm,id){ if(!elm.setAttribute('uid')){ try{ elm.setAttribute('uid',id); }catch(e){} } }
 });
 
 /* Browser Flags */
 jslous.Agents = {
  ie : (navigator.appName.toLowerCase().indexOf('internet explorer')+1 ? true:false),
  ie6 : (navigator.appVersion.toLowerCase().indexOf('msie 6')+1 ? true:false),
  firefox : (navigator.userAgent.toLowerCase().indexOf('firefox')+1 ? true:false),
  webkit : (navigator.userAgent.indexOf('AppleWebKit/') > -1 ? true:false),
  opera : (window.opera ? true:false)
 };
 
 /* CSSController */
 jslous.css = {
  setstyle : function(elm,prop,val){ if(elm){ elm.style[jslous.camelize(prop)] = val; } },
  setstyles : function(elm,obj){ if(elm && jslous.is_obj(obj)){ for(var prop in obj){ try{ elm.style[jslous.camelize(prop)] = obj[prop]; }catch(e){} } } },
  getInline : function(elm){ return (jslous.Agents.ie ? elm.style.cssText+';':elm.getAttribute('style')); },
  setInline : function(elm,style){ jslous.Agents.ie ? elm.style.cssText = jslous.css.getInline(elm)+style+';':elm.setAttribute('style',jslous.css.getInline(elm)+style); },
  opacity : function(elm,value){ jslous.Agents.ie ? elm.style.filter = 'alpha(opacity='+(value)+')':jslous.Agents.webkit ? elm.style.opacity = value/100:elm.style.MozOpacity = value/100; },
  current : function(elm,property,pseudo){
   if(property == 'width'){ return jslous.css.width(elm); }
   if(property == 'height'){ return jslous.css.height(elm); }
   property = property.toLowerCase() == 'float' ? (jslous.Agents.ie ? 'styleFloat':property):property;
   var ret = (elm.currentStyle ? (property.indexOf('-') != -1 ? elm.currentStyle[jslous.camelize(property)]:elm.currentStyle[property]):getComputedStyle ? (property.indexOf('-') == -1 ? document.defaultView.getComputedStyle(elm,pseudo).getPropertyValue(jslous.deCamelize(property)):document.defaultView.getComputedStyle(elm,pseudo).getPropertyValue(property)):false);
   if(jslous.Agents.webkit && property.match(/color/i)){ return jslous.css.fixcolor(ret); }
   return ret;
  },
  currents : function(elm){ return elm.currentStyle ? elm.currentStyle:document.defaultView && document.defaultView.getComputedStyle ? document.defaultView.getComputedStyle(elm,''):elm['style']; },
  unselectable : function(elm){
   elm.style[(jslous.Agents.ie ? 'unselectable':jslous.Agents.webkit ? 'KhtmlUserSelect':'MozUserSelect')] = jslous.Agents.ie ? 'on':'none';
  },
  width : function(elm){ return parseInt(elm.offsetWidth)-parseInt(jslous.css.extrim(elm,'width')); },
  height : function(elm){ return parseInt(elm.offsetHeight)-parseInt(jslous.css.extrim(elm,'height')); },
  extrim : function(elm,prop){
   var which = prop == 'width' ? ['Left','Right']:['Top','Bottom'];
   var border = 0,padding = 0;
   for(var i = 0,len = which.length;i < len;i++){
    border += parseInt(jslous.css.current(elm,'border'+which[i]+'Width')) || 0;
    padding += parseInt(jslous.css.current(elm,'padding'+which[i])) || 0;
   }
   return Math.round(padding+border);
  },
  fixcolor : function (rgb){
   rgb = rgb.match(/rgba/i) ? rgb.replace('rgba(','').replace(')','').split(','):rgb.replace('rgb(','').replace(')','').split(',');
   var ret = [];
   for(var i = 0,len = 3;i < len;i++){ ret.push(jslous.color.num2hex(parseInt(rgb[i]) || 0)); }
   return typeof rgb[3] != 'undefined' && rgb[3] == 0 ? '':'#'+ret.join('');
  },
  selector : function(selector){
   var css = document.styleSheets;
   for(var i = 0;i < css.length;i++){
    var rules = (css.item(i).cssRules ? css.item(i).cssRules:css.item(i).rules ? css.item(i).rules:false);
    for(var k = 0;k < rules.length;k++){
     var rule = rules.item(k);
     if(!rule.selectorText){ continue; }
     if(rule.selectorText.toLowerCase() == selector.toLowerCase()){ return rule.style; }
    }
   }
  }
 }
 
 /* sizeGetter */
 jslous.size = {
  screenWidth : screen.availWidth,
  screenHeight : screen.availHeight,
  clientWidth : function(){ return (jslous.Agents.ie ? document.documentElement.clientWidth:window.innerWidth); },
  clientHeight : function(){ return (jslous.Agents.ie ? document.documentElement.clientHeight:window.innerHeight); },
  documentWidth : function(){ return Math.max(document.documentElement.scrollWidth,document.body.scrollWidth); },
  documentHeight : function(){ return Math.max(document.documentElement.scrollHeight,document.body.scrollHeight); },
  scrollLeft : function(){ return Math.max(document.body.scrollLeft,document.documentElement.scrollLeft); },
  scrollTop : function(){ return Math.max(document.body.scrollTop,document.documentElement.scrollTop); }
 }
 
 /* NodeController */
 jslous.node = {
  setattr : function(elm,obj){ try{ for(var i in obj){ elm[i] = obj[i]; } }catch(e){} },
  moveit : function(src,trg){
   var res = [];
   for(var j = 0,len = src.childNodes.length;j < len;j++){ if(src.childNodes[j].nodeType == 1){ res.push(src.childNodes[j].cloneNode(true)); } }
   for(var j = 0,len = children.length;j < len;j++){ trg.appendChild(res[j]); }
   return res;
  },
  replacenodelist : function(obj){
   var res = [],parent = obj.parentNode;
   if(parent){
    obj = jslous.node.list2array(obj.childNodes);
    for(var i = 0,len = obj.length;i < len;i++){ res.push(obj[i].cloneNode(true)); }
	for(var i = 0,len = res.length;i < len;i++){ parent.insertBefore(res[i],obj); }
    parent.removeChild(obj);
	return parent;
   }
   return true;
  },
  list2array : function(obj){
   var res = [];
   try{ for(var i = 0,len = obj.length;i < len;i++){ if(obj[i].nodeType == 1){ res.push(obj[i]); } } }catch(e){} 
   return res;
  },
  createSelect : function(hasharray,active){
   if(jslous.is_array(hasharray)){
    var res = document.createElement('select');
    for(var i = 0,len = hasharray.length;i < len;i++){
     var opt = document.createElement('option');
     opt.setAttribute('value',hasharray[i]['val']);
     if(active && active == hasharray[i]['val']){ opt.selected = true; }
     opt.appendChild(document.createTextNode(hasharray[i]['txt']));
     res.appendChild(opt);
    }
    return res;
   }
  },
  getSelect : function(select){
   if(select.tagName.toLowerCase() == 'select'){ return {value:select.options[select.selectedIndex].value,txt:select.options[select.selectedIndex].text}; }
  },
  children : function(node){
   var elm = new Array(),i,inner,str;
   if(!node || !node.hasChildNodes()){ return elm; }
   var children = node.childNodes;
   for(i = 0;i < children.length;i++){
    inner = children.item(i);
    if(inner.nodeType == 3){
     str = inner.nodeValue;
     if(!str.match('/[^\s\t\n\r]/')){ continue; }
    }
    elm.push(inner);
   }
   return elm;
  },
  prv : function(node){
   if(!node){ return null; }
   var obj,pvs,str;
   obj = node;
   while(pvs = obj.previousSibling){
    if(pvs.nodeType == 3){
     str = pvs.nodeValue;
     if(!str.match('/[^\s\t\n\r]/')){
      obj = pvs;
      continue;
     }
    }
    return pvs;
   }
   return null;
  },
  next : function(node){
   if(!node){ return null; }
   var obj,nxt,str;
   obj = node;
   while(nxt = obj.nextSibling){
    if(nxt.nodeType == 3){
     str = nxt.nodeValue;
     if(!str.match('/[^\s\t\n\r]/')){
      obj = nxt;
      continue;
     }
    }
    return nxt;
   }
   return null;
  },
  gettxt : function(node){
   var i,obj,str = '';
   if(!node){ return str; }
   if(typeof node.textContent != 'undefined'){
    str = node.textContent;
   }else if(typeof node.innerText != 'undefined'){
    str = node.innerText;
   }else if(node.hasChildNodes()){
    for(i = node.childNodes.length;i--;){
     obj = node.childNodes.item(i);
     str = obj.nodeType == 3 ? obj.nodeValue+str:$.getInnerTxt(obj)+str;    
    }
   }
   return str;
  },
  insertFirst : function(elm,parent){ parent && parent != null ? parent.insertBefore(elm,parent.firstChild):document.body.insertBefore(elm,document.body.firstChild); },
  removeChilds : function(node){ while(node.hasChildNodes()){ node.removeChild(node.lastChild); } },
  replace : function(newelm,oldelm){ if(oldelm && oldelm != null){ oldelm.parentNode.replaceChild(newelm,oldelm); } },
  change : function(a,b){
   var clonea = a.cloneNode(true);
   a.parentNode.insertBefore(clonea,a);
   var cloneb = b.cloneNode(true);
   b.parentNode.insertBefore(cloneb,b);
   jslous.node.replace(b,clonea);
   jslous.node.replace(a,cloneb);
  }
 }
 
 /* StringController */
 jslous.String = {
  toArray : function(str,flg){
   if(!str){ return false; }
   var result = new Array();
   while(str.length > 0){
    if(str.substr(0,4).toLowerCase() == '<br>'){
     result.push((flg ? document.createElement('br'):'<br />'));
     str = str.slice(4);
    }else if(str.substr(0,6).toLowerCase() == '<br />'){
     result.push((flg ? document.createElement('br'):'<br />'));
     str = str.slice(6);
    }else{
     if(flg){
      var span = document.createElement('span');
      span.appendChild(document.createTextNode(str.slice(0,1)));
      result.push(span);
     }else{
      result.push(str.slice(0,1));
     }
     str = str.slice(1);
    }
   }
   return result;
  },
  reverse : function(str){
   var res = '';
   if(jslous.is_str(str)){
    for(var i = str.length-1;i >= 0;i--){ res += str.charAt(i); }
   }
   return res;
  },
  ucfirst : function(str){
   if(jslous.is_str(str)){
    return str.substr(0,1).toUpperCase()+str.substr(1,str.length).toLowerCase();
   }
  }
 }
 
 /* MathController */
 jslous.Math = {
  random : function(min,max,num){
   var min = min || 0,max = max || 10,num = num || 1,tmp = new Array(),result = new Array();
   for(var i = min;i <= max;i++){ tmp.push(i); }
   while(num){
    tmp.sort(function(){ return Math.random() > 0.5 ? 1:-1; });
    result.push(tmp.slice(0,1));
    num--;
   }
   return (num != 1 ? result:result[0]);
  }
 }
 
 /* EventController */
 jslous.Event = {
  getevt : function(evt){ return (!evt ? window.event:evt); },
  target : function(evt){ return (jslous.Event.getevt(evt) && jslous.Event.getevt(evt).target ? (jslous.Event.getevt(evt).target.nodeType == 3 ? jslous.Event.getevt(evt).target.parentNode:jslous.Event.getevt(evt).target):(jslous.Event.getevt(evt) && jslous.Event.getevt(evt).srcElement ? jslous.Event.getevt(evt).srcElement:null)); },
  Listener : function(elm,type,func){
   if(type == 'imgload'){ return jslous.Event.imageonload(elm,func); }
   return (!elm ? false:(elm.addEventListener ? elm.addEventListener(type,func,false):elm.attachEvent ? elm.attachEvent('on'+type,func):false));
  },
  imageonload : function(elm,func){
   var type = 'load';
   if(jslous.Agents.ie && elm.tagName && elm.tagName.toLowerCase() == 'img'){
    if(elm.readyState == 'complete'){ return func(); }
    elm.onreadystatechange = function(){ if(elm.readyState == 'complete'){ return func(); } }
   }else{
    return (!elm ? false:elm.addEventListener(type,func,false));
   }
  },
  removeListener : function(elm,type,func){ return (!elm ? false:(elm.removeEventListener ? elm.removeEventListener(type,func,false):elm.detachEvent ? elm.detachEvent('on'+type,func):false)); },
  cancelBubble : function(evt){ evt && evt.stopPropagation ? evt.stopPropagation():window.event ? window.event.cancelBubble = true:false; },
  preventDefault : function(evt){
   if(evt && evt.preventDefault){
    evt.preventDefault();
    evt.currentTarget['on'+evt.type] = function(){
     return false;
    };
   }else if(window.event){ window.event.returnValue = false; }
  },
  fireEvt : function(elm,type){
   if(elm.dispatchEvent){
    var evt = document.createEvent('MouseEvents');
    evt.initEvent(type,true,true);
    elm.dispatchEvent(evt);
   }else if(window.event){
    var evt = document.createEventObject();
    evt.button = 1;
    elm.fireEvent('on'+type,evt);
   }
  },
  clientX : function(evt){ return (jslous.Agents.opera ? jslous.Event.getevt(evt).clientX:jslous.Agents.ie ? (jslous.size.scrollLeft()+jslous.Event.getevt(evt).clientX):jslous.Agents.webkit ? jslous.Event.getevt(evt).pageX:jslous.Event.getevt(evt).pageX); },
  clientY : function(evt){ return (jslous.Agents.opera ? jslous.Event.getevt(evt).clientY:jslous.Agents.ie ? (jslous.size.scrollTop()+jslous.Event.getevt(evt).clientY):jslous.Agents.webkit ? jslous.Event.getevt(evt).pageY:jslous.Event.getevt(evt).pageY); },
  offsetX : function(evt){ return (jslous.Agents.ie || jslous.Agents.webkit ? jslous.Event.getevt(evt).offsetX:jslous.Event.getevt(evt).layerX); },
  offsetY : function(evt){ return (jslous.Agents.ie || jslous.Agents.webkit ? jslous.Event.getevt(evt).offsetY:jslous.Event.getevt(evt).layerY); },
  char : function(evt){ return ((jslous.Event.getevt(evt).charCode) ? Number(jslous.Event.getevt(evt).charCode):((jslous.Event.getevt(evt).which) ? Number(jslous.Event.getevt(evt).which):Number(jslous.Event.getevt(evt).keyCode))); }
 };
 
 /* Handlers */
 jslous.func.extend({
  click : function(func){
   jslous.each(this,function(){ jslous.Event.Listener(this,'click',func); });
   return this.stacks(this,this.selector);
  },
  down : function(func){
   jslous.each(this,function(){ jslous.Event.Listener(this,'mousedown',func); });
   return this.stacks(this,this.selector);
  },
  up : function(func){
   jslous.each(this,function(){ jslous.Event.Listener(this,'mouseup',func); });
   return this.stacks(this,this.selector);
  },
  over : function(func){
   jslous.each(this,function(){ jslous.Event.Listener(this,'mouseover',func); });
   return this.stacks(this,this.selector);
  },
  out : function(func){
   jslous.each(this,function(){ jslous.Event.Listener(this,'mouseout',func); });
   return this.stacks(this,this.selector);
  },
  hover : function(over,out){
   jslous.each(this,function(){
    jslous.Event.Listener(this,'mouseover',over);
    jslous.Event.Listener(this,'mouseout',out);
   });
   return this.stacks(this,this.selector);
  },
  activate : function(focus,blur){
   jslous.each(this,function(){
    jslous.Event.Listener(this,'focus',focus);
    jslous.Event.Listener(this,'blur',blur);
   });
   return this.stacks(this,this.selector);
  },
  toggle : function(on,off){
   jslous.each(this,function(){
    var elm = this;
    elm.toggleflg = false;
    jslous.Event.Listener(elm,'mousedown',function(evt){
     var trg = jslous.Event.target(evt);
     if(trg.toggleflg == false){
      trg.toggleflg = true;
      if(jslous.is_func(on)){ on.apply(this,[elm]); }
     }else if(trg.toggleflg == true){
      trg.toggleflg = false;
      if(jslous.is_func(off)){ off.apply(this,[elm]); }
     }
     jslous.Event.preventDefault(evt);
    });
   });
   return this.stacks(this,this.selector);
  },
  keypress : function(func){
   jslous.each(this,function(){ jslous.Event.Listener(this,'keypress',func); });
   return this.stacks(this,this.selector);
  },
  change : function(func){
   jslous.each(this,function(){ jslous.Event.Listener(this,'change',func); });
   return this.stacks(this,this.selector);
  },
  jump : function(func){
   jslous.each(this,function(){ jslous.Event.Listener(this,'unload',func); });
   return this.stacks(this,this.selector);
  },
  debug : function(){
   for(var i in this){
    alert(i);
   }
  }
 });
 
 /* KeyBoardHandles */
 jslous.input = {
  chkret : function(evt){
   var char = jslous.Event.char(evt);
   return ((char == 13 || char == 3) ? true:false);
  }
 }
 
 /* PopUp */
 jslous.popup = {
  defaults : {
   'resizable':'yes',
   'scrollbars':'yes',
   'toolbar':'no',
   'menubar':'no',
   'directories':'no',
   'status':'no',
   'location':'no'
  },
  open : function(url,opt){
   var self = this;
   if(opt){
    var option = [];
    for(prop in self.defaults){
     option.push(prop+'='+(typeof opt[prop] != 'undefined' ? opt[prop]:self.defaults[prop]));
     delete opt[prop];
    }
    for(prop in opt){
     option.push(prop+'='+opt[prop]);
     delete opt[prop];
    }
    return window.open(url,null,option.join(','));
   }
   return window.open(url,null);
  }
 }
 
 /* elementPosition */
 jslous.elmPos = {
  left : function(elm,flg){
   if(jslous.Agents.ie){ return (flg ? elm.getBoundingClientRect().left-2:(elm.getBoundingClientRect().left-2)+jslous.size.scrollLeft()); }
   var pos = 0;
   pos = jslous.Agents.webkit ? pos-elm.clientLeft:pos;
   while(elm){
    pos += jslous.Agents.webkit ? elm.offsetLeft+elm.clientLeft:elm.offsetLeft;
    elm = elm.offsetParent;
   }
   return (flg ? pos-jslous.size.scrollLeft():pos);
  },
  top : function(elm,flg){ // elementTopPosition
   if(jslous.Agents.ie){ return (flg ? elm.getBoundingClientRect().top-2:(elm.getBoundingClientRect().top-2)+jslous.size.scrollTop()); }
   var pos = 0;
   pos = jslous.Agents.webkit ? pos-elm.clientTop:pos;
   while(elm){
    pos += jslous.Agents.webkit ? elm.offsetTop+elm.clientTop:elm.offsetTop;
    elm = elm.offsetParent;
   }
   return (flg ? pos-jslous.size.scrollTop():pos);
  },
  center : function(elm){ return parseInt((jslous.size.scrollLeft() > 0 ? (jslous.size.clientWidth()-elm.offsetWidth)/2+jslous.size.scrollLeft():(jslous.size.clientWidth()-elm.offsetWidth)/2)); },
  middle : function(elm){ return parseInt((jslous.size.scrollTop() > 0 ? ((jslous.size.clientHeight()-elm.offsetHeight)/2)+jslous.size.scrollTop():((jslous.size.clientHeight()-elm.offsetHeight)/2)+50)); },
  area : function(elm){ return (elm ? { left : jslous.elmPos.left(elm),top : jslous.elmPos.top(elm),right : jslous.elmPos.left(elm)+elm.offsetWidth-1,bottom : jslous.elmPos.top(elm)+elm.offsetHeight-1 }:false); },
  bounds : function(evt,elm){
   var bounds = jslous.elmPos.getarea(elm);
   return (jslous.Event.clientX(evt) > bounds.left && jslous.Event.clientX(evt)+bounds.left < bounds.right && jslous.Event.clientY(evt) > bounds.top && jslous.Event.clientY(evt)+bounds.top < bounds.bottom ? true:false);
  }
 }
 
 /* colorScheme */
 jslous.color = {
  codeConvert : function(code,inbase,outbase){
   code = (code+'').toUpperCase();
   var chars = '0123456789ABCDEF',dec = 0;
   for(var no = 0;no <= code.length;no++){ dec += (chars.indexOf(code.charAt(no)))*(Math.pow(inbase,(code.length-no-1))); }
   code = '';
   var magnitude = Math.floor((Math.log(dec))/(Math.log(outbase)));
   for(var no = magnitude;no >= 0;no--){
    var amount = Math.floor(dec/Math.pow(outbase,no));
    code = code+chars.charAt(amount); 
    dec -= amount*(Math.pow(outbase,no));
   }
   if(code.length == 0){ code = 0; }
   return code;
  },
  num2hex : function(num){
   hex = jslous.color.codeConvert(num,10,16)+'';
   while(hex.length < 2){ hex = '0'+hex; }
   return hex;
  },
  hex2num : function(hex){
   hex = hex.replace('#','');
   return { r : parseInt(jslous.color.codeConvert(hex.substr(0,2),16,10)), g : parseInt(jslous.color.codeConvert(hex.substr(2,2),16,10)), b : parseInt(jslous.color.codeConvert(hex.substr(4,2),16,10)) };
  },
  hex2rgb : function(hex,f){
   f = f || 1;
   function h2d(bright){ return(Math.max(0,Math.min(parseInt(bright,16),255))); }
   function d2h(bright){
    bright = Math.round(Math.min(Math.max(0,bright),255)); 
    return('0123456789ABCDEF'.charAt((bright-bright%16)/16)+'0123456789ABCDEF'.charAt(bright%16));
   }
   var cr = h2d(hex.substr(1,2)),cg = h2d(hex.substr(3,2)),cb = h2d(hex.substr(5,2));
   return (jslous.Agents.ie ? '#'+d2h(cr*f)+''+d2h(cg*f)+''+d2h(cb*f):Math.floor(cr*f)+','+Math.floor(cg*f)+','+Math.floor(cb*f));
  },
  rgb2hsv : function(rgb){
   rgb = rgb.replace('#','');
   red = jslous.color.codeConvert(rgb.substr(0,2),16,10).length > 0 ? jslous.color.codeConvert(rgb.substr(0,2),16,10)/255:0;
   green = jslous.color.codeConvert(rgb.substr(2,2),16,10).length > 0 ? jslous.color.codeConvert(rgb.substr(2,2),16,10)/255:0;
   blue = jslous.color.codeConvert(rgb.substr(4,2),16,10).length > 0 ? jslous.color.codeConvert(rgb.substr(4,2),16,10)/255:0;
   max = Math.max(red,green,blue);
   min = Math.min(red,green,blue);
   var hue = (max == min ? 0:(red == max ? (green-blue)/(max-min)/1:green == max ? 2+(blue-red)/1/(max-min)/1:blue == max ? 4+(red-green)/(max-min)/1:0));
   var saturate = (max-min)/max;
   hue = hue*60; 
   bright = max;
   return { h : hue,s : saturate,v : bright };
  },
  hsv2rgb : function(hsv){
   var gethex = function(part){
    if(hsv.s == 0){ part = hsv.v; }
    part = jslous.color.codeConvert((Math.round(part*255)),10,16)+'';
    while(part.length < 2){ part = '0'+part; }
    return part;
   };
   tmp = {};
   tmp.Hi = (hsv.h == 360 ? 0:Math.floor(hsv.h/60));
   tmp.f = hsv.h/60-tmp.Hi;
   tmp.p = (hsv.v*(1-hsv.s)).toPrecision(2);
   tmp.q = (hsv.v*(1-(tmp.f*hsv.s))).toPrecision(2);
   tmp.t = (hsv.v*(1-((1-tmp.f)*hsv.s))).toPrecision(2);
   switch(tmp.Hi){
    case 0: red = hsv.v; green = tmp.t; blue = tmp.p; break;
    case 1: red = tmp.q; green = hsv.v; blue = tmp.p; break;
    case 2: red = tmp.q; green = hsv.v; blue = tmp.t; break;
    case 3: red = tmp.p; green = tmp.q; blue = hsv.v; break;
    case 4: red = tmp.t; green = tmp.p; blue = hsv.v; break;
    case 5: red = hsv.v; green = tmp.p; blue = tmp.q; break;
   }
   delete tmp;
   return '#'+gethex(red)+''+gethex(green)+''+gethex(blue).toUpperCase();
  },
  rgb2hsl : function(rgb){
   var min = Math.min(rgb['r'],Math.min(rgb['g'],rgb['b'])),max = Math.max(rgb['r'],Math.max(rgb['g'],rgb['b'])),delta = max-min,hsl = {};
   hsl['l'] = (min+max)/2;
   hsl['s'] = hsl['l'] > 0 && hsl['l'] < 1 ? (delta/(hsl['l'] < 0.5 ? (2*hsl['l']):(2-2*hsl['l']))):0;
   hsl['h'] = 0;
   if(delta > 0){
    if(max == rgb['r'] && max != rgb['g']){ hsl['h'] += (rgb['g']-rgb['b'])/delta; }
    if(max == rgb['g'] && max != rgb['b']){ hsl['h'] += (2+(rgb['b']-rgb['r'])/delta); }
    if(max == rgb['b'] && max != rgb['r']){ hsl['h'] += (4+(rgb['r']-rgb['g'])/delta); }
    hsl['h'] /= 6;
   }
   return hsl;
  },
  hsl2rgb : function(hsl){
   var m2 = (hsl['l'] <= 0.5) ? hsl['l']*(hsl['s']+1):hsl['l']+hsl['s']-hsl['l']*hsl['s'];
   var m1 = hsl['l']*2-m2;
   return {
    'r':jslous.color.hue2rgb(m1,m2,hsl['h']+0.33333),
    'g':jslous.color.hue2rgb(m1,m2,hsl['h']),
    'b':jslous.color.hue2rgb(m1,m2,hsl['h']-0.33333)
   };
  },
  hue2rgb : function(m1,m2,h){
   h = (h < 0) ? h+1:((h > 1) ? h-1:h);
   if(h*6 < 1){ return m1+(m2-m1)*h*6; }
   if(h*2 < 1){ return m2; }
   if(h*3 < 2){ return m1+(m2-m1)*(0.66666-h)*6; }
   return m1;
  },
  pack : function(rgb){
   var r = Math.round(rgb['r']*255);
   var g = Math.round(rgb['g']*255);
   var b = Math.round(rgb['b']*255);
   return '#'+(r < 16 ? '0':'')+r.toString(16)+(g < 16 ? '0':'')+g.toString(16)+(b < 16 ? '0':'')+b.toString(16);
  },
  unpack : function(rgb){
   if(rgb.length == 7){ return {'r':parseInt('0x'+rgb.substring(1,3))/255,'g':parseInt('0x'+rgb.substring(3,5))/255,'b':parseInt('0x'+rgb.substring(5,7))/255}; }
   else if (color.length == 4) { return {'r':parseInt('0x'+rgb.substring(1,2))/15,'g':parseInt('0x'+rgb.substring(2,3))/15,'b':parseInt('0x'+rgb.substring(3,4))/15}; }
  },
  sampler : function(base,division){
   var res = [];
   division = division || 12;
   if(base){
    var delta = 1/division;
    var rgb = jslous.color.unpack(base);
    var hsl = jslous.color.rgb2hsl(rgb);
    var level = 0;
    for(var prop in rgb){ level += parseInt(rgb[prop]); }
    for(var i = 0;i < division;i++){
     var tmprgb = jslous.color.hsl2rgb({'h':hsl['h']+delta*i,'s':hsl['s'],'l':hsl['l']});
     var tmplv = 0;
     for(var p in tmprgb){ tmplv += tmprgb[p]; }
     var lev = level/tmplv;
     var sample = {};
     for(var p in tmprgb){ sample[p] = Math.min(tmprgb[p]*lev,1); }
     res.push(jslous.color.pack(sample).toUpperCase());
    }
   }else{ res.push(base); }
   return res;
  }
 }
 
 /* wysiwygengine */
 jslous.wysiwyg = {
  current : {},
  fontfamilies : [{txt:'フォントを選択して下さい。',val:""},{txt:'ＭＳ Ｐゴシック',val:"'ＭＳ Ｐゴシック','MS PGothic'"},{txt:'ヒラギノ角ゴ Pro W3',val:"'ヒラギノ角ゴ Pro W3','Hiragino Kaku Gothic Pro'"},{txt:'ＭＳ 明朝',val:"'ＭＳ 明朝','MS Mincho'"},{txt:'ＭＳ Ｐ明朝',val:"'ＭＳ Ｐ明朝','MS PMincho'"},{txt:'ヒラギノ明朝 Pro W3',val:"'ヒラギノ明朝 Pro W3','Hiragino Mincho Pro'"},{txt:'メイリオ',val:"'メイリオ',Meiryo"},{txt:'Osaka',val:"Osaka"},{txt:'ＭＳ ゴシック',val:"'ＭＳ ゴシック','MS Gothic'"},{txt:'Osaka－等幅',val:"'Osaka－等幅',Osaka-mono"}],
  fontsizes : jslous.Agents.ie || jslous.Agents.firefox ? [{txt:'サイズを選択して下さい。',val:""},{txt:'小',val:'1'},{txt:'標準',val:'2'},{txt:'大',val:'4'},{txt:'特大',val:'5'},{txt:'超特大',val:'6'}]:[{txt:'サイズを選択して下さい。',val:""},{txt:'小',val:'-2'},{txt:'標準',val:'-1'},{txt:'大',val:'+1'},{txt:'特大',val:'+2'},{txt:'超特大',val:'+3'}],
  defaults : {
   font : "'ヒラギノ角ゴ Pro W3','Hiragino Kaku Gothic Pro'",
   size : jslous.Agents.ie || jslous.Agents.firefox ? '2':'-1',
   iconpath : 'img/editer/',
   imagepath : 'req/images.php',
   filepath : 'req/files.php',
   src : null,
   block : 'p',
   autoclean : true,
   css : [],
   item : [
   { label:'font',stateicon:'font.gif',hovericon:'font_over.gif',func:function(doc,obj){
     var self = obj,current = self.current,box = document.createElement('div');
     self.initInterface();
     box.setAttribute('id','interface');
     var fontlist = jslous.node.createSelect(self['fontfamilies']),sizelist = jslous.node.createSelect(self['fontsizes']),close = document.createElement('img');
     close.setAttribute('src',current['iconpath']+'close.gif');
     box['className'] = 'fontfamily';
     jslous.css.opacity(box,0);
     box.appendChild(fontlist);
     box.appendChild(sizelist);
     box.appendChild(close);
     document.body.appendChild(box);
     self.interfacebuilder(current,box,close);
     jslous.Event.Listener(fontlist,'change',function(evt){ doc.execCommand('fontname',false,jslous.node.getSelect(fontlist)['value'].length > 0 ? jslous.node.getSelect(fontlist)['value']:current['font']); });
     jslous.Event.Listener(sizelist,'change',function(evt){
      doc.execCommand('fontsize',false,jslous.node.getSelect(sizelist)['value'].length > 0 ? jslous.node.getSelect(sizelist)['value']:current['size']);
      if(jslous.Agents.ie || jslous.Agents.firefox){
       var fontsizefix = {'1':'10px','2':'12px','4':'14px','5':'16px','6':'18px'};
       $((jslous.Agents.ie ? 'font^size':'font'),doc).each(function(){
        var elm = this,size = elm.getAttribute('size');
        try{
         if(size && size.length > 0){
          jslous.css.setstyle(elm,'font-size',fontsizefix[size]);
          elm.removeAttribute('size');
         }
        }catch(e){}
       });
      }
     });
    }
   },
   { label:'color',stateicon:'color.gif',hovericon:'color_over.gif',func:function(doc,obj){
     var cheet = [{dec:'0',hex:'00'},{dec:'51',hex:'33'},{dec:'102',hex:'66'},{dec:'153',hex:'99'},{dec:'204',hex:'CC'},{dec:'255',hex:'FF'}],self = obj,current = self.current,box = document.createElement('div'),close = document.createElement('img'),wafer = document.createElement('em');
     self.initInterface();
     box.setAttribute('id','interface');
     box['className'] = 'picker';
     jslous.css.opacity(box,0);
     close.setAttribute('src',current['iconpath']+'close.gif');
     for(var r = 0;r <= 5;r++){
      for(var g = 0;g <= 5;g++){
       for(var b = 0;b <= 5;b++){
        var cell = document.createElement('i'),color = '#'+cheet[r]['hex']+''+cheet[g]['hex']+''+cheet[b]['hex'];
        jslous.css.setstyle(cell,'background-color',color);
        cell.setAttribute('code',color);
        jslous.Event.Listener(cell,'mousedown',function(evt){
         var trg = jslous.Event.target(evt);
         while(trg.tagName.toLowerCase() != 'i'){ trg = trg.parentNode; }
         doc.execCommand('forecolor',false,trg.getAttribute('code'));
        });
        wafer.appendChild(cell);
       }
      }
      var row = document.createElement('b');
      wafer.appendChild(row);
     }
     box.appendChild(wafer);
     box.appendChild(close);
     document.body.appendChild(box);
     self.interfacebuilder(current,box,close);
    }
   },
   { label:'bold',stateicon:'bold.gif',hovericon:'bold_over.gif',func:function(doc){ doc.execCommand('bold',false,null); }},
   { label:'italic',stateicon:'italic.gif',hovericon:'italic_over.gif',func:function(doc){ doc.execCommand('italic',false,null); }},
   { label:'underline',stateicon:'underline.gif',hovericon:'underline_over.gif',func:function(doc){ doc.execCommand('underline',false,null); }},
   { label:'strike',stateicon:'strike.gif',hovericon:'strike_over.gif',func:function(doc){ doc.execCommand('strikethrough',false,null); }},
   { label:'left',stateicon:'left.gif',hovericon:'left_over.gif',func:function(doc){ doc.execCommand('justifyleft',false,null); }},
   { label:'center',stateicon:'center.gif',hovericon:'center_over.gif',func:function(doc){ doc.execCommand('justifycenter',false,null); }},
   { label:'right',stateicon:'right.gif',hovericon:'right_over.gif',func:function(doc){ doc.execCommand('justifyright',false,null); }},
   { label:'list',stateicon:'list.gif',hovericon:'list_over.gif',func:function(doc){ doc.execCommand('insertunorderedlist',false,null); }},
   { label:'orderedlist',stateicon:'orderedlist.gif',hovericon:'orderedlist_over.gif',func:function(doc){ doc.execCommand('insertorderedlist',false,null); }},
   { label:'link',stateicon:'link.gif',hovericon:'link_over.gif',func:function(doc,obj){    
    var self = obj,current = self.current,box = document.createElement('div'),input = document.createElement('input'),close = document.createElement('img'),linker = document.createElement('img'),blank = document.createElement('input');
    if(jslous.Agents.ie){ self.savebuffa(self.createRange(current['frame'].contentWindow)); }
    self.initInterface();
    box.setAttribute('id','interface');
    jslous.css.opacity(box,0);
    box['className'] = 'linker';
    close.setAttribute('src',current['iconpath']+'close.gif');
    linker.setAttribute('src',current['iconpath']+'link_add.gif');
    jslous.node.setattr(input,{type:'text',id:'linkerurl',className:'liker'});
    jslous.node.setattr(blank,{type:'checkbox',id:'blanker',className:'blanker'});
    jslous.Event.Listener(linker,'mousedown',function(evt){
     var url = document.getElementById('linkerurl').value;
     if(jslous.Agents.ie){ doc = self.restorebuffa(); }     
     if(document.getElementById('blanker').checked == true){
      self.blanklinker(doc,url);
     }else{
      doc.execCommand('createlink',false,url);
     }
     var trg = box,height = box.offsetHeight;
     jslous.css.setstyle(trg,'width',(trg.offsetWidth-2)+'px');
     jslous.node.removeChilds(trg);
     jslous.func.motion.Listener(trg.style,{time:0.3,effect:'backin',height:{from:height,to:0,unit:'px'},opacity:{from:100,to:0,unit:''},comp:function(){ trg.parentNode.removeChild(trg); }});
    });
    box.appendChild(input);
    box.appendChild(blank); 
    box.appendChild(close);
    box.appendChild(linker);
    document.body.appendChild(box);
    self.interfacebuilder(current,box,close);
   }},
   { label:'image',stateicon:'image.gif',hovericon:'image_over.gif',func:function(doc,obj){    
    var self = obj,current = self.current,box = document.createElement('div');
    var left = parseInt(jslous.elmPos.left(current['ul'])),top = parseInt(jslous.elmPos.top(current['ul']));
    var bleft = (jslous.size.scrollLeft()+jslous.size.clientWidth())-120-(!jslous.Agents.ie && jslous.size.documentHeight() > jslous.size.clientHeight() ? 20:0),btop = jslous.size.scrollTop()+20;
    self.initInterface();
    box.setAttribute('id','interface');
    jslous.css.setstyles(box,{position:'absolute',top:top+'px',left:left+'px',width:100+'px',height:100+'px'});
    jslous.css.opacity(box,0);
    document.body.appendChild(box);
    if(jslous.Agents.ie){ self.savebuffa(self.createRange(current['frame'].contentWindow)); }
    var wheel = jslous.canvas.wheel.Listener(box,{color:'#F5F5F5',style:{'font-size':10+'px'}},{size:64,color:'#1F1F1F',type:'o',weight:6});
    jslous.func.motion.Listener(box.style,{
     time:1,
     effect:'bounceout',
     top:{from:top,to:btop,unit:'px'},
     left:{from:left,to:bleft,unit:'px'},
     opacity:{from:0,to:85,unit:''},
     comp:function(){
      jslous.css.setstyles(box,{top:btop+'px',left:bleft+'px'});
      jslous.css.opacity(box,85);
     }
    });
    var loadmaterials = function(req){
     jslous.ajax(req || current['imagepath'],'GET','',function(res){
      jslous.node.removeChilds(box);
      jslous.func.motion.Listener(box.style,{
       time:0.5,
       effect:'backin',
       width:{from:100,to:350,unit:'px'},
       left:{from:bleft,to:(bleft-250),unit:'px'},
       height:{from:100,to:0,unit:'px'},
       comp:function(){
        jslous.css.setstyles(box,{width:350+'px',height:0+'px',left:(bleft-250)+'px',overflow:'hedden'});        
        var juelcase = document.createElement('div');
        juelcase['className'] = 'juelcase';
        jslous.css.opacity(juelcase,0);
        juelcase.innerHTML = res;
        box.appendChild(juelcase);
        $('img.globe',box).sphere({size:66});
        var toheight = juelcase.offsetHeight;
        jslous.func.motion.Listener(box.style,{
         time:0.7,
         effect:'elasticinout',
         height:{from:0,to:toheight,unit:'px'},
         comp:function(){
          box.style['height'] = toheight+'px';
          jslous.func.motion.Listener(juelcase.style,{
           time:0.5,
           effect:'liner',
           opacity:{from:0,to:100,unit:''},
           comp:function(){
            $('input.imagedisplay',box).click(function(evt){
             var src = jslous.Event.target(evt);
             var flowout = function(flg){
              flg = flg || false;
              var trg = document.getElementById('imageflow');
              if(!trg){ return false; }
              var to = jslous.size.clientWidth()-trg.offsetWidth-60;
              jslous.func.motion.Listener(trg.style,{
               time:0.3,effect:'quintinout',opacity:{from:90,to:0,unit:''},left:{from:parseInt(jslous.css.current(trg,'left')),to:to,unit:'px'},
               comp:function(){
                jslous.css.setstyle(trg,'left',to+'px');
                jslous.css.opacity(trg,0);
                document.body.removeChild(trg);
                if(flg == true){ flowin(); }
               }
              });
             }
             var flowin = function(){
              var path = src.getAttribute('name'),flowframe = document.createElement('div'),flow = document.createElement('img');
              flowframe['id'] = 'imageflow';   
              flow['src'] = path;
              jslous.css.opacity(flowframe,0);
              flowframe.appendChild(flow);
              document.body.appendChild(flowframe);   
              jslous.node.setattr(flow,{width:flow.offsetWidth,height:flow.offsetHeight});
              jslous.canvas.reflect.Listener(flow,{tilt:'n',long:22,distance:0,opacity:25,border:1,color:'#AAAAAA'});
              var middle = jslous.elmPos.middle(flowframe),center = jslous.elmPos.center(flowframe);
              jslous.css.setstyle(flowframe,'top',middle+'px');
              jslous.func.motion.Listener(flowframe.style,{
               time:0.3,effect:'quintinout',opacity:{from:0,to:90,unit:''},left:{from:0,to:center,unit:'px'},
               comp:function(){
                jslous.css.setstyle(flowframe,'left',center+'px');
                jslous.css.opacity(flowframe,90);
                jslous.Event.removeListener(flow,'load',arguments.callee);
                jslous.Event.Listener(flowframe,'mousedown',flowout);
               }
              });   
             }
             !document.getElementById('imageflow') ? flowin():flowout(true);             
            }).query('input.imageinsert',box).click(function(evt){
             var elm = jslous.Event.target(evt),path = elm.getAttribute('name');
             var trg = document.getElementById('imageflow');
             (function(){
              if(!trg){ return false; }
              var to = jslous.size.clientWidth()-trg.offsetWidth-60;
              jslous.func.motion.Listener(trg.style,{
               time:0.3,effect:'quintinout',opacity:{from:90,to:0,unit:''},left:{from:parseInt(jslous.css.current(trg,'left')),to:to,unit:'px'},
               comp:function(){
                jslous.css.setstyle(trg,'left',to+'px');
                jslous.css.opacity(trg,0);
                document.body.removeChild(trg);
               }
              });
             })();
             if(jslous.Agents.ie){ doc = self.restorebuffa(); }
             try{ doc.execCommand('insertImage',false,path); }catch(e){}
             if(box){ box.parentNode.removeChild(box); }
            }).query('a',box).click(function(evt){
             evt = jslous.Event.getevt(evt);             
             var trg = jslous.Event.target(evt);             
             while(trg.tagName.toLowerCase() != 'a'){ trg = trg.parentNode; }
             loadmaterials(trg.getAttribute('req'));
            }).query('a#close',box).click(function(evt){
             if(box){ box.parentNode.removeChild(box); }
            });
           }
          });
         }
        });
       }
      });
     },'txt');
    };
    setTimeout(function(){
     wheel.remove();
     loadmaterials();
    },2000)
   }},
   { label:'file',stateicon:'file.gif',hovericon:'file_over.gif',func:function(doc,obj){
    var self = obj,current = self.current,box = document.createElement('div');
    var left = parseInt(jslous.elmPos.left(current['ul'])),top = parseInt(jslous.elmPos.top(current['ul']));
    var bleft = (jslous.size.scrollLeft()+jslous.size.clientWidth())-120-(!jslous.Agents.ie && jslous.size.documentHeight() > jslous.size.clientHeight() ? 20:0),btop = jslous.size.scrollTop()+20;
    self.initInterface();
    box.setAttribute('id','interface');
    jslous.css.setstyles(box,{position:'absolute',top:top+'px',left:left+'px',width:100+'px',height:100+'px'});
    jslous.css.opacity(box,0);
    document.body.appendChild(box);
    if(jslous.Agents.ie){ self.savebuffa(self.createRange(current['frame'].contentWindow)); }
    var wheel = jslous.canvas.wheel.Listener(box,{color:'#F5F5F5',style:{'font-size':10+'px'}},{size:64,color:'#1F1F1F',type:'o',weight:6});
    jslous.func.motion.Listener(box.style,{
     time:1,
     effect:'bounceout',
     top:{from:top,to:btop,unit:'px'},
     left:{from:left,to:bleft,unit:'px'},
     opacity:{from:0,to:85,unit:''},
     comp:function(){
      jslous.css.setstyles(box,{top:btop+'px',left:bleft+'px'});
      jslous.css.opacity(box,85);
     }
    });
    var loadmaterials = function(req){
     jslous.ajax(req || current['filepath'],'GET','',function(res){
      jslous.node.removeChilds(box);
      jslous.func.motion.Listener(box.style,{
       time:0.5,
       effect:'backin',
       width:{from:100,to:350,unit:'px'},
       left:{from:bleft,to:(bleft-250),unit:'px'},
       height:{from:100,to:0,unit:'px'},
       comp:function(){
        jslous.css.setstyles(box,{width:350+'px',height:0+'px',left:(bleft-250)+'px',overflow:'hedden'});        
        var juelcase = document.createElement('div');
        juelcase['className'] = 'juelcase';
        jslous.css.opacity(juelcase,0);
        juelcase.innerHTML = res;
        box.appendChild(juelcase);
        var toheight = juelcase.offsetHeight;
        jslous.func.motion.Listener(box.style,{
         time:0.7,
         effect:'elasticinout',
         height:{from:0,to:toheight,unit:'px'},
         comp:function(){
          box.style['height'] = toheight+'px';
          jslous.func.motion.Listener(juelcase.style,{
           time:0.5,
           effect:'liner',
           opacity:{from:0,to:100,unit:''},
           comp:function(){
            $('input.imagedisplay',box).click(function(evt){
             if(document.getElementById('previewflow')){ document.getElementById('previewflow').parentNode.removeChild(document.getElementById('previewflow')); }
             var elm = jslous.Event.target(evt),path = elm.getAttribute('name');
             window.open(path,'','toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no,titlebar=no,resizable=no,fullscreen=no');
            }).query('input.imageinsert',box).click(function(evt){
             if(document.getElementById('previewflow')){ document.getElementById('previewflow').parentNode.removeChild(document.getElementById('previewflow')); }
             var elm = jslous.Event.target(evt),path = elm.getAttribute('name');
             if(jslous.Agents.ie){ doc = self.restorebuffa(); }
             self.blanklinker(doc,path);
             if(box){ box.parentNode.removeChild(box); }         
            }).query('a',box).click(function(evt){
             evt = jslous.Event.getevt(evt);             
             var trg = jslous.Event.target(evt);             
             while(trg.tagName.toLowerCase() != 'a'){ trg = trg.parentNode; }
             loadmaterials(trg.getAttribute('req'));
            }).query('a#close',box).click(function(evt){
             if(box){ box.parentNode.removeChild(box); }
            });
           }
          });
         }
        });
       }
      });
     },'txt');
    };
    setTimeout(function(){
     wheel.remove();
     loadmaterials();
    },2000)
   }}
  ],
   obj : null,
   elm : null,
   container : document.createElement('div'),
   frame : document.createElement('iframe'),
   input : document.createElement('textarea'),
   ext : document.createElement('input'),
   ul : document.createElement('ul'),
   tools : null,
   lock : true,
   cache : '',
   wysiwyg : true,
   buffa : null
  },
  initInterface : function(){
   var interface = document.getElementById('interface');
   if(interface){ interface.parentNode.removeChild(interface); }
  },
  interfacebuilder : function(obj,box,close){
   var current = obj,start = parseInt(jslous.elmPos.left(current['ul'])),goal = (start+parseInt(current['ul'].offsetWidth))-parseInt(box.offsetWidth),top = parseInt(jslous.elmPos.top(current['ul']));
   jslous.css.setstyles(box,{top:top+'px',left:start+'px'});    
   jslous.Event.Listener(close,'mousedown',function(evt){
    var trg = box,height = box.offsetHeight;
    jslous.css.setstyle(trg,'width',(trg.offsetWidth-2)+'px');
    jslous.node.removeChilds(trg);
    jslous.func.motion.Listener(trg.style,{time:0.3,effect:'backin',height:{from:height,to:0,unit:'px'},opacity:{from:100,to:0,unit:''},comp:function(){ trg.parentNode.removeChild(trg); }});
   });    
   setTimeout(function(){
    var trg = box;
    jslous.func.motion.Listener(trg.style,{time:0.5,effect:'backout',opacity:{from:0,to:100,unit:''},left:{from:start,to:goal,unit:'px'},comp:function(){ jslous.css.setstyle(trg,'left',goal+'px'); }});
   },50);
  },
  blanklinker : function(doc,url){
   if(jslous.Agents.ie){
    doc.execCommand('createlink',false,url);
    try{ doc.parentElement().setAttribute('target','_blank'); }catch(e){}
   }else{
    doc.execCommand('createlink',false,'javascript:temp()');
    var linkers = jslous.node.list2array(doc.getElementsByTagName('a'));
    for(var i = 0,len = linkers.length;i < len;i++){
     if(linkers[i]['href'].match(/javascript:temp\(\)/ig)){
      jslous.node.setattr(linkers[i],{href:url,target:'_blank'});
      break;
     }
    }  
   }
  },
  iefix : function(evt){
   var self = this,current = self.current;
   current['src'] = jslous.Event.target(evt);
  },
  Listener : function(elm,opt){
   if(elm.tagName.toLowerCase() == 'textarea' && jslous.is_str(document.designMode) && (jslous.Agents.ie || document.designMode == 'off')){
    var self = this,current = {};
    for(var key in self.defaults){
     current[key] = typeof opt[key] != 'undefined' ? opt[key]:self.defaults[key];
     if(typeof opt[key] != 'undefined'){ delete opt[key]; }
    }
    if(self.class_exists(elm.className,'wysiwyg')){
     var chkattr = elm.getAttribute('id');
     if((!chkattr || (chkattr && chkattr == '')) && elm.getAttribute('name')){ elm.setAttribute('id',elm.getAttribute('name')); }
     current['elm'] = elm;
     self.current = current;
     setTimeout(function(){ self.initirizer(elm,current); },500);
    }
    return true;
   }
   return false;
  },
  initirizer : function(){
   var self = this;
   if(self.current['elm'].tagName.toLowerCase() == 'textarea'){
    var chkattr = self.current['elm'].getAttribute('id');
    if((!chkattr || (chkattr && chkattr == '')) && self.current['elm'].getAttribute('name')){ self.current['elm'].setAttribute('id',self.current['elm'].getAttribute('name')); }
    var id = self.current['elm'].getAttribute('id') ? self.current['elm'].getAttribute('id'):'',name = self.current['elm'].getAttribute('name') ? self.current['elm'].getAttribute('name'):'',value = self.current['elm']['value'] ? self.current['elm']['value']:'';
    jslous.css.setstyle(self.current['elm'],'visibility','hidden');
    jslous.node.setattr(self.current['container'],{id:id+'wydgcontainer','className':'wydgcontainer'});
    jslous.node.setattr(self.current['frame'],{id:id+'wydgframe','className':'wydgframe'});
    var w = jslous.css.current(self.current['elm'],'width'),h = jslous.css.current(self.current['elm'],'height');
    jslous.node.setattr(self.current['input'],{id:id,name:name,value:value,'className':'wydginput'});
    self.current['tools'] = self.barbulder(self.current);  
    jslous.node.setattr(self.current['ext'],{type:'hidden',id:id+'wydgediter',name:name+'wydgediter',value:'true'});
    jslous.node.setattr(self.current['elm'],{id:id+'wydgarea',name:name+'wydgarea'});
    self.current['container'].appendChild(self.current['tools']);
    self.current['container'].appendChild(self.current['frame']);
    self.current['container'].appendChild(self.current['input']);
    self.current['container'].appendChild(self.current['ext']);
    jslous.css.setstyle(self.current['container'],'visibility','hidden');
    self.current['input'].editerobj = self.current;
    self.current['elm'].parentNode.replaceChild(self.current['container'],self.current['elm']);
    self.writer(self.current['input'].value);
    self.editabler();
   }
  },
  editabler : function(){
   var self = this;
   try{
    self.current['frame'].contentWindow.document.designMode = 'on';
   }catch(e){
    setTimeout(self.initirizer,250);
	return false;
   }
   jslous.css.setstyle(self.current['container'],'visibility','visible');
   jslous.css.setstyle(self.current['elm'],'visibility','visible');
   if(self.current['elm'].value.length == 0){
    jslous.Event.Listener(self.current['frame'].contentWindow.document,'mouseup',function(evt){
     self.current['frame'].contentWindow.document.execCommand('formatblock',false,'<'+self.current['block']+'>');
     jslous.Event.removeListener(self.current['frame'].contentWindow.document,'mouseup',arguments.callee);
    });
   }
   self.current['frame'].contentWindow.document.innerHTML = self.current['elm'].value;
   if(jslous.Agents.ie){ jslous.Event.Listener(self.current['frame'].contentWindow.document,'selectstart',function(evt){ self.iefix(evt); }); }
   self.current['lock'] = false;
   return true;
  },
  writer : function(contents){
   var self = this,doctemp = '\
		  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\
		   <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja">\
			<head>\
			 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />\
			 <meta http-equiv="Content-Language" content="ja" />\
			 <meta http-equiv="Content-Style-Type" content="text/css" />\
			 <meta http-equiv="Content-Script-Type" content="text/javascript" />\
			 <meta http-equiv="Pragma" content="no-cache" />\
			 <meta http-equiv="Cache-Control" content="no-cache" />\
			 <meta http-equiv="Expires" content="Thu, 01 Dec 1994 16:00:00 GMT" />\
				INSERT:STYLESHEET:END\
			</head>\
			<body>\
				INSERT:CONTENT:END\
</body>\
		</html>\
	';
   if(jslous.Agents.ie){
    var styles = '';
    if(jslous.is_array(self.current['css'])){
     for(var i = 0,len = self.current['css'].length;i < len;i++){ styles += '<link rel="stylesheet" type="text/css" href="'+self.current['css'][i]+'"></link>'; }
    }
	doctemp = doctemp.replace(/INSERT:STYLESHEET:END/,styles);
   }else{
    doctemp = doctemp.replace(/INSERT:STYLESHEET:END/,'');
   }
   doctemp = doctemp.replace(/INSERT:CONTENT:END/,contents);
   self.current['frame'].contentWindow.document.open();
   self.current['frame'].contentWindow.document.write(doctemp);
   self.current['frame'].contentWindow.document.close();
   if(!jslous.Agents.ie){
    if(jslous.is_array(self.current['css'])){
     for(var i = 0,len = self.current['css'].length;i < len;i++){
      var sheets = self.current['frame'].contentWindow.document.createElement('link');
      jslous.node.setattr(sheets,{rel:'stylesheet',type:'text/css',href:self.current['css'][i]});
      self.current['frame'].contentWindow.document.getElementsByTagName('head')[0].appendChild(sheets);
     }
    }
   }
   var submiter = self.current['input'].parentNode;
   while(submiter.tagName.toLowerCase() != 'form'){
    submiter = submiter.parentNode;
    if(submiter.tagName.toLowerCase() == 'body'){ break; }
   }
   if(submiter.tagName.toLowerCase() == 'form'){ jslous.Event.Listener(submiter,'submit',function(evt){ self.parser(evt); }); }
   return true;
  },
  barbulder : function(){
   var self = this,id = self.current['input']['id']+'wydgtool';
   self.current['obj'] = self.current;
   jslous.node.setattr(self.current['ul'],{id:id,'className':'wydgtool',obj:self.current});
   for(var i = 0,len = self.current['item'].length;i < len;i++){
    var hash = self.current['item'][i],path = self.current['iconpath'];
    var label = jslous.String.ucfirst(hash['label']);
    var li = document.createElement('li'),a = document.createElement('a');
    jslous.node.setattr(li,{id:id+'btn'+label,'className':'wydgbtn'});
    var icon = document.createElement('img');
    icon.setAttribute('src',path+hash['stateicon']);
    jslous.node.setattr(a,{href:'javascript://','className':'wydgbtn'+label,label:label,icon:icon,hover:hash['hovericon'],state:hash['stateicon'],func:hash['func']});
    jslous.Event.Listener(a,'mouseover',function(evt){
     var trg = jslous.Event.target(evt);
     while(trg.tagName.toLowerCase() != 'a'){ trg = trg.parentNode; }  
     trg['icon'].setAttribute('src',path+trg['hover']);
    });
    jslous.Event.Listener(a,'mouseout',function(evt){
     var trg = jslous.Event.target(evt);
     while(trg.tagName.toLowerCase() != 'a'){ trg = trg.parentNode; }  
     trg['icon'].setAttribute('src',path+trg['state']);
    });
    if(jslous.is_func(hash['func'])){
     jslous.Event.Listener(a,'mousedown',function(evt){
      var trg = jslous.Event.target(evt);
      while(trg.tagName.toLowerCase() != 'a'){ trg = trg.parentNode; }  
      trg['func'].apply(this,[self.current['frame'].contentWindow.document,self]);
     });
    }
    a.appendChild(icon);
    li.appendChild(a);
    self.current['ul'].appendChild(li);
   }
   return self.current['ul'];
  },
  class_exists : function(str,reg){
   var regexp = new RegExp('(^| )'+reg+'\W*');
   return (regexp.test(str) ? true:false);
  },
  createRange : function(win){ return (jslous.Agents.ie ? win.document.selection.createRange():(jslous.Agents.webkit ? win.getSelection():win.getSelection())); },
  savebuffa : function(rng){
   var self = this,current = self.current;
   current['buffa'] = rng;
  },
  restorebuffa : function(){
   var self = this,current = self.current,rng = current['buffa'];
   current['buffa'] = null;
   return rng;
  },
  parser : function(evt){
   var self = this,current = self.current,tmp = document.createElement('div');
   tmp.innerHTML = current['frame'].contentWindow.document.getElementsByTagName('body')[0].innerHTML;
   $('*',tmp).each(function(){
    var trg = this;
    if(jslous.Agents.webkit){ trg['className'] = trg['className'].replace(/(^| )Apple-style-span\W*/,''); }
    try{ trg.removeAttribute('index'); }catch(e){}
    if(trg['className'].length == 0){
     try{ trg.removeAttribute('class'); }catch(e){}
    }
   }).query('font^face',tmp).each(function(){
    var elm = this,fonts = elm.getAttribute('face');
    if(fonts){
     try{
      jslous.css.setstyle(elm,'font-family',fonts);
      elm.removeAttribute('face');
      elm.removeAttribute('index');
      if(elm.hasChildNodes()){
       $('font',elm).push('span',elm).each(function(){
        var celm = this;
        if(!celm.style['fontFamily']){
         jslous.css.setstyle(celm,'font-family',fonts);
        }
       });       
      }
     }catch(e){}
    }
   }).query('img',tmp).each(function(){
    var elm = this;
    
    try{ elm.removeAttribute('index'); }catch(e){}
   });
   current['input'].value = tmp.innerHTML;
  }
 } 
 
 /* canvasengine */
 jslous.canvas = {
  optinit : function(def,res){
   if(!jslous.is_obj(def) || !jslous.is_obj(res)){ return false; }
   var current = {};
   for(var key in def){
    current[key] = typeof res[key] != 'undefined' ? res[key]:def[key];
    if(typeof res[key] != 'undefined'){ delete res[key]; }
   }
   return current;
  },
  loadListener : function(img,func){
   if(!jslous.is_func(func)){ return false; }
   if(!jslous.Agents.ie){
    jslous.Event.Listener(img,'load',func);
   }else{
    if(img.readyState == 'complete'){ return func(); }
    img.onreadystatechange = function(){ if(img.readyState == 'complete'){ return func(); } }
   }
  },
  realwidth : function(img){ return (jslous.css.current(img,'width').toLowerCase() != 'auto' ? parseInt(jslous.css.current(img,'width')):img.width ? img.width:img.naturalWidth ? img.naturalWidth:img.offsetWidth); },
  realheight : function(img){ return (jslous.css.current(img,'height').toLowerCase() != 'auto' ? parseInt(jslous.css.current(img,'height')):img.height ? img.width:img.naturalHeight ? img.naturalHeight:img.offsetHeight); },
  addnamespace : function(){
   var vmlstyle = document.createStyleSheet(),vml = ['shape','shapetype','group','background','path','formulas','handles','fill','stroke','shadow','textbox','textpath','imagedata','line','polyline','curve','roundrect','oval','rect','arc','image'];
   for(var i = 0;i < vml.length;i++){ vmlstyle.addRule('v\\:'+vml[i],'behavior: url(#default#VML);'); }
   document.namespaces.add('v','urn:schemas-microsoft-com:vml');
  },
  createCanvas : function(img,width,height,attr,styles){
   if(jslous.Agents.ie && document.namespaces){
	if(document.namespaces['v'] == null){ jslous.canvas.addnamespace(); }
	var display= jslous.css.current(img,'display').toLowerCase() == 'block' ? 'block':'inline-block';
	var canvas = document.createElement('var');
	jslous.css.setstyles(canvas,{ zoom:1,overflow:'hidden',display:display,width:width+'px',height:height+'px',padding:0 });
	var float = jslous.css.current(img,(jslous.Agents.ie ? 'styleFloat':'float')).toLowerCase();
    canvas.dpl = (float == 'left' || float == 'right') ? 'inline':display;
   }else{
	var canvas = document.createElement('canvas');
   }
   if(canvas || canvas.getContext('2d')){
	try{ for(var at in attr){ if(attr[at]){ canvas[at] = attr[at]; } } }catch(e){}
	canvas.style.cssText = img.style.cssText;
	jslous.css.setstyles(canvas,styles);
   }
   return canvas;
  },
  RadialGradient : function(ctx,x1,y1,r1,x2,y2,r2,array){
   if(!ctx || !jslous.is_array(array)){ return false; }
   var tmp = ctx.createRadialGradient(x1,y1,r1,x2,y2,r2);
   for(var i = 0,len = array.length;i < len;i++){ tmp.addColorStop(array[i]['offset'],array[i]['color']); }
   return tmp;
  },
  LinearGradient : function(ctx,x,y,w,h,array){
   if(!ctx || !jslous.is_array(array)){ return false; }
   var tmp = ctx.createLinearGradient(x,y,w,h);
   for(var i = 0,len = array.length;i < len;i++){ tmp.addColorStop(array[i]['offset'],array[i]['color']); }
   return tmp;
  },
  lineTo : function(ctx,array){
   if(!ctx || !array){ return false; }
   for(var i = 0,len = array.length;i < len;i++){ ctx.lineTo(array[i]['x'],array[i]['y']); }
  },
  quadraticCurve : function(ctx,array){
   if(!ctx || !array){ return false; }
   for(var i = 0,len = array.length;i < len;i++){
    if(array[i]['s'] || array[i]['e']){ ctx.lineTo(array[i]['s'],array[i]['e']); }
    ctx.quadraticCurveTo(array[i]['x'],array[i]['y'],array[i]['w'],array[i]['h']);
   }
  },
  bezierCurve :  function(ctx,array){
   if(!ctx || !array){ return false; }
   for(var i = 0,len = array.length;i < len;i++){ ctx.bezierCurveTo(array[i]['x1'],array[i]['y1'],array[i]['r1'],array[i]['x2'],array[i]['y2'],array[i]['r2']); }
  },
  clipCurl : function(ctx,x,y,w,h,r,i){
	ctx.beginPath();
	ctx.moveTo(x,h);
	jslous.canvas.quadraticCurve(ctx,[{x:x+r,y:h,w:x+r,h:h-r},{x:x+r,y:y+(2*r),w:x,h:y},{x:x+(2*r),y:y+r,w:w-r,h:y+r},{x:w,y:y+r,w:w,h:y},{x:w,y:y+(r/2),w:w-(r-i),h:y+i}]);	
	ctx.lineTo(x+i,h-(r-i)); 
	ctx.quadraticCurveTo(x+(r/2),h,x,h);
	ctx.closePath();
  },
  clipPolyRight : function(ctx,x,y,w,h,t,d,s){
	var z = (h-t-t)/h,line = d > 0 ? [{x:w,y:y+t},{x:w,y:y+h-t},{x:x,y:y+h},{x:x,y:y+h-s},{x:w,y:y+h-t-(z*s)},{x:w,y:y+h-t-(z*(s+d))},{x:x,y:y+h-s-d}]:[{x:w,y:y+t},{x:w,y:y+h-t},{x:x,y:y+h}];
	ctx.beginPath();
	ctx.moveTo(x,y);
	jslous.canvas.lineTo(ctx,line);
	ctx.closePath();
  },
  clipPolyLeft : function(ctx,x,y,w,h,t,d,s) {
   var z = (h-t-t)/h,line = d > 0 ? [{x:w,y:y+1},{x:w,y:y+h},{x:x,y:y+h-t},{x:x,y:y+h-t-(z*s)},{x:w,y:y+h-s},{x:w,y:y+h-s-d},{x:x,y:y+h-t-(z*(s+d))}]:[{x:w,y:y+1},{x:w,y:y+h},{x:x,y:y+h-t}];
   ctx.beginPath();
   ctx.moveTo(x,y+t);
   jslous.canvas.lineTo(ctx,line);
   ctx.closePath();
  },
  strokePolyRight : function(ctx,x,y,w,h,t,d,s,b){
	var z = (h-t-t)/h,n = (b >= 1 ? 1:0),line = [{x:w-b,y:y+t+b-n},{x:w-b,y:y+h-t-(z*(s+d))-b},{x:x+b,y:y+h-s-d-b}];
	ctx.beginPath();
	ctx.moveTo(x+b,y+b);
	jslous.canvas.lineTo(ctx,line);
	ctx.closePath();
  },
  strokePolyLeft : function(ctx,x,y,w,h,t,d,s,b) {
   var z = (h-t-t)/h,n = (b >= 1 ? 1:0),line = [{x:w-b,y:y+b},{x:w-b,y:y+h-s-d-b},{x:x+b,y:y+h-t-(z*(s+d))-b}];
	ctx.beginPath();
	ctx.moveTo(x+b,y+t+b-n);
	jslous.canvas.lineTo(ctx,line);
	ctx.closePath();
  },
  clipReflex : function(ctx,x,y,w,h,t,d,s,o) {
   var z = (h-t-t)/h;
   ctx.beginPath();
   o == 'r' ? ctx.moveTo(x,y+h-s):ctx.moveTo(w,y+h+2);
   jslous.canvas.lineTo(ctx,(o == 'r' ? [{x:w,y:y+h-t-(z*s)},{x:w,y:y+h-t+2},{x:x,y:y+h+2}]:[{x:w,y:y+h-s},{x:x,y:y+h-t-(z*s)},{x:x,y:y+h-t+2}]));
   ctx.closePath();
  },
  clearReflex : function(ctx,x,y,w,h,t,d,s,o) {
   var z = (h-t-t)/h;
   ctx.beginPath();
   o == 'r' ? ctx.moveTo(x,y+h-1):ctx.moveTo(w,y+h-1);
   jslous.canvas.lineTo(ctx,(o == 'r' ? [{x:w,y:y+h-t-1},{x:w,y:y+h-t+1},{x:x,y:y+h+1}]:[{x:x,y:y+h-t-1},{x:x,y:y+h-t+1},{x:w,y:y+h+1}]));
   ctx.closePath();
  },
  roundedRect : function(ctx,x,y,width,height,radius,nopath){
   if(!nopath){ ctx.beginPath(); }
   ctx.moveTo(x,y+radius);
   jslous.canvas.quadraticCurve(ctx,[{s:x,e:y+height-radius,x:x,y:y+height,w:x+radius,h:y+height},{s:x+width-radius,e:y+height,x:x+width,y:y+height,w:x+width,h:y+height-radius},{s:x+width,e:y+radius,x:x+width,y:y,w:x+width-radius,h:y},{s:x+radius,e:y,x:x,y:y,w:x,h:y+radius}]);
   if(!nopath){ ctx.closePath(); }
  },
  rect : function(ctx,array){
   if(!ctx || !array){ return false; }
   for(var i = 0,len = array.length;i < len;i++){
    ctx.beginPath();
    ctx.rect(array[i]['x'],array[i]['y'],array[i]['w'],array[i]['h']);
    ctx.closePath();
    ctx.fillStyle = array[i]['f'];
    ctx.fill();
   }
  },
  undo : function(canvas){
   if(canvas.tagName.toLowerCase() == (jslous.Agents.ie ? 'var':'canvas')){
    try{
     var obj = canvas.parentNode,img = document.createElement('img');
     for(var i in canvas){ img[i] = canvas[i]; }
     img['rido'] = canvas;
     obj.replaceChild(img,canvas);
    }catch(e){}
   }
  },
  corner : {
   defaults : { radius:4,shadow:66,shade:25,inv:false,show:true,comp:null },
   Listener : function(img,opt){
    if(img.tagName.toLowerCase() == 'img'){
     jslous.css.setstyle(img,'visibility','hidden');
     var self = this,current = jslous.canvas.optinit(self.defaults,opt);
     return jslous.canvas.loadListener(img,function(){
      current['width'] = jslous.canvas.realwidth(img);
      current['height'] =jslous.canvas.realheight(img);
      try{
       var obj = img.parentNode;
       var canvas = jslous.canvas.createCanvas(img,current['width'],current['height'],{opt:current,id:img.id,alt:img.alt,title:img.title,source:img.src,width:current['width'],height:current['height'],className:img.className,prv:img.cloneNode(true)},{width:current['width']+'px',height:current['height']+'px'});
       obj.replaceChild(canvas,img);
	   return self.transform(canvas,current);
      }catch(e){}
     });     
    }
   },
   transform : function(canvas,opt){
    var self = this,prop = ['radius','shadow','shade','color','inv'];
    opt = jslous.canvas.optinit(canvas['opt'],opt);
    opt['radius'] = jslous.is_num(opt['radius']) ? opt['radius']:self.defaults['radius'];
    opt['shadow'] = jslous.is_num(opt['shadow']) ? opt['shadow']:self.defaults['shadow'];
    opt['shade'] = jslous.is_num(opt['shade']) ? opt['shade']:self.defaults['shade'];
    opt['inv'] = jslous.is_bool(opt['inv']) ? opt['inv']:self.defaults['inv'];
    try{ for(var i = 0,len = prop.length;i < len;i++){ canvas.opt[prop[i]] = opt[prop[i]]; } }catch(e){}
    var iw = canvas.width,ih = canvas.height,os = 4,is = 0,ir = Math.min(Math.min(iw,ih)/3,opt['radius']),r = Math.max(Math.min(100,ir/((Math.min(iw,ih)/100))),0)+'%';
    canvas.opt['radius'] = ir;
	os = (opt['shadow'] > 0 ? (opt['inv'] != false ? 0:Math.min(Math.max(os,ir/2),16)):0);
	try{
     if(jslous.Agents.ie && document.namespaces){
 	  if(canvas.tagName.toLowerCase() == 'var'){
 	   var start = '<v:group style="zoom:1;display:'+canvas.dpl+';margin:0;padding:0;position:relative;width:'+iw+'px;height:'+ih+'px;" coordsize="'+iw+','+ih+'">',fill = '<v:fill src="'+canvas.source+'" type="frame" />',foot = (ir > 0 ? '</v:roundrect>':'</v:rect>'),end = '</v:group>',pos = 0,linear = 'linear',soft = '',head = '',shado = '',lt = '',left = '',top = '',bottom = '',right = '';
	   if(ir <= 0){
		if(opt['shadow'] > 0){
		 opt['shadow'] = opt['shadow']/50;
		 if(!opt['inv']){
		  os = 8;
		  is = 4;
		  soft = '<v:rect strokeweight="0" filled="t" stroked="f" fillcolor="#ffffff" style="position:absolute;margin:0;padding:0;width:'+iw+'px;height:'+ih+'px;"><v:fill color="#ffffff" opacity="0" /></v:rect><v:rect strokeweight="0" filled="t" stroked="f" fillcolor="#000000" style="filter:Alpha(opacity='+(opt['shadow']*64)+'), progid:dxImageTransform.Microsoft.Blur(PixelRadius='+is+', MakeShadow=false); zoom:1;margin:-1px 0 0 -1px;padding: 0;display:block;position:absolute;top:'+is+'px;left:'+is+'px;width:'+(iw-(3*is))+'px;height:'+(ih-(3*is))+'px;"><v:fill color="#000000" opacity="1" /></v:rect>';
		  head = '<v:rect strokeweight="0" filled="t" stroked="f" fillcolor="#ffffff" style="position:absolute;margin:0;padding:0;width:'+(iw-os)+'px;height:'+(ih-os)+'px;">';
		 }else if(opt['inv']){ 
          ir = 12;
          linear = "linear";
		  head = '<v:rect filled="t" stroked="t" fillcolor="#ffffff" style="position:absolute;margin:0;padding:0;width:'+iw+'px;height:'+ih+'px;">';
		  shado = '<v:stroke weight="0.5" opacity="'+(opt['shadow']/2)+'" color="#000000" />';
		  top = '<v:shape strokeweight="0" filled="t" stroked="f" fillcolor="#000000" coordorigin="0,0" coordsize="'+iw+','+ir+'" path="m 0,0 l '+iw+',0,'+iw+','+ir+','+ir+','+ir+' x e" style="position:absolute;margin:0;top:0px;left:0px;width:'+iw+'px;height:'+ir+'px;"><v:fill method="'+linear+'" type="gradient" angle="0" color="#000000" opacity="0" color2="#000000" o:opacity2="'+opt['shadow']+'" /></v:shape>'; 
		  left = '<v:shape strokeweight="0" filled="t" stroked="f" fillcolor="#000000" coordorigin="0,0" coordsize="'+ir+','+ih+'" path="m 0,0 l 0,'+ih+','+ir+','+ih+','+ir+','+ir+' x e" style="position:absolute; margin:0;top:0px;left:0px;width:'+ir+'px;height:'+ih+'px;"><v:fill method="'+linear+'" type="gradient" angle="90" color="#000000" opacity="0" color2="#000000" o:opacity2="'+opt['shadow']+'" /></v:shape>';
		 }
		}else{
		 head = '<v:rect strokeweight="0" filled="t" stroked="f" fillcolor="#ffffff" style="margin:0;padding:0;display:'+canvas.dpl+';width:'+iw+'px;height:'+ih+'px;">';
		}
		if(opt['shade'] > 0){
		 opt['shade'] = opt['shade']/50; ir = 12;
		 top = '<v:shape strokeweight="0" filled="t" stroked="f" fillcolor="#ffffff" coordorigin="0,0" coordsize="'+(iw-os)+','+ir+'" path="m 0,0 l '+(iw-os)+',0,'+(iw-os)+','+ir+','+ir+','+ir+' x e" style="position:absolute;margin:0;top:0px;left:0px;width:'+(iw-os)+'px;height:'+ir+'px;"><v:fill method="linear" type="gradient" angle="0" color="#ffffff" opacity="0" color2="#ffffff" o:opacity2="'+opt['shade']+'" /></v:shape>'; 
		 left = '<v:shape strokeweight="0" filled="t" stroked="f" fillcolor="#ffffff" coordorigin="0,0" coordsize="'+ir+','+(ih-os)+'" path="m 0,0 l 0,'+(ih-os)+','+ir+','+(ih-os)+','+ir+','+ir+' x e" style="position:absolute;margin:0;top:0px;left:0px;width:'+ir+'px;height:'+(ih-os)+'px;"><v:fill method="linear" type="gradient" angle="90" color="#ffffff" opacity="0" color2="#ffffff" o:opacity2="'+opt['shade']+'" /></v:shape>';
		 bottom = '<v:shape strokeweight="0" filled="t" stroked="f" fillcolor="#000000" coordorigin="0,0" coordsize="'+(iw-os)+','+ir+'" path="m 0,'+ir+' l '+(iw-os)+','+ir+','+(iw-os-ir)+',0,'+ir+',0 x e" style="position:absolute;margin:0;top:'+(ih-os-ir)+'px;left:0px;width:'+(iw-os)+'px;height:'+ir+'px;"><v:fill method="linear" type="gradient" angle="180" color="#000000" opacity="0" color2="#000000" o:opacity2="'+opt['shade']+'" /></v:shape>';
		 right = '<v:shape strokeweight="0" filled="t" stroked="f" fillcolor="#000000" coordorigin="0,0" coordsize="'+ir+','+(ih-os)+'" path="m '+ir+',0 l '+ir+','+(ih-os)+',0,'+(ih-os-ir)+',0,'+ir+' x e" style="position:absolute;margin:0;top:0px;left:'+(iw-os-ir)+'px;width:'+ir+'px;height:'+(ih-os)+'px;"><v:fill method="linear" type="gradient" angle="270" color="#000000" opacity="0" color2="#000000" o:opacity2="'+opt['shade']+'" /></v:shape>';
		}
	   }else{
		if(opt['shadow'] > 0){
		 opt['shadow'] = opt['shadow']/50; linear = "linear sigma"; pos = 2;
		 if(!opt['inv']){
		  is = Math.round(os*0.5);
		  soft = '<v:rect strokeweight="0" filled="t" stroked="f" fillcolor="#ffffff" style="position:absolute;margin:0;padding:0;width:'+iw+'px;height:'+ih+'px;"><v:fill color="#ffffff" opacity="0" /></v:rect><v:roundrect arcsize="'+(r+is)+'" strokeweight="0" filled="t" stroked="f" fillcolor="#000000" style="filter:Alpha(opacity='+(opt['shadow']*64)+'), progid:dxImageTransform.Microsoft.Blur(PixelRadius='+is+', MakeShadow=false); zoom:1;margin:0;padding:0;display:block;position:absolute;top:'+is+'px;left:'+is+'px;width:'+(iw-(3*is))+'px;height:'+(ih-(3*is))+'px;"><v:fill color="#000000" opacity="1" /></v:roundrect>';
		  head = '<v:roundrect arcsize="'+r+'" strokeweight="0" filled="t" stroked="f" fillcolor="#ffffff" style="position:absolute;margin:0;padding:0;width:'+(iw-os)+'px;height:'+(ih-os)+'px;">';
		 }else if(opt['inv']){
		  head = '<v:roundrect arcsize="'+r+'" filled="t" stroked="t" fillcolor="#ffffff" style="position:absolute;margin:0;padding:0;width:'+iw+'px;height:'+ih+'px;">';
		  shado = '<v:stroke weight="0.5" opacity="'+(opt['shadow']/2)+'" color="#000000" />';
		  top = '<v:shape strokeweight="0" filled="t" stroked="f" fillcolor="#000000" coordorigin="0,0" coordsize="'+iw+','+ir+'" path="m '+ir+','+ir+' l '+iw+','+ir+' qy '+(iw-ir)+',0 l '+ir+',0 x e" style="position:absolute;margin:0;top:0px;left:-1px;width:'+(iw+1)+'px;height:'+ir+'px;"><v:fill method="'+linear+'" type="gradient" angle="0" color="#000000" opacity="0" color2="#000000" o:opacity2="'+opt['shadow']+'" /></v:shape>'; 
		  left = '<v:shape strokeweight="0" filled="t" stroked="f" fillcolor="#000000" coordorigin="0,0" coordsize="'+ir+','+ih+'" path="m 0,'+ir+' l 0,'+(ih-ir)+' qy '+ir+','+ih+' l '+ir+','+ir+' x e" style="position:absolute;margin:0;top:-1px;left:0px;width:'+ir+'px;height:'+(ih+1)+'px;"><v:fill method="'+linear+'" type="gradient" angle="90" color="#000000" opacity="0" color2="#000000" o:opacity2="'+opt['shadow']+'" /></v:shape>';
		  lt = '<v:shape strokeweight="0" filled="t" stroked="f" fillcolor="#000000" coordorigin="0,0" coordsize="'+ir+','+ir+'" path="m '+ir+','+ir+' l 0,'+ir+' qy '+ir+',0 l '+ir+','+ir+' x e" style="position:absolute;margin:0;top:0px;left:0px;width:'+ir+'px;height:'+ir+'px;"><v:fill method="'+linear+'" focus="1" focusposition="1,1" focussize="0.5,0.5" type="gradientradial" color="#000000" opacity="0" color2="#000000" o:opacity2="'+opt['shadow']+'" /></v:shape>';
		 }
		}else{
		 pos = 1; os = 0;
		 head = '<v:roundrect arcsize="'+r+'" strokeweight="0" filled="t" stroked="f" fillcolor="#ffffff" style="position:absolute;margin:0;padding:0;width:'+iw+'px;height:'+ih+'px;">';
		}
		if(opt['shade'] > 0 && !opt['inv']){
		 opt['shade'] = opt['shade']/50; linear = "linear";
		 top = '<v:shape strokeweight="0" filled="t" stroked="f" fillcolor="#ffffff" coordorigin="0,0" coordsize="'+(iw-os)+','+ir+'" path="m '+ir+','+ir+' l '+(iw-os)+','+ir+' qy '+(iw-os-ir)+',0 l '+ir+',0 x e" style="position:absolute;margin:0;top:0px;left:-1px;width:'+(iw-os+pos)+'px;height:'+ir+'px;"><v:fill method="'+linear+'" type="gradient" angle="0" color="#ffffff" opacity="0" color2="#ffffff" o:opacity2="'+opt['shade']+'" /></v:shape>'; 
		 left = '<v:shape strokeweight="0" filled="t" stroked="f" fillcolor="#ffffff" coordorigin="0,0" coordsize="'+ir+','+(ih-os)+'" path="m 0,'+ir+' l 0,'+(ih-ir-os)+' qy '+ir+','+(ih-os)+' l '+ir+','+ir+' x e" style="position:absolute;margin:0;top:-1px;left:0px;width:'+ir+'px;height:'+(ih-os+pos)+'px;"><v:fill method="'+linear+'" type="gradient" angle="90" color="#ffffff" opacity="0" color2="#ffffff" o:opacity2="'+opt['shade']+'" /></v:shape>';
		 lt = '<v:shape strokeweight="0" filled="t" stroked="f" fillcolor="#ffffff" coordorigin="0,0" coordsize="'+ir+','+ir+'" path="m '+ir+','+ir+' l 0,'+ir+' qy '+ir+',0 l '+ir+','+ir+' x e" style="position:absolute;margin:0;top:0px;left:0px;width:'+ir+'px;height:'+ir+'px;"><v:fill method="'+linear+'" focus="1" focusposition="1,1" focussize="0.5,0.5" type="gradientradial" color="#ffffff" opacity="0" color2="#ffffff" o:opacity2="'+opt['shade']+'" /></v:shape>';
		}
	   }
	   canvas.innerHTML = start+soft+head+fill+shado+foot+right+bottom+top+left+lt+end; 	   
 	  }
 	 }else if(canvas.tagName.toLowerCase() == 'canvas' && canvas.getContext('2d')){
 	  var context = canvas.getContext('2d');
	  var img = new Image();
	  jslous.Event.Listener(img,'load',function(){
	   context.clearRect(0,0,iw,ih);
	   context.save();
	   if(opt['shadow'] > 0 && !opt['inv']){
	    opt['shadow'] = opt['shadow']/100;
	    os = ir > 0 ? os:8;
		(function(ctx,x,y,width,height,radius,opacity){
	     var colorset = [{offset:0,color:'rgba(0,0,0,'+(Math.min(parseFloat(opacity+0.1),1.0))+')'},{offset:0.25,color:'rgba(0,0,0,'+opacity+')'},{offset:1,color:'rgba(0,0,0,0)'}];
	     jslous.canvas.rect(ctx,[{x:x,y:y+height-radius,w:radius,h:radius,f:jslous.canvas.RadialGradient(ctx,x+radius,y+height-radius,radius-x,x+radius,y+height-radius,radius,colorset)},{x:x+radius,y:y+height-y,w:width-x-(radius*2),h:y,f:jslous.canvas.LinearGradient(ctx,x+radius,y+height-y,x+radius,y+height,colorset)},{x:width-radius,y:height-radius,w:radius+x,h:radius+y,f:jslous.canvas.RadialGradient(ctx,width-radius,height-radius,radius,width-radius,height-radius,radius+x,colorset)},{x:x+width-x,y:y+radius,w:x,h:height-y-(radius*2),f:jslous.canvas.LinearGradient(ctx,x+width-x,y+radius,x+width,y+radius,colorset)},{x:x+width-radius,y:y,w:radius,h:radius,f:jslous.canvas.RadialGradient(ctx,x+width-radius,y+radius,radius-x,x+width-radius,y+radius,radius,colorset)}]);
        })(context,os,os,iw-os,ih-os,ir,opt['shadow']);
	   }
	   if(ir <= 0){
		context.beginPath();
		context.rect(0,0,iw-os,ih-os);
		context.closePath();
	   }else{
		jslous.canvas.roundedRect(context,0,0,iw-os,ih-os,ir);
	   }	   
	   context.clip();
	   context.fillStyle = 'rgba(0,0,0,0)';
	   context.fillRect(0,0,iw,ih);
	   context.drawImage(img,0,0,iw-os,ih-os);   
	   if(opt['shadow'] > 0 && opt['inv']){
	    opt['shadow'] = opt['shadow']/100;
	    self.addShine(context,iw,ih,(ir > 0 ? ir:16),opt['shadow'],1);
		if(ir > 0){
		 jslous.canvas.roundedRect(context,0,0,iw,ih,ir);
		}else{
	     context.beginPath();
		 context.rect(0,0,iw,ih);
		 context.closePath();
		}
		context.strokeStyle = 'rgba(0,0,0,'+opt['shadow']+')';
		context.lineWidth = 2;
		context.stroke();
	   }
	   if(opt['shade'] > 0 && !opt['inv']){
	    opt['shade'] = opt['shade']/100;
	    ir = ir <= 0 ? 16:ir;
	    (function(ctx,width,height,radius,opacity){
	     var style;
	     ctx.beginPath();
	     ctx.moveTo(width,0);
	     jslous.canvas.lineTo(ctx,[{x:width,y:height},{x:width-radius,y:height-radius},{x:width-radius,y:0}]);	
	     ctx.closePath();
	     style = jslous.canvas.LinearGradient(ctx,width,radius,width-radius,radius,[{offset:0,color:'rgba(0,0,0,0.9)'},{offset:0.2,color:'rgba(0,0,0,'+opacity+')'},{offset:0.75,color:'rgba(0,0,0,0)'},{offset:1,color:'rgba(0,0,0,0)'}]);
	     ctx.fillStyle = style;
	     ctx.fill(); 
	     ctx.beginPath();
	     ctx.moveTo(width,height);
	     jslous.canvas.lineTo(ctx,[{x:0,y:height},{x:0,y:height-radius},{x:width-radius,y:height-radius}]);
	     ctx.closePath();
	     style = jslous.canvas.LinearGradient(ctx,radius,height,radius,height-radius,[{offset:0,color:'rgba(0,0,0,0.9)'},{offset:0.2,color:'rgba(0,0,0,'+opacity+')'},{offset:0.75,color:'rgba(0,0,0,0)'},{offset:1,color:'rgba(0,0,0,0)'}]);
	     ctx.fillStyle = style;
	     ctx.fill();
        })(context,iw-os,ih-os,ir,opt['shade']);
		self.addShine(context,iw-os,ih-os,ir,opt['shade']);
	   }
	   context.restore();	   
  	   jslous.Event.removeListener(img,'load',arguments.callee);
	  });
      img.src = canvas.source;
 	 }
 	 if(opt['show']){ canvas.style.visibility = 'visible'; }
 	 if(jslous.is_func(opt['comp'])){ opt['comp'](); }
     return canvas;
	}catch(e){}
   },
   addShine : function(ctx,width,height,radius,opacity,extra){
	var color = (extra != 1 ? 254:0),style;
	ctx.beginPath();
	ctx.moveTo(0,0);
	jslous.canvas.lineTo(ctx,[{x:0,y:height},{x:radius,y:height},{x:radius,y:radius}]);
	ctx.closePath();
	style = jslous.canvas.LinearGradient(ctx,0,radius,radius,radius,[{offset:0,color:'rgba('+color+','+color+','+color+',0.9)'},{offset:(color > 0 ? 0.25:0.2),color:'rgba('+color+','+color+','+color+','+opacity+')'},{offset:0.75,color:'rgba('+color+','+color+','+color+',0)'},{offset:1,color:'rgba('+color+','+color+','+color+',0)'}]);
	ctx.fillStyle = style;
	ctx.fill();
	ctx.beginPath();
	ctx.moveTo(0,0);
	jslous.canvas.lineTo(ctx,[{x:width,y:0},{x:width,y:radius},{x:radius,y:radius}]);
	ctx.closePath();
	style = jslous.canvas.LinearGradient(ctx,radius,0,radius,radius,[{offset:0,color:'rgba('+color+','+color+','+color+',0.9)'},{offset:(color > 0 ? 0.25:0.2),color:'rgba('+color+','+color+','+color+','+opacity+')'},{offset:0.75,color:'rgba('+color+','+color+','+color+',0)'},{offset:1,color:'rgba('+color+','+color+','+color+',0)'}]);
	ctx.fillStyle = style;
	ctx.fill();
   }
  },
  curl : {
   defaults : { size:50,shadow:66,color:'#FFFFFF',opacity:50,inv:false,transparent:true,show:true,comp:null },
   Listener : function(img,opt){
    if(img.tagName.toLowerCase() == 'img'){
     jslous.css.setstyle(img,'visibility','hidden');
     var self = this,current = jslous.canvas.optinit(self.defaults,opt);
     return jslous.canvas.loadListener(img,function(){
      current['width'] = jslous.canvas.realwidth(img);
      current['height'] =jslous.canvas.realheight(img);
      try{
       var obj = img.parentNode;
       var canvas = jslous.canvas.createCanvas(img,current['width'],current['height'],{opt:current,id:img.id,alt:img.alt,title:img.title,source:img.src,width:current['width'],height:current['height'],className:img.className,prv:img.cloneNode(true)},{width:current['width']+'px',height:current['height']+'px'});
       obj.replaceChild(canvas,img);
	   return self.transform(canvas,current);
      }catch(e){}
     });     
    }
   },
   transform : function(canvas,opt){
    var self = this,prop = ['size','shadow','color','inv'];
    opt = jslous.canvas.optinit(canvas['opt'],opt);
    opt['size'] = !jslous.is_num(opt['size']) || opt['size'] > 100 ? self.defaults['size']:opt['size'];
    opt['shadow'] = jslous.is_num(opt['shadow']) ? opt['shadow']:self.defaults['shadow'];
    opt['color'] = jslous.is_str(opt['color']) ? opt['color']:self.defaults['color'];
    opt['inv'] = jslous.is_bool(opt['inv']) ? opt['inv']:self.defaults['inv'];
    opt['width'] = !opt['width'] ? canvas['width']:opt['width'];
    opt['height'] = !opt['height'] ? canvas['height']:opt['height'];
    try{ for(var i = 0,len = prop.length;i < len;i++){ canvas.opt[prop[i]] = opt[prop[i]]; } }catch(e){}    
    var isize = opt['size'] == 0 ? self.defaults['size']/100:opt['size']/100,ishadow = opt['shadow'] == 0 ? self.defaults['shadow']/100:opt['shadow']/100;
    icolor = jslous.color.hex2rgb(opt['color']);
    var ih = opt['height'],iw = opt['width'],cs = Math.floor(Math.min(iw,ih)*isize),or = Math.floor(cs*0.15),hr = Math.floor(or*0.5),ir = Math.floor(or*0.8),vr = Math.floor(or*0.25),qr = Math.round(vr*0.25),ss = Math.floor(or*0.3),xr = Math.floor(or*0.75),yr = Math.floor(or*0.4),hs = Math.floor(cs*0.5),vs = Math.floor(cs*0.25),dg = (Math.PI*90/180);
	var t,head,foot,shadow='',shade='',shine='',back='',fill='',strok='',st = '';
    try{
     if(jslous.Agents.ie && document.namespaces){
 	  if(canvas.tagName.toLowerCase() == 'var'){
 	   head = '<v:group style="zoom:1;display:'+canvas.dpl+';margin:0;padding:0;position:relative;width:'+iw+'px;height:'+ih+'px;" coordsize="'+iw+','+ih+'"><v:rect strokeweight="0" filled="t" stroked="f" fillcolor="#ffffff" style="zoom:1;padding:0;position:absolute;top:0px;left:0px;width:'+iw+'px;height:'+ih+'px;"><v:fill color="#ffffff" opacity="0.0" /></v:rect>';
	   if(opt['inv']){
	    shadow = '<v:shape strokeweight="0" filled="t" stroked="f" fillcolor="#808080" coordorigin="0,0" coordsize="'+iw+','+ih+'" path="m 0,'+ih+' l '+(iw-cs+yr)+','+ih+' c '+(iw-cs+yr)+','+ih+','+(iw-cs+yr)+','+ih+','+(iw-cs+xr)+','+(ih-vr)+' l '+(iw-vr)+','+(ih-cs+xr)+' c '+iw+','+(ih-cs+yr)+','+iw+','+(ih-cs+yr)+','+iw+','+(ih-cs)+' l '+iw+',0,'+iw+','+ih+' x e" style="position:absolute;top:0px;left:0px;width:'+iw+'px;height:'+ih+'px;"><v:fill src="'+canvas.source+'" type="frame" /></v:shape>'; 
 	    back = '<v:shape strokeweight="0" filled="t" stroked="f" fillcolor="#000000" coordorigin="0,0" coordsize="'+cs+','+cs+'" path="m '+hr+','+(cs-hr)+' l '+hr+','+(cs-hr-hr)+','+(cs-hr-hr)+','+hr+','+(cs-hr)+','+hr+' x e" style="position:absolute;top:'+(ih-cs+qr)+'px;left:'+(iw-cs+qr)+'px;width:'+cs+'px;height:'+cs+'px;filter:Alpha(opacity='+(ishadow*136)+'), progid:dxImageTransform.Microsoft.Blur(PixelRadius='+ss+',MakeShadow=false);"><v:fill color="#000000" /></v:shape>'; 
	   }else{
	    back = '<v:shape strokeweight="0" filled="t" stroked="f" fillcolor="#808080" coordorigin="0,0" coordsize="'+iw+','+ih+'" path="m 0,0 l 0,'+ih+' c '+(iw-cs+yr)+','+ih+','+(iw-cs+yr)+','+ih+','+(iw-cs+xr)+','+(ih-vr)+' l '+(iw-vr)+','+(ih-cs+xr)+' c '+iw+','+(ih-cs+yr)+','+iw+','+(ih-cs+yr)+','+iw+',0 x e" style="position:absolute;top:0px;left:0px;width:'+iw+'px;height:'+ih+'px;"><v:fill src="'+canvas.source+'" type="frame" /></v:shape>'; 
	    shadow = '<v:shape strokeweight="0" filled="t" stroked="f" fillcolor="#000000" coordorigin="0,0" coordsize="'+cs+','+cs+'" path="m '+hr+','+(cs-hr)+' l '+hr+','+hr+','+(cs-hr)+','+hr+' x e" style="position:absolute;top:'+(ih-cs+qr)+'px;left:'+(iw-cs+qr)+'px;width:'+cs+'px;height:'+cs+'px;filter:Alpha(opacity='+(ishadow*136)+'), progid:dxImageTransform.Microsoft.Blur(PixelRadius='+ss+',MakeShadow=false);"><v:fill color="#000000" /></v:shape>'; 
	   }
	   if(!opt['transparent'] || opt['inv']){
	    fill = '<v:shape strokeweight="0" filled="t" stroked="f" fillcolor="#808080" coordorigin="0,0" coordsize="'+cs+','+cs+'" path="m 0,0 c '+ir+','+vs+','+or+','+hs+','+or+','+(cs-or)+' qy 0,'+cs+' c '+yr+','+cs+','+yr+','+cs+','+xr+','+(cs-vr)+' l '+(cs-vr)+','+xr+' c '+cs+','+yr+','+cs+','+yr+','+cs+',0 qy '+(cs-or)+','+or+' c '+hs+','+or+','+vs+','+ir+',0,0 x e" style="position:absolute;top:'+(ih-cs)+'px;left:'+(iw-cs)+'px;width:'+cs+'px;height:'+cs+'px;"><v:fill color="'+icolor+'" /></v:shape>'; shine = ''; strok = '';
	   }else{
        f = iw > ih ? ih/iw:iw/ih;
        t = iw > ih ? (1-f)+((1-isize)*f):1-isize;
        l = ih > iw ? (1-f)+((1-isize)*f):1-isize;
	    fill = '<v:shape strokeweight="0" filled="t" stroked="f" fillcolor="#808080" coordorigin="0,0" coordsize="'+cs+','+cs+'" path="m 2,2 c '+ir+','+vs+','+or+','+hs+','+or+','+(cs-or)+' qy 0,'+cs+' c '+yr+','+cs+','+yr+','+cs+','+(xr+1)+','+(cs-vr+1)+' l '+(cs-vr+1)+','+(xr+1)+' c '+cs+','+yr+','+cs+','+yr+','+cs+',0 qy '+(cs-or)+','+or+' c '+hs+','+or+','+vs+','+ir+',2,2 x e" style="rotation:180; filter:fliph() progid:DXImageTransform.Microsoft.BasicImage(rotation=1);position:absolute;top:'+(ih-cs)+'px;left:'+(iw-cs)+'px;width:'+cs+'px;height:'+cs+'px;"><v:fill src="'+canvas.source+'" origin="'+t+','+l+'" type="tile" /></v:shape>';
	   shine = '<v:shape strokeweight="0" filled="t" stroked="f" fillcolor="#808080" coordorigin="0,0" coordsize="'+cs+','+cs+'" path="m 0,0 c '+ir+','+vs+','+or+','+hs+','+or+','+(cs-or)+' qy 0,'+cs+' c '+yr+','+cs+','+yr+','+cs+','+xr+','+(cs-vr)+' l '+(cs-vr)+','+xr+' c '+cs+','+yr+','+cs+','+yr+','+cs+',0 qy '+(cs-or)+','+or+' c '+hs+','+or+','+vs+','+ir+',0,0 x e" style="position:absolute;top:'+(ih-cs)+'px;left:'+(iw-cs)+'px;width:'+cs+'px;height:'+cs+'px;"><v:fill color="'+icolor+'" opacity="'+(opt['opacity'] > 100 ? 1.0:opt['opacity'] < 0 ? 0:parseFloat(opt['opacity']/100))+'" /></v:shape>';
	   strok = '<v:shape strokeweight="1.5" filled="f" stroked="t" strokecolor="#808080" opacity="0" coordorigin="0,0" coordsize="'+cs+','+cs+'" path="m 0,0 c '+(ir-1)+','+vs+','+(or-1)+','+hs+','+(or-1)+','+(cs-or-1)+' qy 1,'+(cs-1)+' m '+(cs-1)+',1 qy '+(cs-or-1)+','+(or-1)+' c '+hs+','+(or-1)+','+vs+','+(ir-1)+',0,0 e" style="position:absolute;top:'+(ih-cs)+'px;left:'+(iw-cs)+'px;width:'+cs+'px;height:'+cs+'px;"></v:shape>';
	   }
	   shade = '<v:shape strokeweight="0" filled="t" stroked="f" fillcolor="#000000" coordorigin="0,0" coordsize="'+cs+','+cs+'" path="m 0,0 c '+ir+','+vs+','+or+','+hs+','+or+','+(cs-or)+' qy 0,'+cs+' c '+yr+','+cs+','+yr+','+cs+','+xr+','+(cs-vr)+' l '+(cs-vr)+','+xr+' c '+cs+','+yr+','+cs+','+yr+','+cs+',0 qy '+(cs-or)+','+or+' c '+hs+','+or+','+vs+','+ir+',0,0 x e" style="position:absolute;top:'+(ih-cs)+'px;left:'+(iw-cs)+'px;width:'+cs+'px;height:'+cs+'px;"><v:fill method="linear sigma" type="gradient" focus="-0.15" angle="45" color="#000000" opacity="1" color2="#000000" o:opacity2="0" /></v:shape>';
	   foot = '</v:group>';
	   canvas.innerHTML = head+shadow+back+fill+shine+shade+strok+foot;
 	  }
 	 }else if(canvas.tagName.toLowerCase() == 'canvas' && canvas.getContext('2d')){
	  var context = canvas.getContext('2d');
	  var img = new Image();
	  jslous.Event.Listener(img,'load',function(){
	   context.clearRect(0,0,iw,ih);
	   context.save();
	   if(!opt['inv']){
		jslous.canvas.clipCurl(context,iw-cs,ih-cs,iw,ih,or,ir);
		context.clip();
		if(opt['transparent']){
		 context.fillStyle = 'rgba('+icolor+',0)';
		 context.fillRect(0,0,iw,ih);
		 context.rotate(dg);
		 context.scale(-1,1);
		 context.translate(-(iw),-(ih));
		 context.drawImage(img,-(ih-cs),-(iw-cs),iw,ih);
		}
	   }else{
	    (function(ctx,x,y,w,h,r,i){
	     ctx.beginPath();
	     ctx.moveTo(w,y);
	     ctx.quadraticCurveTo(w,y+(r/2),w-(r-i),y+i);
 	     ctx.lineTo(x+i,h-(r-i));
	     ctx.quadraticCurveTo(x+(r/2),h,x,h);
	     ctx.lineTo(w,h); 
	     ctx.closePath();
        })(context,iw-cs,ih-cs,iw,ih,or,ir);
		context.clip();
		context.clearRect(0,0,iw,ih);
		context.drawImage(img,0,0,iw,ih);
	   }
	   context.restore();
	   jslous.canvas.clipCurl(context,iw-cs,ih-cs,iw,ih,or,ir);
	   context.fillStyle = 'rgba('+icolor+','+(opt['opacity'] > 100 ? 1.0:opt['opacity'] < 0 ? 0:parseFloat(opt['opacity']/100))+')';
	   context.fill();
	   jslous.canvas.clipCurl(context,iw-cs,ih-cs,iw,ih,or,ir);
	   context.strokeStyle = 'rgba(128,128,128,0.5)';
	   context.stroke();
	   jslous.canvas.clipCurl(context,iw-cs,ih-cs,iw,ih,or,ir);
	   st = jslous.canvas.LinearGradient(context,iw-cs,ih-cs,iw-(cs*.455),ih-(cs*.455),[{offset:0,color:'rgba(254,254,254,0.5)'},{offset:0.33,color:'rgba(254,254,254,0)'},{offset:0.33,color:'rgba(0,0,0,0)'},{offset:0.4,color:'rgba(0,0,0,0.05)'},{offset:0.5,color:'rgba(0,0,0,0.1)'},{offset:0.75,color:'rgba(0,0,0,0.15)'},{offset:0.85,color:'rgba(0,0,0,0.3)'},{offset:0.99,color:'rgba(0,0,0,0.7)'},{offset:1,color:'rgba(0,0,0,0.8)'}]);
	   context.fillStyle = st;
	   context.fill();
	   context.save();	   
	   if(!opt['inv']){
	    (function(ctx,x,y,w,h,r,i){
	     ctx.beginPath();
	     ctx.moveTo(0,0);
	     jslous.canvas.lineTo(ctx,[{x:0,y:h},{x:x,y:h}]);
         jslous.canvas.quadraticCurve(ctx,[{x:x+r,y:h,w:x+r,h:h-r},{x:x+r,y:y+(2*r),w:x,h:y},{x:x+(2*r),y:y+r,w:w-r,h:y+r},{x:w,y:y+r,w:w,h:y}]);
	     ctx.lineTo(w,0); 
	     ctx.closePath();
	    })(context,iw-cs,ih-cs,iw,ih,or,ir);
	    context.clip();
	    context.clearRect(0,0,iw,ih);
		context.drawImage(img,0,0,iw,ih);
		context.restore();
	   }
	   context.save();
	   (function(ctx,x,y,w,h,r,i){	   
	    ctx.beginPath();
	    ctx.moveTo(w,y);
	    ctx.quadraticCurveTo(w,y+(r/2),w-(r-i),y+i);
	    ctx.lineTo(x+i,h-(r-i));
	    ctx.quadraticCurveTo(x+(r/2),h,x,h);
	    ctx.lineTo(w,h);
	    ctx.closePath();	   
	   })(context,iw-cs,ih-cs,iw,ih,or,ir);
	   context.clip();
	   context.translate(iw,ih-cs);
	   context.rotate((Math.PI/180)*45);
	   context.scale(0.75,1);
	   (function(ctx,s,r,i,o){
	    var f = 1.27;
	    ctx.fillStyle = jslous.canvas.RadialGradient(ctx,i,r,0,i,r,i,[{offset:0,color:'rgba(0,0,0,'+o+')'},{offset:1,color:'rgba(0,0,0,0)'}]);
	    ctx.beginPath();
	    ctx.rect(0,i,r,i);
	    ctx.closePath();
	    ctx.fill();
	    ctx.fillStyle = jslous.canvas.LinearGradient(ctx,0,0,r,0,[{offset:0,color:'rgba(0,0,0,0)'},{offset:0.5,color:'rgba(0,0,0,'+o+')'},{offset:1,color:'rgba(0,0,0,0)'}]);
	    ctx.beginPath();
	    ctx.rect(0,i+i,r,(s*f)-i-i);
	    ctx.closePath();
	    ctx.fill();
	    ctx.fillStyle = jslous.canvas.RadialGradient(ctx,i,(s*f),0,i,(s*f),i,[{offset:0,color:'rgba(0,0,0,'+o+')'},{offset:1,color:'rgba(0,0,0,0)'}]);
	    ctx.beginPath();
	    ctx.rect(0,(s*f),r,i);
	    ctx.closePath();
	    ctx.fill();	   
	   })(context,cs,or,hr,ishadow);
	   context.restore();
	   jslous.Event.removeListener(img,'load',arguments.callee);
	  });
      img.src = canvas.source;
 	 }
 	 if(opt['show']){ canvas.style.visibility = 'visible'; }
 	 if(jslous.is_func(opt['comp'])){ opt['comp'](); }
 	 return canvas;
    }catch(e){}    
   }
  },
  reflect : {
   defaults : { tilt:'n',long:44,distance:0,opacity:25,border:0,color:'#FFFFFF',box:false,show:true,comp:null },
   Listener : function(img,opt){
    if(img.tagName.toLowerCase() == 'img'){
     jslous.css.setstyle(img,'visibility','hidden');
     var self = this,current = jslous.canvas.optinit(self.defaults,opt);
     return jslous.canvas.loadListener(img,function(){
      current['width'] = jslous.canvas.realwidth(img);
      current['height'] =jslous.canvas.realheight(img);
      try{
       var obj = img.parentNode;
       current['box'] = jslous.is_bool(current['box']) ? current['box']:false;
       var h = jslous.is_num(current['long']) ? Math.min(current['long'],100):self.defaults['long'];
       var d = jslous.is_num(current['distance']) ? Math.min(current['distance'],100):self.defaults['distance'];
       var height = current['box'] ? (current['height']*2)+100:current['height']+d+Math.floor(current['height']*(Math.max(h,10)/100));
       var canvas = jslous.canvas.createCanvas(img,current['width'],height,{opt:current,box:current['box'],id:img.id,alt:img.alt,title:img.title,source:img.src,width:current['width'],height:height,iwidth:current['width'],iheight:current['height'],className:img.className,prv:img.cloneNode(true)},{width:current['width']+'px',height:height+'px'});        
       obj.replaceChild(canvas,img);
	   return self.transform(canvas,current);      
      }catch(e){}
     });          
    }
   },
   transform : function(canvas,opt){
    var self = this,regrgb = /^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i,prop = ['tilt','long','opacity','distance','border','color'];
    opt = jslous.canvas.optinit(canvas['opt'],opt);
    opt['tilt'] = jslous.is_str(opt['tilt']) ? opt['tilt'].toLowerCase():self.defaults['tilt'];
    opt['long'] = jslous.is_num(opt['long']) ? opt['long']:self.defaults['long'];
    opt['opacity'] = jslous.is_num(opt['opacity']) ? opt['opacity']:self.defaults['opacity'];
    opt['distance'] = jslous.is_num(opt['distance']) ? opt['distance']:self.defaults['distance'];
    opt['border'] = jslous.is_num(opt['border']) ? opt['border']:self.defaults['border'];
    opt['color'] = opt['color'].match(regrgb) ? opt['color']:self.defaults['color'];
    try{ for(var i = 0,len = prop.length;i < len;i++){ canvas.opt[prop[i]] = opt[prop[i]]; } }catch(e){}
    delete prop;   
    var hh = canvas.height,ww = canvas.width,ih = canvas.iheight,iw = canvas.iwidth,tmp = parseInt(opt['long'] >= 10 && opt['long'] <= 100 ? opt['long']:self.defaults['long']),j = Math.max(Math.min(tmp,100),10),iheit = Math.floor(ih*(j/100)),idist = parseInt(opt['distance'] <= 100 ? opt['distance']:self.defaults['distance']),boxh = parseInt(idist+ih+iheit); var ibord = Math.round(Math.min(Math.min(opt['border'],iheit/4),Math.max(iw,ih)/20)),iopac = parseFloat(opt['opacity'] == 0 ? 0.5:opt['opacity']/100),itilt = (opt['tilt'].match(/^[lnr]/i)?opt['tilt'].substr(0,1):self.defaults['tilt'].substr(0,1)),icolor = opt['color'],wide = 12,q = 1,z,cw,ch,half,bord = (ibord > 0 ? ibord/2:0),iter = Math.floor(ww/wide),rest = (ww%wide),divs = (100/tmp),style = '',flex = '',xb = '',fill = '',fb = '';
    try{   
     if(jslous.Agents.ie && document.namespaces){
 	  if(canvas.tagName.toLowerCase() == 'var'){
	   hh = boxh; iheit = Math.floor(ih/divs); tmp = '';
	   if(opt['border'] == 1){
	    bord = 0; iborder = 1;
	   }else{
	    ibord = Math.floor(Math.round(Math.min(Math.min(opt['border'],iheit/4),Math.max(iw,ih)/20))/2)*2;
	    bord = (ibord > 0 ? ibord/2:0);
	   }
	   iopac = 1-iopac;
	   cw = parseInt(iw/20);
	   iter = Math.floor((iw-cw-cw)/wide);
	   rest = ((iw-cw-cw)%wide);
	   half = (((iw-cw-cw)/wide)-1)/2;
	   ch = iter+(rest > 0 ? 1:0);
	   z = (ih-ch-ch)/ih;	  
	   var head = '<v:group style="zoom:1;display:'+canvas.dpl+';margin:0;padding:0;position:relative;width:'+ww+'px;height:'+hh+'px;" coordsize="'+ww+','+hh+'">'+(canvas['box'] ? '<v:rect strokeweight="0" filled="f" stroked="f" fillcolor="transparent" style="zoom:1;margin:0;padding:0;display:block;position:absolute;top:0px;left:0px;width:'+ww+'px;height:'+hh+';"><v:fill opacity="0" color="#000000" /></v:rect>':'');
	   if(itilt == 'n'){
		fill = '<v:rect strokeweight="0" filled="t" stroked="f" fillcolor="#ffffff" style="position:absolute;margin:0;padding:0;top:0px;left:0px;width:'+iw+'px;height:'+ih+'px;"><v:fill src="'+canvas.source+'" type="frame" /></v:rect>';
	    fb = '<v:rect strokeweight="'+ibord+'" strokecolor="'+icolor+'" filled="f" stroked="'+(bord>0||ibord>0?'t':'f')+'" fillcolor="#ffffff" style="position:absolute;margin:0;padding:0;top:'+bord+'px;left:'+bord+'px;width:'+(iw-bord-bord)+'px;height:'+(ih-bord-bord)+'px;"></v:rect>';
		xb = '<v:rect strokeweight="'+ibord+'" strokecolor="'+icolor+'" filled="f" stroked="'+(bord>0||ibord>0?'t':'f')+'" fillcolor="#ffffff" style="position:absolute;margin:0;padding:0;top:'+(ih+idist+bord)+'px;left:'+bord+'px;width:'+(iw-bord-bord)+'px;height:'+(iheit-bord-bord)+'px; filter: progid:DXImageTransform.Microsoft.Alpha(opacity='+(100*iopac)+',style=1,finishOpacity=0,startx=0,starty=0,finishx=0,finishy='+parseInt(ih*0.66)+');"></v:rect>';
		flex = '<v:rect strokeweight="0" filled="t" stroked="f" fillcolor="#ffffff" style="position:absolute;margin:0;padding:0;top:'+(ih-1+idist)+'px;left:0px;width:'+iw+'px;height:'+iheit+'px; filter:flipv progid:DXImageTransform.Microsoft.Alpha(opacity='+(100*iopac)+',style=1,finishOpacity=0,startx=0,starty=0,finishx=0,finishy='+ih+');"><v:fill origin="0,0" position="0,-'+(divs/2-0.5)+'" size="1,'+(1*divs)+'" src="'+canvas.source+'" type="frame" /></v:rect>';
	   }else if(itilt == 'r'){
	    fill = '<v:rect strokeweight="0" filled="t" stroked="f" fillcolor="#808080" style="position:absolute;margin:0;padding:0;width:'+iw+'px;height:'+(ih+iheit+idist)+'px;"><v:fill color="#808080" opacity="0" /></v:rect><v:shape strokeweight="0" filled="t" stroked="f" fillcolor="#ffffff" coordorigin="0,0" coordsize="'+iw+','+ih+'" path="m '+cw+',0 l '+cw+','+ih+','+(iw-cw)+','+(ih-ch)+','+(iw-cw)+','+ch+' x e" style="position:absolute;margin:0;padding:0;top:0px;left:0px;width:'+iw+'px;height:'+ih+'px;"><v:fill src="'+canvas.source+'" type="frame" /></v:shape>';
	    for(j=0;j < iter;j++){
	 	 if(j == (iter-1)){ q = (rest > 0 ? 1:0); }
		 fill += '<v:shape strokeweight="0" filled="t" stroked="f" fillcolor="#808080" coordorigin="0,0" coordsize="'+iw+','+ih+'" path="m '+(cw+(j*wide))+','+j+' l '+(q+cw+((j+1)*wide))+','+(j+1)+','+(q+cw+((j+1)*wide))+','+(ih-1-j)+','+(cw+(j*wide))+','+(ih-j)+' x e" style="position:absolute;margin:0;padding:0px;top:0px;left:0px;width:'+iw+'px;height:'+ih+'px;"><v:fill origin="0,0" position="'+(half-j)+',0" size="'+((iw-cw-cw)/wide)+',1" type="frame" src="'+canvas.source+'" /></v:shape>';
	    }
	    if(rest > 0){
	     fill += '<v:shape strokeweight="0" filled="t" stroked="f" fillcolor="#808080" coordorigin="0,0" coordsize="'+iw+','+ih+'" path="m '+(cw+(j*wide))+','+j+' l '+(cw+((j+1)*wide))+','+(j+1)+','+(cw+((j+1)*wide))+','+(ih-1-j)+','+(cw+(j*wide))+','+(ih-j)+' x e" style="position:absolute;margin:0;padding:0px;top:0px;left:0px;width:'+iw+'px;height:'+ih+'px;"><v:fill origin="0,0" position="'+(half-j)+',0" size="'+((iw-cw-cw)/wide)+',1" type="frame" src="'+canvas.source+'" /></v:shape>';
	    } 
	    q = ((iter*z)/(ih/100))/2;
	    if(bord > 0|| ibord > 0){
		 fb = '<v:shape strokeweight="'+ibord+'" strokecolor="'+icolor+'" filled="f" stroked="'+(bord>0||ibord>0?'t':'f')+'" coordorigin="0,0" coordsize="'+iw+','+ih+'" path="m '+(cw+bord)+','+bord+' l '+(cw+bord)+','+(ih-bord)+','+(iw-cw-bord)+','+(ih-ch-bord)+','+(iw-cw-bord)+','+(ch+bord)+' x e" style="position:absolute;margin:0;padding:0;top:0px;left:0px;width:'+iw+'px;height:'+ih+'px;"></v:shape>';
		 xb = '<v:shape strokeweight="'+ibord+'" strokecolor="'+icolor+'" stroked="'+(bord>0||ibord>0?'t':'f')+'" filled="f" coordorigin="0,0" coordsize="'+iw+','+(ch+iheit+idist)+'" path="m '+(cw+bord)+','+(ch+idist+bord)+' l '+(cw+bord)+','+(iheit+ch+idist-bord)+','+(iw-cw-bord)+','+(parseInt((iheit+idist)*z)-bord)+','+(iw-cw-bord)+','+(parseInt(idist*z)+bord)+' x e" style="position:absolute;margin:0;padding:0;top:'+(ih-ch+idist)+'px;left:0px;width:'+iw+'px;height:'+(ch+iheit+idist)+'px; flip: y; filter:flipv progid:DXImageTransform.Microsoft.Alpha(opacity='+(100*iopac)+',style=1,finishOpacity=0,startx=0,starty=0,finishx='+q+',finishy=80);"></v:shape>';
	    }else{
	     fb = '';
	     xb = '';
	    }
	    flex = '<v:shape strokeweight="0" stroked="f" filled="t" fillcolor="#808080" coordorigin="0,0" coordsize="'+iw+','+(ch+iheit+idist)+'" path="m '+cw+','+(ch+idist)+' l '+cw+','+(iheit+ch+idist)+','+(iw-cw)+','+parseInt((iheit+idist)*z)+','+(iw-cw)+','+parseInt(idist*z)+' x e" style="position:absolute;margin:0;padding:0;top:'+(ih-ch+idist)+'px;left:0px;width:'+iw+'px;height:'+(ch+iheit+idist)+'px; flip: y; filter:flipv progid:DXImageTransform.Microsoft.Alpha(opacity='+(100*iopac)+',style=1,finishOpacity=0,startx=0,starty=0,finishx='+q+',finishy=90);"><v:fill origin="0,0" position="0,-'+((divs/2)-0.5)+'" size="1,'+(divs)+'" src="'+canvas.source+'" type="frame" /></v:shape>';
	   }else if(itilt == 'l'){
	    fill = '<v:rect strokeweight="0" filled="t" stroked="f" fillcolor="#808080" style="position:absolute;margin:0;padding:0;width:'+iw+'px;height:'+(ih+iheit+idist)+'px;"><v:fill color="#808080" opacity="0.0" /></v:rect><v:shape strokeweight="0" filled="t" stroked="f" fillcolor="#ffffff" coordorigin="0,0" coordsize="'+iw+','+ih+'" path="m '+cw+','+ch+' l '+cw+','+(ih-ch)+','+(iw-cw)+','+ih+','+(iw-cw)+',0 x e" style="position:absolute;margin:0;padding:0;top:0px;left:0px;width:'+iw+'px;height:'+ih+'px;"><v:fill src="'+canvas.source+'" type="frame" /></v:shape>';
	    for(j = 0;j < iter;j++){
		 if(j == (iter-1)){ q = (rest > 0 ? 1:0); }
		 fill += '<v:shape strokeweight="0" filled="t" stroked="f" fillcolor="#808080" coordorigin="0,0" coordsize="'+iw+','+ih+'" path="m '+(cw+(j*wide))+','+(iter-j)+' l '+(q+cw+((j+1)*wide))+','+(iter-1-j)+','+(q+cw+((j+1)*wide))+','+(ih-1-iter+j)+','+(cw+(j*wide))+','+(ih-iter+j)+' x e" style="position:absolute;margin:0;padding:0px;top:0px;left:0px;width:'+iw+'px;height:'+ih+'px;"><v:fill origin="0,0" position="'+(half-j)+',0" size="'+((iw-cw-cw)/wide)+',1" type="frame" src="'+canvas.source+'" /></v:shape>';
	    }
	    if(rest > 0){
		 fill += '<v:shape strokeweight="0" filled="t" stroked="f" fillcolor="#808080" coordorigin="0,0" coordsize="'+iw+','+ih+'" path="m '+(cw+(j*wide))+','+(iter-j)+' l '+(cw+((j+1)*wide))+','+(iter-1-j)+','+(cw+((j+1)*wide))+','+(ih-1-iter+j)+','+(cw+(j*wide))+','+(ih-iter+j)+' x e" style="position:absolute;margin:0;padding:0px;top:0px;left:0px;width:'+iw+'px;height:'+ih+'px;"><v:fill origin="0,0" position="'+(half-j)+',0" size="'+((iw-cw-cw)/wide)+',1" type="frame" src="'+canvas.source+'" /></v:shape>';
	    }
	    q = 100-(((iter*z)/(ih/100))/2);
	    if(bord > 0 || ibord > 0){
	     fb = '<v:shape strokeweight="'+ibord+'" strokecolor="'+icolor+'" filled="f" stroked="'+(bord > 0 || ibord > 0 ? 't':'f')+'" coordorigin="0,0" coordsize="'+iw+','+ih+'" path="m '+(cw+bord)+','+(ch+bord)+' l '+(cw+bord)+','+(ih-ch-bord)+','+(iw-cw-bord)+','+(ih-bord)+','+(iw-cw-bord)+','+bord+' x e" style="position:absolute;margin:0;padding:0;top:0px;left:0px;width:'+iw+'px;height:'+ih+'px;"></v:shape>';
		 xb = '<v:shape strokeweight="'+ibord+'" strokecolor="'+icolor+'" stroked="'+(bord > 0 || ibord > 0 ? 't':'f')+'" filled="f" coordorigin="0,0" coordsize="'+iw+','+(ch+iheit+idist)+'" path="m '+(cw+bord)+','+(parseInt(idist*z)+bord)+' l '+(cw+bord)+','+(parseInt((iheit+idist)*z)-bord)+','+(iw-cw-bord)+','+(iheit+ch+idist-bord)+','+(iw-cw-bord)+','+(ch+idist+bord)+' x e" style="position:absolute;margin:0;padding:0;top:'+(ih-ch+idist)+'px;left:0px;width:'+iw+'px;height:'+(ch+iheit+idist)+'px; flip: y; filter:flipv progid:DXImageTransform.Microsoft.Alpha(opacity='+(100*iopac)+',style=1,finishOpacity=0,startx=100,starty=0,finishx='+q+',finishy=80);"></v:shape>';
	    }else{
	     fb = '';
	     xb = '';
	    }
	    flex = '<v:shape strokeweight="0" filled="t" stroked="f" fillcolor="#808080" coordorigin="0,0" coordsize="'+iw+','+(ch+iheit+idist)+'" path="m '+cw+','+parseInt(idist*z)+' l '+cw+','+parseInt((iheit+idist)*z)+','+(iw-cw)+','+(iheit+ch+idist)+','+(iw-cw)+','+(ch+idist)+' x e" style="position:absolute;margin:0;padding:0;top:'+(ih-ch+idist)+'px;left:0px;width:'+iw+'px;height:'+(ch+iheit+idist)+'px; flip: y; filter:flipv progid:DXImageTransform.Microsoft.Alpha(opacity='+(100*iopac)+',style=1,finishOpacity=0,startx=100,starty=0,finishx='+q+',finishy=90);"><v:fill origin="0,0" position="0,-'+((divs/2)-0.5)+'" size="1,'+(divs)+'" src="'+canvas.source+'" type="frame" /></v:shape>';
	   }
	   var foot = '</v:group>';
	   canvas.innerHTML = head+flex+xb+fill+fb+foot;			
	  }
     }else if(canvas.tagName.toLowerCase() == 'canvas' && canvas.getContext('2d')){
	  var context = canvas.getContext('2d');
	  var img = new Image();
	  jslous.Event.Listener(img,'load',function(){ 
	   if(jslous.Agents.webkit){ var obj = canvas.parentNode; }
	   if(typeof src == 'undefined'){
	    var src = document.createElement('canvas');
	    if(src.getContext){
	     jslous.css.setstyles(src,{position:'fixed',left:-9999+'px',top:0+'px',width:canvas.width+'px',height:canvas.height+'px'});
		 src.height = canvas.height;
		 src.width = canvas.width;
		 if(jslous.Agents.webkit){ obj.appendChild(src); }
		}
	   }
	   context.clearRect(0,0,ww,hh);
	   context.globalCompositeOperation = 'source-over';
	   context.fillStyle = 'rgba(0,0,0,0)';
	   context.fillRect(0,0,ww,hh);
	   context.save();
	   context.translate(0,boxh);
	   context.scale(1,-1);
	   context.drawImage(img,0,-(boxh-iheit-iheit-idist),ww,ih);
	   context.restore();
	   context.clearRect(0,boxh,ww,hh-boxh);
	   if(ibord > 0){
		context.strokeStyle = icolor;
	    context.lineWidth = ibord;
	    context.beginPath();
	    context.rect(bord,boxh-iheit+bord,ww-ibord,iheit);
		context.closePath();
		context.stroke();
		context.clearRect(0,boxh,ww,ibord);
	   }	   
	   if(!jslous.Agents.webkit || itilt=='n'){
		context.globalCompositeOperation = 'destination-out';
		style = jslous.canvas.LinearGradient(context,0,boxh-iheit,0,boxh,[{offset:1,color:'rgba(0,0,0,1.0)'},{offset:0,color:'rgba(0,0,0,'+iopac+')'}]);
		context.fillStyle = style;
	   }
	   if(jslous.Agents.webkit){
		context.beginPath();
		context.rect(0,boxh-iheit,ww,iheit);
		context.closePath();
		context.fill();
	   }else{
		context.fillRect(0,boxh-iheit,ww,iheit);
	   }
	   context.globalCompositeOperation = 'source-over';
	   context.drawImage(img,0,0,iw,ih);
	   if(jslous.Agents.webkit && idist > 0 && itilt != 'n'){
		context.fillStyle = '#808080';
		context.fillRect(0,boxh-iheit-idist,ww,idist);
	   }
	   if(ibord > 0 && itilt == 'n'){
		context.beginPath();
		context.rect(bord,bord,ww-ibord,boxh-iheit-idist-ibord);
		context.closePath();
		context.stroke();
	   }
	   if(itilt == 'l' || itilt == 'r'){
	    if(src.getContext){
	     context = src.getContext('2d');
		 context.globalCompositeOperation = 'source-over';
		 context.clearRect(0,0,ww,hh);
		 context.save();
	     if(itilt == 'r'){
		  for(j = 0;j < iter;j++){ context.drawImage(canvas,j*wide,0,wide,boxh,j*wide,j*1,wide,boxh-(j*2)); }
		  if(rest > 0){
		   rest = canvas.width-(iter*wide);
		   context.drawImage(canvas,j*wide,0,rest,boxh,j*wide,j*1,rest,boxh-(j*2));
		  }
		 }else{
		  for(j = 0;j < iter;j++){ context.drawImage(canvas,j*wide,0,wide,boxh,j*wide,(iter-j)*1,wide,boxh-((iter-j)*2)); }
		  if(rest > 0){
		   rest = canvas.width-(iter*wide);
		   context.drawImage(canvas,j*wide,0,rest,boxh,j*wide,0,rest,boxh);
	      }
		 }
	     context.restore();
	     if(canvas.getContext){
	      context = canvas.getContext('2d');
		  context.clearRect(0,0,ww,hh);
		  context.save();
		  itilt == 'r' ? jslous.canvas.clipPolyRight(context,ww/20,0,ww*0.95,boxh,iter+(rest > 0 ? 1:0),idist,iheit):jslous.canvas.clipPolyLeft(context,ww/20,0,ww*0.95,boxh,iter+(rest > 0 ? 1:1),idist,iheit);
		  context.clip();
		  context.drawImage(src,parseInt(ww/20),0,parseInt(ww*0.9),hh);
		  context.restore();		  
		  if(ibord > 0){
		   context.lineWidth = ibord;
		   itilt == 'r' ? jslous.canvas.strokePolyRight(context,ww/20,0,ww*0.95,boxh,iter+(rest > 0 ? 1:0),idist,iheit,bord):jslous.canvas.strokePolyLeft(context,ww/20,0,ww*0.95,boxh,iter+(rest > 0 ? 1:0),idist,iheit,bord);
		   context.stroke();
		  }
		  if(jslous.Agents.webkit){
		   context.save();
		   context.globalCompositeOperation = 'destination-out';
		   style = jslous.canvas.LinearGradient(context,(itilt=='l'?ww:0),boxh-iheit,(itilt == 'l' ? ww-(2*(wide/divs)):2*(wide/divs)),boxh,[{offset:1,color:'rgba(0,0,0,1.0)'},{offset:0,color:'rgba(0,0,0,'+iopac+')'}]);
		   context.fillStyle = style;
		   jslous.canvas.clipReflex(context,ww/20,0,ww*0.95,boxh,iter+(rest>0?1:0),idist,iheit,itilt);
		   context.fill();
		   context.globalCompositeOperation = 'source-in';
		   jslous.canvas.clearReflex(context,ww/20,0,ww*0.95,boxh,iter+(rest>0?1:0),idist,iheit,itilt);
		   context.clip();
		   context.clearRect(0,0,ww,boxh);
		   context.clearRect(0,0,ww,boxh);
		   context.clearRect(0,0,ww,boxh);
		   context.clearRect(0,0,ww,boxh);
		   context.restore();
		   obj.removeChild(src);
		  }
	     }
	    }
	   }	   
       jslous.Event.removeListener(img,'load',arguments.callee);
	  });
      img.src = canvas.source;      
     }     
     if(opt['show']){ canvas.style.visibility = 'visible'; }
     if(jslous.is_func(opt['comp'])){ opt['comp'](); }
     return canvas;
    }catch(e){}   
   }
  },
  gloss : {
   defaults : { radius:25,color:'#FFFFFF',gradient:'#FFFFFF',direction:'v',shade:50,shadow:40,width:null,height:null,gloss:true,noshadow:false,noradius:false,show:true,comp:null },
   Listener : function(img,opt){
    if(img.tagName.toLowerCase() == 'img'){
     jslous.css.setstyle(img,'visibility','hidden');
     var self = this,current = jslous.canvas.optinit(self.defaults,opt);
     return jslous.canvas.loadListener(img,function(){
      current['width'] = jslous.canvas.realwidth(img);
      current['height'] =jslous.canvas.realheight(img);
      try{
       var obj = img.parentNode;
	   var canvas = jslous.canvas.createCanvas(img,current['width'],current['height'],{opt:current,id:img.id,alt:img.alt,title:img.title,source:img.src,width:current['width'],naturalWidth:current['width'],height:current['height'],naturalHeight:current['height'],className:img.className,prv:img.cloneNode(true)},{width:current['width']+'px',height:current['height']+'px'});
       obj.replaceChild(canvas,img);
       return self.transform(canvas,current);
      }catch(e){}
     });          
    }
   },
   transform : function(canvas,opt){
    var self = this;
    opt = jslous.canvas.optinit(canvas['opt'],opt);
    var regrgb = /^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i;
    var color = opt['color'].match(regrgb) ? opt['color']:'#FFFFFF',gradient = opt['gradient'].match(regrgb) ? opt['gradient']:'#FFFFFF';
    opt['direction'] = opt['direction'].match(/^[dhv]/i) ? opt['direction'].substr(0,1):'v';
    opt['shadow'] = opt['shadow'] == 0 ? 0.0:opt['shadow']/100;
    opt['shade'] = opt['shade'] < 0.01 ? 0.0:Math.max(Math.min(opt['shade'],100),1)/100;
    var iw = canvas.width,ih = canvas.height,f = opt['radius'] > 0 ? Math.min(Math.max(opt['radius'],1),50)/100:0.25,angle = 0,xr = 0,sr,r,os,is,style,head,foot,fill = '';
	if(jslous.Agents.ie && document.namespaces){
	 opt['radius'] = Math.round(45*f);
	 xr = Math.round(Math.max(Math.round((Math.min(iw,ih)/2)*f),4)/4)*4;
	}else {
	 opt['radius'] = Math.max(Math.round((Math.min(iw,ih)/2)*f),4);
	}
	if(!opt['noshadow']){
	 opt['radius'] = jslous.Agents.ie ? opt['radius']:Math.round(opt['radius']/4)*4;
	 os = jslous.Agents.ie ? xr/4:opt['radius']/4;
	 sr = opt['radius']*0.75;
	 is = os;
	 r = sr;
	 sr = r*0.75;
	}else{
	 os = jslous.Agents.ie ? xr/4:opt['radius']/4;
	 r = opt['radius'];
	 is = 0;
	 sr = opt['radius']*0.75;
	}
	if(opt['noradius']){ r = 0; sr = 0; os = 0; is = 0; }
	if(jslous.Agents.ie && document.namespaces){
	 if(canvas.tagName.toLowerCase() == 'var'){
	  fill = '<v:roundrect arcsize="'+r+'%" strokeweight="0" filled="t" stroked="f" fillcolor="#ffffff" style="zoom:1;margin:0;padding:0;display:block;position:absolute;top:0px;left:'+is+'px;width:'+(iw-(2*is))+'px;height:'+(ih-(2*is))+'px;">'+(color != gradient ? '<v:fill method="sigma" type="gradient" angle="'+(opt['direction'] == 'h' ? 90:opt['direction'] == 'd' ? 45:angle)+'" color="'+gradient+'" color2="'+color+'" /></v:roundrect>':'<v:fill color="'+color+'" /></v:roundrect>');
	  head = '<v:group style="zoom:1;display:'+canvas.dpl+';margin:0;padding:0;position:relative;width:'+iw+'px;height:'+ih+'px;" coordsize="'+iw+','+ih+'">'+(!opt['noshadow'] && !opt['noradius'] ? '<v:rect strokeweight="0" filled="t" stroked="f" fillcolor="#ffffff" style="zoom:1;margin:0;padding:0;display:block;position:absolute;top:0px;left:0px;width:'+iw+'px;height:'+ih+'px;"><v:fill color="#ffffff" opacity="0" /></v:rect>':'');				
	  foot = '<v:roundrect arcsize="'+r+'%" strokeweight="0" filled="t" stroked="f" fillcolor="#ffffff" style="zoom:1;margin:0;padding:0;display:block;position:absolute;top:0px;left:'+is+'px;width:'+(iw-(2*is))+'px;height:'+(ih-(2*is))+'px;"><v:fill src="'+canvas.source+'" type="frame" /></v:roundrect><v:roundrect arcsize="'+(sr*2)+'%" strokeweight="0" filled="t" stroked="f" fillcolor="#ffffff" style="zoom:1;margin:0;padding:0;display:block;position:absolute;top:'+os+'px;left:'+(os+is)+'px;width:'+(iw-(2*os)-(2*is))+'px;height:'+((ih/2)-os-is)+'px;"><v:fill method="linear" type="gradient" angle="0" color="#ffffff" opacity="'+(opt['gloss'] ? opt['shade']*0.25:0)+'" color2="#ffffff" o:opacity2="'+(opt['gloss'] ? opt['shade']*1.5:0)+'" /></v:roundrect><v:roundrect arcsize="'+(r*2)+'%" strokeweight="0" filled="t" stroked="f" fillcolor="#000000" style="zoom:1;margin:0;padding:0;display:block;position:absolute;top:'+((ih/2)-is)+'px;left:'+is+'px;width:'+(iw-(2*is))+'px;height:'+((ih/2)-is)+'px;"><v:fill method="sigma" type="gradient" angle="180" color="#000000" opacity="0" color2="#000000" o:opacity2="'+opt['shade']+'" /></v:roundrect></v:group>';
	  canvas.innerHTML = head+(!opt['noshadow'] && !opt['noradius'] ? '<v:roundrect arcsize="'+r+'%" strokeweight="0" filled="t" stroked="f" fillcolor="#000000" style="filter:Alpha(opacity='+(opt['shadow']*100)+'), progid:dxImageTransform.Microsoft.Blur(PixelRadius='+is+', MakeShadow=false); zoom:1;margin:0;padding:0;display:block;position:absolute;top:'+is+'px;left:0px;width:'+(iw-(2*is))+'px;height:'+(ih-(3*is))+'px;"><v:fill color="#000000" opacity="1" /></v:roundrect>':'')+fill+foot;
	 }
	}else if(canvas.tagName.toLowerCase() == 'canvas' && canvas.getContext('2d')){
	 var context = canvas.getContext('2d');
	 var img = new Image();
	 jslous.Event.Listener(img,'load',function(){
	  context.clearRect(0,0,iw,ih);
	  if(!opt['noshadow']){
	   (function(ctx,x,y,width,height,radius,opacity){
	    var os = radius/2,fill = [{offset:0,color:'rgba(0,0,0,'+(Math.min(parseFloat(opacity+0.1),1.0))+')'},{offset:0.25,color:'rgba(0,0,0,'+opacity+')'},{offset:1,color:'rgba(0,0,0,0)'}];
        jslous.canvas.rect(ctx,[{x:x+radius,y:y,w:width-(radius*2),h:y+os,f:jslous.canvas.LinearGradient(ctx,x+radius,y+os,x+radius,y,fill)},{x:x,y:y,w:radius,h:radius,f:jslous.canvas.RadialGradient(ctx,x+radius,y+radius,radius-os,x+radius,y+radius,radius,fill)},{x:x,y:y+radius,w:os,h:height-(radius*2),f:jslous.canvas.LinearGradient(ctx,x+os,y+radius,x,y+radius,fill)},{x:x,y:y+height-radius,w:radius,h:radius,f:jslous.canvas.RadialGradient(ctx,x+radius,y+height-radius,radius-os,x+radius,y+height-radius,radius,fill)},{x:x+radius,y:y+height-os,w:width-(radius*2),h:os,f:jslous.canvas.LinearGradient(ctx,x+radius,y+height-os,x+radius,y+height,fill)},{x:x+width-radius,y:y+height-radius,w:radius,h:radius,f:jslous.canvas.RadialGradient(ctx,x+width-radius,y+height-radius,radius-os,x+width-radius,y+height-radius,radius,fill)},{x:x+width-os,y:y+radius,w:os,h:height-(radius*2),f:jslous.canvas.LinearGradient(ctx,x+width-os,y+radius,x+width,y+radius,fill)},{x:x+width-radius,y:y,w:radius,h:radius,f:jslous.canvas.RadialGradient(ctx,x+width-radius,y+radius,radius-os,x+width-radius,y+radius,radius,fill)}]);
	   })(context,0,0,iw,ih,opt['radius'],opt['shadow']);
	  }	  
	  context.save();	  
	  jslous.canvas.roundedRect(context,is,0,iw-(is*2),ih-(is*2),r);
	  context.clip();
      if(color != gradient){
	   style = jslous.canvas.LinearGradient(context,0,0,(opt['direction'] == 'h' ? iw:opt['direction'] == 'd' ? iw-(is*2):0),(opt['direction'] == 'h' ? 0:ih-(is*2)),[{ offset:0,color:color },{ offset:1,color:gradient }]);
	   context.beginPath();
	   context.rect(0,0,iw,ih-(is*2));
	   context.closePath();
	   context.fillStyle = style;
	   context.fill();
	  }else{
	   context.fillStyle = color;
	   context.fillRect(0,0,iw,ih-(is*2));
	  }	  
	  context.drawImage(img,is,0,iw-(is*2),ih-(is*2));
	  if(opt['gloss']){
	   style = jslous.canvas.LinearGradient(context,0,os,0,os+sr,[{offset:0,color:'rgba(254,254,254,'+opt['shade']*1.5+')'},{offset:1,color:'rgba(254,254,254,0.1)'}]);
	   context.beginPath();
       jslous.canvas.roundedRect(context,os+is,os,iw-(2*(os+is)),(ih/2)-os,sr);
       context.closePath();
       context.fillStyle = style;
	   context.fill();
	   style = jslous.canvas.LinearGradient(context,0,(ih/2)-is,0,(ih/2)-is*2,[{offset:0,color:'rgba(0,0,0,0)'},{offset:1,color:'rgba(0,0,0,'+opt['shade']+')'}]);
	   var pos = {x:is,y:(ih/2)-is,w:iw-(2*is),h:(ih/2)-is,r:sr};
	   context.beginPath();
	   context.moveTo(pos['x'],pos['y']);
	   jslous.canvas.quadraticCurve(context,[{s:pos['x'],e:pos['y']+pos['h']-pos['r'],x:pos['x'],y:pos['y']+pos['h'],w:pos['x']+pos['r'],h:pos['y']+pos['h']},{s:pos['x']+pos['w']-pos['r'],e:pos['y']+pos['h'],x:pos['x']+pos['w'],y:pos['y']+pos['h'],w:pos['x']+pos['w'],h:pos['y']+pos['h']-pos['r']}]);
	   jslous.canvas.lineTo(context,[{x:pos['x']+pos['w'],y:pos['y']},{x:pos['x'],y:pos['y']}]);
       context.closePath();
       context.fillStyle = style;
	   context.fill();
	   if(opt['noradius']){
	    jslous.canvas.roundedRect(context,is,0,iw-(is*2),ih-(is*2),r);
	    style = jslous.canvas.LinearGradient(context,0,0,0,ih-(is*2),[{offset:0,color:'rgba(254,254,254,'+(opt['shade']*0.5)+')'},{offset:1,color:'rgba(0,0,0,'+(opt['shade']*0.5)+')'}]);
	    context.lineWidth = (r+is)/2;
	    context.strokeStyle = style;
	    context.stroke();
	   }
       context.restore();
	  }	  
	  jslous.Event.removeListener(img,'load',arguments.callee);
	 });
	 img.src = canvas.source;
	}
	if(opt['show']){ canvas.style.visibility = 'visible'; }
	if(jslous.is_func(opt['comp'])){ opt['comp'](); }
	return canvas;
   }
  },
  globe : {
   defaults : {size:0,shine:50,shade:75,zoom:100,shift:50,color:'#FFFFFF',gradient:'#000000',opacity:85,show:true,comp:null},
   Listener : function(img,opt){
    if(img.tagName.toLowerCase() == 'img'){
     jslous.css.setstyle(img,'visibility','hidden');
     var self = this,current = jslous.canvas.optinit(self.defaults,opt);
     return jslous.canvas.loadListener(img,function(){
      var putWidth = jslous.canvas.realwidth(img),putHeight = jslous.canvas.realheight(img);
      if(!putWidth && !putHeight){
	   var tmp = new Image();
	   tmp.src = img.src;
	   var putWidth = img.width,putHeight = img.height;
	   delete tmp;
	  }
      var size= jslous.is_num(current['size']) ? current['size']:self.defaults['size'];
      if(size <= 0){ size = Math.max(32,(putWidth > putHeight ? img.height:putHeight > putWidth ? img.width:img.height)); }
      if(size < 32){ size = 32; }
      try{
	   var obj = img.parentNode;
	   var canvas = jslous.canvas.createCanvas(img,size,size,{opt:current,id:img.id,alt:img.alt,title:img.title,source:img.src,width:size,naturalWidth:putWidth,height:size,naturalHeight:putHeight,className:img.className,prv:img.cloneNode(true)},{width:size+'px',height:size+'px'});
	   obj.replaceChild(canvas,img);
       return self.transform(canvas,current);
	  }catch(e){}      
	 });
    }
   },
   transform : function(canvas,opt){  
    try{
     var self = this,regrgb = /^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i;
     opt = jslous.canvas.optinit(canvas['opt'],opt);
     var color = opt['color'].match(regrgb) ? opt['color']:self.defaults['color'],gradient = opt['gradient'].match(regrgb) ? opt['gradient']:self.defaults['gradient'],sz = canvas.width,nw = canvas.naturalWidth,nh = canvas.naturalHeight,nx = 0,ny = 0,xx = 0,yy = 0,xo = 0.5,yo = 0.5,sf = opt['shift'] <= 0.01 ? 0:opt['shift'] >= 100 ? 1:opt['shift']/100,zz = opt['zoom'] < 100 ? 1:opt['zoom'] > 200 ? 2:opt['zoom']/100,zo = (zz-1)*.5,lw = 0.4,st = '';
     if(nw > nh){
      nx = (nw-nh)*sf; xo = 1-(sz/nw); xx = (xo*-0.5)+(sf*xo); xo = sf; nw = nh;
     }else if(nh > nw){
      ny = (nh-nw)*sf; yo = 1-(sz/nh); yy = (yo*-0.5)+(sf*yo); yo = sf; nh = nw;
     }
     var fc = 0.85,iw = Math.round(sz*fc),ih = iw,ic = ih/2,os = (sz-iw)/2,op = opt['opacity'] == 0 ? 0.0:opt['opacity']/100,sh = opt['shade'] == 0 ? 0.0:opt['shade']/100,sd = opt['shine'] == 0 ? 0.0:opt['shine']/100,gc = jslous.color.hex2rgb(gradient,1-op);
	 if(jslous.Agents.ie && document.namespaces){
	  var head,foot,shadow,border,shades,shines,frame,fill = '',gc = jslous.color.hex2rgb(gradient,0.3);
	  if(canvas.tagName.toLowerCase() == 'var'){
	   head = '<v:group style="zoom:1;display:'+canvas.dpl+';margin:0;padding:0;position:relative;width:'+sz+'px;height:'+sz+'px;" coordsize="'+sz+','+sz+'"><v:rect strokeweight="0" filled="f" stroked="f" strokeweight="0" style="zoom:1;margin:0;padding:0;display:block;position:absolute;top:0px;left:0px;width:'+sz+'px;height:'+sz+'px;"></v:rect>';
	   foot = '</v:group>';
	   if(isNaN(color)){ fill = '<v:oval filled="t" stroked="f" strokeweight="0" style="zoom:1;margin:0;padding:0;display:block;position:absolute;top:1px;left:'+os+'px;width:'+iw+'px;height:'+ih+'px;"><v:fill color2="'+color+'" color="'+(isNaN(gradient) ? gradient:color)+'" type="gradient" method="sigma" angle="20" focus="0" focussize="0,0" focusposition="1,1" on="t" /></v:oval>'; }
	   shades = '<v:oval filled="t" stroked="f" strokeweight="0" style="zoom:1;margin:0;padding:0;display:block;position:absolute;top:1px;left:'+os+'px;width:'+iw+'px;height:'+ih+'px;"><v:fill opacity="0" color="black" color2="black" o:opacity2="'+(sh*.5)+'" type="gradient" method="any" angle="0" focus="0" focussize="0.2,0.2" focusposition="0.4,0.4" on="t" /></v:oval><v:oval filled="t" stroked="f" strokeweight="0" style="zoom:1;margin:0;padding:0;display:block;position:absolute;top:1px;left:'+os+'px;width:'+iw+'px;height:'+ih+'px;"><v:fill opacity="'+(sh*.5)+'" color="black" color2="black" o:opacity2="0" type="gradientradial" method="linear" focus="0" focussize="0.75,0.75" focusposition="0.125,0.125" on="t" /></v:oval>';
	   shines = '<v:oval filled="t" stroked="f" strokeweight="0" style="zoom:1;margin:0;padding:0;display:block;position:absolute;top:1px;left:'+os+'px;width:'+iw+'px;height:'+ih+'px;"><v:fill opacity="0" color="white" color2="white" o:opacity2="'+(sd*.66)+'" type="gradientradial" method="sigma" focus="0" focussize="0,0" focusposition="0.8,0.8" on="t" /></v:oval><v:oval filled="t" stroked="f" strokeweight="0" style="zoom:1;margin:0;padding:0;display:block;position:absolute;top:'+(sz*.48)+'px;left:'+(sz*.51)+'px;width:'+(sz*.3125)+'px;height:'+(sz*.3125)+'px;"><v:fill opacity="0" color="white" color2="white" o:opacity2="'+sd+'" type="gradientradial" method="sigma" focus="0" focussize="0,0" focusposition="0.5,0.5" on="t" /></v:oval><v:oval filled="t" stroked="f" strokeweight="0" style="zoom:1;margin:0;padding:0;display:block;position:absolute;top:'+(sz*.04)+'px;left:'+(sz*.24)+'px;width:'+(sz*.52)+'px;height:'+(sz*.36)+'px;"><v:fill opacity="0" color="white" color2="white" o:opacity2="'+sd+'" type="gradient" method="any" angle="20" focus="0" focussize="0.2,0.2" focusposition="0.4,0.4" on="t" /></v:oval>';
	   border = '<v:oval filled="f" fillcolor="transparent" stroked="t" style="zoom:1;margin:0;padding:0;display:block;position:absolute;top:1px;left:'+os+'px;width:'+iw+'px;height:'+ih+'px;"><v:stroke weight="1" style="single" color="'+gc+'" opacity="'+Math.max(0.5,op)+'" /></v:oval>';
	   shadow = '<v:oval filled="t" stroked="f" strokeweight="0" style="zoom:1;margin:0;padding:0;display:block;position:absolute;top:'+(sz*.7)+'px;left:'+(sz*.1)+'px;width:'+(sz*.8)+'px;height:'+(sz*.3)+'px;"><v:fill opacity="'+sh+'" color="'+(isNaN(gradient) ? gradient:isNaN(color) ? color:'black')+'" color2="black" colors="'+(10-(op*10))+'% '+(isNaN(gradient) ? gradient:isNaN(color) ? color:'black')+'" o:opacity2="0" type="gradientradial" method="linear" focus="0" focussize="0,0" focusposition="0.5,0.5" on="t" /></v:oval>';
	   frame = '<v:oval filled="t" stroked="f" strokeweight="0" style="zoom:1;margin:0;padding:0;display:block;position:absolute;top:1px;left:'+os+'px;width:'+iw+'px;height:'+ih+'px;"><v:fill opacity="'+op+'" src="'+canvas.source+'" type="frame" aspect="atleast" size="'+zz+','+zz+'" origin="'+xx+','+yy+'" position="0,0" /></v:oval>';
	   canvas.innerHTML = head+shadow+fill+frame+shades+shines+border+foot;
	  }
	 }else if(canvas.tagName.toLowerCase() == 'canvas' && canvas.getContext('2d')){
	  var context = canvas.getContext('2d');
	  var img = new Image();
	  jslous.Event.Listener(img,'load',function(){
	   context.clearRect(0,0,sz,sz);
	   context.save();
  	   context.translate(0,sz*.64);
  	   context.scale(1,0.425);
  	   st = jslous.canvas.RadialGradient(context,os+ic,ic,1,os+ic,ic,ic,[{offset:0,color:'rgba(0,0,0,'+sh+')'},{offset:.8,color:'rgba('+gc+','+(sh*.125)+')'},{offset:1,color:'rgba('+gc+',0)'}]);
	   context.fillStyle = st;
	   jslous.Agents.webkit ? context.fill():context.fillRect(0,0,sz,sz);
	   context.restore();
	   context.save();
	   context.beginPath();
	   context.arc(os+ic,ic+lw,ic,0,(Math.PI/180)*360,true);
	   context.closePath();
	   context.clip();
	   context.clearRect(0,0,sz,sz);
       if(color != gradient){
	    st = jslous.canvas.LinearGradient(context,ic,0,ic+(3*os),ih,[{offset:0,color:color},{offset:1,color:gradient}]);		  
	    context.fillStyle = st; 
	    jslous.Agents.webkit ? context.fill():context.fillRect(os,0,iw,ih);
	   }else{
		context.fillStyle = color;
		context.fillRect(os,0,iw,ih);
	   }
	   context.globalAlpha = op;
	   context.drawImage(img,nx+(nw*(zo*xo)),ny+(nh*(zo*yo)),nw*(1-zo),nh*(1-zo),os,0,iw,ih);
	   context.globalAlpha = 1.0;
	   st = jslous.canvas.LinearGradient(context,ic,0,ic+(3*os),ih,[{offset:0,color:'rgba(0,0,0,'+(sh*.5)+')'},{offset:1,color:'rgba(0,0,0,0)'}]);
	   context.fillStyle = st;
	   jslous.Agents.webkit ? context.fill():context.fillRect(0,0,sz,sz);
	   st = jslous.canvas.RadialGradient(context,os+ic,ic,ic-(1.5*os),os+ic,ic,ic,[{offset:0,color:'rgba(0,0,0,0)'},{offset:1,color:'rgba(0,0,0,'+(sh*.5)+')'}]);
	   context.fillStyle = st;
	   jslous.Agents.webkit ? context.fill():context.fillRect(0,0,sz,sz);
	   st = jslous.canvas.RadialGradient(context,(3*os)+ic,(3.5*os)+ic,os*.5,(2.5*os)+ic,(3*os)+ic,ic-os,[{offset:0,color:'rgba(255,255,255,'+sd+')'},{offset:0.25,color:'rgba(255,255,255,'+(sd*.666666)+')'},{offset:1,color:'rgba(255,255,255,0)'},]);
	   context.fillStyle=st;
	   jslous.Agents.webkit ? context.fill():context.fillRect(0,0,sz,sz);		
	   context.restore();
	   context.save();
	   st = jslous.canvas.LinearGradient(context,(iw/2)-os,os*.5,(iw/2)+os,(os*.5)+ic,[{offset:0,color:'rgba(255,255,255,'+sd+')'},{offset:1,color:'rgba(255,255,255,0)'}]);
	   (function(canv,x1,y1,x2,y2){
        var kp = 4*((Math.sqrt(2)-1)/3),rx=(x2-x1)/2,ry=(y2-y1)/2,cx=x1+rx,cy=y1+ry;
        canv.beginPath();
        canv.moveTo(cx,cy-ry);
        jslous.canvas.bezierCurve(canv,[{x1:cx+(kp*rx),y1:cy-ry,r1:cx+rx,x2:cy-(kp*ry),y2:cx+rx,r2:cy},{x1:cx+rx,y1:cy+(kp*ry),r1:cx+(kp*rx),x2:cy+ry,y2:cx,r2:cy+ry},{x1:cx-(kp*rx),y1:cy+ry,r1:cx-rx,x2:cy+(kp*ry),y2:cx-rx,r2:cy},{x1:cx-rx,y1:cy-(kp*ry),r1:cx-(kp*rx),x2:cy-ry,y2:cx,r2:cy-ry}]);
        canv.closePath();
        return false;
       })(context,os+(ic/2.5),os*.5,os+(ic/2.5)+(ic*1.2),(os*.5)+(ic*.9));
	   context.fillStyle = st;
	   context.fill();
	   context.restore();
	   context.save();
	   context.beginPath();
	   context.arc(os+ic,ic+lw,ic,0,(Math.PI/180)*360,true);
	   context.closePath();
	   context.strokeStyle = 'rgba('+gc+','+op+')';
	   context.lineWidth = lw;
	   context.stroke();
	   context.restore();
	   jslous.Event.removeListener(img,'load',arguments.callee);
	  });
	  img.src = canvas.source;
	 }
	 if(opt['show']){ canvas.style.visibility = 'visible'; }
	 if(jslous.is_func(opt['comp'])){ opt['comp'](); }
	 return canvas;
	}catch(e){}
   }
  },
  wheel : {
   overlay : { color:'#FFFFFF',opacity:45,text:'',style:'' },
   wait : { color:'#000000',size:32,type:'polygon',radius:8,weight:3,count:12,speed:96,minopac:0.25 },
   Listener : function(parent,overlay,wait){
    if((typeof(parent) === 'object' || parent == false) && document.getElementsByTagName){
     var self = this,parseWidth = self.parseWidth,parseRadius = self.parseRadius,radiusprop = self.radiusprop,waitflg = true,isCV,i,b,o,lt,rt,lb,rb,cz,cs,size,viewport,inner,outer,string,canvas,context,ctrl,opacity,color,text,styles;
     overlay = jslous.canvas.optinit(self.overlay,overlay || {});
     wait = jslous.canvas.optinit(self.wait,wait || {});
     if(parent == false){
      var tmp = document.createElement('div');
      tmp.setAttribute('id','view');
      cz = tmp['style'];
      jslous.css.setstyles(tmp,{'background-color':'transparent',position:'fixed',overflow:'hidden',display:'block','z-index':999999,left:0+'px',top:0+'px',zoom:1,width:100+'%',height:100+'%',margin:0+'px',padding:0+'px'});
      if(jslous.Agents.ie && !window.XMLHttpRequest){
       jslous.css.setstyle(tmp,'position','absolute');
       jslous.css.setstyles(tmp,(typeof document.documentElement != 'undefined' ? {width:document.documentElement.clientWidth+'px',height:document.documentElement.clientHeight+'px'}:{width:document.getElementsByTagName('body')[0].clientWidth+'px',height:document.getElementsByTagName('body')[0].clientHeight+'px'}));
      }
      document.body.appendChild(tmp);
	  parent = tmp;
	 }
	 cs = jslous.css.currents(parent);
	 while(cs['display'].search(/block|inline-block|table|inline-table|list-item/i) < 0){
	  parent = parent.parentNode;
	  cs = jslous.css.currents(parent);
	  if(parent.tagName.toLowerCase() == 'body'){ parent = ''; }
	 }
	 if(typeof(parent) === 'object'){
	  opacity = Math.max(0,Math.min(100,(jslous.is_num(overlay['opacity']) ? overlay['opacity']:0) || 0));
	  color = (jslous.is_str(overlay['color']) ? overlay['color']:self.overlay['color']);
	  text= (jslous.is_str(overlay['text']) ? overlay['text']:self.overlay['text']);
	  styles = (jslous.is_obj(overlay['style']) || jslous.is_str(overlay['style']) ? overlay['style']:self.overlay['style']);
	  jslous.css.setstyle(parent,'position',(cs['position'] == 'static' ? 'relative':cs['position']));
      cz = parseInt(jslous.css.current(parent,'z-index')) >= 0 ? (parseInt(jslous.css.current(parent,'z-index'))-0+2):2;
	  outer = document.createElement('div');
	  if(jslous.Agents.ie && !cs.hasLayout){ jslous.css.setstyle(parent,'zoom',1); }
	  jslous.css.setstyles(outer,{position:'absolute',overflow:'hidden',display:'block','z-index':cz,left:0+'px',top:0+'px',width:100+'%',height:100+'%'});
	  if(jslous.Agents.ie){
	   outer['className'] ='buzy_ele';	   
	   var outw = (parent.offsetWidth-parseWidth(cs['borderLeftWidth'])-parseWidth(cs['borderRightWidth'])),outh = (parent.offsetHeight-parseWidth(cs['borderBottomWidth'])-parseWidth(cs['borderTopWidth']));
	   jslous.css.setstyles(outer,{zoom:1,margin:0+'px',padding:0+'px',height:outh+'px',width:outw+'px'});	   	   
	  }
	  lt = parseRadius(cs[radiusprop('TopLeft')],cs['borderLeftWidth'],cs['borderTopWidth'])+'px';
	  rt = parseRadius(cs[radiusprop('TopRight')],cs['borderRightWidth'],cs['borderTopWidth'])+'px';
	  lb = parseRadius(cs[radiusprop('BottomLeft')],cs['borderLeftWidth'],cs['borderBottomWidth'])+'px';
	  rb = parseRadius(cs[radiusprop('BottomRight')],cs['borderRightWidth'],cs['borderBottomWidth'])+'px';
	  var outstyle = outer['style'];
	  outstyle[radiusprop('TopLeft')] = lt;
	  outstyle[radiusprop('TopRight')] = rt;
	  outstyle[radiusprop('BottomLeft')] = lb;
	  outstyle[radiusprop('BottomRight')] = rb;
      parent.appendChild(outer);      
	  inner = document.createElement('div');
	  jslous.css.setstyles(inner,{position:'absolute',cursor:'progress',display:'block','z-index':(cz-1),left:0+'px',top:0+'px',width:100+'%',height:100+'%','background-color':color});						
	  if(jslous.Agents.ie){ jslous.css.setstyles(inner,{zoom:1,margin:0+'px',padding:0+'px',height:outstyle['height'],width:outstyle['width']}); }
	  var innstyle = inner['style'];
	  innstyle[radiusprop('TopLeft')] = lt;
	  innstyle[radiusprop('TopRight')] = rt;
	  innstyle[radiusprop('BottomLeft')] = lb;
	  innstyle[radiusprop('BottomRight')] = rb;	  
	  jslous.css.opacity(inner,opacity);	  	  
	  outer.appendChild(inner);
	  size = Math.max(16,Math.min(512,(jslous.is_num(wait['size']) ? (wait['size'] == 0 ? 32:wait['size']):32)));
	  if(jslous.Agents.ie && document.namespaces){ if(document.namespaces['v'] == null){ jslous.canvas.addnamespace(); } }
	  canvas = document.createElement('canvas');
	  if(!canvas.getContext){ canvas = document.createElement('div'); }
	  jslous.css.setstyles(canvas,{position:'absolute',cursor:'progress','z-index':(cz-0+1),top:50+'%',left:50+'%','margin-top':'-'+(size/2)+'px','margin-left':'-'+(size/2)+'px',width:size+'px',height:size+'px'});
	  jslous.node.setattr(canvas,{width:size,height:size});
	  outer.appendChild(canvas);
	  if(text != ''){
	   string = document.createElement('div');
	   jslous.css.setstyles(string,{position:'absolute',overflow:'hidden',cursor:'progress','z-index':(cz-0+1),top:50+'%',left:0+'px','margin-top':2+(size/2)+'px',width:100+'%',height:'auto','text-align':'center'});
       var txt = document.createElement('span');
       txt.innerHTML = text;       
	   string.appendChild(txt);
	   jslous.is_str(styles) && styles != '' ? txt['className'] = styles:jslous.is_obj(styles) ? jslous.css.setstyles(txt,styles):false;
	   outer.appendChild(string);
	  }
	  jslous.css.unselectable(outer);
	  jslous.css.unselectable(inner);
	  jslous.css.unselectable(canvas);
	  var waiting = jslous.Agents.ie && document.namespaces ? self.iewheel:canvas.getContext ? self.cvwheel:false;
	  var ctx = jslous.Agents.ie && document.namespaces ? canvas:canvas.getContext ? canvas.getContext('2d'):false;
	  if(waiting != false){
	   ctrl = (function(obj,cl,sz,tp,ir,w,ct,sp,mo){	    
	    tp = tp || 'p';
	    t = (tp.match(/^[coprt]/i) ? tp.substr(0,1).toLowerCase():'t');
	    ct = Math.max(5,Math.min(36,ct || 12));
	    sp = Math.max(30,Math.min(1000,sp || 96));
	    sz = Math.max(16,Math.min(512,sz || 32));
	    ir = Math.max(1,Math.min((sz/2)-2,ir || sz/4));
	    w = Math.max(1,Math.min((sz/2)-ir,w || sz/10));
	    mo = Math.max(0,Math.min(0.5,mo || 0.25));
	    return waiting(obj,cl,sz,tp,ir,w,ct,sp,mo,(sz/2)-ir,sz/2,sz/2,t);
	   })(ctx,wait['color'],wait['size'],wait['type'],wait['radius'],wait['weight'],wait['count'],wait['speed'],wait['minopac']);
	   ctrl.start();	   	   
	   if(jslous.Agents.ie){
	    jslous.Event.Listener(parent,'resize',function(evt){
	     function parseWidth(val){ return (isNaN(parseInt(val,10)) ? 0:parseInt(val,10)); }
	     evt = jslous.Event.getevt(evt);
	     var i,cs,parent = jslous.Event.target(evt),div = parent.getElementsByTagName('div');
	     if(div.length > 0){
	      cs = jslous.css.currents(parent);
		  for(i = 0;i < div.length;i++){
		   if(div[i]['className'] == 'buzy_ele'){
		    var w = (parent.offsetWidth-parseWidth(cs['borderLeftWidth'])-parseWidth(cs['borderRightWidth']))+'px',h = (parent.offsetHeight-parseWidth(cs['borderBottomWidth'])-parseWidth(cs['borderTopWidth']))+'px';
		    var child = div[i].firstChild;
		    jslous.css.setstyles(div[i],{width:w,height:h});
		    jslous.css.setstyles(child,{width:w,height:h});		   
		    break;
		   }
		  }
	     }	   
	    });
	    if(parent['id'] == 'view' && !window.XMLHttpRequest){
	     jslous.Event.Listener(window,'resize',function(evt){
	      evt = jslous.Event.getevt(evt);
	      var vp = document.getElementById('view');
	      if(vp){
	       jslous.css.setstyles(vp,(typeof document.documentElement != 'undefined' ? {width:document.documentElement.clientWidth+'px',height:document.documentElement.clientHeight+'px'}:{width:document.getElementsByTagName('body')[0].clientWidth+'px',height:document.getElementsByTagName('body')[0].clientHeight+'px'}));
	      }
	     });
	     jslous.Event.Listener(window,'scroll',function(evt){
	      evt = jslous.Event.getevt(evt);
	      var vp = document.getElementById('view');
	      if(vp){
	       jslous.css.setstyles(vp,(typeof document.documentElement != 'undefined' ? {left:document.documentElement.scrollLeft+'px',top:document.documentElement.scrollTop+'px'}:{left:document.getElementsByTagName('body')[0].scrollLeft+'px',top:document.getElementsByTagName('body')[0].scrollTop+'px'}));
	      }
	     });
	    }
	   }
	   return {
	    remove:function(){
	     if(waitflg){
	      waitflg = false;
	      ctrl.stop();
	      delete ctrl;
	      parent.removeChild(outer);
	      if(parent['id'] == 'view'){ jslous.css.setstyle(parent,'display','none'); }
	     }
	    },
	    settext:function(v){
	     if(string && jslous.is_str(v)){
	      string.firstChild.innerHTML = v;
	      return false;
	     }
	    }
	   };	   
	  }
     }
    }
   },
   cvwheel : function(ctx,cl,sz,tp,ir,w,ct,sp,mo,h,x,y,t){
	function drawOval(ctx,w,h){
	 ctx.beginPath();
	 ctx.moveTo(-w/2,h/2);
	 jslous.canvas.quadraticCurve(ctx,[{x:-w/2,y:0,w:0,h:0},{x:w/2,y:0,w:w/2,h:h/2},{x:w/2,y:h,w:0,h:h},{x:-w/2,y:h,w:-w/2,h:h/2}]);
	 ctx.fill();
	}
	function drawTube(ctx,w,h){
	 ctx.beginPath();
	 ctx.moveTo(w/2,0);
	 jslous.canvas.lineTo(ctx,[{x:-w/2,y:0},{x:-w/2,y:h-(w/2)}]);
	 jslous.canvas.quadraticCurve(ctx,[{x:-w/2,y:h,w:0,h:h},{x:w/2,y:h,w:w/2,h:h-(w/2)}]);
	 ctx.fill();
	}
	function drawPoly(ctx,w,h){
	 ctx.beginPath();
	 ctx.moveTo(w/2,0);
	 jslous.canvas.lineTo(ctx,[{x:-w/2,y:0},{x:-w/4,y:h},{x:w/4,y:h}]);
	 ctx.fill();
	}
	function drawCirc(ctx,r,z){
	 ctx.beginPath();
	 ctx.arc(r,r,r,0,Math.PI*2,false);
	 ctx.fill();
	}
	var running = false,os = 0,al = 0,c,i;
	c = jslous.color.hex2rgb(cl);	
	function nextLoop(){
	 if(!running){ return; }
	 os = (os+1)%ct;
	 ctx.clearRect(0,0,sz,sz);
	 ctx.save();
	 ctx.translate(x,y);
	 for(i = 0;i < ct;i++){
	  al=2*((os+i)%ct)*Math.PI/ct; 
	  ctx.save();
	  ctx.translate(ir*Math.sin(-al),ir*Math.cos(-al));
	  ctx.rotate(al);
	  ctx.fillStyle='rgba('+c+','+Math.min(1,Math.max(mo,1-((ct+1-i)/(ct+1))))+')';
	  switch(t){
	   case 'c': drawCirc(ctx,w/2,h); break;
	   case 'o': drawOval(ctx,w,h); break;
	   case 'p': drawPoly(ctx,w,h); break;
	   case 't': drawTube(ctx,w,h); break;
	   default: ctx.fillRect(-w/2,0,w,h); break;
	  }
	  ctx.restore();
	 }
	 ctx.restore();
	 setTimeout(nextLoop,sp);
	}
	nextLoop(0);
	return {
	 start:function(){ if(!running){ running=true; nextLoop(0); }},
	 stop:function(){ running=false; ctx.clearRect(0,0,sz,sz); },
	 pause:function(){ running=false; }
	};
   },
   iewheel : function(obj,cl,sz,tp,ir,w,ct,sp,mo,h,x,y,t){
	function gethex(v){ 
	 var col = v || '#000000';
     if(!col.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)){
	  if(v.match(/^#[0-9a-f][0-9a-f][0-9a-f]$/i)){
	   col='#'+v.substr(1,1)+v.substr(1,1)+v.substr(2,1)+v.substr(2,1)+v.substr(3,1)+v.substr(3,1);
	  }
	 }
	 return col;
	}
	var running = false,os = 0,al = 0,f = 100,c,i,p,hs,qs,hw,qw,rp,sh,fl,ele = new Array();
	c = gethex(cl);	
	al = 360/ct;
	hs = parseInt((sz/2)*f);
	qs = parseInt(hs/2); 
	hw = parseInt((w/2)*f);
	qw = parseInt(hw/2);
	rp = hs-parseInt(ir*f);
	switch(t){
	 case 'c': p = 'm '+hs+','+(rp-hw)+' ar '+(hs-hw)+','+(rp-hw-hw)+','+(hs+hw)+','+rp+','+(hs-hw)+','+(rp-hw-hw)+','+(hs-hw)+','+(rp-hw-hw)+' e'; break;
	 case 'p': p = 'm '+(hs-qw)+',0 l '+(hs-hw)+','+rp+','+(hs+hw)+','+rp+','+(hs+qw)+',0 x e'; break;
	 case 'o': p = 'm '+hs+','+(rp-qs)+' ar '+(hs-hw)+',0,'+(hs+hw)+','+rp+','+(hs-hw)+',0,'+(hs-hw)+',0 e'; break;
	 case 't': p = 'm '+(hs-hw)+','+rp+' l '+(hs-hw)+','+hw+' qy '+hs+',0 qx '+(hs+hw)+','+hw+' l '+(hs+hw)+','+rp+' x e'; break;
	 default: p = 'm '+(hs-hw)+',0 l '+(hs-hw)+','+rp+','+(hs+hw)+','+rp+','+(hs+hw)+',0 x e'; break;
	} 
	for(i = 0;i < ct;i++){
	 sh = document.createElement('v:shape');
	 jslous.node.setattr(sh,{filled:'t',stroked:'f',coordorigin:'0,0',coordsize:(sz*f)+','+(sz*f),path:p});
	 jslous.css.setstyles(sh,{rotation:(i*al),position:'absolute',margin:0+'px',width:sz+'px',height:sz+'px',top:'-1px',left:'-1px'});	 
	 obj.appendChild(sh);
	 fl = document.createElement('v:fill');
	 jslous.node.setattr(fl,{opacity:Math.min(1,Math.max(mo,1-((ct+1-i)/(ct+1)))),color:c});
     sh.appendChild(fl);
	 ele[i] = fl;
	}
	function nextLoop(){
	 if(!running){ return; }
	 os = (os+1)%ct;
	 for(i = 0;i < ct;i++){ al=((os+i)%ct); document.documentMode == 8 ? ele[al].opacity = Math.min(1,Math.max(mo,1-((ct+1-i)/(ct+1)))):ele[al].setAttribute('opacity',Math.min(1,Math.max(mo,1-((ct+1-i)/(ct+1))))); }
	 setTimeout(nextLoop,sp);
	}
	nextLoop(0);
	return {
	 start:function(){ if(!running){ running = true; nextLoop(0); } },
	 stop:function(){ running = false; for(i = 0;i < ct;i++){ ele[i].setAttribute('opacity',0); } },
	 pause: function(){running = false; }
	};
   },
   parseWidth : function(val){ return (isNaN(parseInt(val,10)) ? 0:parseInt(val,10)); },
   parseRadius : function(start,middle,end){ return parseFloat(start)-Math.min(parseFloat(middle),parseFloat(end)); },
   radiusprop : function(pos){ return jslous.Agents.webkit ? 'WebkitBorder'+pos+'Radius':jslous.Agents.firefox ? 'MozBorderRadius'+jslous.String.ucfirst(pos):'border'+pos+'Radius'; }
  }
 }
  
 /* motion engine */
 jslous.func.extend({
  motion : {
   looping : false,
   fsp : 60,
   box : [],
   percent : 0,
   regcolor : /color/i,
   regalpha : /opacity/i,
   defaults : { time:1,effect:null,delay:0,prefix:{},suffix:{},go:undefined,goopt:undefined,upd:undefined,updopt:undefined,comp:undefined,compopt:undefined },
   inited : false,
   tweens : {},
   init : function(){
    this.inited = true;
    for(var key in this.tween){ this.tweens[key.toLowerCase()] = this.tween[key]; }
   },
   Listener : function(obj,opts){
    var self = this;
    if(!this.inited){ this.init(); }
    var current = { target : obj,props : {} };   
    for(var key in this.defaults){
     if(typeof opts[key] != 'undefined') {
      current[key] = opts[key];
      delete opts[key];
     }else{
      current[key] = this.defaults[key];
     }
    }
    current.tweeny = (jslous.is_func(current.effect)) ? current.effect:current.effect ? this.tweens[current.effect.toLowerCase()]:this.tweens[jslous.objrandom(this.tweens).toLowerCase()];
    for(var key in opts){
     if(key.match(this.regcolor)){
      var from = jslous.color.hex2num(opts[key].from);
      var to = jslous.color.hex2num(opts[key].to);
      current.props[jslous.camelize(key)] = {
       r : { begin : from.r || 0,change : to.r-from.r,unit : '' },g : { begin : from.g || 0,change : to.g-from.g,unit : '' },b : { begin : from.b || 0,change : to.b-from.b,unit : '' }
      }
     }else{
     current.props[jslous.camelize(key)] = { begin : opts[key].from || 0,change : opts[key].to-opts[key].from,end : opts[key].to,unit : opts[key].unit || 'px' };
     }
    }
    setTimeout(function(){
     current.run = (new Date()-0);
     current.exit = current.time*1000+current.run;
     if(jslous.is_func(current.go)){ (current.goopt) ? current.go.apply(current,current.goopt):current.go(); }
     self.box.push(current);
     if(!self.looping){
      self.looping = true;
      self.wheel.call(self);
     }
    },current.delay*1000);
   },
   wheel : function(){
    var now = (new Date()-0);
    for(var i = 0;i < this.box.length;i++){
     var active = this.box[i],time = now-active.run,duration = active.exit-active.run;
     if(time >= duration){
      for(var prop in active.props){
       var tmp = active.props[prop];
       var val = (prop.match(this.regcolor)) ? '#'+jslous.color.num2hex(Math.floor(tmp.r.begin+tmp.r.change+.5))+jslous.color.num2hex(Math.floor(tmp.g.begin+tmp.g.change+.5))+jslous.color.num2hex(Math.floor(tmp.b.begin+tmp.b.change+.5)):tmp.begin+tmp.change+tmp.unit;
       try{
        (prop.match(this.regalpha) ? (jslous.Agents.ie ? active.target.filter = 'alpha(opacity='+parseInt(val)+')':jslous.Agents.webkit ? active.target.opacity = parseInt(val)/100:active.target.MozOpacity = parseInt(val)/100):active.target[prop] = (val)+tmp.unit);
       }catch(e){}
      }
      this.box.splice(i,1);
      if(jslous.is_func(active.upd)){ (active.updopt) ? active.upd.apply(active,active.updopt):active.upd(); }
      if(jslous.is_func(active.comp)){ (active.compopt) ? active.comp.apply(active,active.compopt):active.comp(); }
     }else{
      for(var prop in active.props){
       var tmp = active.props[prop];
       var val = (prop.match(this.regcolor)) ? '#'+jslous.color.num2hex(Math.floor(active.tweeny(time,tmp.r.begin,tmp.r.change,duration)+.5))+jslous.color.num2hex(Math.floor(active.tweeny(time,tmp.g.begin,tmp.g.change,duration)+.5))+jslous.color.num2hex(Math.floor(active.tweeny(time,tmp.b.begin,tmp.b.change,duration)+.5)):active.tweeny(time,tmp.begin,tmp.change,duration)+tmp.unit;
       try{
        (prop.match(this.regalpha) ? (jslous.Agents.ie ? active.target.filter = 'alpha(opacity='+parseInt(val)+')':jslous.Agents.webkit ? active.target.opacity = parseInt(val)/100:active.target.MozOpacity = parseInt(val)/100):active.target[prop] = val);
       }catch(e){
       }
      }
      if(jslous.is_func(active.upd)){ (active.updopt) ? active.upd.apply(active,active.updopt):active.upd(); }
     }
    }
    if(this.box.length > 0){
     var self = this;
     setTimeout(function(){ self.wheel(); },1000/self.fsp);
    }else{
     this.looping = false;
    }
   },
   util : {
    bezier : function(t,p0,p1,p2){ return (1-t)*(1-t)*p0+2*t*(1-t)*p1+t*t*p2; },
    bezier2 : function(t,p0,p1,p2,p3){ return Math.pow(1-t,3)*p0+3*t*Math.pow(1-t,2)*p1+3*t*t*(1-t)*p2+t*t*t*p3; }
   },
   tween : {
    liner : function(time,begin,change,duration){ return change*time/duration+begin; },
    quadin : function(time,begin,change,duration){ return change*(time/=duration)*time+begin; },
    quadout : function(time,begin,change,duration){ return -change*(time/=duration)*(time-2)+begin; },
    quadboth : function(time,begin,change,duration){ return (((time/=duration/2) < 1) ? change/2*time*time+begin:-change/2*((--time)*(time-2)-1)+begin); },
    cubicin : function(time,begin,change,duration){ return change*(time/=duration)*time*time+begin; },
    cubicout : function(time,begin,change,duration){ return change*((time=time/duration-1)*time*time+1)+begin; },
    cubicinout : function(time,begin,change,duration){ return (((time/=duration/2) < 1) ? change/2*time*time*time+begin:change/2*((time-=2)*time*time+2)+begin); },
    cubicoutin : function(time,begin,change,duration){ return ((time < duration/2) ? jslous.func.motion.tween.cubicout(time*2,begin,change/2,duration):jslous.func.motion.tween.cubicin((time*2)-duration,begin+change/2,change/2,duration)); },
    quartin : function(time,begin,change,duration){ return change*(time/=duration)*time*time*time+begin; },
    quartout : function(time,begin,change,duration){ return -change*((time=time/duration-1)*time*time*time-1)+begin; },
    quartinout : function(time,begin,change,duration){ return (((time/=duration/2) < 1) ? change/2*time*time*time*time+begin:change/2*((time-=2)*time*time*time-2)+begin); },
    quartoutin : function(time,begin,change,duration){ return ((time < duration/2) ? jslous.func.motion.tween.quartout(time*2,begin,change/2,duration):jslous.func.motion.tween.quartin((time*2)-duration,begin+change/2,change/2,duration)); },
    quintin : function(time,begin,change,duration){ return change*(time/=duration)*time*time*time*time+begin; },
    quintout : function(time,begin,change,duration){ return change*((time=time/duration-1)*time*time*time*time+1)+begin; },
    quintinout : function(time,begin,change,duration){ return (((time/=duration/2) < 1) ? change/2*time*time*time*time*time+begin:change/2*((time-=2)*time*time*time*time+2)+begin); },
    quintoutin : function(time,begin,change,duration){ return ((time < duration/2) ? jslous.func.motion.tween.quintout(time*2,begin,change/2,duration):jslous.func.motion.tween.quintin((time*2)-duration,begin+change/2,change/2,duration)); },
    sinein : function(time,begin,change,duration){ return -change*Math.cos(time/duration*(Math.PI/2))+change+begin; },
    sineout : function(time,begin,change,duration){ return change*Math.sin(time/duration*(Math.PI/2))+begin; },
    sineinout : function(time,begin,change,duration){ return -change/2*(Math.cos(Math.PI*time/duration)-1)+begin; },
    sineoutin : function(time,begin,change,duration){ return ((time < duration/2) ? jslous.func.motion.tween.sineout(time*2,begin,change/2,duration):jslous.func.motion.tween.sinein((time*2)-duration,begin+change/2,change/2,duration)); },
    expoin : function(time,begin,change,duration){ return (time == 0) ? begin:change*Math.pow(2,10*(time/duration-1))+begin-change*0.001; },
    expoout : function(time,begin,change,duration){ return (time == duration) ? begin+change:change*1.001*(-Math.pow(2,-10*time/duration)+1)+begin; },
    expoinout : function(time,begin,change,duration){ return ((time == 0) ? begin:(time == 0) ? begin+change:((time/=duration/2) < 1) ? change/2*Math.pow(2,10*(time-1))+begin-change*0.0005:change/2*1.0005*(-Math.pow(2,-10*--time)+2)+begin); },
    expooutin : function(time,begin,change,duration){ return ((time < duration/2) ? jslous.func.motion.tween.expoout(time*2,begin,change/2,duration):jslous.func.motion.tween.expoin((time*2)-duration,begin+change/2,change/2,duration)); },
    circin : function(time,begin,change,duration){ return -change*(Math.sqrt(1-(time/=duration)*time)-1)+begin; },
    circout : function(time,begin,change,duration){ return change*Math.sqrt(1-(time=time/duration-1)*time)+begin; },
    circinout : function(time,begin,change,duration){ return (((time/=duration/2) < 1) ? -change/2*(Math.sqrt(1-time*time)-1)+begin:change/2*(Math.sqrt(1-(time-=2)*time)+1)+begin); },
    circoutin : function(time,begin,change,duration){ return ((time < duration/2) ? jslous.func.motion.tween.circout(time*2,begin,change/2,duration):jslous.func.motion.tween.circin((time*2)-duration,begin+change/2,change/2,duration)); },
    bouncein : function(time,begin,change,duration){ return change-jslous.func.motion.tween.bounceout(duration-time,0,change,duration)+begin; },
    bounceout : function(time,begin,change,duration){ return (((time/=duration) < (1/2.75)) ? change*(7.5625*time*time)+begin:(time < (2/2.75)) ? change*(7.5625*(time-=(1.5/2.75))*time+.75)+begin:(time < (2.5/2.75)) ? change*(7.5625*(time-=(2.25/2.75))*time+.9375)+begin:change*(7.5625*(time-=(2.625/2.75))*time+.984375)+begin); },
    bounceinout : function(time,begin,change,duration){ return ((time < duration/2) ? jslous.func.motion.tween.bouncein(time*2,0,change,duration)*.5+begin:jslous.func.motion.tween.bounceout(time*2-duration,0,change,duration)*.5+change*.5 +begin); },
    bounceoutin : function(time,begin,change,duration){ return ((time < duration/2) ? jslous.func.motion.tween.bounceout(time*2,begin,change/2,duration):jslous.func.motion.tween.bouncein((time*2)-duration,begin+change/2,change/2,duration)); },
    elasticin : function(time,begin,change,duration,a,p){
     var s;
     if(time == 0){ return begin; }
     if((time/=duration) == 1){ return begin+change; }
     if(!p){ p = duration*.3; }
     if(!a || a < Math.abs(change)){
      a = change; s = p/4;
     }else{
      s = p/(2*Math.PI)*Math.asin(change/a);
     }
     return -(a*Math.pow(2,10*(time-=1))*Math.sin((time*duration-s)*(2*Math.PI)/p))+begin;
    },    
    elasticout : function(time,begin,change,duration,a,p){
     var s;
     if(time == 0){ return begin; }
     if((time/=duration) == 1){ return begin+change; }
     if(!p){ p = duration*.3; }
     if(!a || a < Math.abs(change)){
      a = change; s = p/4;
     }else{
      s = p/(2*Math.PI)*Math.asin(change/a);
     }
     return (a*Math.pow(2,-10*time)*Math.sin((time*duration-s)*(2*Math.PI)/p)+change+begin);
    },    
    elasticinout : function(time,begin,change,duration,a,p){
     var s;
     if(time == 0){ return begin; }
     if((time/=duration/2) == 2){ return begin+change; }
     if(!p){ p=duration*(.3*1.5); }
     if(!a || a < Math.abs(change)){
      a = change; s = p/4;
     }else{
      s = p/(2*Math.PI)*Math.asin(change/a);
     }
     return ((time < 1) ? -.5*(a*Math.pow(2,10*(time-=1))*Math.sin((time*duration-s)*(2*Math.PI)/p))+begin:a*Math.pow(2,-10*(time-=1))*Math.sin((time*duration-s)*(2*Math.PI)/p)*.5+change+begin);
    },    
    elasticoutin : function(time,begin,change,duration,a,p){ return ((time < duration/2) ? jslous.func.motion.tween.elasticout(time*2,begin,change/2,duration,a,p):jslous.func.motion.tween.elasticin((time*2)-duration,begin+change/2,change/2,duration,a,p)); },
    backin : function(time,begin,change,duration,s){
     if(s == undefined){ s = 1.70158; }
     return change*(time/=duration)*time*((s+1)*time-s)+begin;
    },
    backout : function(time,begin,change,duration,s){
     if(s == undefined){ s = 1.70158; }
     return change*((time=time/duration-1)*time*((s+1)*time+s)+1)+begin;
    },    
    backinout : function(time,begin,change,duration,s){
     if(s == undefined){ s = 1.70158; }
     return (((time/=duration/2) < 1) ? change/2*(time*time*(((s*=(1.525))+1)*time-s))+begin:change/2*((time-=2)*time*(((s*=(1.525))+1)*time+s)+2)+begin);
    },    
    backoutin : function(time,begin,change,duration,s){ return ((time < duration/2) ? jslous.func.motion.tween.backout(time*2,begin,change/2,duration,s):jslous.func.motion.tween.backin((time*2)-duration,begin+change/2,change/2,duration,s)); }
   }
  }
 });
 
 /* sliders */
 jslous.func.extend({
  slider : {
   active : false,
   defaults : { init:null, initopt:[], handle:null, upper:null, lower:null, lefter:null, righter:null, move:null, moveopt:[], min:null, max:null, limit:null, pos:0, spd:40 },
   cxlDefaults : function(evt){
    jslous.Event.cancelBubble(evt);
    jslous.Event.preventDefault(evt);
   },
   freeallow : function(elm){
    var free = function(){ if(jslous.cache['slideallow']){ clearTimeout(jslous.cache['slideallow']); } };
    jslous.Event.Listener(elm,'mouseup',free);
    jslous.Event.Listener(elm,'mouseout',free);
   },
   initirizer : function(interface,opt){
    var current = { target:opt, interface:interface };
    for(var key in this.defaults){
     current[key] = typeof opt[key] != 'undefined' ? opt[key]:this.defaults[key];
     if(typeof opt[key] != 'undefined'){ delete opt[key]; }
    }
    return current;
   },
   horizontal : function(interface,opt){
    var self = this,current = self.initirizer(interface,opt);
    current['handle'] = jslous.query('.horizontalhandle',interface)[0];
    current['lefter'] = jslous.query('.lefter',interface)[0];
    current['righter'] = jslous.query('.righter',interface)[0];
    current['limit'] = current['handle'].parentNode.offsetWidth-current['handle'].offsetWidth;
    if(!current['max']){ current['max'] = current['limit']+current['handle'].offsetWidth; }
    if(!current['min']){ current['min'] = 0; }
    current['pos'] = 0;
    var margin = jslous.elmPos.left(current['handle'])+current['handle'].offsetWidth;
    if(jslous.is_func(current['init'])){ current['init'].apply(current,current['initopt']); }
    var scrolled = function(evt){
     if(!self.active){ return false; }
     jslous.Event.removeListener(document,'mousemove',scroller);
     jslous.Event.removeListener(document,'mouseup',scrolled);
     self.cxlDefaults(evt);
     self.active = false;
    }
    var scroller = function(evt){    
     if(!self.active){ return false; }
     current['pos'] = jslous.Event.clientX(evt)-parseInt(margin)-(parseInt(current['handle'].offsetWidth)/2);
     current['pos'] >= 0 && current['pos'] <= current['limit'] ? jslous.css.setstyle(current['handle'],'left',current['pos']+'px'):false;
     if(jslous.is_func(current['move'])){
      var value = current['pos'] >= 0 && current['pos'] <= current['limit'] ? Math.floor(current['pos']/current['limit']*(current['max']-current['min'])+current['min']):current['pos'] < 0 ? current['min']:current['pos'] > current['limit'] ? current['max']:false;
      current['moveopt'].unshift(value);
      current['move'].apply(current,current['moveopt']);
     }
     self.cxlDefaults(evt);
    }
    var scrollinit = function(evt){
     if(self.active){ return false; }
     self.active = true;
     jslous.Event.Listener(document,'mousemove',scroller);
     jslous.Event.Listener(document,'mouseup',scrolled);
     self.cxlDefaults(evt);
    }
    jslous.Event.Listener(current['handle'],'mousedown',scrollinit);
    jslous.Event.Listener(current['lefter'],'mousedown',function(){
     if(current['pos'] <= 0){ return false; }
      current['pos']-=parseInt(current['handle'].offsetHeight)/4;
      current['pos'] >= 0 && current['pos'] <= current['limit'] ? jslous.css.setstyle(current['handle'],'left',current['pos']+'px'):false;
      if(jslous.is_func(current['move'])){
       var value = current['pos'] >= 0 && current['pos'] <= current['limit'] ? Math.floor(current['pos']/current['limit']*(current['max']-current['min'])+current['min']):current['pos'] < 0 ? current['min']:current['pos'] > current['limit'] ? current['max']:false;
       current['moveopt'].unshift(value);
       current['move'].apply(current,current['moveopt']);
      }
      jslous.cache['slideallow'] = setTimeout(arguments.callee,current['spd']); 
    }); 
    self.freeallow(current['lefter']);
    jslous.Event.Listener(current['righter'],'mousedown',function(){
     if(current['pos'] >= current['limit']){ return false; }
      current['pos']+=parseInt(current['handle'].offsetHeight)/4;
      current['pos'] >= 0 && current['pos'] <= current['limit'] ? jslous.css.setstyle(current['handle'],'left',current['pos']+'px'):false;
      if(jslous.is_func(current['move'])){
       var value = current['pos'] >= 0 && current['pos'] <= current['limit'] ? Math.floor(current['pos']/current['limit']*(current['max']-current['min'])+current['min']):current['pos'] < 0 ? current['min']:current['pos'] > current['limit'] ? current['max']:false;
       current['moveopt'].unshift(value);
       current['move'].apply(current,current['moveopt']);
      }
      jslous.cache['slideallow'] = setTimeout(arguments.callee,current['spd']);
    });
    self.freeallow(current['righter']);
   },
   vertical : function(interface,opt){
    var self = this,current = self.initirizer(interface,opt);
    current['handle'] = jslous.query('.verticalhandle',interface)[0];
    current['upper'] = jslous.query('.upper',interface)[0];
    current['lower'] = jslous.query('.lower',interface)[0];
    current['limit'] = current['handle'].parentNode.offsetHeight-current['handle'].offsetHeight;
    if(!current['max']){ current['max'] = current['limit']+current['handle'].offsetHeight; }
    if(!current['min']){ current['min'] = 0; }
    current['pos'] = 0;
    var margin = jslous.elmPos.top(current['handle'])+current['handle'].offsetHeight;
    if(jslous.is_func(current['init'])){ current['init'].apply(current,current['initopt']); }
    var scrolled = function(evt){
     if(!self.active){ return false; }
     jslous.Event.removeListener(document,'mousemove',scroller);
     jslous.Event.removeListener(document,'mouseup',scrolled);
     self.cxlDefaults(evt);
     self.active = false;
    }    
    var scroller = function(evt){    
     if(!self.active){ return false; }
     current['pos'] = jslous.Event.clientY(evt)-parseInt(margin)-(parseInt(current['handle'].offsetHeight)/2);
     current['pos'] >= 0 && current['pos'] <= current['limit'] ? jslous.css.setstyle(current['handle'],'top',current['pos']+'px'):false;
     if(jslous.is_func(current['move'])){
      var value = current['pos'] >= 0 && current['pos'] <= current['limit'] ? Math.floor(current['pos']/current['limit']*(current['max']-current['min'])+current['min']):current['pos'] < 0 ? current['min']:current['pos'] > current['limit'] ? current['max']:false;
      current['moveopt'].unshift(value);
      current['move'].apply(current,current['moveopt']);
     }
     self.cxlDefaults(evt);
    }    
    var scrollinit = function(evt){
     if(self.active){ return false; }
     self.active = true;
     jslous.Event.Listener(document,'mousemove',scroller);
     jslous.Event.Listener(document,'mouseup',scrolled);
     self.cxlDefaults(evt);
    }
    jslous.Event.Listener(current['handle'],'mousedown',scrollinit);    
    jslous.Event.Listener(current['upper'],'mousedown',function(){
     if(current['pos'] <= 0){ return false; }
      current['pos']-=parseInt(current['handle'].offsetHeight)/4;
      current['pos'] >= 0 && current['pos'] <= current['limit'] ? jslous.css.setstyle(current['handle'],'top',current['pos']+'px'):false;
      if(jslous.is_func(current['move'])){
       var value = current['pos'] >= 0 && current['pos'] <= current['limit'] ? Math.floor(current['pos']/current['limit']*(current['max']-current['min'])+current['min']):current['pos'] < 0 ? current['min']:current['pos'] > current['limit'] ? current['max']:false;
       current['moveopt'].unshift(value);
       current['move'].apply(current,current['moveopt']);
      }
      jslous.cache['slideallow'] = setTimeout(arguments.callee,current['spd']); 
    });
    self.freeallow(current['upper']); 
    jslous.Event.Listener(current['lower'],'mousedown',function(){
     if(current['pos'] >= current['limit']){ return false; }
      current['pos']+=parseInt(current['handle'].offsetHeight)/4;
      current['pos'] >= 0 && current['pos'] <= current['limit'] ? jslous.css.setstyle(current['handle'],'top',current['pos']+'px'):false;
      if(jslous.is_func(current['move'])){
       var value = current['pos'] >= 0 && current['pos'] <= current['limit'] ? Math.floor(current['pos']/current['limit']*(current['max']-current['min'])+current['min']):current['pos'] < 0 ? current['min']:current['pos'] > current['limit'] ? current['max']:false;
       current['moveopt'].unshift(value);
       current['move'].apply(current,current['moveopt']);
      }
      jslous.cache['slideallow'] = setTimeout(arguments.callee,current['spd']);
    });
    self.freeallow(current['lower']);
   }
  }
 });
 
 /* more Effector */
 jslous.func.extend({
  txtdrop : function(){
   jslous.each(this,function(){
    var span = document.createElement('span'),txt = jslous.node.gettxt(this);
    span.appendChild(document.createTextNode(txt));
    this.appendChild(span);
   });
   return this.stacks(this,this.selector);
  },
  fador : function(elm,opt,spd,steps){
   if(!elm){ return false; }
   if(elm.fade && elm.fade.timer){ clearInterval(elm.fade.timer); elm.fade = null; }
   if(!elm.fade){ elm.fade = {}; }
   elm.fade.steps = steps || 20;
   elm.init = {};
   for(var prop in opt){
    elm.fade[prop] = {};
    elm.fade[prop]['from'] = jslous.color.hex2num(opt[prop]['from']);
    elm.fade[prop]['to'] = jslous.color.hex2num(opt[prop]['to']);
    elm.fade[prop]['end'] = opt[prop]['to'];
    elm.init[prop] = {};
     for(var color in elm.fade[prop]['from']){ elm.init[prop][color] = (Math.round(Math.abs(elm.fade[prop]['from'][color]-elm.fade[prop]['to'][color])/elm.fade.steps) == 0 ? 1:Math.round(Math.abs(elm.fade[prop]['from'][color]-elm.fade[prop]['to'][color])/elm.fade.steps)); }
   }
   elm.fade.step = 1;
   elm.fade.timer = setInterval(function(){
    if(elm.fade.step <= elm.fade.steps){
     for(var prop in elm.init){
      for(var color in elm.fade[prop]['from']){ elm.fade[prop]['from'][color] = (elm.fade[prop]['from'][color] >= elm.fade[prop]['to'][color] || elm.fade[prop]['from'][color] >= 255 ? elm.fade[prop]['from'][color]-elm.init[prop][color]:parseInt(elm.fade[prop]['from'][color])+parseInt(elm.init[prop][color])); }
      jslous.css.setstyle(elm,prop,'#'+jslous.color.num2hex((elm.fade[prop]['from']['r'] > 255 ? 255:elm.fade[prop]['from']['r'] < 0 ? 0:elm.fade[prop]['from']['r']))+jslous.color.num2hex((elm.fade[prop]['from']['g'] > 255 ? 255:elm.fade[prop]['from']['g'] < 0 ? 0:elm.fade[prop]['from']['g']))+jslous.color.num2hex((elm.fade[prop]['from']['b'] > 255 ? 255:elm.fade[prop]['from']['b'] < 0 ? 0:elm.fade[prop]['from']['b'])));
     }     
     elm.fade.step = parseInt(elm.fade.step)+1;
    }else{
     clearInterval(elm.fade.timer);
     delete elm.fade.timer;
     delete elm.fade.steps;
     delete elm.fade.step;
     for(var prop in elm.fade){ if(typeof elm.fade[prop]['end'] != 'undefined' && elm.fade[prop]['end'] != null){ jslous.css.setstyle(elm,prop,elm.fade[prop]['end']); } }
     jslous.Agents.ie ? elm.removeAttribute(elm.fade):delete elm.fade;
    }
   },spd || 20);
  } 
 });
 
 /* readyListener */
 if(jslous.Agents.firefox){
  if(!('readyState' in document)){
   document.readyState = 'loading';
   jslous.Event.Listener(document,'DOMContentLoaded',function(){
    document.readyState = 'interactive';
    jslous.Event.removeListener(document,'DOMContentLoaded',arguments.callee);
   });   
   jslous.Event.Listener(window,'load',function(){
    document.readyState = 'complete';
    jslous.Event.removeListener(window,'load',arguments.callee);
   });
  }
 } 
 var ready = jslous.ready = function(func){
  if(ready.loaded){ return func(); }
  var observers = ready.observers;
  if(!observers){ observers = ready.observers = []; }
  observers[observers.length] = func; 
  if(ready.callback){ return; } 
  ready.callback = function(){
   if(ready.loaded){ return; }      
   ready.loaded = true;
   if(ready.timer){
    clearInterval(ready.timer);
    ready.timer = null;
   }
   var observers = ready.observers;
   for(var i = 0,length = observers.length;i < length;i++){
    var func = observers[i];
    observers[i] = null;
    func();
   }
   ready.callback = ready.observers = null;
  };
  if(document.readyState && jslous.Agents.webkit){
   ready.timer = setInterval(function(){
    var state = document.readyState;
    if(state == 'loaded' || state == 'complete'){ ready.callback(); }
   },50);
  }else if(document.readyState && jslous.Agents.ie){
   var src = (window.location.protocol == 'https:') ? '://0':'javascript:void(0)';
   document.write('<script type="text/javascript" defer="defer" src="'+src+'" '+'onreadystatechange="if (this.readyState == \'complete\') '+ready_ie+'.ready.callback();"'+'><\/script>'); 
  }else{
   try{
    jslous.Event.Listener(document,'DOMContentLoaded',ready.callback);
   }catch(e){}
   jslous.Event.Listener(window,'load',ready.callback);  
  }
 }
 
 jslous.html = {
  xhtmlNamespace : 'http://www.w3.org/1999/xhtml',
  queryreg : /^(\w*)([#|\.|\^]?)(\w*)=?["|']?([^"|^']*)["|']?$/,
  trim : function(str){ return str.replace(/^[ ]+|[ ]+$/g,''); },
  respush : function(elms,array,flg){
   array = array || new Array();
   for(var i = 0,len = elms.length;i < len;i++){
    if(elms[i].nodeType == 1){ elms[i].setAttribute('index',i); }
    array.push(elms[i]);
   }
   return array;
  },
  filter : function(selector,current){
   if(jslous.is_obj(current)){
    var self = this,match = self.queryreg.exec(selector);
    var chk = { tag : match[1].toUpperCase() || null,unit : match[2],select : match[3],val : match[4] },ret = [];
    var attr = chk.unit == '#' ? 'id':chk.unit == '.' ? (jslous.Agents.ie ? 'className':'class'):chk.unit == '^' ? chk.select:null;
    var val = chk.unit == '#' || chk.unit == '.' ? chk.select:chk.unit == '^' ? chk.val:null;
    var select = attr ? (chk.tag ? function(elm){ elm.tagName == chk.tag && ((val && elm.getAttribute(attr) && elm.getAttribute(attr) == val) || (!val && elm.getAttribute(attr))) ? ret.push(elm):false; }:function(elm){ (val && elm.getAttribute(attr) && elm.getAttribute(attr) == val) || (!val && elm.getAttribute(attr)) ? ret.push(elm):false; }):(function(elm){ if(elm.tagName == chk.tag){ ret.push(current[i]); } });
    for(var i = 0,len = current.length;i < len;i++){ if(current[i].nodeType == 1){ select(current[i]); } }
    return ret;
   }
  },
  query : function(selector,current){
   var result = new Array(),self = this;
   current = current || document;
   if(!selector){
    result.push(self.respush(document));
    return result;
   }
   var match = self.queryreg.exec(selector);
   var chk = { tag : match[1] || '*',unit : match[2],select : match[3],val : match[4] };
   if(!chk.unit){ return self.respush(current.getElementsByTagName(chk.tag),result); }
   if(chk.unit == '#'){ return self.respush([document.getElementById(chk.select) || false]); }
   if(chk.unit == '.'){
    if(document.getElementsByClassName){
     return function(className,tag,elm){
      var elements = elm.getElementsByClassName(className),nodeName = (tag && tag != '*') ? new RegExp("\\b"+tag+"\\b","i") : null,returnElements = [],current;
      for(var i = 0,il = elements.length;i < il;i+=1){
       current = elements[i];
       if(!nodeName || nodeName.test(current.nodeName)){ returnElements.push(current); }
      }
      return self.respush(returnElements,result);
     }(chk.select,chk.tag,current);
    }else if(document.evaluate){
     return function (className,tag,elm){
      var classes = className.split(" "),classesToCheck = "",
      namespaceResolver = (document.documentElement.namespaceURI === self.xhtmlNamespace) ? self.xhtmlNamespace : null,returnElements = [],elements,node;
      for(var j = 0,jl = classes.length;j < jl;j+=1){ classesToCheck += "[contains(concat(' ', @class, ' '), ' "+classes[j]+" ')]"; }
      try{ elements = document.evaluate(".//"+tag+classesToCheck,elm,namespaceResolver,0,null); }
      catch(e){ elements = document.evaluate(".//"+tag+classesToCheck,elm,null,0,null); }
      while((node = elements.iterateNext())){ returnElements.push(node); }
      return self.respush(returnElements,result);
     }(chk.select,chk.tag,current);
    }else{
     return function(className,tag,elm){
      var classes = className.split(" "),classesToCheck = [],elements = (tag === "*" && elm.all) ? elm.all:elm.getElementsByTagName(tag),current,returnElements = [],match;
      for(var k = 0,kl=classes.length;k < kl;k+=1){ classesToCheck.push(new RegExp("(^|\\s)"+classes[k]+"(\\s|$)")); }
      for(var l = 0,ll = elements.length;l < ll;l+=1){
       current = elements[l];
       match = false;
       for(var m = 0,ml=classesToCheck.length;m < ml;m+=1){
        match = classesToCheck[m].test(current.className);
        if(!match){ break; }
       }
       if(match){ returnElements.push(current); }
      }
      return self.respush(returnElements,result);
     }(chk.select,chk.tag,current);
    }
   }
   if(chk.unit == '^'){
    if(document.evaluate){
     return function(attrname,attrval,tag,elm){
      var namespaceResolver = (document.documentElement.namespaceURI === self.xhtmlNamespace) ? self.xhtmlNamespace:null,returnElements = [],elements,node;
      var xpath = chk.val ? './/'+tag+'[@'+attrname+'="'+self.trim(chk.val)+'"]':'.//'+tag+'[@'+attrname+']';
      try{ elements = document.evaluate(xpath,elm,namespaceResolver,0,null); }
      catch(e){ elements = document.evaluate(xpath,elm,null,0,null); }
      while((node = elements.iterateNext())){ returnElements.push(node); }
      return self.respush(returnElements,result);
     }(chk.select,chk.val,chk.tag,current);
    }else{
     return function(attrname,attrval,tag,elm){
      var elements = current.getElementsByTagName(tag),returnElements = [];
      attrname = self.trim(attrname);
      if(attrval){ attrval = self.trim(attrval); }
      for(var i = 0,len = elements.length;i < len;i++){
       if(elements.item(i).getAttribute(attrname)){
        if(!attrval){ returnElements.push(elements.item(i)); }
        else if(elements.item(i).getAttribute(attrname) == attrval){ returnElements.push(elements.item(i)); }
       }
      }
      return self.respush(returnElements,result);
     }(chk.select,chk.val,chk.tag,current);
    }
   }
  }
 }
})();
