//(function() {	// begin anonymous function
var $U=YAHOO.util;
var $D=$U.Dom;
var $E=$U.Event;
var $C=$U.Connect;

// ======================== AUTOTAB ===========================
var isNN = (navigator.appName.indexOf("Netscape")!=-1);
function autoTab(input,len, e) {
	var keyCode = (isNN) ? e.which : e.keyCode; 
	var filter = (isNN) ? [0,8,9] : [0,8,9,16,17,18,37,38,39,40,46];
	if(input.value.length >= len && !containsElement(filter,keyCode)) {
	input.value = input.value.slice(0, len);
	input.form[(getIndex(input)+1) % input.form.length].focus();
	}
function containsElement(arr, ele) {
	var found = false, index = 0;
	while(!found && index < arr.length)
	if(arr[index] == ele)
	found = true;
	else
		index++;
		return found;
	}
function getIndex(input) {
	var index = -1, i = 0, found = false;
	while (i < input.form.length && index == -1)
	if (input.form[i] == input)index = i;
	else i++;
	return index;
	}
	return true;
}

// ======================== DROPDOWN MENUS ====================
initNavDD = function() {
	var li = $D.getElementsByClassName('submenu','LI');
	if (!li) return;
	for (var i=0; i<li.length; i++) {
		$E.addListener(li[i],'mouseover',function() { $D.addClass(this,'over'); });
		$E.addListener(li[i],'mouseout',function() { $D.removeClass(this,'over'); });
	} // end for
}


