/*********************************************************************
  Copyright 2006-2009 .
  
  Auteur : Boudchicha naime -- WWW.NEW6TM.COM
           Manager@new6tm.com
***********************************************************************/

if(typeof Prototype == 'undefined' || !Prototype.Version.match("1.6"))
  throw("NEW6TM-UI library require Prototype library >= 1.6.0");

if (Prototype.Browser.WebKit) {
  Prototype.Browser.WebKitVersion = parseFloat(navigator.userAgent.match(/AppleWebKit\/([\d\.\+]*)/)[1]);
  Prototype.Browser.Safari2 = (Prototype.Browser.WebKitVersion < 420);
}

if (Prototype.Browser.IE) {
  Prototype.Browser.IEVersion = parseFloat(navigator.appVersion.split(';')[1].strip().split(' ')[1]);
  Prototype.Browser.IE6 =  Prototype.Browser.IEVersion == 6;
  Prototype.Browser.IE7 =  Prototype.Browser.IEVersion == 7;
}
var NEW6TM = {	
	Class : function(namespace,implimentation) {return null;},
	UI         : {},  
	Connection : {
		  AjaxLoader : function(methode){
				    return this.prototype = new _Loader(methode);
		  },
		  LoadScript : function(F,T){
		         return new _Connection(F)
		  },
		  PageLoader : function(){
		         return new _Connection()
		  }},
	Application : function(){
				    return this.prototype = new _Application();
		  } 	  
};
		  
//NEW6TM.Application; 		  
_Application  = Class.create({ 
       Title    : "No-Name Document", 
       WH       : {},
       initialize: function() { 	
			   var _caller = this;
           },
    _GetFlashReference : function() {
	if(navigator.appName.indexOf("Microsoft") != -1){
	     return window.YFlash;
	   }else{
		 return document.YFlash;
	} 
   },
    LoadSWF : function(item) {
	  	 $('YFlash').insert($('noflash'));
	 var noflash = $('noflash').innerHTML;
	 $('YFlash').update('<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" '+ 
						'codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" '+
						'width="990" height="400" id="loader" align="top">' +
	                    '<param name="allowScriptAccess" value="sameDomain" />' +
						'<param name="flashVars" value="link='+item+'"> '+	
	                    '<param name="allowFullScreen" value="false" />' +
	                    '<param name="movie" value="loader.swf" /><param name="quality" value="high" />'+
						'<param name="scale" value="noscale" /><param name="salign" value="lt" />' +
						'<param name="wmode" value="transparent" /><param name="bgcolor" value="#ffffff" />' +
						'<embed src="loader.swf" quality="high" scale="noscale" salign="lt" wmode="transparent" '+
						'bgcolor="#ffffff" width="990" height="400" name="loader" align="top" '+
						'allowScriptAccess="sameDomain" allowFullScreen="false" flashVars="link='+item+'"'+
						'type="application/x-shockwave-flash" '+
						'pluginspage="http://www.adobe.com/go/getflashplayer" /></object>');	
    var flashvars = {'link' : item};
    var attributes = {};
    var params = {menu: 'false',scale: 'no-scale',wmode : 'transparent',
	              no_flash: 'Sorry, you need to install flash to see this content.'};
	swfobject.embedSWF("loader.swf", "YFlash", "100%", "400", "9", "expressInstall.swf", flashvars, params, attributes); 
   },
   Create_Aleternative_Content : function() {
	var _html  = '<noscript><div>';
	    _html += '<p>AAHP : Vous devriez installer Adobe Player<a href="http://www.adobe.com/go/getflashplayer">';
		_html += '<imgsrc="http://www.adobe.com/images/shared/download_buttons/';
		_html += 'get_flash_player.gif" alt="Get Adobe Flash player" />install</a></p></div></noscript>';
		return _html;
    },
    CallBack : function(e,num,evt) {
	 var text = e.innerHTML;
     this._GetFlashReference().dispatcher(num);
     document.title = this.Title + " >> " + text;
   },
    _MakeTime	: function() {
	   var TIME = new Date();   
   },
    LoadImage : function(img) {
   	      var url = 'service/captcha/makeImage.php';
		  $(img).src = url + '?refresh=' + Math.floor(Math.random() * 5000) + 1;
	},
   Onload : function(callback) {
    (document.loaded) ? callback.call(document) : document.observe('dom:loaded', callback);
   }
});	
				   
