/**
cd C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\
java -jar minify.jar include/SITE.js -o include/SITE-min.js
*/


/* Declare namespaces */
if (typeof SITE == "undefined" || !SITE) {
    var SITE = {};
}

SITE.namespace = function() {
    var a=arguments, o=null, i, j, d;
    for (i=0; i<a.length; i=i+1) {
        d=a[i].split(".");
        o=SITE;

        // SITE is implied, so it is ignored if it is included
        for (j=(d[0] == "SITE") ? 1 : 0; j<d.length; j=j+1) {
            o[d[j]]=o[d[j]] || {};
            o=o[d[j]];
        }
    }

    return o;
};

SITE.namespace("form");

//SITE.page = {};
SITE.namespace("page");
SITE.namespace("page.Sell");

SITE.page.admin = {};
SITE.namespace("admin");
SITE.namespace("admin.page");

SITE.namespace("env");

SITE.env = function(){
    
    var URL = null; 
    var page = null;
    var homePage = null;
    
    return{

        setURL : function(URLToSet){
            URL = URLToSet;
        },
        
        getURL : function(){
            return URL;
        },
        
        setPage : function(Page){
            page = Page;
        },
        
        getPage : function(){
            return page;
        },  
    
        setHomePage : function(HomePage){
            homePage = HomePage;
        },
        
        getHomePage : function(){
            return homePage;
        }    
                
    };
    
}();

SITE.namespace("env.ua");
SITE.env.ua = function(){
    
    var URL = null; 
    
    return{
        
        isSafari : function(){
            return 0 != YAHOO.env.ua.webkit;
        },
        
        isMobile : function(){
            return 0 != YAHOO.env.ua.mobile;        
        },
        
        isFirefox : function(){
            return 0 != YAHOO.env.ua.gecko;        
        }, 
        
        isOpera : function(){
            return 0 != YAHOO.env.ua.opera;        
        },               
        
        isIE : function(){
            return 0 != YAHOO.env.ua.ie;        
        },
        
        ieVersion : function(){
            return YAHOO.env.ua.ie;
        },
        
        mobileVersion : function(){
            return YAHOO.env.ua.mobile;
        },
        
        firefoxVersion : function(){
            return YAHOO.env.ua.gecko;
        },        
        
        operaVersion : function(){
            return YAHOO.env.ua.opera;
        },        
        
        safariVersion : function(){
            return YAHOO.env.ua.webkit;
        }        
        
    };
    
}();

//SITE.util = {};
SITE.namespace("util");
SITE.namespace("util.Dom");


