/*
 * Copyright (C) 2013 salesforce.com, inc.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *         http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
({
	updateAttribute: function(cmp){

        var forVal = cmp.get("v.for");
        if (forVal) {
        	var gId;
        	if ($A.util.isString(forVal)) {
                var valueProvider = cmp.getAttributeValueProvider();
                //try find the target component for the "for" attribute from valueProvider

 				// PassThrough values don't have find. See W-3174244
				var refCmp = valueProvider.find && valueProvider.find(forVal);

                if (refCmp) {
                	//use first one in the list if there are multiples
                	refCmp = refCmp.length ? refCmp[0] : refCmp;
                	gId = refCmp.getGlobalId();
                } else {
                	//try as globalId
                	gId = $A.componentService.get(forVal) ? forVal : null;
                }
        	} else if ($A.util.isObject(forVal) && forVal.getGlobalId) {
        		gId = forVal.getGlobalId();
        	}

        	if (!$A.util.isEmpty(gId)) {
        		//update dom element directly
                var elm = cmp.getElement();
                if (elm) {
                    elm.setAttribute("for", gId);
                }
            }
        }
    }
})// eslint-disable-line semi