_Connection = Class.create({ 					   
   	    _url               : "serviceAjax.php",
	    resultat    :{JSON : null,Page : null},
        initialize: function() {
                	
			   _caller = this;
			   this.regAJAX = new RegExp("<AJAX[^>]*>([\\S\\s]*?)<\/AJAX>"); 
			   this.regCONTENT = new RegExp("<CONTENT[^>]*>([\\S\\s]*?)<\/CONTENT>");
			   this.regMSG = new RegExp("<MSG[^>]*>([\\S\\s]*?)<\/MSG>");
           },
		   Init : function() {this.resultat.JSON = null;this.resultat.Page = null;this.resultat.Wizard = null},
		   inConnect : function(state,message){
			   if (state == 0) {  			     
				   $('status').setStyle('background :url(loading.gif) -100px -160px no-repeat;').
					update("Pacientez pendent le chargement");				  
			   } else {
				   $('status').setStyle('background :none;').update((message) ? message : '&nbsp;' );
			   }
		   },
		   ParseWIZARD : function(wizard){
			   return wizard;
		   },
           Connect: function() {
			  var url   = this._getUrl(); 			  
			  var vars  = this._parametre || {};
			  _caller = this;
			  this.Init();
			  
			  new Ajax.Request(url, {
                    method: 'post', parameters : vars.vars,
					onCreate: function(){
					 _caller.inConnect(0);				  
				   },
	          onSuccess: function(transport) {					   
					   var responseText = transport.responseText;
					   /*alert(responseText);*/
					   var rAJAX = responseText.match(_caller.regAJAX);
   					   var rCONTENT = responseText.match(_caller.regCONTENT);
   					   var rMSG = responseText.match(_caller.regMSG);					   
					   
					   if (rAJAX) _caller.resultat.JSON = rAJAX[1];
					   if (rCONTENT) _caller.resultat.Page = rCONTENT[1];                     
					   if (rMSG) _caller.resultat.MSG = _caller.ParseMSG(rMSG[1]);  					   
					   _caller.inConnect(1); 
					   if (_caller._parametre.success) {
   							  _caller._parametre.success().bind(_caller);
							}					  							
                   },onFailure: function(transport){
					     _caller.inConnect(1,'Une erreur est survenue :(' + transport.status + ') Verifier votre connection') },
				     on404: function(){
					     _caller.inConnect(1,'Desolé la Page est introuvable , le serveur ne repond pas')}
                    });               
           },
		   _getUrl : function(){
			     return this._url;
			   },
		   Set : function(_property) {
		          Object.extend(this,_property);
		        return this
		    },
			_preventDefault : function(el,evt) {
	 	       var Event = evt || window.evt;
               if (Event.preventDefault) {
                    Event.preventDefault();  
                     }
                Event.returnValue = false;  				
			}
        });



_Loader = Class.create(_Connection, {	
       initialize: function($super) {
               $super();
       },
	   LoadSection : function(tag) {
        this._parametre = { success : function() {this.Createmenu()}.bind(this) ,
		         vars: {
			          service   : 'CManager',
					  get       : 'Section',
					  cible     : NEW6TM.Application.pages[tag]
					  }};
	     this.Connect();
		 //alert(NEW6TM.Application.pages[tag]);
       },
	   LoadContenu : function(el,evt,tag,target){
	       this._preventDefault(el,evt);	
		   //alert(el.innerHTML);
           this._parametre = { success : function() {this.Createmenu()}.bind(this),
		   vars: {
		    	service   : 'CManager',
				get       : 'Contenu',
				cible     : tag,
				target    : target
					  }};
	        this.Connect();
	   },
	   LoadToolBar : function(el,evt,tag,target) {	
   	       this._preventDefault(el,evt);
		   var Target = target || {};	
		   var element = Element.extend(el);
           this._parametre = { 
		         success : function() {
					 if ($('PagerToolBar').down('.selected'))  
					 $('PagerToolBar').down('.selected').removeClassName('selected');
					 element.addClassName('selected');
					 this.AjustContent('content-pager');
				  }.bind(this),
		         vars: {
			          service   : CManager,
					  get      : 'Contenu',
					  cible     : tag,
					  target    : this.cible
					  }};
	        this.Connect();		   
	   },
	   
	   LoadImage : function() {
   	      var url = 'service/captcha/makeImage.php';
		  $('captcha').src = url + '?refresh=' + Math.floor(Math.random() * 5000) + 1;
	   },
	   SendMsg   : function() {
		    return null;
	   },
	   terminer : function(){alert("terminer")},
	   Createmenu : function() {
		    var content = $(this.Container.content);
            var iterator = $(this.Container.iterator);	
		    //content.update();
			var ctn = this.resultat.Page;
			content.morph("opacity:0.2", {duration: 0.5, 
				 afterFinish: function() {
			           content.update(ctn);
			           content.morph("opacity:1", {duration: 0.5})
					   }
		              });																						   
			 },
        AjustContent : function(target) {						
			var Target = target || this.Container.content;
			var container = this.ParseQueryTarget(Target);
			container.update();			
			container.update(this.resultat.Page);
		    },
	   ParseQueryTarget : function(Target) {		    
		      if ((Target.indexOf(">") == -1 )||(Target == null)) {return $(Target);}			  
			    var _target = $A(Target.gsub('>',' '));
				return $(_target[0].down('.' + _target[1]));
			   },
	    ActiveCase : function(e) {
		var element = Element.extend(e.parentNode);
		$$("li.current")[0].removeClassName("current");		
		element.addClassName("current");
		} 		   
});