SITE.util.Dom = function(){

      var keyHandler = null;
      
      var _turnButtonOffHandler = function(msg){
         return function(e){
             try{
                if(msg!=null){
                   SITE.widget.alertBox(msg);
                }
                YAHOO.util.Event.stopEvent(e);
             }
             catch(err){
                alert(err + '44');
             }
         };
      };
      
    var _highlightButton = function(button){
      //  YAHOO.util.Dom.setStyle(button, "color", "#84C84D");
//        YAHOO.util.Dom.setStyle(button, "font-weight", "bold");
       // var fadeInOutHandler =  SITE.util.Anim.fadeInOut(button);
        //fadeInOutHandler();        
    };
      
     var _turnButtonOnHandler = function(form, callback){
         return function(e){
              try{
                 YAHOO.util.Event.stopEvent(e);
                 if(callback!=null){
                    callback();
                 }
                 else if(form!=null){
                    form.submit();
                 }
	          }
	          catch(err){
	             alert(err);
	          }               
         };
      };
      
      /* Public methods and variables */
      return {

	      appendChild : function(parentEl, childEl){
	         parentEl.appendChild(childEl);
	         return this;
	      },
	      
	      tagFunc : function(tag){
	         try{
		         return function(){
		             var attrs, children;
		             if(arguments.length > 0){
		                 if(arguments[0].nodeName || typeof arguments[0] == "string"){
		                     children = arguments;
		                 }
		                 else{
		                     attrs = arguments[0];
		                     children = Array.prototype.slice.call(arguments,1);
		                 };
		             }
		             return SITE.util.Dom.create(tag, attrs, children);
		         };
	         }
	         catch(err){
	             alert(err + " Dom tagFunc()");
	         }
	      },
	      
	      create : function(tag, attrs, children){
	         try{
	             attrs = attrs || {};
	             children = children || {};
	             var el = document.createElement(tag);
	             var attrName = null;
	             for(var attr in attrs){
	                attrName = attr;
	                if(attrName.substr(0,1)=="_"){
	                   attrName = attrName.substr(1);
	                }
	                el.setAttribute(attrName, attrs[attr].toString());
                   
	             }
	             for(var i=0; i< children.length; i++){
	                if(typeof children[i]=="string"){
	                    children[i] = document.createTextNode(children[i]);
	                }
	                el.appendChild(children[i]);
	             }
	             return el;
	         }
	         catch(err){
	             alert(err + " DOM create()");
	         }
	      },	      
	        
	      turnButtonOn : function(button, form, callback){
	         try{

		        // YAHOO.util.Dom.setStyle(button, "border", "2px solid #00ff00");
		         YAHOO.util.Event.removeListener(button, "click");
	
	             _highlightButton(button);
	             
		         var turnButtonOnHandler = _turnButtonOnHandler(form, callback);
		         	         
		         // Make form submit when user hits enter.
	             if(keyHandler!=null){
	               keyHandler.disable();
	             }
	             keyHandler = new YAHOO.util.KeyListener(document, { keys:13}, 
													 { fn:turnButtonOnHandler, 
		                                                scope:button, 
		                                                correctScope:true } ); 
		         keyHandler.enable();
			     
	             YAHOO.util.Dom.setStyle(button, "color", "#000000");
	             YAHOO.util.Dom.setStyle(button, "font-weight", "bold");
		         YAHOO.util.Event.addListener(button, "click", turnButtonOnHandler);
	         
	         }
	         catch(err){
	             alert(err);
	         } 
	      },
	      
	      turnButtonOff : function(button, errMsg){
			 //YAHOO.util.Dom.setStyle(button, "border", "2px solid #cccccc");
	         // Show alert when user hits enter.
	         if(keyHandler!=null){
	            keyHandler.disable();
	         }
	         var turnButtonOffHandler = _turnButtonOffHandler(errMsg);
	         keyHandler = new YAHOO.util.KeyListener(document, { keys:13 }, 
													 { fn:turnButtonOffHandler, 
		                                                scope:button, 
		                                                correctScope:true } ); 
		     keyHandler.enable();
	         
	         YAHOO.util.Dom.setStyle(button, "color", "#2E2E2E");
	         YAHOO.util.Event.addListener(button,"click", turnButtonOffHandler);
	         
	      },
	            
	      centerEl : function(el){
		     try{
			     var winY = ((YAHOO.util.Dom.getViewportHeight()/2) - (this.getElementHeight(el)/2)) + YAHOO.util.Dom.getDocumentScrollTop() ;   
			     var winX = (YAHOO.util.Dom.getViewportWidth()/2) - (this.getElementWidth(el)/2) + YAHOO.util.Dom.getDocumentScrollLeft();
			     YAHOO.util.Dom.setStyle(el, "top", winY + "px");
			     YAHOO.util.Dom.setStyle(el, "left", winX+ "px");
		         YAHOO.util.Dom.setStyle(el, "zIndex", 1000);	   	   
			     YAHOO.util.Dom.setStyle(el, "display", "block");
			     YAHOO.util.Dom.setStyle(el, "visibility", "visible");
		     }
		     catch(err){
		        alert(err + ":Dom");
		     }  
	      },
	      
	      highlightElement : function(el){
	         YAHOO.util.Dom.setStyle(el, "border", "2px solid #ff0000");
	      },
	      
	      getElementWidth : function(elem){
			    if (elem.style.pixelWidth) {
			       xPos = elem.style.pixelWidth;
			    } 
			    else {
			      xPos = elem.offsetWidth;
			    }
			    
			    return xPos;      
	      },
	      
	      getElementHeight : function(elem){
			    if (elem.style.pixelHeight) {
			       xPos = elem.style.pixelHeight;
			    } 
			    else {
			       xPos = elem.offsetHeight;
			    }
			    return xPos;     
	      }, 
	      
	      getElementPos : function(elem){
	            //http://www.quirksmode.org/js/findpos.html
	            var curleft = curtop = 0;
	            if (elem.offsetParent) {
		            do {
						curleft += elem.offsetLeft;
						curtop += elem.offsetTop;
				    } 
				    while ( elem = elem.offsetParent);
				    return [curtop,curleft];
	            }
	            else{
	                return null;
	            }
	      
	      },
	      
	      initSelectJSON : function(sel, json, defaultVal){
	
	            try{
					if (json.length!=0 && sel!=null) {
						sel.innerHTML = "";
						// Setting option tags using innerHTML doesn't work in IE.
						for (var i=0;i<json.length;i++) {
							sel.options[i] = new Option(json[i].text,json[i].value);
							if(defaultVal == json[i].value){
							   sel.options[i].setAttribute("selected", true);
							   //sel.innerHTML += "<option selected=\"true\" value=\"" + json[i].value + "\">" + json[i].text + "</option>";
							}
							else{
							   //sel.innerHTML += "<option value=\"" + json[i].value + "\">" + json[i].text + "</option>";					
							}
						}
					}   
				}
				catch(err){
				    alert(err + " initSelectJSON");
				}     
	      }   
      }; 

}();
/* Dom self-executing support function */
(function(){
   var els = ("ol|frm|table|tr|td|img|br|span|a|h1|h2|h3|h4|h4|h6|hr|ul|li|form|label|p|fieldset|legend|option|textarea|select|form|div|input|fieldset").split("|");
   var el, i=0;
   while(el = els[i++]){
      window['$' + el]= SITE.util.Dom.tagFunc(el);
   }
})();