// ======================== LIGHTBOX ==========================
var loadingImage='http://www.cozyclosets.com/images/lightbox_loading.gif';
var closeButton='http://www.cozyclosets.com/images/lightbox_close.gif';
function getPageScroll(){var yScroll;if(self.pageYOffset){yScroll=self.pageYOffset;}else if(document.documentElement&&document.documentElement.scrollTop){yScroll=document.documentElement.scrollTop;}else if(document.body){yScroll=document.body.scrollTop;}
arrayPageScroll=new Array('',yScroll)
return arrayPageScroll;}
function getPageSize(){var xScroll,yScroll;if(window.innerHeight&&window.scrollMaxY){xScroll=document.body.scrollWidth;yScroll=window.innerHeight+window.scrollMaxY;}else if(document.body.scrollHeight>document.body.offsetHeight){xScroll=document.body.scrollWidth;yScroll=document.body.scrollHeight;}else{xScroll=document.body.offsetWidth;yScroll=document.body.offsetHeight;}
var windowWidth,windowHeight;if(self.innerHeight){windowWidth=self.innerWidth;windowHeight=self.innerHeight;}else if(document.documentElement&&document.documentElement.clientHeight){windowWidth=document.documentElement.clientWidth;windowHeight=document.documentElement.clientHeight;}else if(document.body){windowWidth=document.body.clientWidth;windowHeight=document.body.clientHeight;}
if(yScroll<windowHeight){pageHeight=windowHeight;}else{pageHeight=yScroll;}
if(xScroll<windowWidth){pageWidth=windowWidth;}else{pageWidth=xScroll;}
arrayPageSize=new Array(pageWidth,pageHeight,windowWidth,windowHeight)
return arrayPageSize;}
function pause(numberMillis){var now=new Date();var exitTime=now.getTime()+numberMillis;while(true){now=new Date();if(now.getTime()>exitTime)
return;}}
function getKey(e){if(e==null){keycode=event.keyCode;}else{keycode=e.which;}
key=String.fromCharCode(keycode).toLowerCase();if(key=='x'){hideLightbox();}}
function listenKey(){document.onkeypress=getKey;}
function showLightbox(objLink)
{var objOverlay=document.getElementById('overlay');var objLightbox=document.getElementById('lightbox');var objCaption=document.getElementById('lightboxCaption');var objImage=document.getElementById('lightboxImage');var objLoadingImage=document.getElementById('loadingImage');var objLightboxDetails=document.getElementById('lightboxDetails');var objPrintImg=document.getElementById('print-image');var arrayPageSize=getPageSize();var arrayPageScroll=getPageScroll();if(objLoadingImage){objLoadingImage.style.top=(arrayPageScroll[1]+((arrayPageSize[3]-35-objLoadingImage.height)/2)+'px');objLoadingImage.style.left=(((arrayPageSize[0]-20-objLoadingImage.width)/2)+'px');objLoadingImage.style.display='block';}
objOverlay.style.height=(arrayPageSize[1]+'px');objOverlay.style.display='block';imgPreload=new Image();imgPreload.onload=function(){objImage.src=objLink.href;var lightboxTop=arrayPageScroll[1]+((arrayPageSize[3]-35-imgPreload.height)/2);var lightboxLeft=((arrayPageSize[0]-20-imgPreload.width)/2);objLightbox.style.top=(lightboxTop<0)?"0px":lightboxTop+"px";objLightbox.style.left=(lightboxLeft<0)?"0px":lightboxLeft+"px";objLightboxDetails.style.width=imgPreload.width+'px';if(objLink.getAttribute('title')){objCaption.style.display='block';objCaption.innerHTML=objLink.getAttribute('title');}else{objCaption.style.display='none';}
if(navigator.appVersion.indexOf("MSIE")!=-1){pause(250);}
if(objLoadingImage){objLoadingImage.style.display='none';}
selects=document.getElementsByTagName("select");for(i=0;i!=selects.length;i++){selects[i].style.visibility="hidden";}
objPrintImg.href = objLink.href;objLightbox.style.display='block';arrayPageSize=getPageSize();objOverlay.style.height=(arrayPageSize[1]+'px');listenKey();return false;}
imgPreload.src=objLink.href;}
function hideLightbox()
{objOverlay=document.getElementById('overlay');objLightbox=document.getElementById('lightbox');objOverlay.style.display='none';objLightbox.style.display='none';selects=document.getElementsByTagName("select");for(i=0;i!=selects.length;i++){selects[i].style.visibility="visible";}
document.onkeypress='';}
function initLightbox()
{if(!document.getElementsByTagName){return;}
var anchors=document.getElementsByTagName("a");for(var i=0;i<anchors.length;i++){var anchor=anchors[i];if(anchor.getAttribute("href")&&(anchor.getAttribute("rel")=="lightbox")){anchor.onclick=function(){showLightbox(this);return false;}}}
var objBody=document.getElementsByTagName("body").item(0);var objOverlay=document.createElement("div");objOverlay.setAttribute('id','overlay');objOverlay.onclick=function(){hideLightbox();return false;}
objOverlay.style.display='none';objOverlay.style.position='absolute';objOverlay.style.top='0';objOverlay.style.left='0';objOverlay.style.zIndex='90';objOverlay.style.width='100%';objBody.insertBefore(objOverlay,objBody.firstChild);var arrayPageSize=getPageSize();var arrayPageScroll=getPageScroll();var imgPreloader=new Image();imgPreloader.onload=function(){var objLoadingImageLink=document.createElement("a");objLoadingImageLink.setAttribute('href','#');objLoadingImageLink.onclick=function(){hideLightbox();return false;}
objOverlay.appendChild(objLoadingImageLink);var objLoadingImage=document.createElement("img");objLoadingImage.src=loadingImage;objLoadingImage.setAttribute('id','loadingImage');objLoadingImage.style.position='absolute';objLoadingImage.style.zIndex='1050';objLoadingImageLink.appendChild(objLoadingImage);imgPreloader.onload=function(){};return false;}
imgPreloader.src=loadingImage;var objLightbox=document.createElement("div");objLightbox.setAttribute('id','lightbox');objLightbox.style.display='none';objLightbox.style.position='absolute';objLightbox.style.zIndex='1000';objBody.insertBefore(objLightbox,objOverlay.nextSibling);var objLink=document.createElement("a");objLink.setAttribute('href','#');objLink.setAttribute('title','Click to close');objLink.onclick=function(){hideLightbox();return false;}
objLightbox.appendChild(objLink);var imgPreloadCloseButton=new Image();imgPreloadCloseButton.onload=function(){var objCloseButton=document.createElement("img");objCloseButton.src=closeButton;objCloseButton.setAttribute('id','closeButton');objCloseButton.style.position='absolute';objCloseButton.style.zIndex='1200';objLink.appendChild(objCloseButton);return false;}
imgPreloadCloseButton.src=closeButton;var objImage=document.createElement("img");objImage.setAttribute('id','lightboxImage');objLink.appendChild(objImage);var objLightboxDetails=document.createElement("div");objLightboxDetails.setAttribute('id','lightboxDetails');objLightbox.appendChild(objLightboxDetails);var objCaption=document.createElement("div");objCaption.setAttribute('id','lightboxCaption');objCaption.style.display='none';objLightboxDetails.appendChild(objCaption);var objPrintImg = document.createElement("a");objPrintImg.setAttribute('id','print-image');objPrintImg.setAttribute('style','display:block;clear:both;');objPrintImg.innerHTML = '<img src="/images/icons/little_icon_print.gif" /> View Printable Version';var objKeyboardMsg=document.createElement("div");objKeyboardMsg.setAttribute('id','keyboardMsg');objKeyboardMsg.innerHTML='click on picture or press <a href="#" onclick="hideLightbox(); return false;"><kbd>x</kbd></a> to close';objLightboxDetails.appendChild(objKeyboardMsg);objLightboxDetails.appendChild(objPrintImg);}
function addLoadEvent(func)
{var oldonload=window.onload;if(typeof window.onload!='function'){window.onload=func;}else{window.onload=function(){oldonload();func();}}}


