/*
 *
 *
 * Copyright (c) 2007-2008 Bractus, Inc.
 * 10538 Eastborne Ave #102, Los Angeles, California, 90024, U.S.A.
 * All rights reserved.
 *
 * This software is the confidential and proprietary information of Bractus ("Confidential Information").
 * You shall not disclose such Confidential Information and shall use it only in
 * accordance with the terms of the license agreement you entered into
 * with Bractus.
 */
if (typeof suntrack == "undefined") {
    var suntrack = {};
}

YAHOO.namespace("suntrack");
var Dom = YAHOO.util.Dom;
/**
Message: Message String
Type: Error, Worrning, Message
*/
suntrack.showMessage=function(message, type){
	$j('#general_message').html(message+ ' <a href="#" id="close_message">Close</a>').show('slow');
	$j('#close_message').click(function(){$j('#general_message').hide('slow')});
	if (type) YAHOO.util.Dom.setStyle('general_message', 'color', 'red');

}
var hideElemets = function(){
	var items = $j('#disabled_ids').text().split(',');
			for (var i=0; i<items.length; i+=1) {
			    $j('#'+items[i]).hide();
	}
}
$j(document).ready(
	function (){
		$j(':text:visible:enabled:first').focus();
		hideElemets();
		var documentWidth = $j(document).width();
		if(documentWidth<900){
			$j('body').addClass('smallScreenFont');
			$j('.yui-gf .yui-u').css({'width':'86%'});
		}
	}
);

// BEGIN PHOTOBOX SUBCLASS //
suntrack.PasswordBox = function(el, userConfig) {
	if (arguments.length > 0) {
		suntrack.PasswordBox.superclass.constructor.call(this, el, userConfig);
	}
}

// Inherit from YAHOO.widget.Panel
YAHOO.extend(suntrack.PasswordBox, YAHOO.widget.Dialog);

// Define the CSS class for the PhotoBox
//suntrack.PasswordBox.CSS_passwordbox = "passwordbox";


// Initialize the PhotoBox by setting up the footer navigation
suntrack.PasswordBox.prototype.init = function(el, userConfig) {
	suntrack.PasswordBox.superclass.init.call(this, el);

	this.beforeInitEvent.fire(suntrack.PasswordBox);

	//YAHOO.util.Dom.addClass(this.innerElement, suntrack.PasswordBox.CSS_passwordbox);

	if (userConfig) {
		this.cfg.applyConfig(userConfig, true);
	}



};

// Set up the PhotoBox's "photos" property for setting up the list of photos
suntrack.PasswordBox.prototype.initDefaultConfig = function() {
	suntrack.PasswordBox.superclass.initDefaultConfig.call(this);


};



/*
updates user preferences
*/

function updatePreferences(perference){

	var perfAsJSON = YAHOO.lang.JSON.stringify(perference);


	var url = 'ajaxSecurity.html?action=updatePerference&empty=true';//+'&perference='+perfAsJSON;
	url = encodeURI(url);

	YAHOO.util.Connect.asyncRequest('POST', url,
                    {success: handleSuccess, failure: handleFailure},encodeURI('perference='+perfAsJSON));
    function handleSuccess(o){

	};

	function handleFailure(o){
		alert('error' +o.status + " " + o.statusText);
	};
}
Date.prototype.parse = function (string) {

    var d = string.match(/^(\d{1,2})(\:)(\d{1,2})(\s)(\d{1,2})(\/)(\d{1,2})(\/)(\d{2,4})$/i);
    //if (!d) d = string.match(/^(\d{1,2})(\:)(\d{1,2})(\s)(\d{1,2})(\/)(\d{1,2})(\/)(\d{1,2})$/i);
	if (!d) d = string.match(/^(\d{1,2})(\:)(\d{1,2})$/i);
	if (!d) return this;


    var date = new Date();

    if (d[5]) { date.setMonth(d[5]-1); }
    if (d[7]) { date.setDate(d[7]); }
    if (d[1]) { date.setHours(d[1]); }
    if (d[3]) { date.setMinutes(d[3]); }
    if (d[9]) { if (d[9].length==2) d[9]='20'+d[9];
    			date.setYear(d[9]);
    		   }

    time = Number(date) ;
    this.setTime(Number(time));
}
/*
Add minutes to existing date
It parse value of date from control.
*/
function addMinute(control, minutes){
		var aDate = new Date();
		aDate.parse(Dom.get(control).value);
		if (!aDate) return null;
		aDate.setMinutes(aDate.getMinutes()+minutes);
		return aDate;
}

