
var css_NONE={'display' : 'none'};
var css_BLOCK={'display' : 'block'};
var css_UNVISIBLE={'opacity' : '0'};

var isTestMode = 0;
function GlobalFunction(testing){
   this.test=testing;
   }GlobalFunction.prototype={
   isSetTrue : function(a){return ((typeof(a)=='string' || typeof(a)=='number'||typeof(a)=='boolean')&&(a!='false'&&a!=0&&a!='0'&&a!=''))?1:0;},
   isFunc : function(f){return typeof(f)=='function'?1:0},
   isSet : function(a){return (typeof(a)!='undefined'&&a!=null)?1:0;},
   isResized : function(o){
      if(!this.isSet(o.data('widths'))){
         this.a('1');
         o.data('widths',0);
      }else{
         var w=o.width();
         var t=(o.data('widths') != w)?1:0;
         t&&o.data('widths',w);
         this.a('resized is "'+t+'"');
         return t;
      }
   },
   a : function(a){this.test&&console.log(a);},
   addElemCloneTo : function(elem,elemTo,func,dont_copy_events){
      var element = (!dont_copy_events) ? elem.clone(1,1).appendTo(elemTo) : elem.clone(0,0).appendTo(elemTo);
      $.isFunction(func) && func(element);
      return element;
   },
   addOneElemCloneTo:function(elem,elemTo,func,dont_copy_events){
      this.addElemCloneTo(elem.eq(0),elemTo.eq(0),func,dont_copy_events);
   }
}
var _GLOBAL_F = new GlobalFunction(isTestMode);
function Element(name,b,flagSet,func){
   this.name=name;
   this.selector=(b.selector?b.selector:'.')+name;
   this.active=(b.active?b.active:'');
   this.jq=null;

   _GLOBAL_F.isSetTrue(flagSet) && setJq();
   _GLOBAL_F.isFunc(func)&&func();
}Element.prototype={
   getClass : function(str){
      return '.'+this.name;
   },
   getId : function(str){
      return '#'+this.name;
   },
   setJq : function(e){
      if(_GLOBAL_F.isSet(e)){
         this.jq=e;
      }else{
         var self = this;
         this.jq=$(self.selector);
      }
   }
}