// ============================== TOOLTIP ============================
/* 
 *  Function to display preview items in a window overlay
 *  Params: 
 *    url - path to the ajax file
 *    target - id of the target element to pass as parameter to file
 */
var tooltip = function() {

	var container = YAHOO.util.Dom.get('tooltip');
	var self = this;

	function findPos(e){
		var x = (e||event).clientX;
		var y = (e||event).clientY;
		if (document.documentElement.scrollTop > 0) {
			y = y + document.documentElement.scrollTop;
		}
		//console.log("X is " + x + "\nY is " + y);
		return [x,y]
	}	

    function show(e,obj) {
		YAHOO.util.Event.stopEvent(e);
		if (e) var target = $E.getTarget(e);
		//var coords = YAHOO.util.Dom.getXY(target);
		var coords = findPos(e);
		var x = parseInt(coords[0],10)-125;
		var y = parseInt(coords[1],10)-100;
		container.style.top = y+"px";
		container.style.left = x+"px";

		if (!self.rtext) {
			container.innerHTML = "loading...";
		
			var id = obj.target.id;
			var success = function(t){onSuccess(t);}
			var failure = function(t){onFail(t);}
			
			var url = obj.url;
			var pars = 'id='+id;
			var myAjax = YAHOO.util.Connect.asyncRequest('post', url, {success:success, failure:failure},pars);
			
			autoClose();
		} else {
			container.innerHTML = self.rtext;
			container.style.display = 'block';
		}	
    }
    
    function onSuccess(o){
		container.innerHTML = o.responseText;
		self.rtext = o.responseText;
        container.style.display = 'block';		
    }
    
    function onFail(o){
		container.innerHTML = 'Sorry, the update failed.';
        container.style.display = 'block';
    }  
	
	// attach event to close container on click
	function autoClose() {
		var body = document.getElementsByTagName('BODY')[0];
		YAHOO.util.Event.addListener(body,'click',
			function(e) {
				var target = YAHOO.util.Event.getTarget(e);
	            do{
	                    if(target.nodeName == "DIV")
	                    {
	                            if (target.id == "tooltip")
	                            {
	                                    return;
	                            }
	                    }
	                    target = target.parentNode;
	            }
	            while(target.nodeName != "HTML")
				container.style.display = 'none';
			}
		);       
	}
	
	return {
		show : show
	}
}