/*
Change selected option for <select> tag
*/
function changeSelectedOption(control, option){

	$j(control +' option').each(function() {
		if (this.value == option){
			this.selected='selected';
		}
	});
}

/*
Generic Calendar popup
config:
	id-> 'id of calendar'
	calContainer-> name of div
	image-> id of image when click to show calendar

*/
function genericCalendar(event,config) {
		var showCalendar = function (event, calendar){
			calendar.show();
		};

		aCal = new YAHOO.widget.Calendar(config.calId,config.calContainer, { title:"Choose a date:", close:true } );
    	aCal.render();
    	YAHOO.util.Event.addListener(config.image, 'click', showCalendar, aCal, true);

    	aCal.selectEvent.subscribe(selectHandlerClient, aCal, true);


    	function selectHandlerClient(type,args,cal) {
    		 var dates = args[0];
		   	 var date = dates[0];
		   	 var year = ''+date[0];

		   	 var date_str =date[1]+'/'+ date[2]+'/'+ year.substring(2,4);

		   	 Dom.get(config.target).value=date_str;

		   	 cal.hide();
    	}

	}



	var handleFailure = function(o){
				alert('error' +o.status + " " + o.statusText);
			};


/*
	By selecting time and from <select and <option populates date input fields
	*/
	function setOrderTime(event, control){

		if (this.id.indexOf('hour')!=-1){
			if ($j(control).val().indexOf(":")==0 || $j(control).val().indexOf(" ")==0)
				$j(control).val(this.value+$j(control).val().substring(0));
			else
				$j(control).val( this.value+$j(control).val().substring(2));
		}
		else {
			if ($j(control).val().indexOf(":")!=-1)
				$j(control).val( $j(control).val().substring(0,2)+":"+this.value +$j(control).val().substring(5));
			else
				$j(control).val( $j(control).val().substring(0,2)+":"+this.value +$j(control).val().substring(2));
		}
		if (($j(control).val().length<6 && $j(control).val().length>3) || $j(control).val().length>9){
		  	changeTimeColor(event, control);
		}
	}
	/*
	Change color of time based on past:'red', near future:'orange' and future:'green'
	*/
	function changeTimeColor(event, control){
	/*
		var dateInput = $j(control);
		if (dateInput.value=='' || dateInput.disabled) return;

		var orderDate = new Date();

		orderDate.parse(dateInput.val());
		var nowDate = new Date();

		if (orderDate.getTime() < nowDate.getTime()){
			dateInput.css("color","red");
			return;
		}

		nowDate.setTime(nowDate.getTime()+1000000); // a few minutes

		if (orderDate.getTime() < nowDate.getTime()){
			dateInput.css("color",'orange');
		}
		else{
			dateInput.css("color",'green');
		}*/
	}
/*
Change date string to date format e.g today
*/
	function dateComplete(e){

		var input  = YAHOO.util.Event.getTarget(e);
		var text = "#"+input.id+'Text';

		if (input.value.length > 0) {
					date = Date.parse(input.value);
					if (date !== null) {


						input.value = date.toString("MM/dd/yyyy");
						if (Dom.get(input.id+'Text')) {
							$j(text).html(date.toString("dddd, MMMM dd, yyyy"));
							$j(text).effect("highlight");
						}
					} else {
						if (Dom.get(input.id+'Text')) {
							$j(text).html("")
						}

					}
		} else {
			//date_string.text(empty_string).addClass("empty");
		}
	}