Object.extend(Number.prototype, {
  snap: function(round) {
    return parseInt(round == 1 ? this : (this / round).floor() * round);
  }
});
Object.extend(String.prototype, {
  camelcase: function() {
    var string = this.dasherize().camelize();
    return string.charAt(0).toUpperCase() + string.slice(1);
  },

  makeElement: function() {
    var wrapper = new Element('div'); wrapper.innerHTML = this;
    return wrapper.down();
  }
});
Object.extend(Array.prototype, {
  empty: function() {
    return !this.length;
  },

  extractOptions: function() {
    return this.last().constructor === Object ? this.pop() : { };
  },

  removeAt: function(index) {
    var object = this[index];
    this.splice(index, 1);
    return object;
  },

  remove: function(object) {
    var index;
    while ((index = this.indexOf(object)) != -1)
      this.removeAt(index);
    return object;
  },

  insert: function(index) {
    var args = $A(arguments);
    args.shift();
    this.splice.apply(this, [ index, 0 ].concat(args));
    return this;
  }
});

Element.addMethods({
		 Wrap        : function(element,wrapper){
		   element = $(element);
		   return $(element).wrap(wrapper);		    
		 },
        boxSimpleGray : function(element){
			 element = $(element);
			 el = new Element('ul',{'id':'loader'});
			 el.Wrap(new Element('div',{'id':'BoxContent'}))
			        .Wrap(new Element('div',{'class':'Cbox'}))
					.Wrap(new Element('div',{'id':'box'}))
					.insert(new Element('div',{'class':'Ebox'})).Wrap(element);
			 return element;
		 }
		 });   

Element.addMethods({
  getScrollDimensions: function(element) {
    return {
      width:  element.scrollWidth,
      height: element.scrollHeight
    }
  },

  getScrollOffset: function(element) {
    return Element._returnOffset(element.scrollLeft, element.scrollTop);
  },

  setScrollOffset: function(element, offset) {
    element = $(element);
    if (arguments.length == 3)
      offset = { left: offset, top: arguments[2] };
    element.scrollLeft = offset.left;
    element.scrollTop  = offset.top;
    return element;
  },
  getNumStyle: function(element, style) {
    var value = parseFloat($(element).getStyle(style));
    return isNaN(value) ? null : value;
  },  appendText: function(element, text) {
    element = $(element);
    text = String.interpret(text);
    element.appendChild(document.createTextNode(text));
    return element;
  },
  clearContent : function(element) {
	  element.update();
  }
});
Element.addMethods({
	Text : function(element,text){	
	  var _text = text || '';
	  var nodes = $A(element.childNodes);
	  layer = nodes.map(Element.extend).findAll(
			  function(node){return node.nodeType==3});
      if(!layer.length) {
		  layer = [element.appendChild(document.createTextNode(_text))].map(Element.extend)};	  
	  return layer[0].nodeValue = _text;
    },
	Parent : function(element){ return Element.extend(element.parentNode);}	
});

document.whenReady = function(callback) {
  if (document.loaded)
    callback.call(document);
  else
    document.observe('dom:loaded', callback);
};

Object.extend(document.viewport, {
  getScrollOffset: document.viewport.getScrollOffsets,
  setScrollOffset: function(offset) {
    Element.setScrollOffset(Prototype.Browser.WebKit ? document.body : document.documentElement, offset);
  },

  getScrollDimensions: function() {
    return Element.getScrollDimensions(Prototype.Browser.WebKit ? document.body : document.documentElement);
  }
});

NEW6TM.UI.Options = {
    methodsAdded: function(klass) {
      klass.classMethod($w(' setOptions allOptions optionsGetter optionsSetter optionsAccessor '));
    },
    setOptions: function(options) {
      if (!this.hasOwnProperty('options'))
        this.options = this.allOptions();

      this.options = Object.extend(this.options, options || {});
    },
    allOptions: function() {
      var superclass = this.constructor.superclass, ancestor = superclass && superclass.prototype;
      return (ancestor && ancestor.allOptions) ?
          Object.extend(ancestor.allOptions(), this.options) :
          Object.clone(this.options);
    },
    optionsGetter: function() {
      addOptionsAccessors(this, arguments, false);
    },
    optionsSetter: function() {
      addOptionsAccessors(this, arguments, true);
    },
    optionsAccessor: function() {
      this.optionsGetter.apply(this, arguments);
      this.optionsSetter.apply(this, arguments);
    }
  };
  