// ========================= COZY CALENDAR ======================
var aCals = new Array;
YAHOO.namespace("CozyClosets.Calendar");
YAHOO.CozyClosets.Calendar = function(input,img,div) {
	// set up date
	this.today = new Date();
	var thisMonth = this.today.getMonth()+1;
	var thisDay = this.today.getDate();
	var thisYear = this.today.getFullYear();
	var self = this;
	var id = $D.generateId();
	var id2 = $D.generateId();
	div.id = id2;
	
	// add events
	$E.addListener(input,'change',changeDate);
	$E.addListener(img,'click',showCalendar);

	var cal = new YAHOO.widget.Calendar(id,div.id,thisMonth+"/"+thisYear,thisMonth+"/"+thisDay+"/"+thisYear);
	cal.title = "Select your start date:";
	cal.iframe = true;
	cal.onSelect = setDate;
	//cal.render();
	
	var begin = input.value;
	var barr = begin.split("/");
	var month = barr[0];
	var day = barr[1];
	var year = barr[2];
	cal.select(month + "/" + day + "/" + year);
	cal.setMonth(month-1);			
	cal.setYear(year);
    hideCalendar();
	cal.render();


	function hideCalendar() {
		cal.oDomContainer.style.display='none';
	}
	
	function showCalendar(e) {
		$E.stopEvent(e);
		cal.oDomContainer.style.display='block';
	}
	
	function setDate() {
		var date = cal.getSelectedDates()[0];
		var begin =  (date.getMonth()+1) + "/" + date.getDate() + "/" + date.getFullYear();
		input.value = begin;
		hideCalendar();
	}
	
	function changeDate() {
		var value = input.value;
		var arr = value.split("/");
		var month = arr[0];
		var day = arr[1];
		var year = arr[2];
		cal.select(month + "/" + day + "/" + year);
		cal.setMonth(month-1);			
		cal.setYear(year);
		cal.render();
		hideCalendar();
	}
	
	// attach event to close calendar on click
	var autoClose = function() {
		var body = document.getElementsByTagName('BODY')[0];
		YAHOO.util.Event.addListener(body,'click',
			function(e) {
				var target = YAHOO.util.Event.getTarget(e);
	            do{
	                    if(target.nodeName == "DIV")
	                    {
	                            if (target.id==id2)
	                            {
	                                    return;
	                            }
	                    }
	                    target = target.parentNode;
	            }
	            while(target.nodeName != "HTML")
				hideCalendar();
			}
		);
	}();

}

// load calendar instances
function initCozyCalendars() {
	var aLabels = $D.getElementsByClassName('calInit','div');
	if (!aLabels) return;
	for (var i=0, ln=aLabels.length; i<ln; i++)
	{
		// get input and image box
		var aInput = aLabels[i].getElementsByTagName('INPUT')[0];
		var aImg = aLabels[i].getElementsByTagName('IMG')[0];
		var aDiv = aLabels[i].getElementsByTagName('DIV')[0];
		aCals[i] = new YAHOO.CozyClosets.Calendar(aInput,aImg,aDiv);		
	} // end for
}



// ========================== FORM VALIDATION =======================
function checkform ( form )
{
  if (form.fname) { 
   if (form.fname.value == "") {
    alert( "Please enter your first name." );
    form.fname.focus();
	if (document.getElementById("formSubmit")) { document.getElementById("formSubmit").value = "send"; }
    return false ;
   }
  }
  if (form.lname) {
   if (form.lname.value == "") {
    alert( "Please enter your last name." );
    form.lname.focus();
	if (document.getElementById("formSubmit")) { document.getElementById("formSubmit").value = "send"; }
    return false ;
   }
  }
  if (form.city) { 
   if (form.city.value == "") {
    alert( "Please enter your city." );
    form.city.focus();
	if (document.getElementById("formSubmit")) { document.getElementById("formSubmit").value = "send"; }
    return false ;
   }
  } 
  if (form.state) {
   if (form.state.value == "select") {
    alert( "Please enter your state." );
    form.state.focus();
	if (document.getElementById("formSubmit")) { document.getElementById("formSubmit").value = "send"; }
    return false ;
   }
  } 
  if (form.zip) {
   if (form.zip.value == "") {
    alert( "Please enter your zip code.." );
    form.zip.focus();
	if (document.getElementById("formSubmit")) { document.getElementById("formSubmit").value = "send"; }
    return false ;
   }
  } 
  return true ;
}

function initFormValidation() {
	if (document.getElementById('formSubmit')) {
	  var x = document.getElementById('formSubmit');
	  x.onclick = function() { return doSubmit(); }
	}
}

// Single-submit and "loading" button for login form
oneClick = 1;
function doSubmit() {
	if (oneClick == 1) {
		oneClick = 0;
		if (document.getElementById) {
		 document.getElementById("formSubmit").value = "sending...";
		 setTimeout('oneClick=1;', 8000);
		}
			return true;
		} else {
			return false;
		}
}