/*
Make form read-only for example for completed orders.
*/
function makeElementsReadOnly(elements, flag){
  		for ( var i=0, len=elements.length ; i<len ; i++ ) {
	        var input = elements[i];
	        if (input.value!='Cancel' && input.id!='orderNote' && input.name!='_flowExecutionKey')
		        input.disabled=flag;

	    }
  	}
function makeFormReadOnly(readonly){

		var flag = readonly || true;
		if (readonly==false) flag=false;

		var inputs = document.getElementsByTagName("input");
		var selects = document.getElementsByTagName("select");
		var texts = document.getElementsByTagName("textarea");
		var bottuns = YAHOO.util.Dom.getElementsByClassName("yuibutton");
		//YAHOO.util.Dom.setStyle(bottuns, 'disabled', true);
		YAHOO.util.Dom.addClass(bottuns, "disabled");
		makeElementsReadOnly(inputs,flag);
		makeElementsReadOnly(selects,flag);
	    makeElementsReadOnly(texts,flag);
}

/*
Will do an AJAX call to find and populate city and state for given zip code.
This will override even if the city and state already has value.
*/
 var  fillCityAndState = function (e,city_state){
	YAHOO.util.Connect.asyncRequest('POST', 'ajaxContact.html?action=getFirstAddressByZipcode&empty=true&zipCode='+Dom.get(city_state.id).value,
    {success: function(transport) {
    			if (transport && transport!=""){
    				try{
	    				var address = YAHOO.lang.JSON.parse(transport.responseText)
	    				if (address){
	    					Dom.get(city_state.city_id).value=address.city?address.city:'';
	    					changeSelectedOption('#'+Dom.get(city_state.state_id).id,address.provStateCode);
	    				}
	    			}catch (exp){

	    			}

    			}

    		}
    , failure: handleFailure});

}

formatServiceType= function(elCell, oRecord, oColumn, oData) {
					if (oData){
               			elCell.innerHTML = oData;
               			YAHOO.util.Dom.addClass(elCell, "class_"+oData.replace(' ',''));
               		}else{
               			elCell.innerHTML = '';
               		}


                }
 // ID link formater

formatAddress = function(elCell, oRecord, oColumn, oData) {
    var address = oData;

    elCell.innerHTML = htmlEncode(address.location);
    if (! elCell.id){
    	elCell.id = 'address_'+address.id;
    }
   /* Tool tip moved to in cellMouseOver event with timer
    */
    /* address_str = (address.street1 ? "<b>Address</b>:"+address.street1:"")
    			  +(address.street2 ? address.street2:"")
    			  +(address.city ? "<br/><b>City</b>:"+address.city:"")
    			  +(address.zipCode ? "<br/><b>ZipCode</b>:"+address.zipCode:"");

    new YAHOO.widget.Tooltip(elCell.id+"tp", { context:elCell.id ,  text:address_str, zIndex:10});*/


}
formatClient = function(elCell, oRecord, oColumn, oData) {
     var client = oData;

     if (client)
     	elCell.innerHTML = "<a href=\"contact.html?id=" + client.contact.id + "\" title='"+client.contact.name+"'>" + client.contact.name.substring(0,15) + "</a>";
     else
     	elCell.innerHTML = "";
 }

formatOrderId = function(elCell, oRecord, oColumn, oData) {
     var id = oData;
     elCell.innerHTML = "<a href=\"forder.html?_flowId=forder-flow&id=" + id + "\">" + id + "</a>";
}
/*
Converts JSON objects to html params.
*/
function object2html(object){
	var str ='';
	for (var name in object) {
    	if (object.hasOwnProperty(name)) {
			if (object[name] && object[name]!=null && object[name]!='' && typeof object[name] !='object'){
				str = str+'&'+name+'='+object[name]
			}


    	}

	}
	return str;
	}
