/* YUI shortcut vars */
var yDOM = YAHOO.util.Dom;
var yEvent = YAHOO.util.Event;
var Owner = {};

[].indexOf || (Array.prototype.indexOf = function(v,n){
	  n = (n==null)?0:n; var m = this.length;
	  for(var i = n; i < m; i++)
	    if(this[i] == v)
	       return i;
	  return -1;
});

function init() { 
	if (document.getElementById('recall-VIN-module')) {
		return 1;
	}
	setModalButton();
}

(function(){ /*Use Object Detection to detect IE6*/ var m = document.uniqueID /*IE*/ && document.compatMode /*>=IE6*/ && !window.XMLHttpRequest /*<=IE6*/ && document.execCommand ; try{ if(!!m){ m("BackgroundImageCache", false, true) /* = IE6 only */ } }catch(oh){}; })(); 

yEvent.onDOMReady(init); 

function htmlSubmitBtnSwap(tSubmitID) { ; }

/*
Initialize and render the MenuBar when its elements are ready 
to be scripted.
*/

yEvent.onContentReady('nav', function () {

var ua = YAHOO.env.ua;
/*
    Instantiate a MenuBar:  The first argument passed to the 
    constructor is the id of the element in the page 
    representing the MenuBar; the second is an object literal 
    of configuration properties.
*/

var oMenuBar = new YAHOO.widget.MenuBar('nav', { 
                                           autosubmenudisplay: true, 
                                           hidedelay: 750, 
                                           keepopen: true,
                                           lazyload: true });

// stop top nav clicks from dismissing visible submenu
// - TODO: would be good/better to chain this to only successful completion of YUI menu instantiation
yEvent.addListener(yDOM.getElementsByClassName("top-link", "A", "nav"), "click", function(p_oEvent){ if (!this.parent) yEvent.stopEvent(p_oEvent); });

/*
    Call the "render" method with no arguments since the 
    markup for this MenuBar already exists in the page.
*/

oMenuBar.render();          

});

function showModal(modalId)
{
	yDOM.addClass(document.body, 'modal-raised');
	yDOM.addClass('main-box', 'opacity');
	yDOM.setStyle(modalId, "top", '' + (yDOM.getDocumentScrollTop() + 140) + "px");
	yDOM.addClass(modalId, "modal-visible");
}

function hideModals(modalId) {
	yDOM.removeClass((modalId ? modalId : yDOM.getElementsByClassName('modal', 'div')), "modal-visible");
	yDOM.removeClass("main-box", "opacity");
	yDOM.removeClass(document.body, 'modal-raised');
}

function setModalButton() {

	var modalBTNs = yDOM.getElementsByClassName("modal-btn", 'a');
	
	for (var i=0; i<modalBTNs.length; i++) {
		if (modalBTNs[i].href.indexOf('javascript') == 0 || modalBTNs[i].target) {
			yEvent.addListener(modalBTNs[i], "click", function() {
				yDOM.removeClass(yDOM.getElementsByClassName('modal', 'div'), "modal-visible");
				yDOM.removeClass("main-box", "opacity");
				yDOM.removeClass(document.body, 'modal-raised');
			});
		}
	}
}

function MACTest() {
	var strPlatform = (navigator.userAgent).toLowerCase();
	if ( strPlatform.indexOf( "mac" ) != -1 ) {
		if (strPlatform.indexOf( "firefox") != -1) {
			return true;
		}
		else if (strPlatform.indexOf("version/4") != -1) {
			return true;
		}
		else {
			return false;
		}
	}
}

function safariTest() { // yui.env.ua only tests for webkit, which includes chrome
	var userAgent = navigator.userAgent.toLowerCase();
	var browser = {safari: /webkit/.test( userAgent )};
	if(browser.safari && userAgent.indexOf("chrome") > -1){ browser.safari = false; }
	
	if (browser.safari && userAgent.indexOf('version/3') != -1 ) {
		browser.safari = true;
	}
	else {
		browser.safari = false;
	}
	return browser.safari;
}

if(MACTest() == true || safariTest() ) { document.writeln("<link rel=\"stylesheet\" href=\"/servlet/ContentServer?pagename=Owner/CSS/CSS-mac\" media=\"screen\" />"); }


/*** delete vehicle **/
function confirmDeleteVehicle(idx) {
	document.getElementById('deleteVehicleIndex').value = idx;
	showModal('vehicle-delete-module');
}

function cancelDeleteVehicle() {
	if ( document.getElementById('deleteVehicleIndex') ) {
		document.getElementById('deleteVehicleIndex').value = '';
	}
}

var phoneFields = new Array();