var testing = 0;//mode
var num_f = 0;//for console log
//watermark
(function(a,j){var n="function",k="password",d="maxLength",f="type",c=true,b="",m="placeholder",e=false,v="watermark",o=v,i="watermarkClass",s="watermarkFocus",l="watermarkSubmit",q="watermarkMaxLength",h="watermarkPassword",g="watermarkText",u=":data("+o+")",p=":text,:password,:search,textarea",r=["Page_ClientValidate"],t=e,w=m in document.createElement("input");a.extend(a.expr[":"],{search:function(a){return"search"===(a.type||b)},data:function(c,d,b){return!!a.data(c,b[3])}});a.watermark={version:"3.0.8",options:{className:v,useNative:c,hideBeforeUnload:c},hide:function(b){a(b).filter(u).each(function(){a.watermark._hide(a(this))})},_hide:function(a,o){var n=a.val()||b,l=a.data(g)||b,m=a.data(q)||0,k=a.data(i);if(l.length&&n==l){a.val(b);if(a.data(h))if((a.attr(f)||b)==="text"){var e=a.data(h)||[],c=a.parent()||[];if(e.length&&c.length){c[0].removeChild(a[0]);c[0].appendChild(e[0]);a=e}}if(m){a.attr(d,m);a.removeData(q)}if(o){a.attr("autocomplete","off");j.setTimeout(function(){a.select()},1)}}k&&a.removeClass(k)},show:function(b){a(b).filter(u).each(function(){a.watermark._show(a(this))})},_show:function(e){var r=e.val()||b,j=e.data(g)||b,o=e.attr(f)||b,p=e.data(i);if((r.length==0||r==j)&&!e.data(s)){t=c;if(e.data(h))if(o===k){var n=e.data(h)||[],m=e.parent()||[];if(n.length&&m.length){m[0].removeChild(e[0]);m[0].appendChild(n[0]);e=n;e.attr(d,j.length)}}if(o==="text"||o==="search"){var l=e.attr(d)||0;if(l>0&&j.length>l){e.data(q,l);e.attr(d,j.length)}}p&&e.addClass(p);e.val(j)}else a.watermark._hide(e)},hideAll:function(){if(t){a.watermark.hide(p);t=e}},showAll:function(){a.watermark.show(p)}};a.fn.watermark=function(t,q){var r="string";if(!this.length)return this;var u=e,v=typeof t===r;if(typeof q==="object"){u=typeof q.className===r;q=a.extend({},a.watermark.options,q)}else if(typeof q===r){u=c;q=a.extend({},a.watermark.options,{className:q})}else q=a.watermark.options;if(typeof q.useNative!==n)q.useNative=q.useNative?function(){return c}:function(){return e};return this.each(function(){var y="dragleave",x="dragenter",A=this,e=a(A);if(!e.is(p))return;if(e.data(o)){if(v||u){a.watermark._hide(e);v&&e.data(g,t);u&&e.data(i,q.className)}}else{if(w&&q.useNative.call(A,e)&&(e.attr("tagName")||b)!=="TEXTAREA"){v&&e.attr(m,t);return}e.data(g,v?t:b);e.data(i,q.className);e.data(o,1);if((e.attr(f)||b)===k){var B=e.wrap("<span>").parent(),n=a(B.html().replace(/type=["']?password["']?/i,'type="text"'));n.data(g,e.data(g));n.data(i,e.data(i));n.data(o,1);n.attr(d,t.length);n.focus(function(){a.watermark._hide(n,c)}).bind(x,function(){a.watermark._hide(n)}).bind("dragend",function(){j.setTimeout(function(){n.blur()},1)});e.blur(function(){a.watermark._show(e)}).bind(y,function(){a.watermark._show(e)});n.data(h,e);e.data(h,n)}else e.focus(function(){e.data(s,1);a.watermark._hide(e,c)}).blur(function(){e.data(s,0);a.watermark._show(e)}).bind(x,function(){a.watermark._hide(e)}).bind(y,function(){a.watermark._show(e)}).bind("dragend",function(){j.setTimeout(function(){a.watermark._show(e)},1)}).bind("drop",function(c){var a=c.originalEvent.dataTransfer.getData("Text");e.val().replace(a,b)===e.data(g)&&e.val(a);e.focus()});if(A.form){var r=A.form,z=a(r);if(!z.data(l)){z.submit(a.watermark.hideAll);if(r.submit){z.data(l,r.submit);r.submit=function(c,b){return function(){var d=b.data(l);a.watermark.hideAll();if(d.apply)d.apply(c,Array.prototype.slice.call(arguments));else d()}}(r,z)}else{z.data(l,1);r.submit=function(b){return function(){a.watermark.hideAll();delete b.submit;b.submit()}}(r)}}}}a.watermark._show(e)})};r.length&&a(function(){for(var b,c,d=r.length-1;d>=0;d--){b=r[d];c=j[b];if(typeof c===n)j[b]=function(b){return function(){a.watermark.hideAll();return b.apply(null,Array.prototype.slice.call(arguments))}}(c)}});a(j).bind("beforeunload",function(){a.watermark.options.hideBeforeUnload&&a.watermark.hideAll()})})(jQuery,window);

//timepicker
(function(a){function g(a){a.setFullYear(2001),a.setMonth(0),a.setDate(0);return a}function f(a,b){if(a){var c=a.split(b.separator),d=parseFloat(c[0]),e=parseFloat(c[1]);b.show24Hours||(d===12&&a.indexOf("AM")!==-1?d=0:d!==12&&a.indexOf("PM")!==-1&&(d+=12));var f=new Date(0,0,0,d,e,0);return g(f)}return null}function e(a,b){return typeof a=="object"?g(a):f(a,b)}function d(a){return(a<10?"0":"")+a}function c(a,b){var c=a.getHours(),e=b.show24Hours?c:(c+11)%12+1,f=a.getMinutes();return d(e)+b.separator+d(f)+(b.show24Hours?"":c<12?" AM":" PM")}function b(b,c,d,e){b.value=a(c).text(),a(b).change(),a.browser.msie||b.focus(),d.hide()}a.fn.timePicker=function(b){var c=a.extend({},a.fn.timePicker.defaults,b);return this.each(function(){a.timePicker(this,c)})},a.timePicker=function(b,c){var d=a(b)[0];return d.timePicker||(d.timePicker=new jQuery._timePicker(d,c))},a.timePicker.version="0.3",a._timePicker=function(d,h){var i=!1,j=!1,k=e(h.startTime,h),l=e(h.endTime,h),m="selected",n="li."+m;a(d).attr("autocomplete","OFF");var o=[],p=new Date(k);while(p<=l)o[o.length]=c(p,h),p=new Date(p.setMinutes(p.getMinutes()+h.step));var q=a('<div class="time-picker'+(h.show24Hours?"":" time-picker-12hours")+'"></div>'),r=a("<ul></ul>");for(var s=0;s<o.length;s++)r.append("<li>"+o[s]+"</li>");q.append(r),q.appendTo("body").hide(),q.mouseover(function(){i=!0}).mouseout(function(){i=!1}),a("li",r).mouseover(function(){j||(a(n,q).removeClass(m),a(this).addClass(m))}).mousedown(function(){i=!0}).click(function(){b(d,this,q,h),i=!1});var t=function(){if(q.is(":visible"))return!1;a("li",q).removeClass(m);var b=a(d).offset();q.css({top:b.top+d.offsetHeight,left:b.left}),q.show();var e=d.value?f(d.value,h):k,i=k.getHours()*60+k.getMinutes(),j=e.getHours()*60+e.getMinutes()-i,n=Math.round(j/h.step),o=g(new Date(0,0,0,0,n*h.step+i,0));o=k<o&&o<=l?o:k;var p=a("li:contains("+c(o,h)+")",q);p.length&&(p.addClass(m),q[0].scrollTop=p[0].offsetTop);return!0};a(d).focus(t).click(t),a(d).blur(function(){i||q.hide()});var u=a.browser.opera||a.browser.mozilla?"keypress":"keydown";a(d)[u](function(c){var e;j=!0;var f=q[0].scrollTop;switch(c.keyCode){case 38:if(t())return!1;e=a(n,r);var g=e.prev().addClass(m)[0];g?(e.removeClass(m),g.offsetTop<f&&(q[0].scrollTop=f-g.offsetHeight)):(e.removeClass(m),g=a("li:last",r).addClass(m)[0],q[0].scrollTop=g.offsetTop-g.offsetHeight);return!1;case 40:if(t())return!1;e=a(n,r);var i=e.next().addClass(m)[0];i?(e.removeClass(m),i.offsetTop+i.offsetHeight>f+q[0].offsetHeight&&(q[0].scrollTop=f+i.offsetHeight)):(e.removeClass(m),i=a("li:first",r).addClass(m)[0],q[0].scrollTop=0);return!1;case 13:if(q.is(":visible")){var k=a(n,r)[0];b(d,k,q,h)}return!1;case 27:q.hide();return!1}return!0}),a(d).keyup(function(a){j=!1}),this.getTime=function(){return f(d.value,h)},this.setTime=function(b){d.value=c(e(b,h),h),a(d).change()}},a.fn.timePicker.defaults={step:30,startTime:new Date(0,0,0,0,0,0),endTime:new Date(0,0,0,23,30,0),separator:":",show24Hours:!0}})(jQuery)

function getBrowser(){
   var browserIs = new Object();browserIs.ie = 0;
   //browserIs.other=0;browserIs.ff = 0;browserIs.gc = 0;browserIs.op = 0;browserIs.sf = 0;
   if(IE='\v'=='v'){browserIs.ie = 1;}
   //else if(2){browserIs.ff=1;}   else if(3){browserIs.gc=1;}   else if(4){browserIs.op=1;}   else if(5){browserIs.sf=1;}   else{browserIs.other=1;}
   testing && console.log('browser: ie='+browserIs.ie/*+', ff='+browserIs.ff+', gc='+browserIs.gc+', op='+browserIs.op+', sf='+browserIs.sf*/);
   $(function(){browserIs.ie && $('body').addClass('browser-is-ie');});
   return browserIs;
}
var browserIs = getBrowser();

function ceSecureConst(){
   var t = new Object();
   t.BIND = 'addEvent';
   t.UNBIND = 'delEvent';
   t.DISABLED = 'disabled';
   t.ENABLED = 'enabled';
   t.SET = 'set';
   t.STATE = 'state';
   t.WITH = 'with';
   t.ADD_PLACEHOLDER = 'placeholder';
   t.ON_FOCUS = 'ce-on-focus';
   return t;
}
var ce_s = new ceSecureConst();

function CustomElem(str_elem){
   this.PREFICS = 'ce';
   this.FormElm = (str_elem!='select') ? 'input' : str_elem ;
   this.CEClass = '.'+this.PREFICS+'-'+str_elem;
   this.ceACTIVE = this.PREFICS+'-active';
   this.dataCell = this.PREFICS+'Set';
   this.dataVal = 1; 
   this.ceDISABLED = this.PREFICS+'-disabled';
   this.speedOfFade = 300;
   this.disabledFadeTo = 0.2;
   this.TextElm = '.ce-t';
   var self = this;
   $(function(){testing && self.forTest()});
   }CustomElem.prototype = {
   getFelm : function(jq_obj){
      return (jq_obj.is(this.FormElm)) ? jq_obj : jq_obj.find(this.FormElm);
   },
   getCelm : function(jq_obj){
      return (jq_obj.is(this.CEClass)) ? jq_obj : jq_obj.closest(this.CEClass);
   },
   getElement : function (jq){
      return {wrapper:this.getCelm(jq),form:this.getFelm(jq)};
   },
   disabled : function(jq_elem,func){
      var self = this;
      !browserIs.ie && jq_elem.fadeTo(self.speedOfFade,self.disabledFadeTo);
      jq_elem.addClass(self.ceDISABLED);
      jq_elem.find(self.FormElm).attr('disabled','disabled');
      $.isFunction(func) && func();
      testing && self.a('mode "disabled", length: ' + jq_elem.length);
   },
   enabled : function(jq_elem,func){
      var self = this;
      jq_elem.removeClass(self.ceDISABLED);
      !browserIs.ie && jq_elem.fadeTo(self.speedOfFade,1);
      jq_elem.find(self.FormElm).removeAttr('disabled');
      $.isFunction(func) && func();
      testing && self.a('mode "enabled", length: ' + jq_elem.length);
   },
   isSetData:function(jq_elem){
      return (jq_elem.data(this.dataCell) == this.dataVal);
   },
   setData:function(jq_elem){
      var self = this;
      jq_elem.each(function(){
         $(this).data(self.dataCell,self.dataVal);
      });
      return jq_elem;
   },
   isDisabled:function(jq_elem){
      return this.getFelm(jq_elem).is(':disabled');
   },
   //secure functions
   str_pad:function(str,finishLen,str_pad,pad_type){
      str_pad = typeof(str_pad) == 'string'  ? str_pad : ' ';
      pad_type = typeof(pad_type) == 'number' ? pad_type : 1; 
      var t = str + '';
      var toggler = false;
      var len = Math.abs(finishLen - t.length);
      for(var i=0; i < len; i++){
         if(pad_type == 0){
            if(toggler) {
               t = str_pad + t;
            }else{
               t = t + str_pad;
            };
            toggler = !toggler;
         }else if(pad_type<0){
            t = str_pad + t;
         }else{
            t = t + str_pad;
         }
      };
      return t;
   },
   ceLog : function(some){
      var t1 = this.str_pad('#'+(++num_f),6);
      var t2 = this.str_pad(this.CEClass,15,' ',1);
      console.log(t1+'| '+t2+'| '+some);
   },
   forTest : function(){
//      var self = this;
//      if(self.CEClass != '.ce-input' && self.CEClass != '.ce-select'){
//         $(self.CEClass + ' ' + self.FormElm ).show().css({position:'absolute',/*right:'-4px',top:'-4px',*/opacity:'0.5 !important'});
//      }
//      if(self.CEClass == '.ce-select'){
//         $('.ce-select ' + self.FormElm).css({opacity:'0.5 !important',top:0,right:0});
//      }
//      if(self.CEClass == '.ce-input'){
//         $('.ce-input ' + self.FormElm).css({outline:'1px solid #ff0000 !important'});
//      }
//      //$(self.CEClass).css({outline:'1px solid #ffcc00'})
//      self.ceLog('length = ' + $(self.CEClass + ' ' + self.FormElm ).length);
   },
   a : function(message){
      var flag = typeof(message) == 'boolean' || typeof(message) == 'number' || typeof(message) == 'string';
      message = typeof(message) ? message : 'TEST';
      this.ceLog(message);
   }
};

function CustomCheckBox(){
   var t = new CustomElem('check');
   t.isChecked = function(jq_elem){
      var flag = this.getFelm(jq_elem).is(':checked');
      return flag;
   };
   t.setCheck = function(jq_elem,istoggle){
      jq_elem.each(function(){
         var flag = t.isChecked($(this));
         if((typeof(istoggle) == 'number' || typeof(istoggle) == 'boolean') && (istoggle != false || istoggle != 0)){
            flag = !flag;
         }
         flag ? t.setCheckOn($(this)) : t.setCheckOff($(this));
      })
   };
   t.setCheckOn = function(jq_elem){
      var input = t.getFelm(jq_elem);
      var elm = t.getCelm(jq_elem);
      !input.is(':checked') ? input.trigger('onchange') : null;
      elm.addClass(t.ceACTIVE);
      input.attr('checked','checked');
      elm.trigger('on');
      testing && t.a('set "on"');
   };
   t.setCheckOff = function(jq_elem){
      var input = t.getFelm(jq_elem);
      var elm = t.getCelm(jq_elem);
      input.is(':checked') ? input.trigger('onchange') : null;
      elm.removeClass(t.ceACTIVE);
      input.removeAttr('checked');
      elm.trigger('off');
      testing && t.a('set "off"');
   };
   return t;
};


function CustomSelect(){
   var t = new CustomElem('select');
   t.switchText = function(jq_elem){
      t.getCelm(jq_elem).find(t.TextElm).text(jq_elem.find('option:selected').text());
      testing && t.a('set "'+jq_elem.find('option:selected').text()+'"');
   };
   return t;
};
function CustomInput(){
   var t = new CustomElem('input');
   t.ALERT = 'ce-alert';
   t.ATTR_WATERMARK = 'placeholder';
   t.A = '.ce-a';
   t.alertShow = function(jq_obj){
      var self = this;
      jq_obj.addClass(self.ALERT);
   };
   t.alertHide = function(jq_obj){
      jq_obj.removeClass(t.ALERT);
   };
   t.addReqText = function(jq_obj,f_elem,objReq,message){
      message ? objReq.text(message) : null ;
      jq_obj.addClass(t.A);
      
      if(f_elem.val()){
         objReq.hide();
      }else{
         objReq.show();
      }
   };
   t.closeReqText = function(jq_obj){
      jq_obj.removeClass(t.A);
   };
   t.alertMessage = function(){
      
   };
   return t;
};

function CustomButton(){
   var t = new CustomElem('btn');
   return t;
};

function CustomFile(){
   var t = new CustomElem('elem-form-file');
   t.emptyText = '<b>File:</b>&nbsp;&nbsp;empty';
   t.fileText = '<b>File:</b>';
   return t;
};

function CustomRadio(){
   var t = new CustomElem('radio-btn');
   t.groupCLASS = '.'+t.PREFICS+'-radio';
   t.inputSELECTOR = '[type="hidden"]';
   t.value = function(jq_elem){
      var result = jq_elem.closest(t.groupCLASS).find(inputSELECTOR).val();
      return result;
   };
   t.setOn = function(jq_elem){

      var c = t.getCelm(jq_elem);
      var f = t.getFelm(jq_elem);
      var r = jq_elem.closest(t.groupCLASS)
      t.setOff(r.find(t.CEClass));
      c.addClass(t.ceACTIVE);
      f.attr('checked','checked');
      r.find(t.inputSELECTOR).val(f.val());
      testing && t.a('"on", value="'+ f.val() +'"');
   };
   t.setOff = function(jq_elem){
      jq_elem.removeClass(t.ceACTIVE);
      jq_elem.find(t.FormElm).removeAttr('checked');
   };
   t.set = function(jq_elem){
      var r =  jq_elem.closest(t.groupCLASS);
      testing && t.a('"set", RadioGroup length="'+r.length+'"');
      r.each(function(){
         t.setOn($(this).find(':checked').eq(0));
      });
   };
   t.setValue = function(jq_elem){
      testing && t.a('"setValue"');
      var r =  jq_elem.closest(t.groupCLASS);
      var tv = false;
      r.each(function(i){
         tv = false;
         t.getFelm(jq_elem).each(function(j){
            if($(this).val()=='' && !tv){
               $(this).val(j);
            }else{
               tv=true;
            }
         });
      });
   };
   return t;
};

function CustomMulti(){
   var t = new CustomElem('elem-multiselect');
   t.openDD = function(this_elm,self){
      /*open*/
      var wrapper = this_elm.closest('.ce-elem-multiselect');
      wrapper.find('.ce-multiselect-btn .ce-t').html('Submit');
      this_elm.toggleClass('ce-icon-left ce-icon-8 ce-icon-color');
        this_elm.removeClass('ce-icon-right');
      wrapper.find('.ce-multiselect-dd').toggleClass('ce-none');
      wrapper.find('.ce-multiselect-dd').css('z-index',999999);
      var id = 'ce-multiselect-'+(Math.ceil(Math.random()*1000000));
      wrapper.data('checks_id',id);
      wrapper.find('.ce-multiselect-checks').attr('id',id);
      var elem = $('#'+wrapper.data('checks_id'));
         elem.appendTo('body');
         //elem.width(wrapper.width());
         elem.css({top:wrapper.offset().top+wrapper.height(),left:(wrapper.offset().left - (elem.width() - wrapper.width())/2)});
   }
   t.submitDD = function(this_elm,self){
      /*submit*/
      this_elm.toggleClass('ce-icon-left ce-icon-8 ce-icon-color');
      var wrapper = this_elm.closest('.ce-elem-multiselect');
      $('#'+wrapper.data('checks_id')).appendTo(wrapper.find('.ce-multiselect-dd'));
      wrapper.find('.ce-multiselect-dd').toggleClass('ce-none');
      wrapper.find('.ce-multiselect-btn .ce-t').html(self.data('text'));
      var num = this_elm.closest('.ce-elem-multiselect').find(':checked').length;
      if(num == this_elm.closest('.ce-elem-multiselect').find('.ce-f').length){
         num = 'All';
      }
      wrapper.find('.ce-multiselect-btn .ce-t b').text('('+num+')');
      wrapper.trigger('onSUBMIT');
   }
   return t;
};



var ce_check  = new CustomCheckBox();
var ce_select = new CustomSelect();
var ce_input  = new CustomInput();
var ce_button = new CustomButton();
var ce_radio  = new CustomRadio();
var ce_file   = new CustomFile();
var ce_multi   = new CustomMulti();


(function($,ce){
   ce.FormElm = 'select';
   ce.event = {
      CHANGED:'time_select_change'
   }
   ce.timeUsaAndEuropeFormatConverter = function (timeObj){
      function toMaxLengthStrTime(time){
         return ((time+'').length < 2) ? '0'+time : time;
      }
      var h = timeObj.h;
      var m = timeObj.m;
      var p = (timeObj.p === 0 || timeObj.p === 1 || (typeof(timeObj.p) == 'string' && (timeObj.p.toUpperCase() == 'AM' || timeObj.p.toUpperCase() == 'PM'))) ? timeObj.p : 'toUsa';
      var pD = ['AM','PM'];
      var sep = ':';
      var mode = 0;   // 0 -usa to europe , 1 - europe to usa
      if(p == 'toUsa'){
         mode = 1;//europe to usa
         p = (h >= 12)?1:0;
      }
      var hEurope = [];
      var hUsa    = [];
      if(p == 0 || (typeof(p) == 'string' && p.toUpperCase() == 'AM')){
         p = 0;
         hEurope  = [0, 1,2,3,4,5,6,7,8,9,10,11];
         hUsa     = [12,1,2,3,4,5,6,7,8,9,10,11];
      }else if(p==1||(typeof(p) == 'string' && p.toUpperCase() == 'PM')){
         p = 1;
         hUsa     = [12,1, 2, 3, 4, 5, 6, 7, 8, 9, 10,11]
         hEurope  = [12,13,14,15,16,17,18,19,20,21,22,23];
      }else{
         return false;
      }
      if(typeof(h) == 'string'){
         h = parseInt(h);
      }
      if(typeof(m) == 'string'){
         m = parseInt(m);
      }
      var str = '';
      if(mode == 0){//usa - europe
         for(var key in hUsa){
            if(h == hUsa[key]){
               h = hEurope[key];
               break;
            }
         }
         str = toMaxLengthStrTime(h);
         str+= sep;
         str+= toMaxLengthStrTime(m);
         return {h:h,m:m,string:str};
      }else if(mode = 1){//europe - usa
         for(var key in hEurope){
            if(h == hEurope[key]){
               h = hUsa[key];
               break;
            }
         }
         str = toMaxLengthStrTime(h);
         str+= sep;
         str+= toMaxLengthStrTime(m);
         str+= ' ';
         str+= pD[p];
         return {h:h,m:m,p:p,string:str};
      }
      return {h:h,m:m,string:'ERROR!!!'}
   };
   ce.getTimeObj = function (timeObj,i){
      function toMaxLengthStrTime(time){
         return ((time+'').length < 2) ? '0'+time : time+"";
      }
      var maxHour = 24;
      var maxMinute = 60;
      var minute = timeObj.step*i;
      var hour = 0;

      if(minute >= maxMinute){
         hour = Math.floor(minute/maxMinute);
         minute -= maxMinute*hour;
      }
      if(hour > maxHour){
         hour -= maxHour*Math.floor(hour/maxHour);
      }
      var time = (timeObj.standard == 'usa') ? ce.timeUsaAndEuropeFormatConverter({h:hour,m:minute}) : {h:hour,m:minute,string : ""+toMaxLengthStrTime(hour)+timeObj.sep+toMaxLengthStrTime(minute)};
      return time.string;
   };
   ce.createOptions = function (beginTimeObj,i_min){
      function createOption(key,val){
         key = (key) ? 'value="'+key+'"' : '';
         return '<option '+key+'>'+val+'</option>';
      }
      var str = '';
      i_min = (!i_min) ? 0 : i_min;
      var len = Math.ceil((24*60 - i_min) / beginTimeObj.step);
      for(var i = i_min ; i < len ; i++){
         var temp = ce.getTimeObj(beginTimeObj,i);
         str += createOption(temp,temp);
      }
      return str;
   };
   ce.default_format = {sep:':',standard:'usa',step:15}

   ce.switchText = function(element){
      element.wrapper.find(ce.TextElm).text(element.form.find('option:selected').text());
      testing && ce.a('set "'+element.form.find('option:selected').text()+'"');
   };
   ce.triggerElem = function (element){
      element.wrapper.trigger(ce.event.CHANGED);
      testing && ce.a('elem changed');
   };
   ce.elementDisabled = function(element){
      ce.disabled(element.wrapper,function(){
         element.wrapper.data('disabled',true);
         element.form.unbind('change');
         element.form.unbind('focus');
         element.form.unbind('blur');
      });
   };
   ce.elementEnabled = function(element){
      ce.enabled(element.wrapper,function(){
         element.wrapper.data('disabled',false);
         element.form.bind('focusin',function(){
            if(!element.wrapper.data('disabled')){
               element.wrapper.addClass(ce_s.ON_FOCUS);
               testing && ce.a('element on focus');
               if(!element.wrapper.data('master')){
                  var begin_time = $(this);
                  if(!begin_time.data('init')){
                     begin_time.data('init',true);
                     if($('option',begin_time).eq(1).length){
                        var optionD = $('option',begin_time).eq(1);
                        if(optionD.is(':selected')){
                           begin_time.data('select_val',begin_time.val());
                        }
                        $('option',begin_time).eq(1).remove();
                     }
                     begin_time.data('value',begin_time.val());
                     begin_time.append(ce.createOptions(ce.default_format));
                     //slave_elem.data('text',$('option:selected',begin_time).text());
                     if(begin_time.data('select_val')){
                        if($('option[value="'+begin_time.data('select_val')+'"]',begin_time).length){
                           begin_time.ceSelect($(begin_time).data('select_val'));
                        }
                        begin_time.data('select_val',false);
                     }
                  }
               }
            }
         });
         element.form.bind('change',{element:element},function(e){
            if(!e.data.element.wrapper.data('disabled')){
               ce.switchText(element);
               ce.triggerElem(element);
            }
         });
         element.form.bind('focusout',function(){
            if(!element.wrapper.data('disabled')){
               element.wrapper.removeClass(ce_s.ON_FOCUS);
               testing && ce.a('--------------------------------------------');
            }
         });
      });
   };
   ce.element_set = function(element){
      element.wrapper.data('text',$('option',element.form).eq(0).text());
      testing && ce.a('element value =' + element.form.val());
      ce.isDisabled(element.form) ? ce.elementDisabled(element) : ce.elementEnabled(element);
   }
   ce.init = function(element,func){
      if(!element.wrapper.is('.ce-init')){
         ce.element_set(element);
         $.isFunction(func) && func();
         element.wrapper.addClass('ce-init');
         testing && ce.a('--------------------------------------------');
      }
   };
   $.fn.ceTimeSelect = function(mode,arg_1){
      this.each(function(){
         var element = ce.getElement($(this));
         ce.init(element);
         if(!!mode){
            if(mode == 'master'){
               if(!element.wrapper.data('master')){
                  var master_element = ce.getElement($(arg_1));
                  master_element.form.bind('change',{element:element,master:master_element},function(e){

                     e.data.element.form.trigger('change');
                     e.data.element.form.html('<option disabled="disabled" selected="selected">'+e.data.element.wrapper.data('text')+'</option>');
                     var m = $(this);
                     var opt = $('option',$(this));
                     var index = $('option[name="'+$(this).val()+'"]',$(this)).index(opt);
                     opt.each(function(i){
                        if( $(this).val() == m.val() ){index = i+1 ; return false;}
                     });
                     var len = opt.length;
                     var needle_opt_1 = $('option',$(this)).slice(index);
                     var needle_opt_2 = $('option',$(this)).slice(1,index-1);

                     _GLOBAL_F.addElemCloneTo(needle_opt_1,e.data.element.form,function(elem){elem.addClass('ce-time-first-day')});
                     _GLOBAL_F.addElemCloneTo(needle_opt_2,e.data.element.form,function(elem){elem.addClass('ce-time-select-second-day')});

                     ce.switchText(e.data.element);
                  });
                  element.wrapper.data('master',arg_1);
                  testing && ce.a('add master element "'+arg_1+'", length="'+$(arg_1).length+'"');
                  testing && ce.a('--------------------------------------------');
               }
            }else if(mode == ce_s.DISABLED){
               ce.elementDisable(element);
            }else if(mode == ce_s.ENABLED){
               ce.elementEnabled(element);
            }
         }
      });
   }
})(jQuery,new CustomElem('elem-time-select'));

$.fn.ceHint = function(message, options){
   options = (options) ? options : new Object();
   var self = this;
   if(message != null ){
      self.data('enable',true);
      self.data('message',message);
   }else{
      self.data('enable',false);
   }
   var hint = $([]);
   var hint_message = $([]);
   if(!self.data('init')){
      self.data('init',true);
      if(self.data('enable')){
         options.color = (typeof(options.color) == 'string') ? 'ce-hint-'+options.color : '';
         options.position  = (typeof(options.position) == 'string')  ? 'ce-hint-'+options.position  : 'ce-hint-center';
         var hint_id = 'hint-'+Math.ceil(Math.random()*10000000);
         $('body').prepend(
            '<div id="'+hint_id+'" class="ce-hint ce-hint-bottom '+options.position+' '+options.color+'">'+
               '<span class="ce-ht">'+
                  '<span class="ce-ht"></span>' +
               '</span>' +
               '<span class="ce-h">' +
                  message +
               '</span>' +
            '</div>'
         );
         hint = $('#'+hint_id);
         hint_message = $('.ce-h',hint);
         hint.hide();
         self.data('position',options.position);
      }
   }
   self.hover(function(){
      if(self.data('enable')){
         hint.show();
         hint_message.html(self.data('message'));
         var self_obj = {width:self.width(),height:self.height(),top:self.offset().top,left:self.offset().left};

         var hint_obj = null;
         if(self.data('position')=='ce-hint-left'){
            hint_obj = {top:self_obj.top+self_obj.height-8,left:self_obj.left+self_obj.width-hint.width()};
         }else if(self.data('position')=='ce-hint-right'){
            hint_obj = {top:self_obj.top+self_obj.height-8,left:self_obj.left};
         }else{
            hint_obj = {top:self_obj.top+self_obj.height-8,left:self_obj.left+self_obj.width/2};
         }
         hint.css(hint_obj);
      }
   },function(){
      if(self.data('enable')){
         hint.hide();
      }
   });
   return this;
}
$.fn.ceMulti = function(mode,func){
   var self = this;
   if(mode == ce_s.BIND){
      this.click(function(){
         if($(this).is('.ce-multi-open')){
            testing && console.log('submit');
            ce_multi.submitDD($(this),self);
         }else{
            testing && console.log('open');
            ce_multi.openDD($(this),self);
            $(this).addClass('ce-multi-open');
         }
      });
      this.click(function(){
         $(this).closest('.ce-elem-multiselect').find('.ce-multiselect-dd').addClass('ce-none');
         $(this).addClass('ce-none');
      });
   }else if(mode == ce_s.UNBIND){
      $('.ce-multiselect-checks').each(function(){
         if(!$(this).closest('.ce-multiselect-dd').length){
            $(this).hide();
         }
      });
   }else if(mode == 'selected'){
      var reusltArr = [];
      this.find(':checked').each(function(){
         reusltArr.push($(this).val());
      });
      return reusltArr;
   }else if(mode == 'onsubmit'){
      self.live('onSUBMIT',function(){
            self.die('onSUBMIT');
            setTimeout(function(){
                testing && console.log('onsubmit');
                _GLOBAL_F.isFunc(func) && func();
            },100);
      });
   }else{
        var reusltArr = [];
        this.find(':checked').each(function(){
            reusltArr.push($(this).val());
        });
      this.each(function(){
            var r = $(this);
            r.data('text',r.find('.ce-multiselect-btn .ce-t').html());
        })
      this.ceMulti(ce_s.BIND);
   }
}
$.fn.ceFile = function(mode){
   c_elem = ce_file.getCelm(this);
   f_elem = ce_file.getFelm(this);
   w_elem = c_elem.find('.ce-t');
   if(mode == ce_s.ENABLED){
      ce_file.enabled(c_elem,function(){
         c_elem.ceFile(ce_s.BIND);
      });
   }else if(mode==ce_s.DISABLED){
      ce_file.disabled(c_elem,function(){
         c_elem.ceFile(ce_s.UNBIND);
      });
   }else if(mode == ce_s.BIND){
      f_elem.bind('change',function(){
         w_elem.html(ce_file.fileText + '&nbsp;&nbsp;&nbsp;' + f_elem.val().replace(/.*\\(.*)/, "$1").replace(/.*\/(.*)/, "$1"));
      });
   }else if(mode == ce_s.UNBIND){
      f_elem.unbind('change');
   }else if(mode == ce_s.SET){
      f_elem.data('text',c_elem.find('.ce-t').text());
      w_elem.text(f_elem.data('text'));
      //w_elem.text('Choose File');
   }else{
      f_elem.each(function(){
         $(this).ceFile(ce_s.SET)
      });
      f_elem.ceFile(ce_s.BIND);
   }
   return this.each(function(){});
}
$.fn.ceRadio = function(mode){
   c_elem = ce_radio.getCelm(this);
   f_elem = ce_radio.getFelm(this);
   if(mode == ce_s.SET){
       ce_radio.setValue(f_elem);
       ce_radio.set(c_elem);
       c_elem.ceRadio(ce_s.BIND);
   }else if(mode == ce_s.BIND){
      c_elem.bind('click',function(){
         ce_radio.setOn($(this));
      });
   }else if(mode == ce_s.UNBIND){
        c_elem.unbind('click');
   }else if(typeof(mode)=='undefined'){
        //alert(c_elem.find('input:checked').length);
      c_elem.ceRadio(ce_s.SET);
   }else{

    }
   return this;
}

$.fn.ceButton = function(mode,message){
   var self = this;
   c_elem = ce_button.getCelm(self);
   f_elem = ce_button.getFelm(self);
   if(mode==ce_s.ENABLED){
      ce_button.enabled(c_elem,function(){
         c_elem.ceButton(ce_s.BIND);
      });
   }else if(mode==ce_s.DISABLED){
      ce_button.disabled(c_elem,function(){
         c_elem.ceButton(ce_s.UNBIND);
      });
   }else if(mode == ce_s.BIND){
      
   }else if(mode == ce_s.UNBIND){
      
   }
   return this.each(function(){});
}
$.fn.ceInput = function(mode,message){
   var self = this;
   var c_elem = ce_input.getCelm(self);
   var f_elem = ce_input.getFelm(self);
   if (mode==ce_s.ENABLED){
      ce_input.enabled(c_elem,function(){
         c_elem.ceInput(ce_s.BIND);
      });
   }else if (mode==ce_s.DISABLED){
      ce_input.disabled(c_elem,function(){
         c_elem.ceInput(ce_s.UNBIND);
      });
   }else if (mode== ce_s.BIND){
   }else if (mode== ce_s.UNBIND){
   }else if (mode == ce_s.SET) {
      if(browserIs.ie){
         c_elem.each(function(){
            var e_t = $(this).find('span.ce-plchldr');
            e_t.length && $(this).find('input').watermark(e_t.text());
         });
      }else{
         f_elem.each(function(){
            var placeholder = $(this).attr(ce_input.ATTR_WATERMARK);
            placeholder && $(this).watermark(placeholder);
         });
      }
   }else{
      f_elem.ceInput(ce_s.SET);
   }
   return this;
}

$.fn.ceSelect = function(mode){
   var c_elem = ce_select.getCelm(this);
   var f_elem = ce_select.getFelm(this);
   if(mode == ce_s.DISABLED){
      ce_select.disabled(c_elem,function(){
         c_elem.ceSelect(ce_s.UNBIND);
      });
   }else if(mode == ce_s.ENABLED){
      ce_select.enabled(c_elem,function(){
         c_elem.ceSelect(ce_s.BIND);
      });
   }else if(mode == ce_s.BIND){
      f_elem.bind('change',function(){
         ce_select.switchText($(this));
      });
   }else if(mode == ce_s.UNBIND){
      f_elem.unbind('change');
   }else if(mode == ce_s.SET){
      c_elem.ceSelect(ce_s.BIND);
      c_elem.each(function(){
         ce_select.switchText($(this));
         ce_select.isDisabled($(this)) ? $(this).ceSelect(ce_s.DISABLED) : null;
      });
   }else if(typeof(mode) == 'undefined'){
      c_elem.ceSelect(ce_s.SET);
   }else{
      f_elem.val(mode);
      c_elem.each(function(){
         ce_select.switchText($(this));
      });
   }
   return this.each(function(){});
};

$.fn.ceCheckbox = function(mode,arg_1){
    var c_elem = ce_check.getCelm(this);
   var f_elem = ce_check.getFelm(this);
   if (mode == 'toggle'){
      testing && ce_check.a(mode);
      ce_check.setCheck(c_elem,1);
      f_elem.trigger('onchange');
   }else if (mode == 'on'){
      !arg_1 && ce_check.setCheckOn(f_elem);
      (typeof(arg_1) == 'function') && c_elem.unbind('on').bind('on',arg_1);
      testing && ce_check.a('mode "' +  mode + '"' + (typeof(arg_1) == 'function'? ' function':''));
   }else if (mode == 'off'){
      !arg_1 &&                         ce_check.setCheckOff(f_elem);
      (typeof(arg_1) == 'function') && c_elem.unbind('off').bind('off',arg_1);
      testing && ce_check.a('mode "' +  mode + '"' + (typeof(arg_1) == 'function'? ' function':''));
   }else if(mode == ce_s.STATE){
      return ce_check.isChecked(f_elem);
   }else if(mode == 'clear'){
      testing && ce_check.a('clear "' + arg_1 + '" function');
      (arg_1 == 'on') && c_elem.unbind('on');
      (arg_1 == 'off') && c_elem.unbind('off');
   }else if(mode == ce_s.ENABLED){
      ce_check.enabled(c_elem,function(){
         c_elem.ceCheckbox(ce_s.BIND);
      });
   }else if(mode == ce_s.DISABLED){
      ce_check.disabled(c_elem,function(){
         c_elem.ceCheckbox(ce_s.UNBIND);
      });
   }else if(mode == ce_s.BIND){
        //alert(c_elem.length);
      c_elem.click(function (){
         $(this).ceCheckbox('toggle');
      });
   }else if(mode == ce_s.UNBIND){
      c_elem.die('click');
   }else if(mode == ce_s.SET){
      f_elem.is(':checked') ? ce_check.setCheckOn(f_elem) : ce_check.setCheckOff(f_elem);
      f_elem.is(':disabled') ? f_elem.ceCheckbox(ce_s.DISABLED): null;
      !f_elem.is(':disabled') && f_elem.ceCheckbox(ce_s.BIND);
   }else{
      c_elem.each(function(){
         if(!ce_check.isSetData($(this))){
            ce_check.setData($(this));
            testing && ce_check.a('"set" : elems length = '+c_elem.length);
            $(this).ceCheckbox(ce_s.SET);
         }
      });
   }
   return this;
};


//for closed btn
$(function(){
   $('a.ce-cl').bind('click',function(){
      $(this).closest('.ce').hide();
   });
});

//function ceHint(){
//   var temp_z = 1;
//   $('.ce-hint-left, .ce-hint-right,.ce-hint').hover(function(){
//      temp_z = $(this).css('z-index')
//   $(this).css('z-index',9999);
//   },function(){
//      $(this).css('z-index',temp_z);
//   });
//}

function ceTimePicker(){
   $(".ce-time-picker").timePicker({
      startTime: "00.00", // Using string. Can take string or Date object.
      endTime: new Date(0, 0, 0, 15, 30, 0), // Using Date object here.
      show24Hours: true,
      separator: '.',
      step: 5
   });
}

/*CE GALLERY*/
$.fn.ceGalleryFillBlocks=function(minwidth){
   this.wrapAll('<div class="ce-gallery-list"></div>');
   this.wrap('<div class="ce-gallery-elem-wrapper"></div>');
   
   this.css({width:minwidth+'px'});
   
   var elem = this.closest('.ce-gallery-elem-wrapper');
   var elem_width = minwidth;
   var box = elem.closest('.ce-gallery-list');
   var box_width = box.width();
   function getBlocksQuantity (){
      var temp_len = Math.floor(box.width() / minwidth);
      return (temp_len > elem.length) ? elem.length : temp_len;
   }
   function getNewWidth(){
      elem_width = Math.floor(box_width / getBlocksQuantity ())-2;
      return elem_width;
   }

   elem.bind('refreshWidth',function(){
      elem_width = getNewWidth();
      elem.css({
         'width':elem_width+'px',
         'float':'left'
      });
   });

   $(window).resize(function(){
      if(box.width()!=box_width){
         box_width = box.width();
         elem.trigger('refreshWidth');
      }
   });

   elem.trigger('refreshWidth');
   return this.each(function(){});
};

$.fn.ceReceivesEqualMax = function(param){
   var maxParam = 0;
   this.each(function(){
      var f = parseFloat($(this).css(param));
      maxParam = (f > maxParam)? f : maxParam ;
   });
   return this.each(function(){
      $(this).css(param, maxParam);
   });
};

$.fn.ceReceivesEqualMaxHeight = function(){
   var maxParam = 0;
   this.each(function(){
      var f = parseFloat($(this).height());
      maxParam = (f > maxParam)? f : maxParam ;
   });
   return this.each(function(){
      $(this).css({'height' : maxParam});
   });
};

(function($,ce,__testing){
   ce.fn = new Object();
   ce.log = function(message){
      __testing && !$.browser.msie && ce.a(message);
   };
   ce.fn.set = function(element){
      element.wrapper.bind('click',{element:element},function(e){
         var element = e.data.element;
         if($(this).is('.ce-readonly')){
            ce.log('element is readonly');
         }else{
            !$(this).is('.ce-readonly') && !$(this).is('.ce-active') && ce.fn.toggle(element);
         }
      });
      element.form.bind('blur keypress',{element:element},function(e){
         var element = e.data.element;
         if(element.wrapper.is('.ce-readonly')){
            ce.log('element is readonly');
         }else if(e.type == 'blur' || (e.type == 'keypress' && e.which == 13)){
            element.wrapper.is('.ce-active') && ce.fn.toggle(element);
         }
      });
      ce.fn.close_input(element);
   };
   ce.fr = new Object();
   ce.fr.toggler = function(element,selector,f_yes,f_no){
      if(ce.fr.switcher(element,selector,f_yes,f_no)){
         element.wrapper.removeClass(selector);
      }else{
         element.wrapper.addClass(selector);
      }
   };
   ce.fr.switcher = function(element,selector,f_yes,f_no){
      var  result = element.wrapper.is(selector);
      if(result){
         $.isFunction(f_yes) && f_yes(element);
      }else{
         $.isFunction(f_no) && f_no(element);
      }
      return result;
   };
   ce.fn.addUnit = function(element,val){
      val = (element.unit.html())? val+element.unit.html(): val;
      val = (element.pre_unit.html()) ? element.pre_unit.html()+val : val;
      return val;
   };
   ce.fn.delUnit = function(element,val){
      val =  (element.unit.html())? val.replace(element.unit.html(),"") : val;
      val =  (element.pre_unit.html())? val.replace(element.pre_unit.html(),"") : val;
      return val;
   };
   ce.fn.close_input = function(element){
      var val = element.form.val();
      if(!(val+'').length){
         element.wrapper.addClass('ce-default');
      }else{
         element.wrapper.removeClass('ce-default');
         val = ce.fn.addUnit(element,val);
      }
      element.text.html(val).show();
      element.form.hide();
      element.wrapper.removeClass('ce-active');
      element.wrapper.removeClass('ce-border ce-b-shadow-in');
   };
   ce.fn.open_input = function(element){
      element.wrapper.removeClass('ce-default');
      var  val = element.text.html();
      val = ce.fn.delUnit(element,val);
      element.wrapper.removeClass('ce-default');
      element.wrapper.addClass('ce-active');
      element.form.val(val).show();
      element.text.hide();
      element.form.css({'font-size':element.text.css('font-size')});
      element.wrapper.addClass('ce-border ce-b-shadow-in');
      element.form.focus();
   }
   ce.fn.toggle =function(element){
      ce.fr.toggler(element,'.ce-active',ce.fn.close_input,ce.fn.open_input);
   }
   ce.init = function(element){
      if(!element.wrapper.is('.ce-init')){
         ce.fn.set(element);
         element.wrapper.addClass('ce-init');
         ce.log('init');
      }
   };
   $.fn.ceInlineEdit = function(){
      this.each(function(){
         var element       = ce.getElement($(this));
         element.text      = $('.ce-inline-text', element.wrapper);
         element.input     = $('.ce-inline-input', element.wrapper);
         element.unit      = $('b.ce-unit', element.wrapper);
         element.pre_unit  = $('b.ce-pre-unit',element.wrapper);
         ce.init(element);
      });
      return this;
   }
})(jQuery,new CustomElem('elem-inline-edit'),0);

function ce(mode){
   if(mode == 'test'){
      testing = 1;
      $.each([ce_input,ce_check,ce_radio,ce_select,ce_button],function(){
         this.forTest();
      });
    }else if(mode == ce_s.UNBIND){
        $('.ce-btn').ceButton(ce_s.UNBIND);
        $('.ce-input').ceInput(ce_s.UNBIND);
        $('.ce-check').ceCheckbox(ce_s.UNBIND);
        $('.ce-select').ceSelect(ce_s.UNBIND);
        $('.ce-radio-btn').ceRadio(ce_s.UNBIND);
        $('.ce-elem-form-file').ceFile(ce_s.UNBIND);
        $('.ce-elem-multiselect').ceMulti(ce_s.UNBIND);
        ce();
   }else{
        $('.ce-btn').ceButton();
        $('.ce-input:visible').ceInput();
        $('.ce-check').ceCheckbox();
        $('.ce-select').ceSelect();
        $('.ce-radio-btn').ceRadio();
        $('.ce-elem-form-file').ceFile();
        $('.ce-elem-multiselect').ceMulti();
        $('.ce-elem-time-select:not(.ce-init)').ceTimeSelect();
        $('.ce-elem-inline-edit:not(.ce-init)').ceInlineEdit();
   }
}
$(document).ajaxStop(function(){
    ce(ce_s.UNBIND);
    testing && console.log('ajaxStop');
});


$(function(){
    ce();
    ceTimePicker();
    testing && ce('test');
});