/**
 * Open Password Dialog box
 * @param o
 * @return
 */

var handlePasswordSuccess = function(o) {

	var objTransaction = YAHOO.util.Get.script("scripts/user.js",
            { onSuccess: function() {
                passwordBoxInit();
                passwordBox.show();
                YAHOO.util.Event.addListener("oldPassword", "change", checkPassword,"oldPassword");
                Dom.setStyle("wait_image_ajax","display","none");
              },
              onFailure: function() {
                suntrack.showMessage('Error while opening the package dialog','error');
              },
              onProgress : function() {
                Dom.setStyle("wait_image_ajax","display","");

              }

    });



	var response = o.responseText;

    $j('#password_box_area').html( response);
	$j('#error_div').val('');
	$j('#error_div').hide();

};



function openPasswordBox(p_sType, p_aArgs, p_oValue) {

	if (! Dom.get("passwordBoxContainer")){
		var conn = YAHOO.util.Connect.asyncRequest("GET", "ajaxSecurity.html?action=openPasswordBox&empty=true", {
			success: handlePasswordSuccess
			, failure:handleFailure
		});

	}else{
		passwordBox.show();
	}
}
function htmlEncode(value){
	  return $j('<div/>').text(value).html();
}

function htmlDecode(value){
	  return $j('<div/>').html(value).text();
}
if (typeof suntrack == "undefined") {
    var suntrack = {};
}

var Dom = YAHOO.util.Dom;
/*
Client Auto Complete
*/
ClientAutoComplete = function(){

    var oACDS;
    var oAutoComp;

    return {
    	init: function(event,config) {

        var oACSelectHandler = function(sType, aArgs) {

                var oSelf = aArgs[0]; // reference back to the AC instance
                var elItem = aArgs[1]; // reference to the selected LI element
                var oData = aArgs[2]; // object literal of selected item's result data
                config.fire(oSelf , elItem , oData);
        };

        if ( ! Dom.get(config) || ! Dom.get(config.name)) return;

        oACDS = new YAHOO.util.XHRDataSource("ajaxContact.html" );
        oACDS.responseType = YAHOO.util.XHRDataSource.TYPE_JSON;
        // Define the schema of the JSON results
        oACDS.responseSchema = {
                resultsList : "result"
                ,fields : ["name","id","email", "company","vehicleType","inTerritory","totalCurrentOrder","type","clientId","addresses","phones","acceptsSMS"]
        };

        oACDS.queryMatchContains = true;
        oACDS.scriptQueryAppend = "action=findContacts";
        if (config.typeOption)
                oACDS.scriptQueryAppend += "&typeOption="+config.typeOption;
        if (config.clientFlag)
                oACDS.scriptQueryAppend += "&clientFlag="+config.clientFlag;
        if (config.targetCity)
            oACDS.scriptQueryAppend += "&city="+config.targetCity;
        if (config.targetState)
            oACDS.scriptQueryAppend += "&provStateCode="+config.targetState;
        // Instantiate AutoComplete
        oAutoComp = new YAHOO.widget.AutoComplete(config.name,config.container, oACDS);
        oAutoComp.useShadow = true;

        oAutoComp.useIFrame = true;
        oAutoComp.resultTypeList = false;
        oAutoComp.formatResult = function(oResultItem, sQuery, match) {
        	    name = oResultItem.name + ( oResultItem.company!=null ? " (" + oResultItem.company.name + ")":"");
        	    if ("Partner" === oResultItem.type){
        	    	name = name + " (P)";
        	    }

        	    if (oResultItem.inTerritory){
        	    	name = "<b>"+name + "</b> (in territory)";
        	    }
                return name;
        };

        if (config.fire){
                 oAutoComp.itemSelectEvent.subscribe(oACSelectHandler);
        }

}

    };
}();
/*
Address Auto Complete
*/
AddressAutoComplete = function(){

    var oACDS;
    var oAutoComp;

    return {
        init: function(event,config) {
    		var oACDS = new YAHOO.util.XHRDataSource("ordermaintain.html");
    		oACDS.responseType = YAHOO.util.XHRDataSource.TYPE_JSON;
    		oACDS.responseSchema = {
    				 resultsList : "result"
    		};
    		oAutoComp = new YAHOO.widget.AutoComplete(config.name,config.container, oACDS);

    		oAutoComp.generateRequest = function(sQuery) {
    		       return "?action=searchAddressBook&query="+sQuery+"&empty=true&client_id="+Dom.get('client_id').value;
    		};
    		oAutoComp.formatResult = function(oResultItem, sQuery, sResultMatch) {

    			return (oResultItem[1].location||"")+"  <small>(" +(oResultItem[1].street1 ||"")+("-"+oResultItem[1].city ||"")+("-"+oResultItem[1].zipCode ||"")+")</small>";
    		}

			oAutoComp.itemSelectEvent.fire= function ( oSelf , elItem , oData ){
	        	//Dom.get('contact_id').value=oData[1].id;

	        	Dom.get(oSelf._elTextbox).value=oData[1].location||"";

	        	if (config.target){
		        	if(oData[1].street1!=null){
		        		Dom.get(config.target+"_street1").value=oData[1].street1;
		        		$j(Dom.get(config.target+"_street1")).effect("highlight");
		        	}
		        	if(oData[1].city!=null){
		        		Dom.get(config.target+"_city").value=oData[1].city;
		        		$j(Dom.get(config.target+"_city")).effect("highlight");
		        	}
		        	if(oData[1].zipCode){
		        		Dom.get(config.target+"_zipcode").value=oData[1].zipCode;
		        		$j(Dom.get(config.target+"_zipcode")).effect("highlight");
		        	}
		        	if(oData[1].state){
		        		changeSelectedOption('#'+config.target+"_state",oData[1].state);
		        		$j(Dom.get(config.target+"_state")).effect("highlight");
		        	}
	        	}
	        };



    	}
    };
}();
/**
 * City Auto Complete Object
 */