/* ================== TABLE SORT ================= */
var tableSort = {

    init : function() {
    	// attach events to sort columns in project table list
    	var table = $D.getElementsByClassName('sort','TABLE')[0];
    	if (!table) { return }
    	var th = table.getElementsByTagName('TH');
        if (table.id) { tableid = table.id } else { tableid = $D.generateId(table); }
    	if (!th) { return }
    	var tln = th.length;
    	
    	for (var i=0; i<tln; i++) {
    	       var params = {
    	               tableID : tableid,
    	               iCol : parseInt(i),
    	               sDataType : th[i].getAttribute('type')
    	       }
    	       YAHOO.util.Event.addListener(th[i],'click',tableSort.sortTable,params);
    	       YAHOO.util.Event.addListener(th[i],'mouseover',function() { this.style.color = '#264482'; this.style.cursor = 'pointer'; });
    	       YAHOO.util.Event.addListener(th[i],'mouseout', function() { this.style.color = '#000000'; });
               
               // sort table if url hash exists
               /*var temp = null;
               if (location.hash == ("#"+params.iCol)) {
                    sortTable(temp,params);
               }*/
    	}
    },

    convert : function(sValue, sDataType)
    {
    
        if (sValue == null)
    	{
    	       return '';
    	}
    
    	if (sDataType == "number")
    	{
    		return parseFloat(sValue);
    	}
    	else if (sDataType == "date")
    	{
    		return (isNaN(Date.parse(sValue)) ? 0 : Date.parse(sValue));
    	}
    	else
    	{
    	    return sValue.toString();
    	}
    },
    
    
    generateCompareTRs : function(iCol, sDataType) {
    	return function compareTRs(oTR1,oTR2) {
    	       if (sDataType == 'html')
    	       {
    	               var vValue1 = tableSort.convert(oTR1.cells[iCol].lastChild.firstChild.nodeValue,sDataType);
    	               var vValue2 = tableSort.convert(oTR2.cells[iCol].lastChild.firstChild.nodeValue,sDataType);
    	       } 
    	       else 
    	       {
    	               var vValue1 = tableSort.convert(oTR1.cells[iCol].firstChild.nodeValue,sDataType);
    	               var vValue2 = tableSort.convert(oTR2.cells[iCol].firstChild.nodeValue,sDataType);         
    	       }
    	       
    	       if (vValue1 < vValue2)
    	       {
    	               return -1;
    	       } 
    	       else if (vValue1 > vValue2)
    	       {
    	               return 1;
    	       } 
    	       else 
    	       {
    	               return 0;
    	       }               
    	};
    },
    
    
    sortTable : function(e,obj) {
    	// vars
    	if (!obj) { return }
    	var tableID = obj.tableID;
    	var iCol = obj.iCol;
    	var sDataType = obj.sDataType;
        if (!sDataType) sDataType = 'string';
        
        var table = $D.get(tableID);
    	var tbody = table.tBodies[0];
    	var rows = tbody.rows;
    	var aTRs = new Array;
    	
    	for (var i=0; i<rows.length; i++) {
    	       aTRs[i] = rows[i];
    	}

    	if (table.sortCol == iCol) {
    	       aTRs.reverse();
    	} else { 
    	       aTRs.sort(tableSort.generateCompareTRs(iCol, sDataType));
    	}
    	
    	var fragment = document.createDocumentFragment();
    	for (var i=0; i<aTRs.length; i++) {
    	       fragment.appendChild(aTRs[i]);
    	}
    	tbody.appendChild(fragment);
    	table.sortCol = iCol;
        
        // add #(col id) to url
        //location.hash = iCol;
    }
}

    
/* ================== UPDATE NOTES ================= */
var updateNotes = function() {

    var container = document.getElementById('update_notes');
    var oldcontent = container.innerHTML;
	var anchor = container.getElementsByTagName('a')[0];
    // get form elements
    var order_id;
    var content;
    var da;

    function edit(e, obj) {
		container.innerHTML = oldcontent;
		// get form elements
		order_id = document.update_notes.notes_order_id;
		content = document.update_notes.notes_content;
		da = document.update_notes.notes_da;	
        order_id.value = obj.id
		
		// create/append "view all notes" link
        var anchor = document.createElement('a');
        anchor.href = '#';
        var text = document.createTextNode('View All Notes');
        //var href = 'notelogs.php?orderid='+obj.id;
        var href = 'orders.php?order_id='+obj.id;
        anchor.appendChild(text);
        container.getElementsByTagName('form')[0].appendChild(anchor);
        $E.addListener(anchor,'click',function(e) { $E.preventDefault(e); window.open(href,'NotesLog', 'width=800, height=600,scrollbars=yes, resizable=yes, location=yes'); });
        
        // set x,y for container and show it
        var coords = $D.getXY(obj);
        //var x = parseInt(coords[0],10);
        var x = 180; // subtract the width to move the container to the left
        var y = parseInt(coords[1],10);
        container.style.top = y+"px";
        container.style.left = x+"px";
        container.style.display = 'block';
        autoClose();
        
        // save event
        $E.addListener(document.update_notes,'submit',save);
        
        $E.stopEvent(e); 
    }
    
    function save(e) {
        $E.stopEvent(e);
        
        // get values from form elements
        id = order_id.value;
        data = content.value;
        da = da.value;
        if (data == '') { alert('Please enter an order note.'); content.focus(); return false; }
		
		container.innerHTML = "saving...";
		
		var success = function(t){onSuccess(t);}
		var failure = function(t){onFail(t);}
		
		var url = '/admin/scripts/update_notes_xhr.php';
		var pars = 'order_id='+id+'&da=' + da + '&content='+data;
		var myAjax = $C.asyncRequest('post', url, {success:success, failure:failure},pars);
    }
    
    function onSuccess(t){
		container.innerHTML = t.responseText;
    }
    
    function onFail(t){
		container.innerHTML= 'Sorry, the update failed.';
    }    
    
	// attach event to close container on click
	function autoClose() {
		var body = document.getElementsByTagName('BODY')[0];
		YAHOO.util.Event.addListener(body,'click',
			function(e) {
				var target = YAHOO.util.Event.getTarget(e);
	            do{
	                    if(target.nodeName == "DIV")
	                    {
	                            if (target.id == "update_notes")
	                            {
	                                    return;
	                            }
	                    }
	                    target = target.parentNode;
	            }
	            while(target.nodeName != "HTML")
				container.style.display = 'none';
                container.innerHTML = oldcontent; 
			}
		);       
	}
    
    
    return {
        edit : edit
    }
} // end update notes