/*** client side form validation **/
yEvent.onDOMReady(function () { 
	var forms = yDOM.getElementsBy(function() { return true;}, "form" , "yui-main" , null, null, null);
	var phoneFieldCont = yDOM.getElementsByClassName('phoneField', 'div', 'main-box');
	autoTabField(phoneFieldCont);
	
	for (var f=0; f<forms.length; f++) {
		if ( forms[f].name != "serviceHistoryEnterForm" && !YAHOO.util.Dom.hasClass(forms[f], 'form-suppress-global-handling') ) {
			var fields = yDOM.getElementsByClassName("requiredField", '', forms[f]);
			for (var i=0; i<fields.length; i++) {
				yEvent.addListener(fields[i], "focus", function() 
				{
					this.hasfocus = true;
					displayError(this);
				});		
				
				yEvent.addListener(fields[i], "blur", function() 
				{
					this.hasfocus = false;
					displayError(this);
				});	
			}
			
			setOnSubmit(forms[f], fields);
		}
	}
});

		
function autoTabField(phoneFieldCont) {

	for (var p=0; p<phoneFieldCont.length; p++) {
		phoneFields[p] = phoneFieldCont[p].getElementsByTagName('input');
		
		for (var ph=0; ph<phoneFields[p].length; ph++) {
			phoneFields[p][ph].pinx = p;
			phoneFields[p][ph].inx = ph;
			
			phoneFields[p][ph].setAttribute("autocomplete","off");
			YAHOO.util.Event.addListener(phoneFields[p][ph], 'keyup', function(){
				if (this.value.length == this.maxLength) {
					var ninx = parseInt(this.inx)+1;
					if (ninx < phoneFields[this.pinx].length) {
						try {
							(phoneFields[this.pinx][ninx]).focus();
						} catch(e) { ; }
					}
				}
				
			});
		}
	}

}

function displayError(obj) {
	// TODO: need a bettter way of determining whether or not a field is visible
	// - the below check is needed for esp transaction step 3
	var conditionalContainer;
	
	if ((conditionalContainer = yDOM.getAncestorByClassName(obj, 'hideContent'))) {
		var region = YAHOO.util.Region.getRegion(conditionalContainer);
		
		if (region.top == region.bottom) return false;
	}
	
	var pNode = getParentNode(obj);
	
	if (isFieldValid(obj)) {
		yDOM.removeClass(pNode, 'contentred');	
		return false;
	}
	else if (obj.hasfocus == true) {
		yDOM.removeClass(pNode, 'contentred');	
	}
	else {
		yDOM.addClass(pNode, 'contentred');	
	}

	return true;	
	
}

function setOnSubmit(form, fields)
{ 
	var formSubmits = yDOM.getElementsByClassName('formSubmit', 'span', form);
	for (var s = 0; s < formSubmits.length; s ++) {
		if (formSubmits[s].childNodes[0] && formSubmits[s].childNodes[0].tagName) {
			formSubmits[s].childNodes[0].tabIndex = -1;
		}
	}
	
	var htmlBtn = yDOM.getElementsByClassName('htmlBtn', 'span', form);
	var actionLink;
	
	for ( var i=0; i<htmlBtn.length; i++) {
		actionLink = yDOM.getFirstChild(htmlBtn[i]);
		
		if (actionLink.href.indexOf('submit()') > -1) {
			actionLink.href = "#";
			yEvent.addListener(actionLink, "click", function(p_oEvent){
				if (!isFormValid(form, fields)) {
					yEvent.stopEvent(p_oEvent);
				}
				else {
					yEvent.stopEvent(p_oEvent);
					
					if (!YAHOO.util.Dom.hasClass(actionLink, "overlay-btn")) { /* TODO: Is this right place for this? */
						yEvent.removeListener(this, "click", arguments.callee);
					}
					
					form.submit();
				}
			});
		}
	}
	
	yEvent.addListener(form, "submit", function(p_oEvent){
		if (!isFormValid(form, fields)) {
			yEvent.stopEvent(p_oEvent);
		}
		else {
			yEvent.removeListener(this, "submit", arguments.callee);
		}
	});
}

function isFormValid(form, fields)
{	
	var seeError = false;
	for (var i=0; i<fields.length; i++) {
		if (displayError(fields[i]))
		{
			seeError = true;
		}
	}
	
	if (document.getElementById('errorMainMsg')) {
		yDOM.setStyle('errorMainMsg', 'display', 'none');
	}
			
	if (!seeError) {
		yDOM.removeClass("front-errorMainMsg", "error-visible");
		enableAll(form);
		return true;
	}
	else {
		window.scrollTo(0, 0);
		if (document.getElementById('front-errorMainMsg'))
		{
			yDOM.addClass("front-errorMainMsg", "error-visible");		
		}
		return false;
	}
}


function getParentNode(obj)
{
	var i = 0;
	while ( i < 4 ) {
		if ( yDOM.hasClass(obj.parentNode, 'field') || obj.parentNode.nodeName == "TR") {
			return obj.parentNode;
		}
		else {
			obj = obj.parentNode;
		}
		i++;
	}
	return obj;
}