suntrack.addressLookup = function(){
	var oACDS;
	var oAutoComp;

	var initAutoComp= function(config){
		var oACSelectHandler = function(sType, aArgs) {

			if (YAHOO.lang.isArray(aArgs)){
			    var oSelf = aArgs[0]; // reference back to the AC instance
			    var elItem = aArgs[1]; // reference to the selected LI element
			    var oData = aArgs[2]; // object literal of selected item's result data
			    config.fire( oData);
			}else{
				config.fire(aArgs)
			}
		};
		oACDS = new YAHOO.util.XHRDataSource("ajaxContact.html");
		oACDS.responseType = YAHOO.util.XHRDataSource.TYPE_JSON;
		oACDS.responseSchema = {
					        resultsList : "records",
					        fields : ["city","code","areaCode","provStateCode"]
		};
		 var oAutoComp = new YAHOO.widget.AutoComplete(config.name, config.container, oACDS);
		 oAutoComp.queryDelay = .5;
		 oAutoComp.maxResultsDisplayed = 15;
		 oAutoComp.minQueryLength = 3;
		 oAutoComp.useShadow = true;

	     //oAutoComp.useIFrame = true;
	     oAutoComp.resultTypeList = false;
		  // The webservice needs additional parameters
		 oAutoComp.generateRequest = function(address) {
			  if (address ){
				  if (config.findCity){
					  return "?action=findAddress&empty=true&output=json&results=100&level=city&city=" + address+"&provStateCode="+config.provStateCode ;
				  }else{
					  return "?action=findAddress&empty=true&output=json&results=100&level=zip_code&code=" + address+"&provStateCode="+config.provStateCode ;
				  }
			  }
		};
		oAutoComp.formatResult = function(oResultData, sQuery, sResultMatch) {
			var sMarkup = (sResultMatch) ? oResultData.city +" ("+oResultData.code+ ")": "";
			return sMarkup;
		};
		if (config.fire){
             oAutoComp.itemSelectEvent.subscribe(oACSelectHandler);
		}

	}
	/*
	 * lookup city
	 */
	var lookup = function (config){
		if (!oAutoComp) {
			initAutoComp(config);
		}


	}
	return {
		lookup: lookup
	}
}();
/*
Show date object as String with format of hh:mm MM/dd/yy pattern
*/
function showTimeFormat(aDate){
		return aDate.getHours()+":"+aDate.getMinutes();
}