/* ====================== UPDATE NOTES ===================== */
function initUpdateNotes() {
    var aNotes = $D.getElementsByClassName('update_notes','a');
    if (!aNotes) { return }
    var nln = aNotes.length;
    for (var i=0; i<nln; i++) {
		var notes = new updateNotes;
        $E.addListener(aNotes[i],'click',notes.edit,aNotes[i]);
    }
}

/* ====================== ORDER PREVIEW =================== */
function initOrderPreview() {
    var img = $D.getElementsByClassName('tooltip','img');
    if (!img) { return }
    
    // create tooltip div
    var div = document.createElement('DIV');
    div.id = "tooltip";
    document.getElementById('wrapper').appendChild(div);
    
    var iln = img.length;
    for (var i=0; i<iln; i++) {
		var tt = new tooltip;
		var params = {
			url : '/admin/scripts/order_preview_xhr.php',
			target : img[i]
		};
        $E.addListener(img[i],'click',tt.show, params);
    }
}

/* ====================== SERVICE CALL NOTES =================== */
function initServiceCallNotes() {
    var img = $D.getElementsByClassName('sc_notes','img');
    if (!img) { return }
    
    // create tooltip div
    var div = document.createElement('DIV');
    div.id = "tooltip";
    document.getElementById('wrapper').appendChild(div);
    
    var iln = img.length;
    for (var i=0; i<iln; i++) {
		var tt = new tooltip;
		var params = {
			url : '/admin/scripts/service_call_notes.php',
			target : img[i]
		};
        $E.addListener(img[i],'click',tt.show, params);
    }
}

// ======================== LOAD OBJECTS ============================
$E.addListener(window,"load", 
    function() {
        initNavDD();        		// load drop down menus
        initFormValidation();     		// load form validation
        initCozyCalendars();        		// load calendars
        initLightbox();   		// load lightbox
		initUpdateNotes();		// load update notes
		initOrderPreview();		// load order preview tooltip
		initServiceCallNotes()  // load service call notes
        tableSort.init();
    }
);
//})();	// end anonymous function