/* Example usage : 
li = $li({_class:'record_item'}, 
	                          $label({_for: fieldName}, cols[col].label),
	                          ($input({_class: inputType, id: fieldName, name: fieldName, type: inputType, value: ''}))); 
*/


SITE.util.Event = {

	    /**
	    * Credit: http://www.sean.co.uk/a/webdesign/javascriptdelay.shtm 
	    */
	  pause : function (millis) {
			try{
				var date = new Date();
				var curDate = null;
				do { curDate = new Date(); } 
				while(curDate-date < millis);
			}
		    catch(err){
		        alert(err + ":pause");
		    }			
	  }, 
	  
	  /** http://www.irt.org/script/1785.htm
	  */
	  stopEnter : function(){
	        return function(e){
	           if (e.keyCode == 13){
	               YAHOO.util.Event.stopEvent(e);
	           }
	        }
	  }
};



SITE.util.Connect = {

     // Example of a self-optimizing function
	 browserSupportsAjax : function(){
	      
	      //Mozilla-based browsers
	      var ret = false;
	      if(window.XMLHttpRequest){ 
	          ret = true;
	      } 
	      else if (window.ActiveXObject){ // IE
	          var request=new ActiveXObject("Msxml2.XMLHTTP");
	          if (! request){ 
	              request=new ActiveXObject("Microsoft.XMLHTTP");
	              if(request){
	                  ret = true;
	              }
	          }
	      }
          
          browserSupportsAjax = function(){return ret;};
	      
	      return browserSupportsAjax();
	      
     },
     
	 send : function(successcallback, failurecallback, uri, query, method){
	
	   try{
	        var callback =
		    {
		      success:successcallback,
		      failure:failurecallback
		    };
		
		    // Do the ajax call.
		    if(method.toUpperCase()=="GET"){
		        uri = uri+"?"+query;
		    }
		    YAHOO.util.Connect.asyncRequest(method, uri, callback, query);
	    }
	    catch(err){
	        alert(err + ': send');
	    }
	
	 }


};