function isFieldValid(obj) {
	if (isFieldEmpty(obj)) {
		return false;
	}
	else {
		// some allowance for extending validations
		if (YAHOO.util.Dom.hasClass(obj, 'required-field-email')) {
			return obj.value.match(/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i) ? true : false;
		}
		
		return true;
	}
}


function isFieldEmpty(obj)
{	
	if (obj.type == "checkbox") {
		return !obj.checked;
	}
	else {
		var val = obj.value.replace(/^\s+|\s+$/g, '');
		return (val == '' || val.length == 0);
	}
}

function enableAll(form) {
	var elems = form.elements;
	for (var i = 0; i < elems.length; i++) {
		elems[i].disabled = false;
	}
}

function showNotice(noticeArray) {
	var noticeItems = yDOM.getElementsByClassName('notice-item', 'div', 'notices');
	var noticeCount = 0;
	for (var i=0; i<noticeItems.length; i++) {
		yDOM.removeClass(noticeItems[i], "first-item");
		for (var h=0; h<noticeArray.length; h++) {
			if (yDOM.hasClass(noticeItems[i], "notice-" + noticeArray[h])) {
				if ( noticeCount == 0 || noticeCount % 4 == 0 ) {
					yDOM.addClass(noticeItems[i], "first-item");
				}

				yDOM.setStyle(noticeItems[i], "display", "block");
				noticeCount++;
			}
		}
	}
	
	if (_syncIntercept != undefined && _syncIntercept != null) {
		_syncIntercept.init();	
	}
}


Owner.AsyncRequests = {};

Owner.AsyncRequests.Manager = {
	_num: 0,
	_requests: [],
	_progressId: 'progress-animator',

	'addRequest': function(req) {
		Owner.AsyncRequests.Manager._requests[Owner.AsyncRequests.Manager._requests.length] = 
			Owner.AsyncRequests.Manager.getConnection(
				req.getMethod(), 
				req.getUrl(),
				Owner.AsyncRequests.Manager.getParams(req.getParams()),
				Owner.AsyncRequests.Manager.getCallback(req)
			);

		Owner.AsyncRequests.Manager._num += 1;
	},

	'onRequestComplete': function(o) {
		if (o && o.statusText && o.statusText == "OK" && o.responseText && YAHOO.lang.trim(o.responseText).length > 0) {
			(o.argument.getSuccessHandler())(YAHOO.lang.trim(o.responseText));
		}
		else {
			(o.argument.getFailureHandler())('');
		}

		Owner.AsyncRequests.Manager._num -= 1;

		if (Owner.AsyncRequests.Manager._num == 0) Owner.AsyncRequests.Manager.onComplete();
	},

	'onComplete': function() { 
		YAHOO.util.Dom.setStyle(Owner.AsyncRequests.Manager._progressId, 'visibility', 'hidden');
	},
	
	'getConnection': function(method, url, params, callback) {
		var isGet = method.toLowerCase() == 'get' ? true : false;
		var paramPrefix = (url.indexOf('?') > -1)? '&' : '?';
		
		return YAHOO.util.Connect.asyncRequest(method, url + (isGet ? (paramPrefix + params) : ''), callback, (isGet ? null : params));
	},
	
	'getCallback': function(req) {
		return {
			'success': Owner.AsyncRequests.Manager.onRequestComplete,
			'failure': Owner.AsyncRequests.Manager.onRequestComplete,
			'argument': req
		}
	},
	
	'getParams': function(params) {
		var _params = "";
		
		if (YAHOO.lang.isString(params)) {
			_params = params;
		}
		else if (YAHOO.lang.isObject(params)) {
			for (var p in params) {
				if (_params != '') _params += '&';
				
				_params += encodeURIComponent(p) + '=' + encodeURIComponent(params[p]);
			}
		}
		
		return _params;
	}	
};

Owner.AsyncRequests.Request = function(args) { this.init(args); }

Owner.AsyncRequests.Request.prototype = {
	_args: { 'method': 'GET', 'url': '', 'params': null, 'success': function(){}, 'failure': function(){} },
	
	'init': function(args) {
		this._args = YAHOO.lang.merge(this._args, args);
	},

	'getMethod': function() {
		return this._args.method;
	},

	'getUrl': function() {
		return this._args.url;
	},

	'getParams': function() {
		return this._args.params;
	},

	'getSuccessHandler': function() {
		return this._args.success;
	},

	'getFailureHandler': function() {
		return this._args.failure;
	}
};

Owner.Navigation = {
	'preventClientCache': function(currentRule, ruleKey) {
		var ruleKey = ruleKey ? ruleKey : 'lastLoad';
		var rulePattern = new RegExp((ruleKey + "=([^;]*)"), "i");

		try {
			if (((document.cookie.match(rulePattern)||['',''])[1]) == currentRule) {
				window.location.reload(true);
			}
			else {
				document.cookie = (ruleKey + '=' + currentRule + ';');
			}
		} catch (e) {;}
	}
};