/*
*
*/
 // ID link formater
formatId = function(elCell, oRecord, oColumn, oData) {
    var id = oData;
    elCell.innerHTML = "<a href=\"order.html?_flowId=order-flow&id=" + id + "\">" + id + "</a>";
};
// format status with style
formatStatus = function(elCell, oRecord, oColumn, oData) {
	var status = oData;
	var order = oRecord.getData();
	if (status){
		label = status.title;

		if ('Assigned' == status.title && order.lastDriver && dispatcher ){
			label = label+'<div class="driver_name">&raquo; '+order.lastDriver+'</div>';
		}
		if ('Pickup' == status.title && order.lastDriver && dispatcher ){
			label = label+'<div class="driver_name">&raquo; '+order.lastDriver+'</div>';
		}
		if ('Delivered' == status.title && order.deliveredBy && dispatcher ){
			label = label+'<div class="driver_name">&laquo; '+order.deliveredBy+'</div>';
		}
		elCell.innerHTML = label;
		Dom.addClass(elCell,'class_status_'+status.title);

	}

}


// as a call function when closing microDispatch Dialog.
var refreshData = function(event){
}

function formatDollar(amount){
	return YAHOO.util.Number.format(amount, {
                			prefix:"$",
                			decimalPlaces:2,
                			decimalSeparator:".",
                			thousandsSeparator:","
            			});
}
/*
Change date string to date format e.g today. No effect
*/
	function dateCompleteSimple(e){
		var input  = YAHOO.util.Event.getTarget(e);
		if (input.value.length > 0) {
					date = Date.parse(input.value);
					if (date !== null) {


						input.value = date.toString("MM/dd/yyyy");
						if (Dom.get(input.id+'Text')) {
							Dom.get(input.id+'Text').value=date.toString("dddd, MMMM dd, yyyy");

						}
					} else {
						if (Dom.get(input.id+'Text')) {
							Dom.get(input.id+'Text').value="";
						}

					}
		} else {
			//date_string.text(empty_string).addClass("empty");
		}
	}
/**
 * Create calendar with date completion
 * NOTE: Check the naming convention
 */
function canlendarWithComplete(element){

	var aDateCal = new YAHOO.widget.Calendar(element+"CalId",element+"Container", { title:"Choose a date:", close:true } );
	aDateCal.render();
	aDateCal.selectEvent.subscribe(selectHandlerDate, aDateCal, true);
	YAHOO.util.Event.addListener(element+'Image', 'click', aDateCal.show, aDateCal, true);
	YAHOO.util.Event.on(element,'change', dateComplete);
}
/**
Works based on convention
elementId = 'example'
ImageId = 'exampleCalImage'
ContainerId = 'exampleContainer'

*/
var selectHandlerDate = function(type,args,cal) {

	target = cal.id.replace('CalId','');

	var dates = args[0];
	var date = dates[0];
	var year = ''+date[0];
	var date_str =date[1]+'/'+ date[2]+'/'+ year.substring(2,4);

	Dom.get(target).value=  date_str;
 	cal.hide();

};
var formatContactId = function(elCell, oRecord, oColumn, oData) {
    var id = oData;
    elCell.innerHTML = "<a href=\"contact.html?id=" + id + "\">" + id + "</a>";
};