SITE.util.Anim = {

	  fadeout : function(el, readtime, secs, destroy){
	      try{
	      setTimeout(
		           function(){
	                      var elAnim = new YAHOO.util.Anim(el, {opacity: {from: 10, to: 0 }}, secs, YAHOO.util.Easing.easeNone);
	                      elAnim.onComplete.subscribe(function(){
											                   if(destroy){
											                      window.document.body.removeChild(el);
											                   }
											                   else{
											                      YAHOO.util.Dom.setStyle(el, "zIndex", -999);
											                   }                      							  
	                      							       }
	                                                   );
	                      elAnim.animate();

		           },
		           readtime);
           }
           catch(err){
               alert(err + ': fadeout');
           }
	   }, 
	   

	    fadein : function(el, secs){
                try{
		            var elAnim = new YAHOO.util.Anim(el,{opacity: {from: 0, to: 10 }}, secs, YAHOO.util.Easing.easeOut);
		            //var fadeOutHandler = that.fadeout(el);
		            //elAnim.onComplete.subscribe(fadeOutHandler); 
		            elAnim.animate();
	            }
	            catch(err){
	               alert(err + ":fadein");
	            } 
	    },
	    
    fadeInOutRev : function(el){
        var that = this;
        return (function(){
	       var fadeOutHandler = that.fadeInOut(el);
           var elAnim = new YAHOO.util.Anim(el, {
	       opacity: {from: 0, to: 10 } 
	      }, 2, YAHOO.util.Easing.easeNone);
            elAnim.onComplete.subscribe(fadeOutHandler); 
            elAnim.animate(); 
	    });
    },

    fadeInOut : function(el){
        var that = this;
        return (function(){
	       var fadeInHandler = that.fadeInOutRev(el);
           var elAnim = new YAHOO.util.Anim(el, {
	       opacity: {from: 10, to: 1 } 
	      }, 1, YAHOO.util.Easing.easeNone);
	     
            elAnim.onComplete.subscribe(fadeInHandler); 
            elAnim.animate(); 
	    });
    },
    
    scrollTextHandler : function(textContainer){
        // textContainer must only contain text
        textContainer.innerHTML += ""; // Add a gap, but do it only once.
        timer = this.scrollTextTimer;
        // Need to create a closure
        return function(){
	        scrollText = function(){
	              var text = textContainer.innerHTML;
	              textContainer.innerHTML = "";
	              // Setting innerHTML doesn't work in IE
	              //textContainer.innerHTML = text.substring(1) +  text.substring(0,1);
	              textContainer.appendChild(document.createTextNode(text.substring(1) +  text.substring(0,1)));
	              if(timer){
	                  timer(textContainer);
	              }
	        }
	        scrollText();
        }
    },
    
    stopScrollTextHandler : function(textContainer){
        return function(){
            timer = null;
        }
    },    
    
	scrollTextTimer :function(textContainer){
	    var that = this;
	    setTimeout(
	       function(){
	           this.scrollText(textContainer);
	       },
	       250);
	}  
    
};

// Array object extensions
/*
if(!Array.prototype.forEach){
    Array.prototype.forEach = function(func,scope){
        scope = scope || this;
        for(var i = 0; 1 = this.length; i < 1; i++)
            func.call(scope, this[i], i, this);
         
    }
}

if(!Array.prototype.map){
    Array.prototype.map = function(func,scope){
        scope = scope || this;
        var list = [];
        for(var i = 0; 1 = this.length; i < 1; i++)
            list.push(func.call(scope, this[i], i, this));        
        return list;
    }
}

if(!Array.prototype.filter){
    Array.prototype.filter = function(func,scope){
        scope = scope || this;
        var list = [];
        for(var i = 0; 1 = this.length; i < 1; i++)
            if(func.call(scope, this[i], i, this)) list.push(this[i]);        
        return list;
    }
}

["foreach", "map", "filter", "slice", "concat"].forEach(
    function(func){
        if(!Array[func]) Array[func] = function(object){
            var newArgs = Array.prototype.slice.call(arguments,1);
            return this.prototype[func].apply(object, newArgs);
        }
    });
*/

/* Example usage:
var lis = document.getElementsByTagName("li");
Array.forEach(lis, function(li){
                      li.style.display="none";
                   }); 


*/

Function.prototype.wrap = function(wrapper){
    var __method = this;
    
    return function(){
        var args = [];
        for(var i=0; i<arguments.length;i++) args.push(arguments[i]);
        return wrapper.apply(this,[__method.bind(this)].concat(args));
    }


}
/* Example usage:
Doogle = {
   ping : function(){}
}
Doogle.ping = Doogle.ping.wrap(function(original, arg, arg2){
   console.log(arg, arg2);
   var result = original(arg, arg2);
   console.log(result);
   return result;
 });
 */
 
 
 
 
 














